Engage Engine API  1.259.9099
Real-time tactical communications engine API
Loading...
Searching...
No Matches
ConfigurationObjects.h
Go to the documentation of this file.
1//
2// Copyright (c) 2019 Rally Tactical Systems, Inc.
3// All rights reserved.
4//
5
20#ifndef ConfigurationObjects_h
21#define ConfigurationObjects_h
22
23#include "Platform.h"
24#include "EngageConstants.h"
25
26#include <iostream>
27#include <cstddef>
28#include <cstdint>
29#include <chrono>
30#include <vector>
31#include <string>
32
33#include <nlohmann/json.hpp>
34
35#ifndef WIN32
36 #pragma GCC diagnostic push
37 #pragma GCC diagnostic ignored "-Wunused-function"
38#endif
39
40#if !defined(ENGAGE_IGNORE_COMPILER_UNUSED_WARNING)
41 #if defined(__GNUC__)
42 #define ENGAGE_IGNORE_COMPILER_UNUSED_WARNING __attribute__((unused))
43 #else
44 #define ENGAGE_IGNORE_COMPILER_UNUSED_WARNING
45 #endif
46#endif // ENGAGE_IGNORE_COMPILER_UNUSED_WARNING
47
48// We'll use a different namespace depending on whether we're building the RTS core code
49// or if this is being included in an app-land project.
50#if defined(RTS_CORE_BUILD)
51namespace ConfigurationObjects
52#else
53namespace AppConfigurationObjects
54#endif
55{
56 static const char *ENGAGE_CONFIGURATION_OBJECT_ATTACHED_OBJECT = "_attached";
57
58 //-----------------------------------------------------------
59 #pragma pack(push, 1)
60 typedef struct _DataSeriesHeader_t
61 {
76 uint8_t t;
77
81 uint32_t ts;
82
95 uint8_t it;
96
105 uint8_t im;
106
110 uint8_t vt;
111
115 uint8_t ss;
117
118 typedef struct _DataElementUint8_t
119 {
120 uint8_t ofs;
121 uint8_t val;
123
125 {
126 uint8_t ofs;
127 uint16_t val;
129
131 {
132 uint8_t ofs;
133 uint32_t val;
135
137 {
138 uint8_t ofs;
139 uint64_t val;
141 #pragma pack(pop)
142
143 typedef enum
144 {
145 invalid = 0,
146 uint8 = 1,
147 uint16 = 2,
148 uint32 = 3,
149 uint64 = 4
150 } DataSeriesValueType_t;
151
157 typedef enum
158 {
159 unknown = 0,
160 heartRate = 1,
161 skinTemp = 2,
162 coreTemp = 3,
163 hydration = 4,
164 bloodOxygenation = 5,
165 fatigueLevel = 6,
166 taskEffectiveness = 7
167 } HumanBiometricsTypes_t;
168
169 //-----------------------------------------------------------
170
171 static FILE *_internalFileOpener(const char *fn, const char *mode)
172 {
173 FILE *fp = nullptr;
174
175 #ifndef WIN32
176 fp = fopen(fn, mode);
177 #else
178 if(fopen_s(&fp, fn, mode) != 0)
179 {
180 fp = nullptr;
181 }
182 #endif
183
184 return fp;
185 }
186
187 #define JSON_SERIALIZED_CLASS(_cn) \
188 class _cn; \
189 static void to_json(nlohmann::json& j, const _cn& p); \
190 static void from_json(const nlohmann::json& j, _cn& p);
191
192 #define IMPLEMENT_JSON_DOCUMENTATION(_cn) \
193 public: \
194 static void document(const char *path = nullptr) \
195 { \
196 _cn example; \
197 example.initForDocumenting(); \
198 std::string theJson = example.serialize(3); \
199 std::cout << "------------------------------------------------" << std::endl \
200 << #_cn << std::endl \
201 << theJson << std::endl \
202 << "------------------------------------------------" << std::endl; \
203 \
204 if(path != nullptr && path[0] != 0) \
205 { \
206 std::string fn = path; \
207 fn.append("/"); \
208 fn.append(#_cn); \
209 fn.append(".json"); \
210 \
211 FILE *fp = _internalFileOpener(fn.c_str(), "wt");\
212 \
213 if(fp != nullptr) \
214 { \
215 fputs(theJson.c_str(), fp); \
216 fclose(fp); \
217 } \
218 else \
219 { \
220 std::cout << "ERROR: Cannot write to " << fn << std::endl; \
221 } \
222 } \
223 } \
224 static const char *className() \
225 { \
226 return #_cn; \
227 }
228
229 #define IMPLEMENT_JSON_SERIALIZATION() \
230 public: \
231 bool deserialize(const char *s) \
232 { \
233 try \
234 { \
235 if(s != nullptr && s[0] != 0) \
236 { \
237 from_json(nlohmann::json::parse(s), *this); \
238 } \
239 else \
240 { \
241 return false; \
242 } \
243 } \
244 catch(...) \
245 { \
246 return false; \
247 } \
248 return true; \
249 } \
250 \
251 std::string serialize(const int indent = -1) \
252 { \
253 try \
254 { \
255 nlohmann::json j; \
256 to_json(j, *this); \
257 return j.dump(indent); \
258 } \
259 catch(...) \
260 { \
261 return std::string("{}"); \
262 } \
263 }
264
265 #define IMPLEMENT_WRAPPED_JSON_SERIALIZATION(_cn) \
266 public: \
267 std::string serializeWrapped(const int indent = -1) \
268 { \
269 try \
270 { \
271 nlohmann::json j; \
272 to_json(j, *this); \
273 \
274 std::string rc; \
275 char firstChar[2]; \
276 firstChar[0] = #_cn[0]; \
277 firstChar[1] = 0; \
278 firstChar[0] = tolower(firstChar[0]); \
279 rc.assign("{\""); \
280 rc.append(firstChar); \
281 rc.append((#_cn) + 1); \
282 rc.append("\":"); \
283 rc.append(j.dump(indent)); \
284 rc.append("}"); \
285 \
286 return rc; \
287 } \
288 catch(...) \
289 { \
290 return std::string("{}"); \
291 } \
292 }
293
294 #define TOJSON_IMPL(__var) \
295 {#__var, p.__var}
296
297 #define FROMJSON_IMPL_SIMPLE(__var) \
298 getOptional(#__var, p.__var, j)
299
300 #define FROMJSON_IMPL(__var, __type, __default) \
301 getOptional<__type>(#__var, p.__var, j, __default)
302
303 #define TOJSON_BASE_IMPL() \
304 to_json(j, (ConfigurationObjectBase&)p)
305
306 #define FROMJSON_BASE_IMPL() \
307 from_json(j, (ConfigurationObjectBase&)p);
308
309
310 //-----------------------------------------------------------
311 static std::string EMPTY_STRING;
312
313 template<class T>
314 static void getOptional(const char *name, T& v, const nlohmann::json& j, T def)
315 {
316 try
317 {
318 if(j.contains(name))
319 {
320 j.at(name).get_to(v);
321 }
322 else
323 {
324 v = def;
325 }
326 }
327 catch(...)
328 {
329 v = def;
330 }
331 }
332
333 template<class T>
334 static void getOptional(const char *name, T& v, const nlohmann::json& j)
335 {
336 try
337 {
338 if(j.contains(name))
339 {
340 j.at(name).get_to(v);
341 }
342 }
343 catch(...)
344 {
345 }
346 }
347
348 template<class T>
349 static void getOptionalWithIndicator(const char *name, T& v, const nlohmann::json& j, T def, bool *wasFound)
350 {
351 try
352 {
353 if(j.contains(name))
354 {
355 j.at(name).get_to(v);
356 *wasFound = true;
357 }
358 else
359 {
360 v = def;
361 *wasFound = false;
362 }
363 }
364 catch(...)
365 {
366 v = def;
367 *wasFound = false;
368 }
369 }
370
371 template<class T>
372 static void getOptionalWithIndicator(const char *name, T& v, const nlohmann::json& j, bool *wasFound)
373 {
374 try
375 {
376 if(j.contains(name))
377 {
378 j.at(name).get_to(v);
379 *wasFound = true;
380 }
381 else
382 {
383 *wasFound = false;
384 }
385 }
386 catch(...)
387 {
388 *wasFound = false;
389 }
390 }
391
393 {
394 public:
396 {
397 _documenting = false;
398 }
399
401 {
402 }
403
404 virtual void initForDocumenting()
405 {
406 _documenting = true;
407 }
408
409 virtual std::string toString()
410 {
411 return std::string("");
412 }
413
414 inline virtual bool isDocumenting() const
415 {
416 return _documenting;
417 }
418
419 nlohmann::json _attached;
420
421 protected:
422 bool _documenting;
423 };
424
425 static void to_json(nlohmann::json& j, const ConfigurationObjectBase& p)
426 {
427 try
428 {
429 if(p._attached != nullptr)
430 {
431 j[ENGAGE_CONFIGURATION_OBJECT_ATTACHED_OBJECT] = p._attached;
432 }
433 }
434 catch(...)
435 {
436 }
437 }
438 static void from_json(const nlohmann::json& j, ConfigurationObjectBase& p)
439 {
440 try
441 {
442 if(j.contains(ENGAGE_CONFIGURATION_OBJECT_ATTACHED_OBJECT))
443 {
444 p._attached = j.at(ENGAGE_CONFIGURATION_OBJECT_ATTACHED_OBJECT);
445 }
446 }
447 catch(...)
448 {
449 }
450 }
451
452 //-----------------------------------------------------------
453 JSON_SERIALIZED_CLASS(KvPair)
461 {
462 IMPLEMENT_JSON_SERIALIZATION()
463 IMPLEMENT_JSON_DOCUMENTATION(KvPair)
464
465 public:
467 std::string key;
468
470 std::string value;
471
472 KvPair()
473 {
474 clear();
475 }
476
477 void clear()
478 {
479 key.clear();
480 value.clear();
481 }
482 };
483
484 static void to_json(nlohmann::json& j, const KvPair& p)
485 {
486 j = nlohmann::json{
487 TOJSON_IMPL(key),
488 TOJSON_IMPL(value)
489 };
490 }
491 static void from_json(const nlohmann::json& j, KvPair& p)
492 {
493 p.clear();
494 getOptional<std::string>("key", p.key, j, EMPTY_STRING);
495 getOptional<std::string>("tags", p.value, j, EMPTY_STRING);
496 }
497
498 //-----------------------------------------------------------
499 JSON_SERIALIZED_CLASS(TuningSettings)
501 {
502 IMPLEMENT_JSON_SERIALIZATION()
503 IMPLEMENT_JSON_DOCUMENTATION(TuningSettings)
504
505 public:
508
511
514
515
518
521
524
525
528
531
534
537
539 {
540 clear();
541 }
542
543 void clear()
544 {
545 maxPooledRtpMb = 0;
546 maxPooledRtpObjects = 0;
547 maxActiveRtpObjects = 0;
548
549 maxPooledBlobMb = 0;
550 maxPooledBlobObjects = 0;
551 maxActiveBlobObjects = 0;
552
553 maxPooledBufferMb = 0;
554 maxPooledBufferObjects = 0;
555 maxActiveBufferObjects = 0;
556
557 maxActiveRtpProcessors = 0;
558 }
559
560 virtual void initForDocumenting()
561 {
562 clear();
563 }
564 };
565
566 static void to_json(nlohmann::json& j, const TuningSettings& p)
567 {
568 j = nlohmann::json{
569 TOJSON_IMPL(maxPooledRtpMb),
570 TOJSON_IMPL(maxPooledRtpObjects),
571 TOJSON_IMPL(maxActiveRtpObjects),
572
573 TOJSON_IMPL(maxPooledBlobMb),
574 TOJSON_IMPL(maxPooledBlobObjects),
575 TOJSON_IMPL(maxActiveBlobObjects),
576
577 TOJSON_IMPL(maxPooledBufferMb),
578 TOJSON_IMPL(maxPooledBufferObjects),
579 TOJSON_IMPL(maxActiveBufferObjects),
580
581 TOJSON_IMPL(maxActiveRtpProcessors)
582 };
583 }
584 static void from_json(const nlohmann::json& j, TuningSettings& p)
585 {
586 p.clear();
587 FROMJSON_IMPL(maxPooledRtpMb, uint32_t, 0);
588 FROMJSON_IMPL(maxPooledRtpObjects, uint32_t, 0);
589 FROMJSON_IMPL(maxActiveRtpObjects, uint32_t, 0);
590
591 FROMJSON_IMPL(maxPooledBlobMb, uint32_t, 0);
592 FROMJSON_IMPL(maxPooledBlobObjects, uint32_t, 0);
593 FROMJSON_IMPL(maxActiveBlobObjects, uint32_t, 0);
594
595 FROMJSON_IMPL(maxPooledBufferMb, uint32_t, 0);
596 FROMJSON_IMPL(maxPooledBufferObjects, uint32_t, 0);
597 FROMJSON_IMPL(maxActiveBufferObjects, uint32_t, 0);
598
599 FROMJSON_IMPL(maxActiveRtpProcessors, uint32_t, 0);
600 }
601
602
603 //-----------------------------------------------------------
604 JSON_SERIALIZED_CLASS(FipsCryptoSettings)
606 {
607 IMPLEMENT_JSON_SERIALIZATION()
608 IMPLEMENT_JSON_DOCUMENTATION(FipsCryptoSettings)
609
610 public:
613
615 std::string path;
616
618 bool debug;
619
621 std::string curves;
622
624 std::string ciphers;
625
627 {
628 clear();
629 }
630
631 void clear()
632 {
633 enabled = false;
634 path.clear();
635 debug = false;
636 curves.clear();
637 ciphers.clear();
638 }
639
640 virtual void initForDocumenting()
641 {
642 clear();
643 }
644 };
645
646 static void to_json(nlohmann::json& j, const FipsCryptoSettings& p)
647 {
648 j = nlohmann::json{
649 TOJSON_IMPL(enabled),
650 TOJSON_IMPL(path),
651 TOJSON_IMPL(debug),
652 TOJSON_IMPL(curves),
653 TOJSON_IMPL(ciphers)
654 };
655 }
656 static void from_json(const nlohmann::json& j, FipsCryptoSettings& p)
657 {
658 p.clear();
659 FROMJSON_IMPL_SIMPLE(enabled);
660 FROMJSON_IMPL_SIMPLE(path);
661 FROMJSON_IMPL_SIMPLE(debug);
662 FROMJSON_IMPL_SIMPLE(curves);
663 FROMJSON_IMPL_SIMPLE(ciphers);
664 }
665
666
667 //-----------------------------------------------------------
668 JSON_SERIALIZED_CLASS(WatchdogSettings)
670 {
671 IMPLEMENT_JSON_SERIALIZATION()
672 IMPLEMENT_JSON_DOCUMENTATION(WatchdogSettings)
673
674 public:
677
680
683
686
689
691 {
692 clear();
693 }
694
695 void clear()
696 {
697 enabled = true;
698 intervalMs = 5000;
699 hangDetectionMs = 2000;
700 abortOnHang = true;
701 slowExecutionThresholdMs = 100;
702 }
703
704 virtual void initForDocumenting()
705 {
706 clear();
707 }
708 };
709
710 static void to_json(nlohmann::json& j, const WatchdogSettings& p)
711 {
712 j = nlohmann::json{
713 TOJSON_IMPL(enabled),
714 TOJSON_IMPL(intervalMs),
715 TOJSON_IMPL(hangDetectionMs),
716 TOJSON_IMPL(abortOnHang),
717 TOJSON_IMPL(slowExecutionThresholdMs)
718 };
719 }
720 static void from_json(const nlohmann::json& j, WatchdogSettings& p)
721 {
722 p.clear();
723 getOptional<bool>("enabled", p.enabled, j, true);
724 getOptional<int>("intervalMs", p.intervalMs, j, 5000);
725 getOptional<int>("hangDetectionMs", p.hangDetectionMs, j, 2000);
726 getOptional<bool>("abortOnHang", p.abortOnHang, j, true);
727 getOptional<int>("slowExecutionThresholdMs", p.slowExecutionThresholdMs, j, 100);
728 }
729
730
731 //-----------------------------------------------------------
732 JSON_SERIALIZED_CLASS(FileRecordingRequest)
734 {
735 IMPLEMENT_JSON_SERIALIZATION()
736 IMPLEMENT_JSON_DOCUMENTATION(FileRecordingRequest)
737
738 public:
739 std::string id;
740 std::string fileName;
741 uint32_t maxMs;
742
744 {
745 clear();
746 }
747
748 void clear()
749 {
750 id.clear();
751 fileName.clear();
752 maxMs = 60000;
753 }
754
755 virtual void initForDocumenting()
756 {
757 clear();
758 id = "1-2-3-4-5-6-7-8-9";
759 fileName = "/tmp/test.wav";
760 maxMs = 10000;
761 }
762 };
763
764 static void to_json(nlohmann::json& j, const FileRecordingRequest& p)
765 {
766 j = nlohmann::json{
767 TOJSON_IMPL(id),
768 TOJSON_IMPL(fileName),
769 TOJSON_IMPL(maxMs)
770 };
771 }
772 static void from_json(const nlohmann::json& j, FileRecordingRequest& p)
773 {
774 p.clear();
775 j.at("id").get_to(p.id);
776 j.at("fileName").get_to(p.fileName);
777 getOptional<uint32_t>("maxMs", p.maxMs, j, 60000);
778 }
779
780
781 //-----------------------------------------------------------
782 JSON_SERIALIZED_CLASS(Feature)
784 {
785 IMPLEMENT_JSON_SERIALIZATION()
786 IMPLEMENT_JSON_DOCUMENTATION(Feature)
787
788 public:
789 std::string id;
790 std::string name;
791 std::string description;
792 std::string comments;
793 int count;
794 int used; // NOTE: Ignored during deserialization!
795
796 Feature()
797 {
798 clear();
799 }
800
801 void clear()
802 {
803 id.clear();
804 name.clear();
805 description.clear();
806 comments.clear();
807 count = 0;
808 used = 0;
809 }
810
811 virtual void initForDocumenting()
812 {
813 clear();
814 id = "{af9540d1-3e86-4fa6-8b80-e26daecb61ab}";
815 name = "A sample feature";
816 description = "This is an example of a feature";
817 comments = "These are comments for this feature";
818 count = 42;
819 used = 16;
820 }
821 };
822
823 static void to_json(nlohmann::json& j, const Feature& p)
824 {
825 j = nlohmann::json{
826 TOJSON_IMPL(id),
827 TOJSON_IMPL(name),
828 TOJSON_IMPL(description),
829 TOJSON_IMPL(comments),
830 TOJSON_IMPL(count),
831 TOJSON_IMPL(used)
832 };
833 }
834 static void from_json(const nlohmann::json& j, Feature& p)
835 {
836 p.clear();
837 j.at("id").get_to(p.id);
838 getOptional("name", p.name, j);
839 getOptional("description", p.description, j);
840 getOptional("comments", p.comments, j);
841 getOptional("count", p.count, j, 0);
842
843 // NOTE: Not deserialized!
844 //getOptional("used", p.used, j, 0);
845 }
846
847
848 //-----------------------------------------------------------
849 JSON_SERIALIZED_CLASS(Featureset)
851 {
852 IMPLEMENT_JSON_SERIALIZATION()
853 IMPLEMENT_JSON_DOCUMENTATION(Featureset)
854
855 public:
856 std::string signature;
857 bool lockToDeviceId;
858 std::vector<Feature> features;
859
860 Featureset()
861 {
862 clear();
863 }
864
865 void clear()
866 {
867 signature.clear();
868 lockToDeviceId = false;
869 features.clear();
870 }
871
872 virtual void initForDocumenting()
873 {
874 clear();
875 signature = "c39df3f36c6444e686e47e70fc45cf91e6ed2d8de62d4a1e89f507d567ff48aaabb1a70e54b44377b46fc4a1a2e319e5b77e4abffc444db98f8eb55d709aad5f";
876 lockToDeviceId = false;
877 }
878 };
879
880 static void to_json(nlohmann::json& j, const Featureset& p)
881 {
882 j = nlohmann::json{
883 TOJSON_IMPL(signature),
884 TOJSON_IMPL(lockToDeviceId),
885 TOJSON_IMPL(features)
886 };
887 }
888 static void from_json(const nlohmann::json& j, Featureset& p)
889 {
890 p.clear();
891 getOptional("signature", p.signature, j);
892 getOptional<bool>("lockToDeviceId", p.lockToDeviceId, j, false);
893 getOptional<std::vector<Feature>>("features", p.features, j);
894 }
895
896
897 //-----------------------------------------------------------
898 JSON_SERIALIZED_CLASS(Agc)
908 {
909 IMPLEMENT_JSON_SERIALIZATION()
910 IMPLEMENT_JSON_DOCUMENTATION(Agc)
911
912 public:
915
918
921
924
927
930
931 Agc()
932 {
933 clear();
934 }
935
936 void clear()
937 {
938 enabled = false;
939 minLevel = 0;
940 maxLevel = 255;
941 compressionGainDb = 25;
942 enableLimiter = false;
943 targetLevelDb = 3;
944 }
945 };
946
947 static void to_json(nlohmann::json& j, const Agc& p)
948 {
949 j = nlohmann::json{
950 TOJSON_IMPL(enabled),
951 TOJSON_IMPL(minLevel),
952 TOJSON_IMPL(maxLevel),
953 TOJSON_IMPL(compressionGainDb),
954 TOJSON_IMPL(enableLimiter),
955 TOJSON_IMPL(targetLevelDb)
956 };
957 }
958 static void from_json(const nlohmann::json& j, Agc& p)
959 {
960 p.clear();
961 getOptional<bool>("enabled", p.enabled, j, false);
962 getOptional<int>("minLevel", p.minLevel, j, 0);
963 getOptional<int>("maxLevel", p.maxLevel, j, 255);
964 getOptional<int>("compressionGainDb", p.compressionGainDb, j, 25);
965 getOptional<bool>("enableLimiter", p.enableLimiter, j, false);
966 getOptional<int>("targetLevelDb", p.targetLevelDb, j, 3);
967 }
968
969
970 //-----------------------------------------------------------
971 JSON_SERIALIZED_CLASS(RtpPayloadTypeTranslation)
981 {
982 IMPLEMENT_JSON_SERIALIZATION()
983 IMPLEMENT_JSON_DOCUMENTATION(RtpPayloadTypeTranslation)
984
985 public:
987 uint16_t external;
988
990 uint16_t engage;
991
993 {
994 clear();
995 }
996
997 void clear()
998 {
999 external = 0;
1000 engage = 0;
1001 }
1002
1003 bool matches(const RtpPayloadTypeTranslation& other)
1004 {
1005 return ( (external == other.external) && (engage == other.engage) );
1006 }
1007 };
1008
1009 static void to_json(nlohmann::json& j, const RtpPayloadTypeTranslation& p)
1010 {
1011 j = nlohmann::json{
1012 TOJSON_IMPL(external),
1013 TOJSON_IMPL(engage)
1014 };
1015 }
1016 static void from_json(const nlohmann::json& j, RtpPayloadTypeTranslation& p)
1017 {
1018 p.clear();
1019 getOptional<uint16_t>("external", p.external, j);
1020 getOptional<uint16_t>("engage", p.engage, j);
1021 }
1022
1023 //-----------------------------------------------------------
1024 JSON_SERIALIZED_CLASS(NetworkInterfaceDevice)
1026 {
1027 IMPLEMENT_JSON_SERIALIZATION()
1028 IMPLEMENT_JSON_DOCUMENTATION(NetworkInterfaceDevice)
1029
1030 public:
1031 std::string name;
1032 std::string friendlyName;
1033 std::string description;
1034 int family;
1035 std::string address;
1036 bool available;
1037 bool isLoopback;
1038 bool supportsMulticast;
1039 std::string hardwareAddress;
1040
1042 {
1043 clear();
1044 }
1045
1046 void clear()
1047 {
1048 name.clear();
1049 friendlyName.clear();
1050 description.clear();
1051 family = -1;
1052 address.clear();
1053 available = false;
1054 isLoopback = false;
1055 supportsMulticast = false;
1056 hardwareAddress.clear();
1057 }
1058
1059 virtual void initForDocumenting()
1060 {
1061 clear();
1062 name = "en0";
1063 friendlyName = "Wi-Fi";
1064 description = "A wi-fi adapter";
1065 family = 1;
1066 address = "127.0.0.1";
1067 available = true;
1068 isLoopback = true;
1069 supportsMulticast = false;
1070 hardwareAddress = "DE:AD:BE:EF:01:02:03";
1071 }
1072 };
1073
1074 static void to_json(nlohmann::json& j, const NetworkInterfaceDevice& p)
1075 {
1076 j = nlohmann::json{
1077 TOJSON_IMPL(name),
1078 TOJSON_IMPL(friendlyName),
1079 TOJSON_IMPL(description),
1080 TOJSON_IMPL(family),
1081 TOJSON_IMPL(address),
1082 TOJSON_IMPL(available),
1083 TOJSON_IMPL(isLoopback),
1084 TOJSON_IMPL(supportsMulticast),
1085 TOJSON_IMPL(hardwareAddress)
1086 };
1087 }
1088 static void from_json(const nlohmann::json& j, NetworkInterfaceDevice& p)
1089 {
1090 p.clear();
1091 getOptional("name", p.name, j);
1092 getOptional("friendlyName", p.friendlyName, j);
1093 getOptional("description", p.description, j);
1094 getOptional("family", p.family, j, -1);
1095 getOptional("address", p.address, j);
1096 getOptional("available", p.available, j, false);
1097 getOptional("isLoopback", p.isLoopback, j, false);
1098 getOptional("supportsMulticast", p.supportsMulticast, j, false);
1099 getOptional("hardwareAddress", p.hardwareAddress, j);
1100 }
1101
1102 //-----------------------------------------------------------
1103 JSON_SERIALIZED_CLASS(ListOfNetworkInterfaceDevice)
1105 {
1106 IMPLEMENT_JSON_SERIALIZATION()
1107 IMPLEMENT_JSON_DOCUMENTATION(ListOfNetworkInterfaceDevice)
1108
1109 public:
1110 std::vector<NetworkInterfaceDevice> list;
1111
1113 {
1114 clear();
1115 }
1116
1117 void clear()
1118 {
1119 list.clear();
1120 }
1121 };
1122
1123 static void to_json(nlohmann::json& j, const ListOfNetworkInterfaceDevice& p)
1124 {
1125 j = nlohmann::json{
1126 TOJSON_IMPL(list)
1127 };
1128 }
1129 static void from_json(const nlohmann::json& j, ListOfNetworkInterfaceDevice& p)
1130 {
1131 p.clear();
1132 getOptional<std::vector<NetworkInterfaceDevice>>("list", p.list, j);
1133 }
1134
1135
1136 //-----------------------------------------------------------
1137 JSON_SERIALIZED_CLASS(RtpHeader)
1147 {
1148 IMPLEMENT_JSON_SERIALIZATION()
1149 IMPLEMENT_JSON_DOCUMENTATION(RtpHeader)
1150
1151 public:
1152
1154 int pt;
1155
1158
1160 uint16_t seq;
1161
1163 uint32_t ssrc;
1164
1166 uint32_t ts;
1167
1168 RtpHeader()
1169 {
1170 clear();
1171 }
1172
1173 void clear()
1174 {
1175 pt = -1;
1176 marker = false;
1177 seq = 0;
1178 ssrc = 0;
1179 ts = 0;
1180 }
1181
1182 virtual void initForDocumenting()
1183 {
1184 clear();
1185 pt = 0;
1186 marker = false;
1187 seq = 123;
1188 ssrc = 12345678;
1189 ts = 87654321;
1190 }
1191 };
1192
1193 static void to_json(nlohmann::json& j, const RtpHeader& p)
1194 {
1195 if(p.pt != -1)
1196 {
1197 j = nlohmann::json{
1198 TOJSON_IMPL(pt),
1199 TOJSON_IMPL(marker),
1200 TOJSON_IMPL(seq),
1201 TOJSON_IMPL(ssrc),
1202 TOJSON_IMPL(ts)
1203 };
1204 }
1205 }
1206 static void from_json(const nlohmann::json& j, RtpHeader& p)
1207 {
1208 p.clear();
1209 getOptional<int>("pt", p.pt, j, -1);
1210 getOptional<bool>("marker", p.marker, j, false);
1211 getOptional<uint16_t>("seq", p.seq, j, 0);
1212 getOptional<uint32_t>("ssrc", p.ssrc, j, 0);
1213 getOptional<uint32_t>("ts", p.ts, j, 0);
1214 }
1215
1216 //-----------------------------------------------------------
1217 JSON_SERIALIZED_CLASS(Rfc4733Event)
1225 {
1226 IMPLEMENT_JSON_SERIALIZATION()
1227 IMPLEMENT_JSON_DOCUMENTATION(Rfc4733Event)
1228
1229 public:
1230
1232 int id;
1233
1235 bool end;
1236
1239
1242
1245
1246 Rfc4733Event()
1247 {
1248 clear();
1249 }
1250
1251 void clear()
1252 {
1253 id = -1;
1254 end = false;
1255 reserved = 0;
1256 volume = 0;
1257 duration = 0;
1258 }
1259
1260 virtual void initForDocumenting()
1261 {
1262 clear();
1263 id = 0;
1264 end = false;
1265 reserved = 0;
1266 volume = 0;
1267 duration = 0;
1268 }
1269 };
1270
1271 static void to_json(nlohmann::json& j, const Rfc4733Event& p)
1272 {
1273 j = nlohmann::json{
1274 TOJSON_IMPL(id),
1275 TOJSON_IMPL(end),
1276 TOJSON_IMPL(reserved),
1277 TOJSON_IMPL(volume),
1278 TOJSON_IMPL(duration)
1279 };
1280 }
1281 static void from_json(const nlohmann::json& j, Rfc4733Event& p)
1282 {
1283 p.clear();
1284 getOptional<int>("id", p.id, j, -1);
1285 getOptional<bool>("end", p.end, j, false);
1286 getOptional<int>("reserved", p.reserved, j, 0);
1287 getOptional<int>("volume", p.volume, j, 0);
1288 getOptional<int>("duration", p.duration, j, 0);
1289 }
1290
1291 //-----------------------------------------------------------
1292 JSON_SERIALIZED_CLASS(BlobInfo)
1302 {
1303 IMPLEMENT_JSON_SERIALIZATION()
1304 IMPLEMENT_JSON_DOCUMENTATION(BlobInfo)
1305
1306 public:
1310 typedef enum
1311 {
1313 bptUndefined = 0,
1314
1316 bptAppTextUtf8 = 1,
1317
1319 bptJsonTextUtf8 = 2,
1320
1322 bptAppBinary = 3,
1323
1325 bptEngageBinaryHumanBiometrics = 4,
1326
1328 bptAppMimeMessage = 5,
1329
1331 bptRfc4733Events = 6,
1332
1334 bptEngageInternal = 42
1335 } PayloadType_t;
1336
1338 size_t size;
1339
1341 std::string source;
1342
1344 std::string target;
1345
1348
1351
1353 std::string txnId;
1354
1357
1358 BlobInfo()
1359 {
1360 clear();
1361 }
1362
1363 void clear()
1364 {
1365 size = 0;
1366 source.clear();
1367 target.clear();
1368 rtpHeader.clear();
1369 payloadType = PayloadType_t::bptUndefined;
1370 txnId.clear();
1371 txnTimeoutSecs = 0;
1372 }
1373
1374 virtual void initForDocumenting()
1375 {
1376 clear();
1377 rtpHeader.initForDocumenting();
1378 }
1379 };
1380
1381 static void to_json(nlohmann::json& j, const BlobInfo& p)
1382 {
1383 j = nlohmann::json{
1384 TOJSON_IMPL(size),
1385 TOJSON_IMPL(source),
1386 TOJSON_IMPL(target),
1387 TOJSON_IMPL(rtpHeader),
1388 TOJSON_IMPL(payloadType),
1389 TOJSON_IMPL(txnId),
1390 TOJSON_IMPL(txnTimeoutSecs)
1391 };
1392 }
1393 static void from_json(const nlohmann::json& j, BlobInfo& p)
1394 {
1395 p.clear();
1396 getOptional<size_t>("size", p.size, j, 0);
1397 getOptional<std::string>("source", p.source, j, EMPTY_STRING);
1398 getOptional<std::string>("target", p.target, j, EMPTY_STRING);
1399 getOptional<RtpHeader>("rtpHeader", p.rtpHeader, j);
1400 getOptional<BlobInfo::PayloadType_t>("payloadType", p.payloadType, j, BlobInfo::PayloadType_t::bptUndefined);
1401 getOptional<std::string>("txnId", p.txnId, j, EMPTY_STRING);
1402 getOptional<int>("txnTimeoutSecs", p.txnTimeoutSecs, j, 0);
1403 }
1404
1405
1406 //-----------------------------------------------------------
1407 JSON_SERIALIZED_CLASS(TxAudioUri)
1420 {
1421 IMPLEMENT_JSON_SERIALIZATION()
1422 IMPLEMENT_JSON_DOCUMENTATION(TxAudioUri)
1423
1424 public:
1426 std::string uri;
1427
1430
1431 TxAudioUri()
1432 {
1433 clear();
1434 }
1435
1436 void clear()
1437 {
1438 uri.clear();
1439 repeatCount = 0;
1440 }
1441
1442 virtual void initForDocumenting()
1443 {
1444 }
1445 };
1446
1447 static void to_json(nlohmann::json& j, const TxAudioUri& p)
1448 {
1449 j = nlohmann::json{
1450 TOJSON_IMPL(uri),
1451 TOJSON_IMPL(repeatCount)
1452 };
1453 }
1454 static void from_json(const nlohmann::json& j, TxAudioUri& p)
1455 {
1456 p.clear();
1457 getOptional<std::string>("uri", p.uri, j, EMPTY_STRING);
1458 getOptional<int>("repeatCount", p.repeatCount, j, 0);
1459 }
1460
1461
1462 //-----------------------------------------------------------
1463 JSON_SERIALIZED_CLASS(AdvancedTxParams)
1476 {
1477 IMPLEMENT_JSON_SERIALIZATION()
1478 IMPLEMENT_JSON_DOCUMENTATION(AdvancedTxParams)
1479
1480 public:
1481
1483 uint16_t flags;
1484
1486 uint8_t priority;
1487
1490
1493
1495 std::string alias;
1496
1498 bool muted;
1499
1501 uint32_t txId;
1502
1505
1508
1511
1514
1516 {
1517 clear();
1518 }
1519
1520 void clear()
1521 {
1522 flags = 0;
1523 priority = 0;
1524 subchannelTag = 0;
1525 includeNodeId = false;
1526 alias.clear();
1527 muted = false;
1528 txId = 0;
1529 audioUri.clear();
1530 aliasSpecializer = 0;
1531 receiverRxMuteForAliasSpecializer = false;
1532 reBegin = false;
1533 }
1534
1535 virtual void initForDocumenting()
1536 {
1537 }
1538 };
1539
1540 static void to_json(nlohmann::json& j, const AdvancedTxParams& p)
1541 {
1542 j = nlohmann::json{
1543 TOJSON_IMPL(flags),
1544 TOJSON_IMPL(priority),
1545 TOJSON_IMPL(subchannelTag),
1546 TOJSON_IMPL(includeNodeId),
1547 TOJSON_IMPL(alias),
1548 TOJSON_IMPL(muted),
1549 TOJSON_IMPL(txId),
1550 TOJSON_IMPL(audioUri),
1551 TOJSON_IMPL(aliasSpecializer),
1552 TOJSON_IMPL(receiverRxMuteForAliasSpecializer),
1553 TOJSON_IMPL(reBegin)
1554 };
1555 }
1556 static void from_json(const nlohmann::json& j, AdvancedTxParams& p)
1557 {
1558 p.clear();
1559 getOptional<uint16_t>("flags", p.flags, j, 0);
1560 getOptional<uint8_t>("priority", p.priority, j, 0);
1561 getOptional<uint16_t>("subchannelTag", p.subchannelTag, j, 0);
1562 getOptional<bool>("includeNodeId", p.includeNodeId, j, false);
1563 getOptional<std::string>("alias", p.alias, j, EMPTY_STRING);
1564 getOptional<bool>("muted", p.muted, j, false);
1565 getOptional<uint32_t>("txId", p.txId, j, 0);
1566 getOptional<TxAudioUri>("audioUri", p.audioUri, j);
1567 getOptional<uint16_t>("aliasSpecializer", p.aliasSpecializer, j, 0);
1568 getOptional<bool>("receiverRxMuteForAliasSpecializer", p.receiverRxMuteForAliasSpecializer, j, false);
1569 getOptional<bool>("reBegin", p.reBegin, j, false);
1570 }
1571
1572 //-----------------------------------------------------------
1573 JSON_SERIALIZED_CLASS(Identity)
1586 {
1587 IMPLEMENT_JSON_SERIALIZATION()
1588 IMPLEMENT_JSON_DOCUMENTATION(Identity)
1589
1590 public:
1598 std::string nodeId;
1599
1601 std::string userId;
1602
1604 std::string displayName;
1605
1607 std::string avatar;
1608
1609 Identity()
1610 {
1611 clear();
1612 }
1613
1614 void clear()
1615 {
1616 nodeId.clear();
1617 userId.clear();
1618 displayName.clear();
1619 avatar.clear();
1620 }
1621
1622 virtual void initForDocumenting()
1623 {
1624 }
1625 };
1626
1627 static void to_json(nlohmann::json& j, const Identity& p)
1628 {
1629 j = nlohmann::json{
1630 TOJSON_IMPL(nodeId),
1631 TOJSON_IMPL(userId),
1632 TOJSON_IMPL(displayName),
1633 TOJSON_IMPL(avatar)
1634 };
1635 }
1636 static void from_json(const nlohmann::json& j, Identity& p)
1637 {
1638 p.clear();
1639 getOptional<std::string>("nodeId", p.nodeId, j);
1640 getOptional<std::string>("userId", p.userId, j);
1641 getOptional<std::string>("displayName", p.displayName, j);
1642 getOptional<std::string>("avatar", p.avatar, j);
1643 }
1644
1645
1646 //-----------------------------------------------------------
1647 JSON_SERIALIZED_CLASS(Location)
1660 {
1661 IMPLEMENT_JSON_SERIALIZATION()
1662 IMPLEMENT_JSON_DOCUMENTATION(Location)
1663
1664 public:
1665 constexpr static double INVALID_LOCATION_VALUE = -999.999;
1666
1668 uint32_t ts;
1669
1671 double latitude;
1672
1675
1677 double altitude;
1678
1681
1683 double speed;
1684
1685 Location()
1686 {
1687 clear();
1688 }
1689
1690 void clear()
1691 {
1692 ts = 0;
1693 latitude = INVALID_LOCATION_VALUE;
1694 longitude = INVALID_LOCATION_VALUE;
1695 altitude = INVALID_LOCATION_VALUE;
1696 direction = INVALID_LOCATION_VALUE;
1697 speed = INVALID_LOCATION_VALUE;
1698 }
1699
1700 virtual void initForDocumenting()
1701 {
1702 clear();
1703
1704 ts = 123456;
1705 latitude = 123.456;
1706 longitude = 456.789;
1707 altitude = 123;
1708 direction = 1;
1709 speed = 1234;
1710 }
1711 };
1712
1713 static void to_json(nlohmann::json& j, const Location& p)
1714 {
1715 if(p.latitude != Location::INVALID_LOCATION_VALUE && p.longitude != Location::INVALID_LOCATION_VALUE)
1716 {
1717 j = nlohmann::json{
1718 TOJSON_IMPL(latitude),
1719 TOJSON_IMPL(longitude),
1720 };
1721
1722 if(p.ts != 0) j["ts"] = p.ts;
1723 if(p.altitude != Location::INVALID_LOCATION_VALUE) j["altitude"] = p.altitude;
1724 if(p.speed != Location::INVALID_LOCATION_VALUE) j["speed"] = p.speed;
1725 if(p.direction != Location::INVALID_LOCATION_VALUE) j["direction"] = p.direction;
1726 }
1727 }
1728 static void from_json(const nlohmann::json& j, Location& p)
1729 {
1730 p.clear();
1731 getOptional<uint32_t>("ts", p.ts, j, 0);
1732 j.at("latitude").get_to(p.latitude);
1733 j.at("longitude").get_to(p.longitude);
1734 getOptional<double>("altitude", p.altitude, j, Location::INVALID_LOCATION_VALUE);
1735 getOptional<double>("direction", p.direction, j, Location::INVALID_LOCATION_VALUE);
1736 getOptional<double>("speed", p.speed, j, Location::INVALID_LOCATION_VALUE);
1737 }
1738
1739 //-----------------------------------------------------------
1740 JSON_SERIALIZED_CLASS(Power)
1751 {
1752 IMPLEMENT_JSON_SERIALIZATION()
1753 IMPLEMENT_JSON_DOCUMENTATION(Power)
1754
1755 public:
1756
1769
1783
1786
1787 Power()
1788 {
1789 clear();
1790 }
1791
1792 void clear()
1793 {
1794 source = 0;
1795 state = 0;
1796 level = 0;
1797 }
1798
1799 virtual void initForDocumenting()
1800 {
1801 }
1802 };
1803
1804 static void to_json(nlohmann::json& j, const Power& p)
1805 {
1806 if(p.source != 0 && p.state != 0 && p.level != 0)
1807 {
1808 j = nlohmann::json{
1809 TOJSON_IMPL(source),
1810 TOJSON_IMPL(state),
1811 TOJSON_IMPL(level)
1812 };
1813 }
1814 }
1815 static void from_json(const nlohmann::json& j, Power& p)
1816 {
1817 p.clear();
1818 getOptional<int>("source", p.source, j, 0);
1819 getOptional<int>("state", p.state, j, 0);
1820 getOptional<int>("level", p.level, j, 0);
1821 }
1822
1823
1824 //-----------------------------------------------------------
1825 JSON_SERIALIZED_CLASS(Connectivity)
1836 {
1837 IMPLEMENT_JSON_SERIALIZATION()
1838 IMPLEMENT_JSON_DOCUMENTATION(Connectivity)
1839
1840 public:
1854 int type;
1855
1858
1861
1862 Connectivity()
1863 {
1864 clear();
1865 }
1866
1867 void clear()
1868 {
1869 type = 0;
1870 strength = 0;
1871 rating = 0;
1872 }
1873
1874 virtual void initForDocumenting()
1875 {
1876 clear();
1877
1878 type = 1;
1879 strength = 2;
1880 rating = 3;
1881 }
1882 };
1883
1884 static void to_json(nlohmann::json& j, const Connectivity& p)
1885 {
1886 if(p.type != 0)
1887 {
1888 j = nlohmann::json{
1889 TOJSON_IMPL(type),
1890 TOJSON_IMPL(strength),
1891 TOJSON_IMPL(rating)
1892 };
1893 }
1894 }
1895 static void from_json(const nlohmann::json& j, Connectivity& p)
1896 {
1897 p.clear();
1898 getOptional<int>("type", p.type, j, 0);
1899 getOptional<int>("strength", p.strength, j, 0);
1900 getOptional<int>("rating", p.rating, j, 0);
1901 }
1902
1903
1904 //-----------------------------------------------------------
1905 JSON_SERIALIZED_CLASS(PresenceDescriptorGroupItem)
1916 {
1917 IMPLEMENT_JSON_SERIALIZATION()
1918 IMPLEMENT_JSON_DOCUMENTATION(PresenceDescriptorGroupItem)
1919
1920 public:
1922 std::string groupId;
1923
1925 std::string alias;
1926
1928 uint16_t status;
1929
1931 {
1932 clear();
1933 }
1934
1935 void clear()
1936 {
1937 groupId.clear();
1938 alias.clear();
1939 status = 0;
1940 }
1941
1942 virtual void initForDocumenting()
1943 {
1944 groupId = "{123-456}";
1945 alias = "MYALIAS";
1946 status = 0;
1947 }
1948 };
1949
1950 static void to_json(nlohmann::json& j, const PresenceDescriptorGroupItem& p)
1951 {
1952 j = nlohmann::json{
1953 TOJSON_IMPL(groupId),
1954 TOJSON_IMPL(alias),
1955 TOJSON_IMPL(status)
1956 };
1957 }
1958 static void from_json(const nlohmann::json& j, PresenceDescriptorGroupItem& p)
1959 {
1960 p.clear();
1961 getOptional<std::string>("groupId", p.groupId, j);
1962 getOptional<std::string>("alias", p.alias, j);
1963 getOptional<uint16_t>("status", p.status, j);
1964 }
1965
1966
1967 //-----------------------------------------------------------
1968 JSON_SERIALIZED_CLASS(PresenceDescriptor)
1979 {
1980 IMPLEMENT_JSON_SERIALIZATION()
1981 IMPLEMENT_JSON_DOCUMENTATION(PresenceDescriptor)
1982
1983 public:
1984
1990 bool self;
1991
1997 uint32_t ts;
1998
2004 uint32_t nextUpdate;
2005
2008
2010 std::string comment;
2011
2025 uint32_t disposition;
2026
2028 std::vector<PresenceDescriptorGroupItem> groupAliases;
2029
2032
2034 std::string custom;
2035
2038
2041
2044
2046 {
2047 clear();
2048 }
2049
2050 void clear()
2051 {
2052 self = false;
2053 ts = 0;
2054 nextUpdate = 0;
2055 identity.clear();
2056 comment.clear();
2057 disposition = 0;
2058 groupAliases.clear();
2059 location.clear();
2060 custom.clear();
2061 announceOnReceive = false;
2062 connectivity.clear();
2063 power.clear();
2064 }
2065
2066 virtual void initForDocumenting()
2067 {
2068 clear();
2069
2070 self = true;
2071 ts = 123;
2072 nextUpdate = 0;
2073 identity.initForDocumenting();
2074 comment = "This is a comment";
2075 disposition = 123;
2076
2077 PresenceDescriptorGroupItem gi;
2078 gi.initForDocumenting();
2079 groupAliases.push_back(gi);
2080
2081 location.initForDocumenting();
2082 custom = "{}";
2083 announceOnReceive = true;
2084 connectivity.initForDocumenting();
2085 power.initForDocumenting();
2086 }
2087 };
2088
2089 static void to_json(nlohmann::json& j, const PresenceDescriptor& p)
2090 {
2091 j = nlohmann::json{
2092 TOJSON_IMPL(ts),
2093 TOJSON_IMPL(nextUpdate),
2094 TOJSON_IMPL(identity),
2095 TOJSON_IMPL(comment),
2096 TOJSON_IMPL(disposition),
2097 TOJSON_IMPL(groupAliases),
2098 TOJSON_IMPL(location),
2099 TOJSON_IMPL(custom),
2100 TOJSON_IMPL(announceOnReceive),
2101 TOJSON_IMPL(connectivity),
2102 TOJSON_IMPL(power)
2103 };
2104
2105 if(!p.comment.empty()) j["comment"] = p.comment;
2106 if(!p.custom.empty()) j["custom"] = p.custom;
2107
2108 if(p.self)
2109 {
2110 j["self"] = true;
2111 }
2112 }
2113 static void from_json(const nlohmann::json& j, PresenceDescriptor& p)
2114 {
2115 p.clear();
2116 getOptional<bool>("self", p.self, j);
2117 getOptional<uint32_t>("ts", p.ts, j);
2118 getOptional<uint32_t>("nextUpdate", p.nextUpdate, j);
2119 getOptional<Identity>("identity", p.identity, j);
2120 getOptional<std::string>("comment", p.comment, j);
2121 getOptional<uint32_t>("disposition", p.disposition, j);
2122 getOptional<std::vector<PresenceDescriptorGroupItem>>("groupAliases", p.groupAliases, j);
2123 getOptional<Location>("location", p.location, j);
2124 getOptional<std::string>("custom", p.custom, j);
2125 getOptional<bool>("announceOnReceive", p.announceOnReceive, j);
2126 getOptional<Connectivity>("connectivity", p.connectivity, j);
2127 getOptional<Power>("power", p.power, j);
2128 }
2129
2135 typedef enum
2136 {
2139
2142
2145
2147 priVoice = 3
2148 } TxPriority_t;
2149
2155 typedef enum
2156 {
2159
2162
2165
2167 arpIpv6ThenIpv4 = 64
2168 } AddressResolutionPolicy_t;
2169
2170 //-----------------------------------------------------------
2171 JSON_SERIALIZED_CLASS(NetworkTxOptions)
2184 {
2185 IMPLEMENT_JSON_SERIALIZATION()
2186 IMPLEMENT_JSON_DOCUMENTATION(NetworkTxOptions)
2187
2188 public:
2191
2197 int ttl;
2198
2200 {
2201 clear();
2202 }
2203
2204 void clear()
2205 {
2206 priority = priVoice;
2207 ttl = 1;
2208 }
2209
2210 virtual void initForDocumenting()
2211 {
2212 }
2213 };
2214
2215 static void to_json(nlohmann::json& j, const NetworkTxOptions& p)
2216 {
2217 j = nlohmann::json{
2218 TOJSON_IMPL(priority),
2219 TOJSON_IMPL(ttl)
2220 };
2221 }
2222 static void from_json(const nlohmann::json& j, NetworkTxOptions& p)
2223 {
2224 p.clear();
2225 getOptional<TxPriority_t>("priority", p.priority, j, TxPriority_t::priVoice);
2226 getOptional<int>("ttl", p.ttl, j, 1);
2227 }
2228
2229
2230 //-----------------------------------------------------------
2231 JSON_SERIALIZED_CLASS(TcpNetworkTxOptions)
2240 {
2241 IMPLEMENT_JSON_SERIALIZATION()
2242 IMPLEMENT_JSON_DOCUMENTATION(TcpNetworkTxOptions)
2243
2244 public:
2246 {
2247 clear();
2248 }
2249
2250 void clear()
2251 {
2252 priority = priVoice;
2253 ttl = -1;
2254 }
2255
2256 virtual void initForDocumenting()
2257 {
2258 }
2259 };
2260
2261 static void to_json(nlohmann::json& j, const TcpNetworkTxOptions& p)
2262 {
2263 j = nlohmann::json{
2264 TOJSON_IMPL(priority),
2265 TOJSON_IMPL(ttl)
2266 };
2267 }
2268 static void from_json(const nlohmann::json& j, TcpNetworkTxOptions& p)
2269 {
2270 p.clear();
2271 getOptional<TxPriority_t>("priority", p.priority, j, TxPriority_t::priVoice);
2272 getOptional<int>("ttl", p.ttl, j, -1);
2273 }
2274
2275 typedef enum
2276 {
2279
2282
2284 ifIp6 = 6
2285 } IpFamilyType_t;
2286
2287 //-----------------------------------------------------------
2288 JSON_SERIALIZED_CLASS(NetworkAddress)
2300 {
2301 IMPLEMENT_JSON_SERIALIZATION()
2302 IMPLEMENT_JSON_DOCUMENTATION(NetworkAddress)
2303
2304 public:
2306 std::string address;
2307
2309 int port;
2310
2312 {
2313 clear();
2314 }
2315
2316 void clear()
2317 {
2318 address.clear();
2319 port = 0;
2320 }
2321
2322 bool matches(const NetworkAddress& other)
2323 {
2324 if(address.compare(other.address) != 0)
2325 {
2326 return false;
2327 }
2328
2329 if(port != other.port)
2330 {
2331 return false;
2332 }
2333
2334 return true;
2335 }
2336 };
2337
2338 static void to_json(nlohmann::json& j, const NetworkAddress& p)
2339 {
2340 j = nlohmann::json{
2341 TOJSON_IMPL(address),
2342 TOJSON_IMPL(port)
2343 };
2344 }
2345 static void from_json(const nlohmann::json& j, NetworkAddress& p)
2346 {
2347 p.clear();
2348 getOptional<std::string>("address", p.address, j);
2349 getOptional<int>("port", p.port, j);
2350 }
2351
2352
2353 //-----------------------------------------------------------
2354 JSON_SERIALIZED_CLASS(NetworkAddressRxTx)
2366 {
2367 IMPLEMENT_JSON_SERIALIZATION()
2368 IMPLEMENT_JSON_DOCUMENTATION(NetworkAddressRxTx)
2369
2370 public:
2373
2376
2378 {
2379 clear();
2380 }
2381
2382 void clear()
2383 {
2384 rx.clear();
2385 tx.clear();
2386 }
2387 };
2388
2389 static void to_json(nlohmann::json& j, const NetworkAddressRxTx& p)
2390 {
2391 j = nlohmann::json{
2392 TOJSON_IMPL(rx),
2393 TOJSON_IMPL(tx)
2394 };
2395 }
2396 static void from_json(const nlohmann::json& j, NetworkAddressRxTx& p)
2397 {
2398 p.clear();
2399 getOptional<NetworkAddress>("rx", p.rx, j);
2400 getOptional<NetworkAddress>("tx", p.tx, j);
2401 }
2402
2404 typedef enum
2405 {
2408
2410 graptStrict = 1
2411 } GroupRestrictionAccessPolicyType_t;
2412
2413 static bool isValidGroupRestrictionAccessPolicyType(GroupRestrictionAccessPolicyType_t t)
2414 {
2415 return (t == GroupRestrictionAccessPolicyType_t::graptPermissive ||
2416 t == GroupRestrictionAccessPolicyType_t::graptStrict );
2417 }
2418
2420 typedef enum
2421 {
2424
2427
2429 rtBlacklist = 2
2430 } RestrictionType_t;
2431
2432 static bool isValidRestrictionType(RestrictionType_t t)
2433 {
2434 return (t == RestrictionType_t::rtUndefined ||
2435 t == RestrictionType_t::rtWhitelist ||
2436 t == RestrictionType_t::rtBlacklist );
2437 }
2438
2463
2464 static bool isValidRestrictionElementType(RestrictionElementType_t t)
2465 {
2466 return (t == RestrictionElementType_t::retGroupId ||
2467 t == RestrictionElementType_t::retGroupIdPattern ||
2468 t == RestrictionElementType_t::retGenericAccessTagPattern ||
2469 t == RestrictionElementType_t::retCertificateSerialNumberPattern ||
2470 t == RestrictionElementType_t::retCertificateFingerprintPattern ||
2471 t == RestrictionElementType_t::retCertificateSubjectPattern ||
2472 t == RestrictionElementType_t::retCertificateIssuerPattern);
2473 }
2474
2475
2476 //-----------------------------------------------------------
2477 JSON_SERIALIZED_CLASS(NetworkAddressRestrictionList)
2489 {
2490 IMPLEMENT_JSON_SERIALIZATION()
2491 IMPLEMENT_JSON_DOCUMENTATION(NetworkAddressRestrictionList)
2492
2493 public:
2496
2498 std::vector<NetworkAddressRxTx> elements;
2499
2501 {
2502 clear();
2503 }
2504
2505 void clear()
2506 {
2507 type = RestrictionType_t::rtUndefined;
2508 elements.clear();
2509 }
2510 };
2511
2512 static void to_json(nlohmann::json& j, const NetworkAddressRestrictionList& p)
2513 {
2514 j = nlohmann::json{
2515 TOJSON_IMPL(type),
2516 TOJSON_IMPL(elements)
2517 };
2518 }
2519 static void from_json(const nlohmann::json& j, NetworkAddressRestrictionList& p)
2520 {
2521 p.clear();
2522 getOptional<RestrictionType_t>("type", p.type, j, RestrictionType_t::rtUndefined);
2523 getOptional<std::vector<NetworkAddressRxTx>>("elements", p.elements, j);
2524 }
2525
2526 //-----------------------------------------------------------
2527 JSON_SERIALIZED_CLASS(StringRestrictionList)
2539 {
2540 IMPLEMENT_JSON_SERIALIZATION()
2541 IMPLEMENT_JSON_DOCUMENTATION(StringRestrictionList)
2542
2543 public:
2546
2549
2551 std::vector<std::string> elements;
2552
2554 {
2555 type = RestrictionType_t::rtUndefined;
2556 elementsType = RestrictionElementType_t::retGroupId;
2557 clear();
2558 }
2559
2560 void clear()
2561 {
2562 elements.clear();
2563 }
2564 };
2565
2566 static void to_json(nlohmann::json& j, const StringRestrictionList& p)
2567 {
2568 j = nlohmann::json{
2569 TOJSON_IMPL(type),
2570 TOJSON_IMPL(elementsType),
2571 TOJSON_IMPL(elements)
2572 };
2573 }
2574 static void from_json(const nlohmann::json& j, StringRestrictionList& p)
2575 {
2576 p.clear();
2577 getOptional<RestrictionType_t>("type", p.type, j, RestrictionType_t::rtUndefined);
2578 getOptional<RestrictionElementType_t>("elementsType", p.elementsType, j, RestrictionElementType_t::retGroupId);
2579 getOptional<std::vector<std::string>>("elements", p.elements, j);
2580 }
2581
2582
2583 //-----------------------------------------------------------
2584 JSON_SERIALIZED_CLASS(PacketCapturer)
2594 {
2595 IMPLEMENT_JSON_SERIALIZATION()
2596 IMPLEMENT_JSON_DOCUMENTATION(PacketCapturer)
2597
2598 public:
2599 bool enabled;
2600 uint32_t maxMb;
2601 std::string filePrefix;
2602
2604 {
2605 clear();
2606 }
2607
2608 void clear()
2609 {
2610 enabled = false;
2611 maxMb = 10;
2612 filePrefix.clear();
2613 }
2614 };
2615
2616 static void to_json(nlohmann::json& j, const PacketCapturer& p)
2617 {
2618 j = nlohmann::json{
2619 TOJSON_IMPL(enabled),
2620 TOJSON_IMPL(maxMb),
2621 TOJSON_IMPL(filePrefix)
2622 };
2623 }
2624 static void from_json(const nlohmann::json& j, PacketCapturer& p)
2625 {
2626 p.clear();
2627 getOptional<bool>("enabled", p.enabled, j, false);
2628 getOptional<uint32_t>("maxMb", p.maxMb, j, 10);
2629 getOptional<std::string>("filePrefix", p.filePrefix, j, EMPTY_STRING);
2630 }
2631
2632
2633 //-----------------------------------------------------------
2634 JSON_SERIALIZED_CLASS(TransportImpairment)
2644 {
2645 IMPLEMENT_JSON_SERIALIZATION()
2646 IMPLEMENT_JSON_DOCUMENTATION(TransportImpairment)
2647
2648 public:
2649 int applicationPercentage;
2650 int jitterMs;
2651 int lossPercentage;
2654
2656 {
2657 clear();
2658 }
2659
2660 void clear()
2661 {
2662 applicationPercentage = 0;
2663 jitterMs = 0;
2664 lossPercentage = 0;
2665 errorPercentage = 0;
2666 }
2667 };
2668
2669 static void to_json(nlohmann::json& j, const TransportImpairment& p)
2670 {
2671 j = nlohmann::json{
2672 TOJSON_IMPL(applicationPercentage),
2673 TOJSON_IMPL(jitterMs),
2674 TOJSON_IMPL(lossPercentage),
2675 TOJSON_IMPL(errorPercentage)
2676 };
2677 }
2678 static void from_json(const nlohmann::json& j, TransportImpairment& p)
2679 {
2680 p.clear();
2681 getOptional<int>("applicationPercentage", p.applicationPercentage, j, 0);
2682 getOptional<int>("jitterMs", p.jitterMs, j, 0);
2683 getOptional<int>("lossPercentage", p.lossPercentage, j, 0);
2684 getOptional<int>("errorPercentage", p.errorPercentage, j, 0);
2685 }
2686
2687 //-----------------------------------------------------------
2688 JSON_SERIALIZED_CLASS(NsmNetworking)
2701 {
2702 IMPLEMENT_JSON_SERIALIZATION()
2703 IMPLEMENT_JSON_DOCUMENTATION(NsmNetworking)
2704
2705 public:
2706 std::string address;
2707 int port;
2708 int ttl;
2709 TxPriority_t priority;
2710 int txOversend;
2711 TransportImpairment rxImpairment;
2712 TransportImpairment txImpairment;
2713 std::string cryptoPassword;
2714 int maxUdpPayloadBytes;
2715
2717 {
2718 clear();
2719 }
2720
2721 void clear()
2722 {
2723 address.clear();
2724 port = 0;
2725 ttl = 1;
2726 priority = TxPriority_t::priVoice;
2727 txOversend = 0;
2728 rxImpairment.clear();
2729 txImpairment.clear();
2730 cryptoPassword.clear();
2731 maxUdpPayloadBytes = 800;
2732 }
2733 };
2734
2735 static void to_json(nlohmann::json& j, const NsmNetworking& p)
2736 {
2737 nlohmann::json pathJson;
2738 to_json(pathJson, p.address);
2739 j = nlohmann::json{
2740 TOJSON_IMPL(port),
2741 TOJSON_IMPL(ttl),
2742 TOJSON_IMPL(priority),
2743 TOJSON_IMPL(txOversend),
2744 TOJSON_IMPL(rxImpairment),
2745 TOJSON_IMPL(txImpairment),
2746 TOJSON_IMPL(cryptoPassword),
2747 TOJSON_IMPL(maxUdpPayloadBytes)
2748 };
2749 }
2750 static void from_json(const nlohmann::json& j, NsmNetworking& p)
2751 {
2752 p.clear();
2753 getOptional<std::string>("address", p.address, j);
2754 getOptional<int>("port", p.port, j, 8513);
2755 getOptional<int>("ttl", p.ttl, j, 1);
2756 getOptional<TxPriority_t>("priority", p.priority, j, TxPriority_t::priVoice);
2757 getOptional<int>("txOversend", p.txOversend, j, 0);
2758 getOptional<TransportImpairment>("rxImpairment", p.rxImpairment, j);
2759 getOptional<TransportImpairment>("txImpairment", p.txImpairment, j);
2760 getOptional("cryptoPassword", p.cryptoPassword, j, EMPTY_STRING);
2761 getOptional<int>("maxUdpPayloadBytes", p.maxUdpPayloadBytes, j, 800);
2762 }
2763
2764 //-----------------------------------------------------------
2765 JSON_SERIALIZED_CLASS(NsmNodeResource)
2772 {
2773 IMPLEMENT_JSON_SERIALIZATION()
2774 IMPLEMENT_JSON_DOCUMENTATION(NsmNodeResource)
2775
2776 public:
2778 std::string id;
2781
2783 {
2784 clear();
2785 }
2786
2787 void clear()
2788 {
2789 id.clear();
2790 priority = -1;
2791 }
2792 };
2793
2794 static void to_json(nlohmann::json& j, const NsmNodeResource& p)
2795 {
2796 j = nlohmann::json{
2797 TOJSON_IMPL(id),
2798 TOJSON_IMPL(priority)
2799 };
2800 }
2801 static void from_json(const nlohmann::json& j, NsmNodeResource& p)
2802 {
2803 p.clear();
2804 getOptional<std::string>("id", p.id, j);
2805 getOptional<int>("priority", p.priority, j, -1);
2806 }
2807
2809 static void nsmConfigurationResourcesFromJson(const nlohmann::json& j, std::vector<NsmNodeResource>& out)
2810 {
2811 out.clear();
2812 if (!j.contains("resources") || !j["resources"].is_array())
2813 {
2814 return;
2815 }
2816 for (const auto& el : j["resources"])
2817 {
2818 if (!el.is_object())
2819 {
2820 continue;
2821 }
2822 NsmNodeResource nr;
2823 nr.clear();
2824 getOptional<std::string>("id", nr.id, el);
2825 getOptional<int>("priority", nr.priority, el, -1);
2826 if (!nr.id.empty())
2827 {
2828 out.push_back(nr);
2829 }
2830 }
2831 }
2832
2833
2834 //-----------------------------------------------------------
2835 JSON_SERIALIZED_CLASS(NsmConfiguration)
2845 {
2846 IMPLEMENT_JSON_SERIALIZATION()
2847 IMPLEMENT_JSON_DOCUMENTATION(NsmConfiguration)
2848
2849 public:
2850
2851 std::string id;
2852 bool favorUptime;
2853 NsmNetworking networking;
2854 std::vector<NsmNodeResource> resources;
2855 int tokenStart;
2856 int tokenEnd;
2857 int intervalSecs;
2858 int transitionSecsFactor;
2863 bool logCommandOutput;
2864
2866 {
2867 clear();
2868 }
2869
2870 void clear()
2871 {
2872 id.clear();
2873 favorUptime = false;
2874 networking.clear();
2875 resources.clear();
2876 tokenStart = 1000000;
2877 tokenEnd = 2000000;
2878 intervalSecs = 1;
2879 transitionSecsFactor = 3;
2880 internalMultiplier = 1;
2881 goingActiveRandomDelayMs = 500;
2882 logCommandOutput = false;
2883 }
2884 };
2885
2886 static void to_json(nlohmann::json& j, const NsmConfiguration& p)
2887 {
2888 j = nlohmann::json{
2889 TOJSON_IMPL(id),
2890 TOJSON_IMPL(favorUptime),
2891 TOJSON_IMPL(networking),
2892 TOJSON_IMPL(resources),
2893 TOJSON_IMPL(tokenStart),
2894 TOJSON_IMPL(tokenEnd),
2895 TOJSON_IMPL(intervalSecs),
2896 TOJSON_IMPL(transitionSecsFactor),
2897 TOJSON_IMPL(internalMultiplier),
2898 TOJSON_IMPL(goingActiveRandomDelayMs),
2899 TOJSON_IMPL(logCommandOutput),
2900 };
2901 }
2902 static void from_json(const nlohmann::json& j, NsmConfiguration& p)
2903 {
2904 p.clear();
2905 getOptional("id", p.id, j);
2906 getOptional<bool>("favorUptime", p.favorUptime, j, false);
2907 getOptional<NsmNetworking>("networking", p.networking, j);
2908 nsmConfigurationResourcesFromJson(j, p.resources);
2909 getOptional<int>("tokenStart", p.tokenStart, j, 1000000);
2910 getOptional<int>("tokenEnd", p.tokenEnd, j, 2000000);
2911 getOptional<int>("intervalSecs", p.intervalSecs, j, 1);
2912 getOptional<int>("transitionSecsFactor", p.transitionSecsFactor, j, 3);
2913 getOptional<int>("internalMultiplier", p.internalMultiplier, j, 1);
2914 getOptional<int>("goingActiveRandomDelayMs", p.goingActiveRandomDelayMs, j, 500);
2915 getOptional<bool>("logCommandOutput", p.logCommandOutput, j, false);
2916 }
2917
2918
2919 //-----------------------------------------------------------
2920 JSON_SERIALIZED_CLASS(Rallypoint)
2929 {
2930 IMPLEMENT_JSON_SERIALIZATION()
2931 IMPLEMENT_JSON_DOCUMENTATION(Rallypoint)
2932
2933 public:
2938 typedef enum
2939 {
2941 rppTlsTcp = 0,
2942
2944 rppTlsWs = 1,
2945
2947 rppInvalid = -1
2948 } RpProtocol_t;
2949
2955
2967 std::string certificate;
2968
2980 std::string certificateKey;
2981
2986
2991
2995 std::vector<std::string> caCertificates;
2996
3001
3006
3009
3012
3018 std::string sni;
3019
3020
3023
3025 std::string path;
3026
3029
3030
3031 Rallypoint()
3032 {
3033 clear();
3034 }
3035
3036 void clear()
3037 {
3038 host.clear();
3039 certificate.clear();
3040 certificateKey.clear();
3041 caCertificates.clear();
3042 verifyPeer = false;
3043 transactionTimeoutMs = 0;
3044 disableMessageSigning = false;
3045 connectionTimeoutSecs = 0;
3046 tcpTxOptions.clear();
3047 sni.clear();
3048 protocol = rppTlsTcp;
3049 path.clear();
3050 additionalProtocols.clear();
3051 }
3052
3053 bool matches(const Rallypoint& other)
3054 {
3055 if(!host.matches(other.host))
3056 {
3057 return false;
3058 }
3059
3060 if(protocol != other.protocol)
3061 {
3062 return false;
3063 }
3064
3065 if(path.compare(other.path) != 0)
3066 {
3067 return false;
3068 }
3069
3070 if(certificate.compare(other.certificate) != 0)
3071 {
3072 return false;
3073 }
3074
3075 if(certificateKey.compare(other.certificateKey) != 0)
3076 {
3077 return false;
3078 }
3079
3080 if(verifyPeer != other.verifyPeer)
3081 {
3082 return false;
3083 }
3084
3085 if(allowSelfSignedCertificate != other.allowSelfSignedCertificate)
3086 {
3087 return false;
3088 }
3089
3090 if(caCertificates.size() != other.caCertificates.size())
3091 {
3092 return false;
3093 }
3094
3095 for(size_t x = 0; x < caCertificates.size(); x++)
3096 {
3097 bool found = false;
3098
3099 for(size_t y = 0; y < other.caCertificates.size(); y++)
3100 {
3101 if(caCertificates[x].compare(other.caCertificates[y]) == 0)
3102 {
3103 found = true;
3104 break;
3105 }
3106 }
3107
3108 if(!found)
3109 {
3110 return false;
3111 }
3112 }
3113
3114 if(transactionTimeoutMs != other.transactionTimeoutMs)
3115 {
3116 return false;
3117 }
3118
3119 if(disableMessageSigning != other.disableMessageSigning)
3120 {
3121 return false;
3122 }
3123 if(connectionTimeoutSecs != other.connectionTimeoutSecs)
3124 {
3125 return false;
3126 }
3127 if(tcpTxOptions.priority != other.tcpTxOptions.priority)
3128 {
3129 return false;
3130 }
3131 if(sni.compare(other.sni) != 0)
3132 {
3133 return false;
3134 }
3135
3136 return true;
3137 }
3138 };
3139
3140 static void to_json(nlohmann::json& j, const Rallypoint& p)
3141 {
3142 j = nlohmann::json{
3143 TOJSON_IMPL(host),
3144 TOJSON_IMPL(certificate),
3145 TOJSON_IMPL(certificateKey),
3146 TOJSON_IMPL(verifyPeer),
3147 TOJSON_IMPL(allowSelfSignedCertificate),
3148 TOJSON_IMPL(caCertificates),
3149 TOJSON_IMPL(transactionTimeoutMs),
3150 TOJSON_IMPL(disableMessageSigning),
3151 TOJSON_IMPL(connectionTimeoutSecs),
3152 TOJSON_IMPL(tcpTxOptions),
3153 TOJSON_IMPL(sni),
3154 TOJSON_IMPL(protocol),
3155 TOJSON_IMPL(path),
3156 TOJSON_IMPL(additionalProtocols)
3157 };
3158 }
3159
3160 static void from_json(const nlohmann::json& j, Rallypoint& p)
3161 {
3162 p.clear();
3163 j.at("host").get_to(p.host);
3164 getOptional("certificate", p.certificate, j);
3165 getOptional("certificateKey", p.certificateKey, j);
3166 getOptional<bool>("verifyPeer", p.verifyPeer, j, true);
3167 getOptional<bool>("allowSelfSignedCertificate", p.allowSelfSignedCertificate, j, false);
3168 getOptional<std::vector<std::string>>("caCertificates", p.caCertificates, j);
3169 getOptional<int>("transactionTimeoutMs", p.transactionTimeoutMs, j, 0);
3170 getOptional<bool>("disableMessageSigning", p.disableMessageSigning, j, false);
3171 getOptional<int>("connectionTimeoutSecs", p.connectionTimeoutSecs, j, 0);
3172 getOptional<TcpNetworkTxOptions>("tcpTxOptions", p.tcpTxOptions, j);
3173 getOptional<std::string>("sni", p.sni, j);
3174 getOptional<Rallypoint::RpProtocol_t>("protocol", p.protocol, j, Rallypoint::RpProtocol_t::rppTlsTcp);
3175 getOptional<std::string>("path", p.path, j);
3176 getOptional<std::string>("additionalProtocols", p.additionalProtocols, j);
3177 }
3178
3179 //-----------------------------------------------------------
3180 JSON_SERIALIZED_CLASS(RallypointCluster)
3192 {
3193 IMPLEMENT_JSON_SERIALIZATION()
3194 IMPLEMENT_JSON_DOCUMENTATION(RallypointCluster)
3195
3196 public:
3202 typedef enum
3203 {
3205 csRoundRobin = 0,
3206
3208 csFailback = 1
3209 } ConnectionStrategy_t;
3210
3213
3215 std::vector<Rallypoint> rallypoints;
3216
3219
3222
3225
3227 {
3228 clear();
3229 }
3230
3231 void clear()
3232 {
3233 connectionStrategy = csRoundRobin;
3234 rallypoints.clear();
3235 rolloverSecs = 10;
3236 connectionTimeoutSecs = 5;
3237 transactionTimeoutMs = 10000;
3238 }
3239 };
3240
3241 static void to_json(nlohmann::json& j, const RallypointCluster& p)
3242 {
3243 j = nlohmann::json{
3244 TOJSON_IMPL(connectionStrategy),
3245 TOJSON_IMPL(rallypoints),
3246 TOJSON_IMPL(rolloverSecs),
3247 TOJSON_IMPL(connectionTimeoutSecs),
3248 TOJSON_IMPL(transactionTimeoutMs)
3249 };
3250 }
3251 static void from_json(const nlohmann::json& j, RallypointCluster& p)
3252 {
3253 p.clear();
3254 getOptional<RallypointCluster::ConnectionStrategy_t>("connectionStrategy", p.connectionStrategy, RallypointCluster::ConnectionStrategy_t::csRoundRobin);
3255 getOptional<std::vector<Rallypoint>>("rallypoints", p.rallypoints, j);
3256 getOptional<int>("rolloverSecs", p.rolloverSecs, j, 10);
3257 getOptional<int>("connectionTimeoutSecs", p.connectionTimeoutSecs, j, 5);
3258 getOptional<int>("transactionTimeoutMs", p.transactionTimeoutMs, j, 10000);
3259 }
3260
3261
3262 //-----------------------------------------------------------
3263 JSON_SERIALIZED_CLASS(NetworkDeviceDescriptor)
3274 {
3275 IMPLEMENT_JSON_SERIALIZATION()
3276 IMPLEMENT_JSON_DOCUMENTATION(NetworkDeviceDescriptor)
3277
3278 public:
3284
3286 std::string name;
3287
3289 std::string manufacturer;
3290
3292 std::string model;
3293
3295 std::string hardwareId;
3296
3298 std::string serialNumber;
3299
3301 std::string type;
3302
3304 std::string extra;
3305
3307 {
3308 clear();
3309 }
3310
3311 void clear()
3312 {
3313 deviceId = 0;
3314
3315 name.clear();
3316 manufacturer.clear();
3317 model.clear();
3318 hardwareId.clear();
3319 serialNumber.clear();
3320 type.clear();
3321 extra.clear();
3322 }
3323
3324 virtual std::string toString()
3325 {
3326 char buff[2048];
3327
3328 snprintf(buff, sizeof(buff), "deviceId=%d, name=%s, manufacturer=%s, model=%s, hardwareId=%s, serialNumber=%s, type=%s, extra=%s",
3329 deviceId,
3330 name.c_str(),
3331 manufacturer.c_str(),
3332 model.c_str(),
3333 hardwareId.c_str(),
3334 serialNumber.c_str(),
3335 type.c_str(),
3336 extra.c_str());
3337
3338 return std::string(buff);
3339 }
3340 };
3341
3342 static void to_json(nlohmann::json& j, const NetworkDeviceDescriptor& p)
3343 {
3344 j = nlohmann::json{
3345 TOJSON_IMPL(deviceId),
3346 TOJSON_IMPL(name),
3347 TOJSON_IMPL(manufacturer),
3348 TOJSON_IMPL(model),
3349 TOJSON_IMPL(hardwareId),
3350 TOJSON_IMPL(serialNumber),
3351 TOJSON_IMPL(type),
3352 TOJSON_IMPL(extra)
3353 };
3354 }
3355 static void from_json(const nlohmann::json& j, NetworkDeviceDescriptor& p)
3356 {
3357 p.clear();
3358 getOptional<int>("deviceId", p.deviceId, j, 0);
3359 getOptional("name", p.name, j);
3360 getOptional("manufacturer", p.manufacturer, j);
3361 getOptional("model", p.model, j);
3362 getOptional("hardwareId", p.hardwareId, j);
3363 getOptional("serialNumber", p.serialNumber, j);
3364 getOptional("type", p.type, j);
3365 getOptional("extra", p.extra, j);
3366 }
3367
3368 //-----------------------------------------------------------
3369 JSON_SERIALIZED_CLASS(AudioGate)
3379 {
3380 IMPLEMENT_JSON_SERIALIZATION()
3381 IMPLEMENT_JSON_DOCUMENTATION(AudioGate)
3382
3383 public:
3386
3389
3391 uint32_t hangMs;
3392
3394 uint32_t windowMin;
3395
3397 uint32_t windowMax;
3398
3401
3402
3403 AudioGate()
3404 {
3405 clear();
3406 }
3407
3408 void clear()
3409 {
3410 enabled = false;
3411 useVad = false;
3412 hangMs = 1500;
3413 windowMin = 25;
3414 windowMax = 125;
3415 coefficient = 1.75;
3416 }
3417 };
3418
3419 static void to_json(nlohmann::json& j, const AudioGate& p)
3420 {
3421 j = nlohmann::json{
3422 TOJSON_IMPL(enabled),
3423 TOJSON_IMPL(useVad),
3424 TOJSON_IMPL(hangMs),
3425 TOJSON_IMPL(windowMin),
3426 TOJSON_IMPL(windowMax),
3427 TOJSON_IMPL(coefficient)
3428 };
3429 }
3430 static void from_json(const nlohmann::json& j, AudioGate& p)
3431 {
3432 p.clear();
3433 getOptional<bool>("enabled", p.enabled, j, false);
3434 getOptional<bool>("useVad", p.useVad, j, false);
3435 getOptional<uint32_t>("hangMs", p.hangMs, j, 1500);
3436 getOptional<uint32_t>("windowMin", p.windowMin, j, 25);
3437 getOptional<uint32_t>("windowMax", p.windowMax, j, 125);
3438 getOptional<double>("coefficient", p.coefficient, j, 1.75);
3439 }
3440
3441 //-----------------------------------------------------------
3442 JSON_SERIALIZED_CLASS(TxAudio)
3456 {
3457 IMPLEMENT_JSON_SERIALIZATION()
3458 IMPLEMENT_JSON_DOCUMENTATION(TxAudio)
3459
3460 public:
3466 typedef enum
3467 {
3469 ctExternal = -1,
3470
3472 ctUnknown = 0,
3473
3474 /* G.711 */
3476 ctG711ulaw = 1,
3477
3479 ctG711alaw = 2,
3480
3481
3482 /* GSM */
3484 ctGsm610 = 3,
3485
3486
3487 /* G.729 */
3489 ctG729a = 4,
3490
3491
3492 /* PCM */
3494 ctPcm = 5,
3495
3496 // AMR Narrowband */
3498 ctAmrNb4750 = 10,
3499
3501 ctAmrNb5150 = 11,
3502
3504 ctAmrNb5900 = 12,
3505
3507 ctAmrNb6700 = 13,
3508
3510 ctAmrNb7400 = 14,
3511
3513 ctAmrNb7950 = 15,
3514
3516 ctAmrNb10200 = 16,
3517
3519 ctAmrNb12200 = 17,
3520
3521
3522 /* Opus */
3524 ctOpus6000 = 20,
3525
3527 ctOpus8000 = 21,
3528
3530 ctOpus10000 = 22,
3531
3533 ctOpus12000 = 23,
3534
3536 ctOpus14000 = 24,
3537
3539 ctOpus16000 = 25,
3540
3542 ctOpus18000 = 26,
3543
3545 ctOpus20000 = 27,
3546
3548 ctOpus22000 = 28,
3549
3551 ctOpus24000 = 29,
3552
3553
3554 /* Speex */
3556 ctSpxNb2150 = 30,
3557
3559 ctSpxNb3950 = 31,
3560
3562 ctSpxNb5950 = 32,
3563
3565 ctSpxNb8000 = 33,
3566
3568 ctSpxNb11000 = 34,
3569
3571 ctSpxNb15000 = 35,
3572
3574 ctSpxNb18200 = 36,
3575
3577 ctSpxNb24600 = 37,
3578
3579
3580 /* Codec2 */
3582 ctC2450 = 40,
3583
3585 ctC2700 = 41,
3586
3588 ctC21200 = 42,
3589
3591 ctC21300 = 43,
3592
3594 ctC21400 = 44,
3595
3597 ctC21600 = 45,
3598
3600 ctC22400 = 46,
3601
3603 ctC23200 = 47,
3604
3605
3606 /* MELPe */
3608 ctMelpe600 = 50,
3609
3611 ctMelpe1200 = 51,
3612
3614 ctMelpe2400 = 52,
3615
3616 /* CVSD */
3618 ctCvsd = 60
3619 } TxCodec_t;
3620
3626 typedef enum
3627 {
3629 hetEngageStandard = 0,
3630
3632 hetNatoStanga5643 = 1
3633 } HeaderExtensionType_t;
3634
3637
3640
3642 std::string encoderName;
3643
3646
3649
3651 bool fdx;
3652
3660
3663
3670
3677
3680
3683
3686
3691
3693 uint32_t internalKey;
3694
3697
3700
3702 bool dtx;
3703
3706
3707 TxAudio()
3708 {
3709 clear();
3710 }
3711
3712 void clear()
3713 {
3714 enabled = true;
3715 encoder = TxAudio::TxCodec_t::ctUnknown;
3716 encoderName.clear();
3717 framingMs = 60;
3718 blockCount = 0;
3719 fdx = false;
3720 noHdrExt = false;
3721 maxTxSecs = 0;
3722 extensionSendInterval = 10;
3723 initialHeaderBurst = 5;
3724 trailingHeaderBurst = 5;
3725 startTxNotifications = 5;
3726 customRtpPayloadType = -1;
3727 internalKey = 0;
3728 resetRtpOnTx = true;
3729 enableSmoothing = true;
3730 dtx = false;
3731 smoothedHangTimeMs = 0;
3732 hdrExtType = HeaderExtensionType_t::hetEngageStandard;
3733 }
3734 };
3735
3736 static void to_json(nlohmann::json& j, const TxAudio& p)
3737 {
3738 j = nlohmann::json{
3739 TOJSON_IMPL(enabled),
3740 TOJSON_IMPL(encoder),
3741 TOJSON_IMPL(encoderName),
3742 TOJSON_IMPL(framingMs),
3743 TOJSON_IMPL(blockCount),
3744 TOJSON_IMPL(fdx),
3745 TOJSON_IMPL(noHdrExt),
3746 TOJSON_IMPL(maxTxSecs),
3747 TOJSON_IMPL(extensionSendInterval),
3748 TOJSON_IMPL(initialHeaderBurst),
3749 TOJSON_IMPL(trailingHeaderBurst),
3750 TOJSON_IMPL(startTxNotifications),
3751 TOJSON_IMPL(customRtpPayloadType),
3752 TOJSON_IMPL(resetRtpOnTx),
3753 TOJSON_IMPL(enableSmoothing),
3754 TOJSON_IMPL(dtx),
3755 TOJSON_IMPL(smoothedHangTimeMs),
3756 TOJSON_IMPL(hdrExtType)
3757 };
3758
3759 // internalKey is not serialized
3760 }
3761 static void from_json(const nlohmann::json& j, TxAudio& p)
3762 {
3763 p.clear();
3764 getOptional<bool>("enabled", p.enabled, j, true);
3765 getOptional<TxAudio::TxCodec_t>("encoder", p.encoder, j, TxAudio::TxCodec_t::ctOpus8000);
3766 getOptional<std::string>("encoderName", p.encoderName, j, EMPTY_STRING);
3767 getOptional("framingMs", p.framingMs, j, 60);
3768 getOptional("blockCount", p.blockCount, j, 0);
3769 getOptional("fdx", p.fdx, j, false);
3770 getOptional("noHdrExt", p.noHdrExt, j, false);
3771 getOptional("maxTxSecs", p.maxTxSecs, j, 0);
3772 getOptional("extensionSendInterval", p.extensionSendInterval, j, 10);
3773 getOptional("initialHeaderBurst", p.initialHeaderBurst, j, 5);
3774 getOptional("trailingHeaderBurst", p.trailingHeaderBurst, j, 5);
3775 getOptional("startTxNotifications", p.startTxNotifications, j, 5);
3776 getOptional("customRtpPayloadType", p.customRtpPayloadType, j, -1);
3777 getOptional("resetRtpOnTx", p.resetRtpOnTx, j, true);
3778 getOptional("enableSmoothing", p.enableSmoothing, j, true);
3779 getOptional("dtx", p.dtx, j, false);
3780 getOptional("smoothedHangTimeMs", p.smoothedHangTimeMs, j, 0);
3781 getOptional("hdrExtType", p.hdrExtType, j, TxAudio::HeaderExtensionType_t::hetEngageStandard);
3782
3783 // internalKey is not serialized
3784 }
3785
3786 //-----------------------------------------------------------
3787 JSON_SERIALIZED_CLASS(AudioRegistryDevice)
3798 {
3799 IMPLEMENT_JSON_SERIALIZATION()
3800 IMPLEMENT_JSON_DOCUMENTATION(AudioRegistryDevice)
3801
3802 public:
3804 std::string hardwareId;
3805
3808
3810 std::string name;
3811
3813 std::string manufacturer;
3814
3816 std::string model;
3817
3819 std::string serialNumber;
3820
3821
3823 std::string type;
3824
3826 std::string extra;
3827
3829 {
3830 clear();
3831 }
3832
3833 void clear()
3834 {
3835 hardwareId.clear();
3836 isDefault = false;
3837 name.clear();
3838 manufacturer.clear();
3839 model.clear();
3840 serialNumber.clear();
3841 type.clear();
3842 extra.clear();
3843 }
3844
3845 virtual std::string toString()
3846 {
3847 char buff[2048];
3848
3849 snprintf(buff, sizeof(buff), "hardwareId=%s, isDefault=%d, name=%s, manufacturer=%s, model=%s, serialNumber=%s, type=%s, extra=%s",
3850 hardwareId.c_str(),
3851 (int)isDefault,
3852 name.c_str(),
3853 manufacturer.c_str(),
3854 model.c_str(),
3855 serialNumber.c_str(),
3856 type.c_str(),
3857 extra.c_str());
3858
3859 return std::string(buff);
3860 }
3861 };
3862
3863 static void to_json(nlohmann::json& j, const AudioRegistryDevice& p)
3864 {
3865 j = nlohmann::json{
3866 TOJSON_IMPL(hardwareId),
3867 TOJSON_IMPL(isDefault),
3868 TOJSON_IMPL(name),
3869 TOJSON_IMPL(manufacturer),
3870 TOJSON_IMPL(model),
3871 TOJSON_IMPL(serialNumber),
3872 TOJSON_IMPL(type),
3873 TOJSON_IMPL(extra)
3874 };
3875 }
3876 static void from_json(const nlohmann::json& j, AudioRegistryDevice& p)
3877 {
3878 p.clear();
3879 getOptional<std::string>("hardwareId", p.hardwareId, j, EMPTY_STRING);
3880 getOptional<bool>("isDefault", p.isDefault, j, false);
3881 getOptional("name", p.name, j);
3882 getOptional("manufacturer", p.manufacturer, j);
3883 getOptional("model", p.model, j);
3884 getOptional("serialNumber", p.serialNumber, j);
3885 getOptional("type", p.type, j);
3886 getOptional("extra", p.extra, j);
3887 }
3888
3889
3890 //-----------------------------------------------------------
3891 JSON_SERIALIZED_CLASS(AudioRegistry)
3902 {
3903 IMPLEMENT_JSON_SERIALIZATION()
3904 IMPLEMENT_JSON_DOCUMENTATION(AudioRegistry)
3905
3906 public:
3908 std::vector<AudioRegistryDevice> inputs;
3909
3911 std::vector<AudioRegistryDevice> outputs;
3912
3914 {
3915 clear();
3916 }
3917
3918 void clear()
3919 {
3920 inputs.clear();
3921 outputs.clear();
3922 }
3923
3924 virtual std::string toString()
3925 {
3926 return std::string("");
3927 }
3928 };
3929
3930 static void to_json(nlohmann::json& j, const AudioRegistry& p)
3931 {
3932 j = nlohmann::json{
3933 TOJSON_IMPL(inputs),
3934 TOJSON_IMPL(outputs)
3935 };
3936 }
3937 static void from_json(const nlohmann::json& j, AudioRegistry& p)
3938 {
3939 p.clear();
3940 getOptional<std::vector<AudioRegistryDevice>>("inputs", p.inputs, j);
3941 getOptional<std::vector<AudioRegistryDevice>>("outputs", p.outputs, j);
3942 }
3943
3944 //-----------------------------------------------------------
3945 JSON_SERIALIZED_CLASS(AudioDeviceDescriptor)
3956 {
3957 IMPLEMENT_JSON_SERIALIZATION()
3958 IMPLEMENT_JSON_DOCUMENTATION(AudioDeviceDescriptor)
3959
3960 public:
3961
3963 typedef enum
3964 {
3966 dirUnknown = 0,
3967
3970
3973
3975 dirBoth
3976 } Direction_t;
3977
3983
3991
3999
4002
4010
4013
4015 std::string name;
4016
4018 std::string manufacturer;
4019
4021 std::string model;
4022
4024 std::string hardwareId;
4025
4027 std::string serialNumber;
4028
4031
4033 std::string type;
4034
4036 std::string extra;
4037
4040
4042 {
4043 clear();
4044 }
4045
4046 void clear()
4047 {
4048 deviceId = 0;
4049 samplingRate = 0;
4050 channels = 0;
4051 direction = dirUnknown;
4052 boostPercentage = 0;
4053 isAdad = false;
4054 isDefault = false;
4055
4056 name.clear();
4057 manufacturer.clear();
4058 model.clear();
4059 hardwareId.clear();
4060 serialNumber.clear();
4061 type.clear();
4062 extra.clear();
4063 isPresent = false;
4064 }
4065
4066 virtual std::string toString()
4067 {
4068 char buff[2048];
4069
4070 snprintf(buff, sizeof(buff), "deviceId=%d, samplingRate=%d, channels=%d, direction=%d, boostPercentage=%d, isAdad=%d, name=%s, manufacturer=%s, model=%s, hardwareId=%s, serialNumber=%s, isDefault=%d, type=%s, present=%d, extra=%s",
4071 deviceId,
4072 samplingRate,
4073 channels,
4074 (int)direction,
4075 boostPercentage,
4076 (int)isAdad,
4077 name.c_str(),
4078 manufacturer.c_str(),
4079 model.c_str(),
4080 hardwareId.c_str(),
4081 serialNumber.c_str(),
4082 (int)isDefault,
4083 type.c_str(),
4084 (int)isPresent,
4085 extra.c_str());
4086
4087 return std::string(buff);
4088 }
4089 };
4090
4091 static void to_json(nlohmann::json& j, const AudioDeviceDescriptor& p)
4092 {
4093 j = nlohmann::json{
4094 TOJSON_IMPL(deviceId),
4095 TOJSON_IMPL(samplingRate),
4096 TOJSON_IMPL(channels),
4097 TOJSON_IMPL(direction),
4098 TOJSON_IMPL(boostPercentage),
4099 TOJSON_IMPL(isAdad),
4100 TOJSON_IMPL(name),
4101 TOJSON_IMPL(manufacturer),
4102 TOJSON_IMPL(model),
4103 TOJSON_IMPL(hardwareId),
4104 TOJSON_IMPL(serialNumber),
4105 TOJSON_IMPL(isDefault),
4106 TOJSON_IMPL(type),
4107 TOJSON_IMPL(extra),
4108 TOJSON_IMPL(isPresent)
4109 };
4110 }
4111 static void from_json(const nlohmann::json& j, AudioDeviceDescriptor& p)
4112 {
4113 p.clear();
4114 getOptional<int>("deviceId", p.deviceId, j, 0);
4115 getOptional<int>("samplingRate", p.samplingRate, j, 0);
4116 getOptional<int>("channels", p.channels, j, 0);
4117 getOptional<AudioDeviceDescriptor::Direction_t>("direction", p.direction, j,
4118 AudioDeviceDescriptor::Direction_t::dirUnknown);
4119 getOptional<int>("boostPercentage", p.boostPercentage, j, 0);
4120
4121 getOptional<bool>("isAdad", p.isAdad, j, false);
4122 getOptional("name", p.name, j);
4123 getOptional("manufacturer", p.manufacturer, j);
4124 getOptional("model", p.model, j);
4125 getOptional("hardwareId", p.hardwareId, j);
4126 getOptional("serialNumber", p.serialNumber, j);
4127 getOptional("isDefault", p.isDefault, j);
4128 getOptional("type", p.type, j);
4129 getOptional("extra", p.extra, j);
4130 getOptional<bool>("isPresent", p.isPresent, j, false);
4131 }
4132
4133 //-----------------------------------------------------------
4134 JSON_SERIALIZED_CLASS(ListOfAudioDeviceDescriptor)
4136 {
4137 IMPLEMENT_JSON_SERIALIZATION()
4138 IMPLEMENT_JSON_DOCUMENTATION(ListOfAudioDeviceDescriptor)
4139
4140 public:
4141 std::vector<AudioDeviceDescriptor> list;
4142
4144 {
4145 clear();
4146 }
4147
4148 void clear()
4149 {
4150 list.clear();
4151 }
4152 };
4153
4154 static void to_json(nlohmann::json& j, const ListOfAudioDeviceDescriptor& p)
4155 {
4156 j = nlohmann::json{
4157 TOJSON_IMPL(list)
4158 };
4159 }
4160 static void from_json(const nlohmann::json& j, ListOfAudioDeviceDescriptor& p)
4161 {
4162 p.clear();
4163 getOptional<std::vector<AudioDeviceDescriptor>>("list", p.list, j);
4164 }
4165
4166 //-----------------------------------------------------------
4167 JSON_SERIALIZED_CLASS(Audio)
4176 {
4177 IMPLEMENT_JSON_SERIALIZATION()
4178 IMPLEMENT_JSON_DOCUMENTATION(Audio)
4179
4180 public:
4183
4186
4188 std::string inputHardwareId;
4189
4192
4195
4197 std::string outputHardwareId;
4198
4201
4204
4207
4210
4211 Audio()
4212 {
4213 clear();
4214 }
4215
4216 void clear()
4217 {
4218 enabled = true;
4219 inputId = 0;
4220 inputHardwareId.clear();
4221 inputGain = 0;
4222 outputId = 0;
4223 outputHardwareId.clear();
4224 outputGain = 0;
4225 outputLevelLeft = 100;
4226 outputLevelRight = 100;
4227 outputMuted = false;
4228 }
4229 };
4230
4231 static void to_json(nlohmann::json& j, const Audio& p)
4232 {
4233 j = nlohmann::json{
4234 TOJSON_IMPL(enabled),
4235 TOJSON_IMPL(inputId),
4236 TOJSON_IMPL(inputHardwareId),
4237 TOJSON_IMPL(inputGain),
4238 TOJSON_IMPL(outputId),
4239 TOJSON_IMPL(outputHardwareId),
4240 TOJSON_IMPL(outputLevelLeft),
4241 TOJSON_IMPL(outputLevelRight),
4242 TOJSON_IMPL(outputMuted)
4243 };
4244 }
4245 static void from_json(const nlohmann::json& j, Audio& p)
4246 {
4247 p.clear();
4248 getOptional<bool>("enabled", p.enabled, j, true);
4249 getOptional<int>("inputId", p.inputId, j, 0);
4250 getOptional<std::string>("inputHardwareId", p.inputHardwareId, j, EMPTY_STRING);
4251 getOptional<int>("inputGain", p.inputGain, j, 0);
4252 getOptional<int>("outputId", p.outputId, j, 0);
4253 getOptional<std::string>("outputHardwareId", p.outputHardwareId, j, EMPTY_STRING);
4254 getOptional<int>("outputGain", p.outputGain, j, 0);
4255 getOptional<int>("outputLevelLeft", p.outputLevelLeft, j, 100);
4256 getOptional<int>("outputLevelRight", p.outputLevelRight, j, 100);
4257 getOptional<bool>("outputMuted", p.outputMuted, j, false);
4258 }
4259
4260 //-----------------------------------------------------------
4261 JSON_SERIALIZED_CLASS(TalkerInformation)
4272 {
4273 IMPLEMENT_JSON_SERIALIZATION()
4274 IMPLEMENT_JSON_DOCUMENTATION(TalkerInformation)
4275
4276 public:
4280 typedef enum
4281 {
4283 matNone = 0,
4284
4286 matAnonymous = 1,
4287
4289 matSsrcGenerated = 2
4290 } ManufacturedAliasType_t;
4291
4293 std::string alias;
4294
4296 std::string nodeId;
4297
4299 uint16_t rxFlags;
4300
4303
4305 uint32_t txId;
4306
4309
4312
4315
4317 uint32_t ssrc;
4318
4321
4323 {
4324 clear();
4325 }
4326
4327 void clear()
4328 {
4329 alias.clear();
4330 nodeId.clear();
4331 rxFlags = 0;
4332 txPriority = 0;
4333 txId = 0;
4334 duplicateCount = 0;
4335 aliasSpecializer = 0;
4336 rxMuted = false;
4337 manufacturedAliasType = ManufacturedAliasType_t::matNone;
4338 ssrc = 0;
4339 }
4340 };
4341
4342 static void to_json(nlohmann::json& j, const TalkerInformation& p)
4343 {
4344 j = nlohmann::json{
4345 TOJSON_IMPL(alias),
4346 TOJSON_IMPL(nodeId),
4347 TOJSON_IMPL(rxFlags),
4348 TOJSON_IMPL(txPriority),
4349 TOJSON_IMPL(txId),
4350 TOJSON_IMPL(duplicateCount),
4351 TOJSON_IMPL(aliasSpecializer),
4352 TOJSON_IMPL(rxMuted),
4353 TOJSON_IMPL(manufacturedAliasType),
4354 TOJSON_IMPL(ssrc)
4355 };
4356 }
4357 static void from_json(const nlohmann::json& j, TalkerInformation& p)
4358 {
4359 p.clear();
4360 getOptional<std::string>("alias", p.alias, j, EMPTY_STRING);
4361 getOptional<std::string>("nodeId", p.nodeId, j, EMPTY_STRING);
4362 getOptional<uint16_t>("rxFlags", p.rxFlags, j, 0);
4363 getOptional<int>("txPriority", p.txPriority, j, 0);
4364 getOptional<uint32_t>("txId", p.txId, j, 0);
4365 getOptional<int>("duplicateCount", p.duplicateCount, j, 0);
4366 getOptional<uint16_t>("aliasSpecializer", p.aliasSpecializer, j, 0);
4367 getOptional<bool>("rxMuted", p.rxMuted, j, false);
4368 getOptional<TalkerInformation::ManufacturedAliasType_t>("manufacturedAliasType", p.manufacturedAliasType, j, TalkerInformation::ManufacturedAliasType_t::matNone);
4369 getOptional<uint32_t>("ssrc", p.ssrc, j, 0);
4370 }
4371
4372 //-----------------------------------------------------------
4373 JSON_SERIALIZED_CLASS(GroupTalkers)
4386 {
4387 IMPLEMENT_JSON_SERIALIZATION()
4388 IMPLEMENT_JSON_DOCUMENTATION(GroupTalkers)
4389
4390 public:
4392 std::vector<TalkerInformation> list;
4393
4394 GroupTalkers()
4395 {
4396 clear();
4397 }
4398
4399 void clear()
4400 {
4401 list.clear();
4402 }
4403 };
4404
4405 static void to_json(nlohmann::json& j, const GroupTalkers& p)
4406 {
4407 j = nlohmann::json{
4408 TOJSON_IMPL(list)
4409 };
4410 }
4411 static void from_json(const nlohmann::json& j, GroupTalkers& p)
4412 {
4413 p.clear();
4414 getOptional<std::vector<TalkerInformation>>("list", p.list, j);
4415 }
4416
4417 //-----------------------------------------------------------
4418 JSON_SERIALIZED_CLASS(Presence)
4429 {
4430 IMPLEMENT_JSON_SERIALIZATION()
4431 IMPLEMENT_JSON_DOCUMENTATION(Presence)
4432
4433 public:
4437 typedef enum
4438 {
4440 pfUnknown = 0,
4441
4443 pfEngage = 1,
4444
4451 pfCot = 2
4452 } Format_t;
4453
4456
4459
4462
4465
4468
4469 Presence()
4470 {
4471 clear();
4472 }
4473
4474 void clear()
4475 {
4476 format = pfUnknown;
4477 intervalSecs = 30;
4478 listenOnly = false;
4479 minIntervalSecs = 5;
4480 reduceImmediacy = false;
4481 }
4482 };
4483
4484 static void to_json(nlohmann::json& j, const Presence& p)
4485 {
4486 j = nlohmann::json{
4487 TOJSON_IMPL(format),
4488 TOJSON_IMPL(intervalSecs),
4489 TOJSON_IMPL(listenOnly),
4490 TOJSON_IMPL(minIntervalSecs),
4491 TOJSON_IMPL(reduceImmediacy)
4492 };
4493 }
4494 static void from_json(const nlohmann::json& j, Presence& p)
4495 {
4496 p.clear();
4497 getOptional<Presence::Format_t>("format", p.format, j, Presence::Format_t::pfEngage);
4498 getOptional<int>("intervalSecs", p.intervalSecs, j, 30);
4499 getOptional<bool>("listenOnly", p.listenOnly, j, false);
4500 getOptional<int>("minIntervalSecs", p.minIntervalSecs, j, 5);
4501 getOptional<bool>("reduceImmediacy", p.reduceImmediacy, j, false);
4502 }
4503
4504
4505 //-----------------------------------------------------------
4506 JSON_SERIALIZED_CLASS(Advertising)
4517 {
4518 IMPLEMENT_JSON_SERIALIZATION()
4519 IMPLEMENT_JSON_DOCUMENTATION(Advertising)
4520
4521 public:
4524
4527
4530
4531 Advertising()
4532 {
4533 clear();
4534 }
4535
4536 void clear()
4537 {
4538 enabled = false;
4539 intervalMs = 20000;
4540 alwaysAdvertise = false;
4541 }
4542 };
4543
4544 static void to_json(nlohmann::json& j, const Advertising& p)
4545 {
4546 j = nlohmann::json{
4547 TOJSON_IMPL(enabled),
4548 TOJSON_IMPL(intervalMs),
4549 TOJSON_IMPL(alwaysAdvertise)
4550 };
4551 }
4552 static void from_json(const nlohmann::json& j, Advertising& p)
4553 {
4554 p.clear();
4555 getOptional("enabled", p.enabled, j, false);
4556 getOptional<int>("intervalMs", p.intervalMs, j, 20000);
4557 getOptional<bool>("alwaysAdvertise", p.alwaysAdvertise, j, false);
4558 }
4559
4560 //-----------------------------------------------------------
4561 JSON_SERIALIZED_CLASS(GroupPriorityTranslation)
4572 {
4573 IMPLEMENT_JSON_SERIALIZATION()
4574 IMPLEMENT_JSON_DOCUMENTATION(GroupPriorityTranslation)
4575
4576 public:
4579
4582
4585
4587 {
4588 clear();
4589 }
4590
4591 void clear()
4592 {
4593 rx.clear();
4594 tx.clear();
4595 priority = 0;
4596 }
4597 };
4598
4599 static void to_json(nlohmann::json& j, const GroupPriorityTranslation& p)
4600 {
4601 j = nlohmann::json{
4602 TOJSON_IMPL(rx),
4603 TOJSON_IMPL(tx),
4604 TOJSON_IMPL(priority)
4605 };
4606 }
4607 static void from_json(const nlohmann::json& j, GroupPriorityTranslation& p)
4608 {
4609 p.clear();
4610 j.at("rx").get_to(p.rx);
4611 j.at("tx").get_to(p.tx);
4612 FROMJSON_IMPL(priority, int, 0);
4613 }
4614
4615 //-----------------------------------------------------------
4616 JSON_SERIALIZED_CLASS(GroupTimeline)
4629 {
4630 IMPLEMENT_JSON_SERIALIZATION()
4631 IMPLEMENT_JSON_DOCUMENTATION(GroupTimeline)
4632
4633 public:
4636
4639 bool recordAudio;
4640
4642 {
4643 clear();
4644 }
4645
4646 void clear()
4647 {
4648 enabled = true;
4649 maxAudioTimeMs = 30000;
4650 recordAudio = true;
4651 }
4652 };
4653
4654 static void to_json(nlohmann::json& j, const GroupTimeline& p)
4655 {
4656 j = nlohmann::json{
4657 TOJSON_IMPL(enabled),
4658 TOJSON_IMPL(maxAudioTimeMs),
4659 TOJSON_IMPL(recordAudio)
4660 };
4661 }
4662 static void from_json(const nlohmann::json& j, GroupTimeline& p)
4663 {
4664 p.clear();
4665 getOptional("enabled", p.enabled, j, true);
4666 getOptional<int>("maxAudioTimeMs", p.maxAudioTimeMs, j, 30000);
4667 getOptional("recordAudio", p.recordAudio, j, true);
4668 }
4669
4677 ENGAGE_IGNORE_COMPILER_UNUSED_WARNING static const char *GROUP_SOURCE_ENGAGE_INTERNAL = "com.rallytac.engage.internal";
4679 ENGAGE_IGNORE_COMPILER_UNUSED_WARNING static const char *GROUP_SOURCE_ENGAGE_MAGELLAN_CORE = "com.rallytac.magellan.core";
4681 ENGAGE_IGNORE_COMPILER_UNUSED_WARNING static const char *GROUP_SOURCE_ENGAGE_MAGELLAN_CISTECH = "com.rallytac.engage.magellan.cistech";
4683 ENGAGE_IGNORE_COMPILER_UNUSED_WARNING static const char *GROUP_SOURCE_ENGAGE_MAGELLAN_TRELLISWARE = "com.rallytac.engage.magellan.trellisware";
4685 ENGAGE_IGNORE_COMPILER_UNUSED_WARNING static const char *GROUP_SOURCE_ENGAGE_MAGELLAN_SILVUS = "com.rallytac.engage.magellan.silvus";
4687 ENGAGE_IGNORE_COMPILER_UNUSED_WARNING static const char *GROUP_SOURCE_ENGAGE_MAGELLAN_PERSISTENT = "com.rallytac.engage.magellan.persistent";
4689 ENGAGE_IGNORE_COMPILER_UNUSED_WARNING static const char *GROUP_SOURCE_ENGAGE_MAGELLAN_DOMO = "com.rallytac.engage.magellan.domo";
4691 ENGAGE_IGNORE_COMPILER_UNUSED_WARNING static const char *GROUP_SOURCE_ENGAGE_MAGELLAN_KENWOOD = "com.rallytac.engage.magellan.kenwood";
4693 ENGAGE_IGNORE_COMPILER_UNUSED_WARNING static const char *GROUP_SOURCE_ENGAGE_MAGELLAN_TAIT = "com.rallytac.engage.magellan.tait";
4695 ENGAGE_IGNORE_COMPILER_UNUSED_WARNING static const char *GROUP_SOURCE_ENGAGE_MAGELLAN_VOCALITY = "com.rallytac.engage.magellan.vocality";
4716
4741
4757 //-----------------------------------------------------------
4758 JSON_SERIALIZED_CLASS(GroupAppTransport)
4769 {
4770 IMPLEMENT_JSON_SERIALIZATION()
4771 IMPLEMENT_JSON_DOCUMENTATION(GroupAppTransport)
4772
4773 public:
4776
4778 std::string id;
4779
4781 {
4782 clear();
4783 }
4784
4785 void clear()
4786 {
4787 enabled = false;
4788 id.clear();
4789 }
4790 };
4791
4792 static void to_json(nlohmann::json& j, const GroupAppTransport& p)
4793 {
4794 j = nlohmann::json{
4795 TOJSON_IMPL(enabled),
4796 TOJSON_IMPL(id)
4797 };
4798 }
4799 static void from_json(const nlohmann::json& j, GroupAppTransport& p)
4800 {
4801 p.clear();
4802 getOptional<bool>("enabled", p.enabled, j, false);
4803 getOptional<std::string>("id", p.id, j);
4804 }
4805
4806 //-----------------------------------------------------------
4807 JSON_SERIALIZED_CLASS(RtpProfile)
4818 {
4819 IMPLEMENT_JSON_SERIALIZATION()
4820 IMPLEMENT_JSON_DOCUMENTATION(RtpProfile)
4821
4822 public:
4828 typedef enum
4829 {
4831 jmStandard = 0,
4832
4834 jmLowLatency = 1,
4835
4837 jmReleaseOnTxEnd = 2
4838 } JitterMode_t;
4839
4842
4845
4848
4851
4854
4857
4860
4863
4866
4869
4872
4875
4878
4881
4884
4887
4891
4892 RtpProfile()
4893 {
4894 clear();
4895 }
4896
4897 void clear()
4898 {
4899 mode = jmStandard;
4900 jitterMaxMs = 10000;
4901 jitterMinMs = 100;
4902 jitterMaxFactor = 8;
4903 jitterTrimPercentage = 10;
4904 jitterUnderrunReductionThresholdMs = 1500;
4905 jitterUnderrunReductionAger = 100;
4906 latePacketSequenceRange = 5;
4907 latePacketTimestampRangeMs = 2000;
4908 inboundProcessorInactivityMs = 500;
4909 jitterForceTrimAtMs = 0;
4910 rtcpPresenceTimeoutMs = 45000;
4911 jitterMaxExceededClipPerc = 10;
4912 jitterMaxExceededClipHangMs = 1500;
4913 zombieLifetimeMs = 15000;
4914 jitterMaxTrimMs = 250;
4915 signalledInboundProcessorInactivityMs = (inboundProcessorInactivityMs * 4);
4916 }
4917 };
4918
4919 static void to_json(nlohmann::json& j, const RtpProfile& p)
4920 {
4921 j = nlohmann::json{
4922 TOJSON_IMPL(mode),
4923 TOJSON_IMPL(jitterMaxMs),
4924 TOJSON_IMPL(inboundProcessorInactivityMs),
4925 TOJSON_IMPL(jitterMinMs),
4926 TOJSON_IMPL(jitterMaxFactor),
4927 TOJSON_IMPL(jitterTrimPercentage),
4928 TOJSON_IMPL(jitterUnderrunReductionThresholdMs),
4929 TOJSON_IMPL(jitterUnderrunReductionAger),
4930 TOJSON_IMPL(latePacketSequenceRange),
4931 TOJSON_IMPL(latePacketTimestampRangeMs),
4932 TOJSON_IMPL(inboundProcessorInactivityMs),
4933 TOJSON_IMPL(jitterForceTrimAtMs),
4934 TOJSON_IMPL(jitterMaxExceededClipPerc),
4935 TOJSON_IMPL(jitterMaxExceededClipHangMs),
4936 TOJSON_IMPL(zombieLifetimeMs),
4937 TOJSON_IMPL(jitterMaxTrimMs),
4938 TOJSON_IMPL(signalledInboundProcessorInactivityMs)
4939 };
4940 }
4941 static void from_json(const nlohmann::json& j, RtpProfile& p)
4942 {
4943 p.clear();
4944 FROMJSON_IMPL(mode, RtpProfile::JitterMode_t, RtpProfile::JitterMode_t::jmStandard);
4945 FROMJSON_IMPL(jitterMaxMs, int, 10000);
4946 FROMJSON_IMPL(jitterMinMs, int, 20);
4947 FROMJSON_IMPL(jitterMaxFactor, int, 8);
4948 FROMJSON_IMPL(jitterTrimPercentage, int, 10);
4949 FROMJSON_IMPL(jitterUnderrunReductionThresholdMs, int, 1500);
4950 FROMJSON_IMPL(jitterUnderrunReductionAger, int, 100);
4951 FROMJSON_IMPL(latePacketSequenceRange, int, 5);
4952 FROMJSON_IMPL(latePacketTimestampRangeMs, int, 2000);
4953 FROMJSON_IMPL(inboundProcessorInactivityMs, int, 500);
4954 FROMJSON_IMPL(jitterForceTrimAtMs, int, 0);
4955 FROMJSON_IMPL(rtcpPresenceTimeoutMs, int, 45000);
4956 FROMJSON_IMPL(jitterMaxExceededClipPerc, int, 10);
4957 FROMJSON_IMPL(jitterMaxExceededClipHangMs, int, 1500);
4958 FROMJSON_IMPL(zombieLifetimeMs, int, 15000);
4959 FROMJSON_IMPL(jitterMaxTrimMs, int, 250);
4960 FROMJSON_IMPL(signalledInboundProcessorInactivityMs, int, (p.inboundProcessorInactivityMs * 4));
4961 }
4962
4963 //-----------------------------------------------------------
4964 JSON_SERIALIZED_CLASS(Tls)
4975 {
4976 IMPLEMENT_JSON_SERIALIZATION()
4977 IMPLEMENT_JSON_DOCUMENTATION(Tls)
4978
4979 public:
4980
4983
4986
4988 std::vector<std::string> caCertificates;
4989
4992
4995
4997 std::vector<std::string> crlSerials;
4998
4999 Tls()
5000 {
5001 clear();
5002 }
5003
5004 void clear()
5005 {
5006 verifyPeers = true;
5007 allowSelfSignedCertificates = false;
5008 caCertificates.clear();
5009 subjectRestrictions.clear();
5010 issuerRestrictions.clear();
5011 crlSerials.clear();
5012 }
5013 };
5014
5015 static void to_json(nlohmann::json& j, const Tls& p)
5016 {
5017 j = nlohmann::json{
5018 TOJSON_IMPL(verifyPeers),
5019 TOJSON_IMPL(allowSelfSignedCertificates),
5020 TOJSON_IMPL(caCertificates),
5021 TOJSON_IMPL(subjectRestrictions),
5022 TOJSON_IMPL(issuerRestrictions),
5023 TOJSON_IMPL(crlSerials)
5024 };
5025 }
5026 static void from_json(const nlohmann::json& j, Tls& p)
5027 {
5028 p.clear();
5029 getOptional<bool>("verifyPeers", p.verifyPeers, j, true);
5030 getOptional<bool>("allowSelfSignedCertificates", p.allowSelfSignedCertificates, j, false);
5031 getOptional<std::vector<std::string>>("caCertificates", p.caCertificates, j);
5032 getOptional<StringRestrictionList>("subjectRestrictions", p.subjectRestrictions, j);
5033 getOptional<StringRestrictionList>("issuerRestrictions", p.issuerRestrictions, j);
5034 getOptional<std::vector<std::string>>("crlSerials", p.crlSerials, j);
5035 }
5036
5037 //-----------------------------------------------------------
5038 JSON_SERIALIZED_CLASS(RangerPackets)
5051 {
5052 IMPLEMENT_JSON_SERIALIZATION()
5053 IMPLEMENT_JSON_DOCUMENTATION(RangerPackets)
5054
5055 public:
5058
5061
5063 {
5064 clear();
5065 }
5066
5067 void clear()
5068 {
5069 hangTimerSecs = -1;
5070 count = 5;
5071 }
5072
5073 virtual void initForDocumenting()
5074 {
5075 }
5076 };
5077
5078 static void to_json(nlohmann::json& j, const RangerPackets& p)
5079 {
5080 j = nlohmann::json{
5081 TOJSON_IMPL(hangTimerSecs),
5082 TOJSON_IMPL(count)
5083 };
5084 }
5085 static void from_json(const nlohmann::json& j, RangerPackets& p)
5086 {
5087 p.clear();
5088 getOptional<int>("hangTimerSecs", p.hangTimerSecs, j, 11);
5089 getOptional<int>("count", p.count, j, 5);
5090 }
5091
5092 //-----------------------------------------------------------
5093 JSON_SERIALIZED_CLASS(Source)
5106 {
5107 IMPLEMENT_JSON_SERIALIZATION()
5108 IMPLEMENT_JSON_DOCUMENTATION(Source)
5109
5110 public:
5112 std::string nodeId;
5113
5114 /* NOTE: Not serialized ! */
5115 uint8_t _internal_binary_nodeId[ENGAGE_MAX_NODE_ID_SIZE];
5116
5118 std::string alias;
5119
5120 /* NOTE: Not serialized ! */
5121 uint8_t _internal_binary_alias[ENGAGE_MAX_ALIAS_SIZE];
5122
5123 Source()
5124 {
5125 clear();
5126 }
5127
5128 void clear()
5129 {
5130 nodeId.clear();
5131 memset(_internal_binary_nodeId, 0, sizeof(_internal_binary_nodeId));
5132
5133 alias.clear();
5134 memset(_internal_binary_alias, 0, sizeof(_internal_binary_alias));
5135 }
5136
5137 virtual void initForDocumenting()
5138 {
5139 }
5140 };
5141
5142 static void to_json(nlohmann::json& j, const Source& p)
5143 {
5144 j = nlohmann::json{
5145 TOJSON_IMPL(nodeId),
5146 TOJSON_IMPL(alias)
5147 };
5148 }
5149 static void from_json(const nlohmann::json& j, Source& p)
5150 {
5151 p.clear();
5152 FROMJSON_IMPL_SIMPLE(nodeId);
5153 FROMJSON_IMPL_SIMPLE(alias);
5154 }
5155
5156 //-----------------------------------------------------------
5157 JSON_SERIALIZED_CLASS(GroupBridgeTargetOutputDetail)
5170 {
5171 IMPLEMENT_JSON_SERIALIZATION()
5172 IMPLEMENT_JSON_DOCUMENTATION(GroupBridgeTargetOutputDetail)
5173
5174 public:
5176 typedef enum
5177 {
5181 bomRaw = 0,
5182
5185 bomMultistream = 1,
5186
5189 bomMixedStream = 2,
5190
5192 bomNone = 3
5193 } BridgingOpMode_t;
5194
5197
5200
5202 {
5203 clear();
5204 }
5205
5206 void clear()
5207 {
5208 mode = BridgingOpMode_t::bomRaw;
5209 mixedStreamTxParams.clear();
5210 }
5211
5212 virtual void initForDocumenting()
5213 {
5214 clear();
5215 }
5216 };
5217
5218 static void to_json(nlohmann::json& j, const GroupBridgeTargetOutputDetail& p)
5219 {
5220 j = nlohmann::json{
5221 TOJSON_IMPL(mode),
5222 TOJSON_IMPL(mixedStreamTxParams)
5223 };
5224 }
5225 static void from_json(const nlohmann::json& j, GroupBridgeTargetOutputDetail& p)
5226 {
5227 p.clear();
5228 FROMJSON_IMPL_SIMPLE(mode);
5229 FROMJSON_IMPL_SIMPLE(mixedStreamTxParams);
5230 }
5231
5232 //-----------------------------------------------------------
5233 JSON_SERIALIZED_CLASS(GroupDefaultAudioPriority)
5246 {
5247 IMPLEMENT_JSON_SERIALIZATION()
5248 IMPLEMENT_JSON_DOCUMENTATION(GroupDefaultAudioPriority)
5249
5250 public:
5252 uint8_t tx;
5253
5255 uint8_t rx;
5256
5258 {
5259 clear();
5260 }
5261
5262 void clear()
5263 {
5264 tx = 0;
5265 rx = 0;
5266 }
5267
5268 virtual void initForDocumenting()
5269 {
5270 clear();
5271 }
5272 };
5273
5274 static void to_json(nlohmann::json& j, const GroupDefaultAudioPriority& p)
5275 {
5276 j = nlohmann::json{
5277 TOJSON_IMPL(tx),
5278 TOJSON_IMPL(rx)
5279 };
5280 }
5281 static void from_json(const nlohmann::json& j, GroupDefaultAudioPriority& p)
5282 {
5283 p.clear();
5284 FROMJSON_IMPL_SIMPLE(tx);
5285 FROMJSON_IMPL_SIMPLE(rx);
5286 }
5287
5288 //-----------------------------------------------------------
5289 JSON_SERIALIZED_CLASS(Group)
5301 {
5302 IMPLEMENT_JSON_SERIALIZATION()
5303 IMPLEMENT_JSON_DOCUMENTATION(Group)
5304
5305 public:
5307 typedef enum
5308 {
5310 gtUnknown = 0,
5311
5313 gtAudio = 1,
5314
5316 gtPresence = 2,
5317
5319 gtRaw = 3
5320 } Type_t;
5321
5323 typedef enum
5324 {
5326 iagpAnonymousAlias = 0,
5327
5329 iagpSsrcInHex = 1
5330 } InboundAliasGenerationPolicy_t;
5331
5334
5337
5340
5347 std::string id;
5348
5350 std::string name;
5351
5353 std::string spokenName;
5354
5356 std::string interfaceName;
5357
5360
5363
5366
5369
5372
5374 std::string cryptoPassword;
5375
5378
5380 std::vector<Rallypoint> rallypoints;
5381
5384
5387
5396
5398 std::string alias;
5399
5402
5404 std::string source;
5405
5412
5415
5418
5421
5423 std::vector<std::string> presenceGroupAffinities;
5424
5427
5430
5432 std::vector<RtpPayloadTypeTranslation> inboundRtpPayloadTypeTranslations;
5433
5436
5439
5441 std::string anonymousAlias;
5442
5445
5448
5451
5454
5457
5460
5463
5465 std::vector<uint16_t> specializerAffinities;
5466
5469
5471 std::vector<Source> ignoreSources;
5472
5474 std::string languageCode;
5475
5477 std::string synVoice;
5478
5481
5484
5487
5490
5493
5496
5497 Group()
5498 {
5499 clear();
5500 }
5501
5502 void clear()
5503 {
5504 type = gtUnknown;
5505 bridgeTargetOutputDetail.clear();
5506 defaultAudioPriority.clear();
5507 id.clear();
5508 name.clear();
5509 spokenName.clear();
5510 interfaceName.clear();
5511 rx.clear();
5512 tx.clear();
5513 txOptions.clear();
5514 txAudio.clear();
5515 presence.clear();
5516 cryptoPassword.clear();
5517
5518 alias.clear();
5519
5520 rallypoints.clear();
5521 rallypointCluster.clear();
5522
5523 audio.clear();
5524 timeline.clear();
5525
5526 blockAdvertising = false;
5527
5528 source.clear();
5529
5530 maxRxSecs = 0;
5531
5532 enableMulticastFailover = false;
5533 multicastFailoverSecs = 10;
5534
5535 rtcpPresenceRx.clear();
5536
5537 presenceGroupAffinities.clear();
5538 disablePacketEvents = false;
5539
5540 rfc4733RtpPayloadId = 0;
5541 inboundRtpPayloadTypeTranslations.clear();
5542 priorityTranslation.clear();
5543
5544 stickyTidHangSecs = 10;
5545 anonymousAlias.clear();
5546 lbCrypto = false;
5547
5548 appTransport.clear();
5549 allowLoopback = false;
5550
5551 rtpProfile.clear();
5552 rangerPackets.clear();
5553
5554 _wasDeserialized_rtpProfile = false;
5555
5556 txImpairment.clear();
5557 rxImpairment.clear();
5558
5559 specializerAffinities.clear();
5560
5561 securityLevel = 0;
5562
5563 ignoreSources.clear();
5564
5565 languageCode.clear();
5566 synVoice.clear();
5567
5568 rxCapture.clear();
5569 txCapture.clear();
5570
5571 blobRtpPayloadType = ENGAGE_DEFAULT_BLOB_RTP_PAYLOAD_TYPE;
5572 inboundAliasGenerationPolicy = iagpAnonymousAlias;
5573 gateIn.clear();
5574
5575 ignoreAudioTraffic = false;
5576 }
5577 };
5578
5579 static void to_json(nlohmann::json& j, const Group& p)
5580 {
5581 j = nlohmann::json{
5582 TOJSON_IMPL(type),
5583 TOJSON_IMPL(bridgeTargetOutputDetail),
5584 TOJSON_IMPL(defaultAudioPriority),
5585 TOJSON_IMPL(id),
5586 TOJSON_IMPL(name),
5587 TOJSON_IMPL(spokenName),
5588 TOJSON_IMPL(interfaceName),
5589 TOJSON_IMPL(rx),
5590 TOJSON_IMPL(tx),
5591 TOJSON_IMPL(txOptions),
5592 TOJSON_IMPL(txAudio),
5593 TOJSON_IMPL(presence),
5594 TOJSON_IMPL(cryptoPassword),
5595 TOJSON_IMPL(alias),
5596
5597 // See below
5598 //TOJSON_IMPL(rallypoints),
5599 //TOJSON_IMPL(rallypointCluster),
5600
5601 TOJSON_IMPL(alias),
5602 TOJSON_IMPL(audio),
5603 TOJSON_IMPL(timeline),
5604 TOJSON_IMPL(blockAdvertising),
5605 TOJSON_IMPL(source),
5606 TOJSON_IMPL(maxRxSecs),
5607 TOJSON_IMPL(enableMulticastFailover),
5608 TOJSON_IMPL(multicastFailoverSecs),
5609 TOJSON_IMPL(rtcpPresenceRx),
5610 TOJSON_IMPL(presenceGroupAffinities),
5611 TOJSON_IMPL(disablePacketEvents),
5612 TOJSON_IMPL(rfc4733RtpPayloadId),
5613 TOJSON_IMPL(inboundRtpPayloadTypeTranslations),
5614 TOJSON_IMPL(priorityTranslation),
5615 TOJSON_IMPL(stickyTidHangSecs),
5616 TOJSON_IMPL(anonymousAlias),
5617 TOJSON_IMPL(lbCrypto),
5618 TOJSON_IMPL(appTransport),
5619 TOJSON_IMPL(allowLoopback),
5620 TOJSON_IMPL(rangerPackets),
5621
5622 TOJSON_IMPL(txImpairment),
5623 TOJSON_IMPL(rxImpairment),
5624
5625 TOJSON_IMPL(specializerAffinities),
5626
5627 TOJSON_IMPL(securityLevel),
5628
5629 TOJSON_IMPL(ignoreSources),
5630
5631 TOJSON_IMPL(languageCode),
5632 TOJSON_IMPL(synVoice),
5633
5634 TOJSON_IMPL(rxCapture),
5635 TOJSON_IMPL(txCapture),
5636
5637 TOJSON_IMPL(blobRtpPayloadType),
5638
5639 TOJSON_IMPL(inboundAliasGenerationPolicy),
5640
5641 TOJSON_IMPL(gateIn),
5642
5643 TOJSON_IMPL(ignoreAudioTraffic)
5644 };
5645
5646 TOJSON_BASE_IMPL();
5647
5648 // TODO: need a better way to indicate whether rtpProfile is present
5649 if(p._wasDeserialized_rtpProfile || p.isDocumenting())
5650 {
5651 j["rtpProfile"] = p.rtpProfile;
5652 }
5653
5654 if(p.isDocumenting())
5655 {
5656 j["rallypointCluster"] = p.rallypointCluster;
5657 j["rallypoints"] = p.rallypoints;
5658 }
5659 else
5660 {
5661 // rallypointCluster takes precedence if it has elements
5662 if(!p.rallypointCluster.rallypoints.empty())
5663 {
5664 j["rallypointCluster"] = p.rallypointCluster;
5665 }
5666 else if(!p.rallypoints.empty())
5667 {
5668 j["rallypoints"] = p.rallypoints;
5669 }
5670 }
5671 }
5672 static void from_json(const nlohmann::json& j, Group& p)
5673 {
5674 p.clear();
5675 j.at("type").get_to(p.type);
5676 getOptional<GroupBridgeTargetOutputDetail>("bridgeTargetOutputDetail", p.bridgeTargetOutputDetail, j);
5677 j.at("id").get_to(p.id);
5678 getOptional<std::string>("name", p.name, j);
5679 getOptional<std::string>("spokenName", p.spokenName, j);
5680 getOptional<std::string>("interfaceName", p.interfaceName, j);
5681 getOptional<NetworkAddress>("rx", p.rx, j);
5682 getOptional<NetworkAddress>("tx", p.tx, j);
5683 getOptional<NetworkTxOptions>("txOptions", p.txOptions, j);
5684 getOptional<std::string>("cryptoPassword", p.cryptoPassword, j);
5685 getOptional<std::string>("alias", p.alias, j);
5686 getOptional<TxAudio>("txAudio", p.txAudio, j);
5687 getOptional<Presence>("presence", p.presence, j);
5688 getOptional<std::vector<Rallypoint>>("rallypoints", p.rallypoints, j);
5689 getOptional<RallypointCluster>("rallypointCluster", p.rallypointCluster, j);
5690 getOptional<Audio>("audio", p.audio, j);
5691 getOptional<GroupTimeline>("timeline", p.timeline, j);
5692 getOptional<bool>("blockAdvertising", p.blockAdvertising, j, false);
5693 getOptional<std::string>("source", p.source, j);
5694 getOptional<int>("maxRxSecs", p.maxRxSecs, j, 0);
5695 getOptional<bool>("enableMulticastFailover", p.enableMulticastFailover, j, false);
5696 getOptional<int>("multicastFailoverSecs", p.multicastFailoverSecs, j, 10);
5697 getOptional<NetworkAddress>("rtcpPresenceRx", p.rtcpPresenceRx, j);
5698 getOptional<std::vector<std::string>>("presenceGroupAffinities", p.presenceGroupAffinities, j);
5699 getOptional<bool>("disablePacketEvents", p.disablePacketEvents, j, false);
5700 getOptional<int>("rfc4733RtpPayloadId", p.rfc4733RtpPayloadId, j, 0);
5701 getOptional<std::vector<RtpPayloadTypeTranslation>>("inboundRtpPayloadTypeTranslations", p.inboundRtpPayloadTypeTranslations, j);
5702 getOptional<GroupPriorityTranslation>("priorityTranslation", p.priorityTranslation, j);
5703 getOptional<GroupDefaultAudioPriority>("defaultAudioPriority", p.defaultAudioPriority, j);
5704 getOptional<int>("stickyTidHangSecs", p.stickyTidHangSecs, j, 10);
5705 getOptional<std::string>("anonymousAlias", p.anonymousAlias, j);
5706 getOptional<bool>("lbCrypto", p.lbCrypto, j, false);
5707 getOptional<GroupAppTransport>("appTransport", p.appTransport, j);
5708 getOptional<bool>("allowLoopback", p.allowLoopback, j, false);
5709 getOptionalWithIndicator<RtpProfile>("rtpProfile", p.rtpProfile, j, &p._wasDeserialized_rtpProfile);
5710 getOptional<RangerPackets>("rangerPackets", p.rangerPackets, j);
5711 getOptional<TransportImpairment>("txImpairment", p.txImpairment, j);
5712 getOptional<TransportImpairment>("rxImpairment", p.rxImpairment, j);
5713 getOptional<std::vector<uint16_t>>("specializerAffinities", p.specializerAffinities, j);
5714 getOptional<uint32_t>("securityLevel", p.securityLevel, j, 0);
5715 getOptional<std::vector<Source>>("ignoreSources", p.ignoreSources, j);
5716 getOptional<std::string>("languageCode", p.languageCode, j);
5717 getOptional<std::string>("synVoice", p.synVoice, j);
5718
5719 getOptional<PacketCapturer>("rxCapture", p.rxCapture, j);
5720 getOptional<PacketCapturer>("txCapture", p.txCapture, j);
5721
5722 getOptional<uint16_t>("blobRtpPayloadType", p.blobRtpPayloadType, j, ENGAGE_DEFAULT_BLOB_RTP_PAYLOAD_TYPE);
5723
5724 getOptional<Group::InboundAliasGenerationPolicy_t>("inboundAliasGenerationPolicy", p.inboundAliasGenerationPolicy, j, Group::InboundAliasGenerationPolicy_t::iagpAnonymousAlias);
5725
5726 getOptional<AudioGate>("gateIn", p.gateIn, j);
5727
5728 getOptional<bool>("ignoreAudioTraffic", p.ignoreAudioTraffic, j, false);
5729
5730 FROMJSON_BASE_IMPL();
5731 }
5732
5733
5734 //-----------------------------------------------------------
5735 JSON_SERIALIZED_CLASS(Mission)
5737 {
5738 IMPLEMENT_JSON_SERIALIZATION()
5739 IMPLEMENT_JSON_DOCUMENTATION(Mission)
5740
5741 public:
5742 std::string id;
5743 std::string name;
5744 std::vector<Group> groups;
5745 std::chrono::system_clock::time_point begins;
5746 std::chrono::system_clock::time_point ends;
5747 std::string certStoreId;
5748 int multicastFailoverPolicy;
5749 Rallypoint rallypoint;
5750
5751 void clear()
5752 {
5753 id.clear();
5754 name.clear();
5755 groups.clear();
5756 certStoreId.clear();
5757 multicastFailoverPolicy = 0;
5758 rallypoint.clear();
5759 }
5760 };
5761
5762 static void to_json(nlohmann::json& j, const Mission& p)
5763 {
5764 j = nlohmann::json{
5765 TOJSON_IMPL(id),
5766 TOJSON_IMPL(name),
5767 TOJSON_IMPL(groups),
5768 TOJSON_IMPL(certStoreId),
5769 TOJSON_IMPL(multicastFailoverPolicy),
5770 TOJSON_IMPL(rallypoint)
5771 };
5772 }
5773
5774 static void from_json(const nlohmann::json& j, Mission& p)
5775 {
5776 p.clear();
5777 j.at("id").get_to(p.id);
5778 j.at("name").get_to(p.name);
5779
5780 // Groups are optional
5781 try
5782 {
5783 j.at("groups").get_to(p.groups);
5784 }
5785 catch(...)
5786 {
5787 p.groups.clear();
5788 }
5789
5790 FROMJSON_IMPL(certStoreId, std::string, EMPTY_STRING);
5791 FROMJSON_IMPL(multicastFailoverPolicy, int, 0);
5792 getOptional<Rallypoint>("rallypoint", p.rallypoint, j);
5793 }
5794
5795 //-----------------------------------------------------------
5796 JSON_SERIALIZED_CLASS(LicenseDescriptor)
5807 {
5808 IMPLEMENT_JSON_SERIALIZATION()
5809 IMPLEMENT_JSON_DOCUMENTATION(LicenseDescriptor)
5810
5811 public:
5817 static const int STATUS_OK = 0;
5818 static const int ERR_NULL_ENTITLEMENT_KEY = -1;
5819 static const int ERR_NULL_LICENSE_KEY = -2;
5820 static const int ERR_INVALID_LICENSE_KEY_LEN = -3;
5821 static const int ERR_LICENSE_KEY_VERIFICATION_FAILURE = -4;
5822 static const int ERR_ACTIVATION_CODE_VERIFICATION_FAILURE = -5;
5823 static const int ERR_INVALID_EXPIRATION_DATE = -6;
5824 static const int ERR_GENERAL_FAILURE = -7;
5825 static const int ERR_NOT_INITIALIZED = -8;
5826 static const int ERR_REQUIRES_ACTIVATION = -9;
5827 static const int ERR_LICENSE_NOT_SUITED_FOR_ACTIVATION = -10;
5835 static const uint8_t LIC_CARGO_FLAG_LIMIT_TO_FEATURES = 0x01;
5846 std::string entitlement;
5847
5854 std::string key;
5855
5857 std::string activationCode;
5858
5860 std::string deviceId;
5861
5863 int type;
5864
5866 time_t expires;
5867
5869 std::string expiresFormatted;
5870
5875 uint32_t flags;
5876
5878 std::string cargo;
5879
5881 uint8_t cargoFlags;
5882
5888
5890 std::string manufacturerId;
5891
5893 std::string activationHmac;
5894
5896 {
5897 clear();
5898 }
5899
5900 void clear()
5901 {
5902 entitlement.clear();
5903 key.clear();
5904 activationCode.clear();
5905 type = 0;
5906 expires = 0;
5907 expiresFormatted.clear();
5908 flags = 0;
5909 cargo.clear();
5910 cargoFlags = 0;
5911 deviceId.clear();
5912 status = ERR_NOT_INITIALIZED;
5913 manufacturerId.clear();
5914 activationHmac.clear();
5915 }
5916 };
5917
5918 static void to_json(nlohmann::json& j, const LicenseDescriptor& p)
5919 {
5920 j = nlohmann::json{
5921 //TOJSON_IMPL(entitlement),
5922 {"entitlement", "*entitlement*"},
5923 TOJSON_IMPL(key),
5924 TOJSON_IMPL(activationCode),
5925 TOJSON_IMPL(type),
5926 TOJSON_IMPL(expires),
5927 TOJSON_IMPL(expiresFormatted),
5928 TOJSON_IMPL(flags),
5929 TOJSON_IMPL(deviceId),
5930 TOJSON_IMPL(status),
5931 //TOJSON_IMPL(manufacturerId),
5932 {"manufacturerId", "*manufacturerId*"},
5933 TOJSON_IMPL(cargo),
5934 TOJSON_IMPL(cargoFlags),
5935 TOJSON_IMPL(activationHmac)
5936 };
5937 }
5938
5939 static void from_json(const nlohmann::json& j, LicenseDescriptor& p)
5940 {
5941 p.clear();
5942 FROMJSON_IMPL(entitlement, std::string, EMPTY_STRING);
5943 FROMJSON_IMPL(key, std::string, EMPTY_STRING);
5944 FROMJSON_IMPL(activationCode, std::string, EMPTY_STRING);
5945 FROMJSON_IMPL(type, int, 0);
5946 FROMJSON_IMPL(expires, time_t, 0);
5947 FROMJSON_IMPL(expiresFormatted, std::string, EMPTY_STRING);
5948 FROMJSON_IMPL(flags, uint32_t, 0);
5949 FROMJSON_IMPL(deviceId, std::string, EMPTY_STRING);
5950 FROMJSON_IMPL(status, int, LicenseDescriptor::ERR_NOT_INITIALIZED);
5951 FROMJSON_IMPL(manufacturerId, std::string, EMPTY_STRING);
5952 FROMJSON_IMPL(cargo, std::string, EMPTY_STRING);
5953 FROMJSON_IMPL(cargoFlags, uint8_t, 0);
5954 FROMJSON_IMPL(activationHmac, std::string, EMPTY_STRING);
5955 }
5956
5957
5958 //-----------------------------------------------------------
5959 JSON_SERIALIZED_CLASS(EngineNetworkingRpUdpStreaming)
5972 {
5973 IMPLEMENT_JSON_SERIALIZATION()
5974 IMPLEMENT_JSON_DOCUMENTATION(EngineNetworkingRpUdpStreaming)
5975
5976 public:
5979
5981 int port;
5982
5985
5988
5990 int ttl;
5991
5993 {
5994 clear();
5995 }
5996
5997 void clear()
5998 {
5999 enabled = false;
6000 port = 0;
6001 keepaliveIntervalSecs = 15;
6002 priority = TxPriority_t::priVoice;
6003 ttl = 64;
6004 }
6005
6006 virtual void initForDocumenting()
6007 {
6008 }
6009 };
6010
6011 static void to_json(nlohmann::json& j, const EngineNetworkingRpUdpStreaming& p)
6012 {
6013 j = nlohmann::json{
6014 TOJSON_IMPL(enabled),
6015 TOJSON_IMPL(port),
6016 TOJSON_IMPL(keepaliveIntervalSecs),
6017 TOJSON_IMPL(priority),
6018 TOJSON_IMPL(ttl)
6019 };
6020 }
6021 static void from_json(const nlohmann::json& j, EngineNetworkingRpUdpStreaming& p)
6022 {
6023 p.clear();
6024 getOptional<bool>("enabled", p.enabled, j, false);
6025 getOptional<int>("port", p.port, j, 0);
6026 getOptional<int>("keepaliveIntervalSecs", p.keepaliveIntervalSecs, j, 15);
6027 getOptional<TxPriority_t>("priority", p.priority, j, TxPriority_t::priVoice);
6028 getOptional<int>("ttl", p.ttl, j, 64);
6029 }
6030
6031 //-----------------------------------------------------------
6032 JSON_SERIALIZED_CLASS(EnginePolicyNetworking)
6042 {
6043 IMPLEMENT_JSON_SERIALIZATION()
6044 IMPLEMENT_JSON_DOCUMENTATION(EnginePolicyNetworking)
6045
6046 public:
6048 std::string defaultNic;
6049
6052
6055
6058
6061
6064
6067
6070
6072 {
6073 clear();
6074 }
6075
6076 void clear()
6077 {
6078 defaultNic.clear();
6079 multicastRejoinSecs = 8;
6080 rallypointRtTestIntervalMs = 60000;
6081 logRtpJitterBufferStats = false;
6082 preventMulticastFailover = false;
6083 addressResolutionPolicy = AddressResolutionPolicy_t::arpIpv6ThenIpv4;
6084
6085 rpUdpStreaming.clear();
6086 rtpProfile.clear();
6087 }
6088 };
6089
6090 static void to_json(nlohmann::json& j, const EnginePolicyNetworking& p)
6091 {
6092 j = nlohmann::json{
6093 TOJSON_IMPL(defaultNic),
6094 TOJSON_IMPL(multicastRejoinSecs),
6095
6096 TOJSON_IMPL(rallypointRtTestIntervalMs),
6097 TOJSON_IMPL(logRtpJitterBufferStats),
6098 TOJSON_IMPL(preventMulticastFailover),
6099
6100 TOJSON_IMPL(rpUdpStreaming),
6101 TOJSON_IMPL(rtpProfile),
6102 TOJSON_IMPL(addressResolutionPolicy)
6103 };
6104 }
6105 static void from_json(const nlohmann::json& j, EnginePolicyNetworking& p)
6106 {
6107 p.clear();
6108 FROMJSON_IMPL(defaultNic, std::string, EMPTY_STRING);
6109 FROMJSON_IMPL(multicastRejoinSecs, int, 8);
6110 FROMJSON_IMPL(rallypointRtTestIntervalMs, int, 60000);
6111 FROMJSON_IMPL(logRtpJitterBufferStats, bool, false);
6112 FROMJSON_IMPL(preventMulticastFailover, bool, false);
6113
6114 getOptional<EngineNetworkingRpUdpStreaming>("rpUdpStreaming", p.rpUdpStreaming, j);
6115 getOptional<RtpProfile>("rtpProfile", p.rtpProfile, j);
6116 getOptional<AddressResolutionPolicy_t>("addressResolutionPolicy", p.addressResolutionPolicy, j, AddressResolutionPolicy_t::arpIpv6ThenIpv4);
6117 }
6118
6119 //-----------------------------------------------------------
6120 JSON_SERIALIZED_CLASS(Aec)
6131 {
6132 IMPLEMENT_JSON_SERIALIZATION()
6133 IMPLEMENT_JSON_DOCUMENTATION(Aec)
6134
6135 public:
6141 typedef enum
6142 {
6144 aecmDefault = 0,
6145
6147 aecmLow = 1,
6148
6150 aecmMedium = 2,
6151
6153 aecmHigh = 3,
6154
6156 aecmVeryHigh = 4,
6157
6159 aecmHighest = 5
6160 } Mode_t;
6161
6164
6167
6170
6172 bool cng;
6173
6174 Aec()
6175 {
6176 clear();
6177 }
6178
6179 void clear()
6180 {
6181 enabled = false;
6182 mode = aecmDefault;
6183 speakerTailMs = 60;
6184 cng = true;
6185 }
6186 };
6187
6188 static void to_json(nlohmann::json& j, const Aec& p)
6189 {
6190 j = nlohmann::json{
6191 TOJSON_IMPL(enabled),
6192 TOJSON_IMPL(mode),
6193 TOJSON_IMPL(speakerTailMs),
6194 TOJSON_IMPL(cng)
6195 };
6196 }
6197 static void from_json(const nlohmann::json& j, Aec& p)
6198 {
6199 p.clear();
6200 FROMJSON_IMPL(enabled, bool, false);
6201 FROMJSON_IMPL(mode, Aec::Mode_t, Aec::Mode_t::aecmDefault);
6202 FROMJSON_IMPL(speakerTailMs, int, 60);
6203 FROMJSON_IMPL(cng, bool, true);
6204 }
6205
6206 //-----------------------------------------------------------
6207 JSON_SERIALIZED_CLASS(Vad)
6218 {
6219 IMPLEMENT_JSON_SERIALIZATION()
6220 IMPLEMENT_JSON_DOCUMENTATION(Vad)
6221
6222 public:
6228 typedef enum
6229 {
6231 vamDefault = 0,
6232
6234 vamLowBitRate = 1,
6235
6237 vamAggressive = 2,
6238
6240 vamVeryAggressive = 3
6241 } Mode_t;
6242
6245
6248
6249 Vad()
6250 {
6251 clear();
6252 }
6253
6254 void clear()
6255 {
6256 enabled = false;
6257 mode = vamDefault;
6258 }
6259 };
6260
6261 static void to_json(nlohmann::json& j, const Vad& p)
6262 {
6263 j = nlohmann::json{
6264 TOJSON_IMPL(enabled),
6265 TOJSON_IMPL(mode)
6266 };
6267 }
6268 static void from_json(const nlohmann::json& j, Vad& p)
6269 {
6270 p.clear();
6271 FROMJSON_IMPL(enabled, bool, false);
6272 FROMJSON_IMPL(mode, Vad::Mode_t, Vad::Mode_t::vamDefault);
6273 }
6274
6275 //-----------------------------------------------------------
6276 JSON_SERIALIZED_CLASS(Bridge)
6287 {
6288 IMPLEMENT_JSON_SERIALIZATION()
6289 IMPLEMENT_JSON_DOCUMENTATION(Bridge)
6290
6291 public:
6293 std::string id;
6294
6296 std::string name;
6297
6299 std::vector<std::string> groups;
6300
6305
6306 Bridge()
6307 {
6308 clear();
6309 }
6310
6311 void clear()
6312 {
6313 id.clear();
6314 name.clear();
6315 groups.clear();
6316 enabled = true;
6317 }
6318 };
6319
6320 static void to_json(nlohmann::json& j, const Bridge& p)
6321 {
6322 j = nlohmann::json{
6323 TOJSON_IMPL(id),
6324 TOJSON_IMPL(name),
6325 TOJSON_IMPL(groups),
6326 TOJSON_IMPL(enabled)
6327 };
6328 }
6329 static void from_json(const nlohmann::json& j, Bridge& p)
6330 {
6331 p.clear();
6332 FROMJSON_IMPL(id, std::string, EMPTY_STRING);
6333 FROMJSON_IMPL(name, std::string, EMPTY_STRING);
6334 getOptional<std::vector<std::string>>("groups", p.groups, j);
6335 FROMJSON_IMPL(enabled, bool, true);
6336 }
6337
6338 //-----------------------------------------------------------
6339 JSON_SERIALIZED_CLASS(AndroidAudio)
6350 {
6351 IMPLEMENT_JSON_SERIALIZATION()
6352 IMPLEMENT_JSON_DOCUMENTATION(AndroidAudio)
6353
6354 public:
6355 constexpr static int INVALID_SESSION_ID = -9999;
6356
6358 int api;
6359
6362
6365
6381
6389
6399
6402
6405
6406
6407 AndroidAudio()
6408 {
6409 clear();
6410 }
6411
6412 void clear()
6413 {
6414 api = 0;
6415 sharingMode = 0;
6416 performanceMode = 12;
6417 usage = 2;
6418 contentType = 1;
6419 inputPreset = 7;
6420 sessionId = AndroidAudio::INVALID_SESSION_ID;
6421 engineMode = 0;
6422 }
6423 };
6424
6425 static void to_json(nlohmann::json& j, const AndroidAudio& p)
6426 {
6427 j = nlohmann::json{
6428 TOJSON_IMPL(api),
6429 TOJSON_IMPL(sharingMode),
6430 TOJSON_IMPL(performanceMode),
6431 TOJSON_IMPL(usage),
6432 TOJSON_IMPL(contentType),
6433 TOJSON_IMPL(inputPreset),
6434 TOJSON_IMPL(sessionId),
6435 TOJSON_IMPL(engineMode)
6436 };
6437 }
6438 static void from_json(const nlohmann::json& j, AndroidAudio& p)
6439 {
6440 p.clear();
6441 FROMJSON_IMPL(api, int, 0);
6442 FROMJSON_IMPL(sharingMode, int, 0);
6443 FROMJSON_IMPL(performanceMode, int, 12);
6444 FROMJSON_IMPL(usage, int, 2);
6445 FROMJSON_IMPL(contentType, int, 1);
6446 FROMJSON_IMPL(inputPreset, int, 7);
6447 FROMJSON_IMPL(sessionId, int, AndroidAudio::INVALID_SESSION_ID);
6448 FROMJSON_IMPL(engineMode, int, 0);
6449 }
6450
6451 //-----------------------------------------------------------
6452 JSON_SERIALIZED_CLASS(EnginePolicyAudio)
6463 {
6464 IMPLEMENT_JSON_SERIALIZATION()
6465 IMPLEMENT_JSON_DOCUMENTATION(EnginePolicyAudio)
6466
6467 public:
6470
6473
6476
6479
6482
6485
6488
6491
6494
6497
6500
6503
6506
6509
6512
6513
6515 {
6516 clear();
6517 }
6518
6519 void clear()
6520 {
6521 enabled = true;
6522 hardwareEnabled = true;
6523 internalRate = 16000;
6524 internalChannels = 2;
6525 muteTxOnTx = false;
6526 aec.clear();
6527 vad.clear();
6528 android.clear();
6529 inputAgc.clear();
6530 outputAgc.clear();
6531 denoiseInput = false;
6532 denoiseOutput = false;
6533 saveInputPcm = false;
6534 saveOutputPcm = false;
6535 registry.clear();
6536 }
6537 };
6538
6539 static void to_json(nlohmann::json& j, const EnginePolicyAudio& p)
6540 {
6541 j = nlohmann::json{
6542 TOJSON_IMPL(enabled),
6543 TOJSON_IMPL(hardwareEnabled),
6544 TOJSON_IMPL(internalRate),
6545 TOJSON_IMPL(internalChannels),
6546 TOJSON_IMPL(muteTxOnTx),
6547 TOJSON_IMPL(aec),
6548 TOJSON_IMPL(vad),
6549 TOJSON_IMPL(android),
6550 TOJSON_IMPL(inputAgc),
6551 TOJSON_IMPL(outputAgc),
6552 TOJSON_IMPL(denoiseInput),
6553 TOJSON_IMPL(denoiseOutput),
6554 TOJSON_IMPL(saveInputPcm),
6555 TOJSON_IMPL(saveOutputPcm),
6556 TOJSON_IMPL(registry)
6557 };
6558 }
6559 static void from_json(const nlohmann::json& j, EnginePolicyAudio& p)
6560 {
6561 p.clear();
6562 getOptional<bool>("enabled", p.enabled, j, true);
6563 getOptional<bool>("hardwareEnabled", p.hardwareEnabled, j, true);
6564 FROMJSON_IMPL(internalRate, int, 16000);
6565 FROMJSON_IMPL(internalChannels, int, 2);
6566
6567 FROMJSON_IMPL(muteTxOnTx, bool, false);
6568 getOptional<Aec>("aec", p.aec, j);
6569 getOptional<Vad>("vad", p.vad, j);
6570 getOptional<AndroidAudio>("android", p.android, j);
6571 getOptional<Agc>("inputAgc", p.inputAgc, j);
6572 getOptional<Agc>("outputAgc", p.outputAgc, j);
6573 FROMJSON_IMPL(denoiseInput, bool, false);
6574 FROMJSON_IMPL(denoiseOutput, bool, false);
6575 FROMJSON_IMPL(saveInputPcm, bool, false);
6576 FROMJSON_IMPL(saveOutputPcm, bool, false);
6577 getOptional<AudioRegistry>("registry", p.registry, j);
6578 }
6579
6580 //-----------------------------------------------------------
6581 JSON_SERIALIZED_CLASS(SecurityCertificate)
6592 {
6593 IMPLEMENT_JSON_SERIALIZATION()
6594 IMPLEMENT_JSON_DOCUMENTATION(SecurityCertificate)
6595
6596 public:
6597
6603 std::string certificate;
6604
6606 std::string key;
6607
6609 {
6610 clear();
6611 }
6612
6613 void clear()
6614 {
6615 certificate.clear();
6616 key.clear();
6617 }
6618 };
6619
6620 static void to_json(nlohmann::json& j, const SecurityCertificate& p)
6621 {
6622 j = nlohmann::json{
6623 TOJSON_IMPL(certificate),
6624 TOJSON_IMPL(key)
6625 };
6626 }
6627 static void from_json(const nlohmann::json& j, SecurityCertificate& p)
6628 {
6629 p.clear();
6630 FROMJSON_IMPL(certificate, std::string, EMPTY_STRING);
6631 FROMJSON_IMPL(key, std::string, EMPTY_STRING);
6632 }
6633
6634 // This is where spell checking stops
6635 //-----------------------------------------------------------
6636 JSON_SERIALIZED_CLASS(EnginePolicySecurity)
6637
6638
6648 {
6649 IMPLEMENT_JSON_SERIALIZATION()
6650 IMPLEMENT_JSON_DOCUMENTATION(EnginePolicySecurity)
6651
6652 public:
6653
6665
6673 std::vector<std::string> caCertificates;
6674
6676 {
6677 clear();
6678 }
6679
6680 void clear()
6681 {
6682 certificate.clear();
6683 caCertificates.clear();
6684 }
6685 };
6686
6687 static void to_json(nlohmann::json& j, const EnginePolicySecurity& p)
6688 {
6689 j = nlohmann::json{
6690 TOJSON_IMPL(certificate),
6691 TOJSON_IMPL(caCertificates)
6692 };
6693 }
6694 static void from_json(const nlohmann::json& j, EnginePolicySecurity& p)
6695 {
6696 p.clear();
6697 getOptional("certificate", p.certificate, j);
6698 getOptional<std::vector<std::string>>("caCertificates", p.caCertificates, j);
6699 }
6700
6701 //-----------------------------------------------------------
6702 JSON_SERIALIZED_CLASS(EnginePolicyLogging)
6713 {
6714 IMPLEMENT_JSON_SERIALIZATION()
6715 IMPLEMENT_JSON_DOCUMENTATION(EnginePolicyLogging)
6716
6717 public:
6718
6735
6738
6740 {
6741 clear();
6742 }
6743
6744 void clear()
6745 {
6746 maxLevel = 4; // ILogger::Level::debug
6747 enableSyslog = false;
6748 }
6749 };
6750
6751 static void to_json(nlohmann::json& j, const EnginePolicyLogging& p)
6752 {
6753 j = nlohmann::json{
6754 TOJSON_IMPL(maxLevel),
6755 TOJSON_IMPL(enableSyslog)
6756 };
6757 }
6758 static void from_json(const nlohmann::json& j, EnginePolicyLogging& p)
6759 {
6760 p.clear();
6761 getOptional("maxLevel", p.maxLevel, j, 4); // ILogger::Level::debug
6762 getOptional("enableSyslog", p.enableSyslog, j);
6763 }
6764
6765
6766 //-----------------------------------------------------------
6767 JSON_SERIALIZED_CLASS(EnginePolicyDatabase)
6769 {
6770 IMPLEMENT_JSON_SERIALIZATION()
6771 IMPLEMENT_JSON_DOCUMENTATION(EnginePolicyDatabase)
6772
6773 public:
6774 typedef enum
6775 {
6776 dbtFixedMemory = 0,
6777 dbtPagedMemory = 1,
6778 dbtFixedFile = 2
6779 } DatabaseType_t;
6780
6781 DatabaseType_t type;
6782 std::string fixedFileName;
6783 bool forceMaintenance;
6784 bool reclaimSpace;
6785
6787 {
6788 clear();
6789 }
6790
6791 void clear()
6792 {
6793 type = DatabaseType_t::dbtFixedMemory;
6794 fixedFileName.clear();
6795 forceMaintenance = false;
6796 reclaimSpace = false;
6797 }
6798 };
6799
6800 static void to_json(nlohmann::json& j, const EnginePolicyDatabase& p)
6801 {
6802 j = nlohmann::json{
6803 TOJSON_IMPL(type),
6804 TOJSON_IMPL(fixedFileName),
6805 TOJSON_IMPL(forceMaintenance),
6806 TOJSON_IMPL(reclaimSpace)
6807 };
6808 }
6809 static void from_json(const nlohmann::json& j, EnginePolicyDatabase& p)
6810 {
6811 p.clear();
6812 FROMJSON_IMPL(type, EnginePolicyDatabase::DatabaseType_t, EnginePolicyDatabase::DatabaseType_t::dbtFixedMemory);
6813 FROMJSON_IMPL(fixedFileName, std::string, EMPTY_STRING);
6814 FROMJSON_IMPL(forceMaintenance, bool, false);
6815 FROMJSON_IMPL(reclaimSpace, bool, false);
6816 }
6817
6818
6819 //-----------------------------------------------------------
6820 JSON_SERIALIZED_CLASS(SecureSignature)
6829 {
6830 IMPLEMENT_JSON_SERIALIZATION()
6831 IMPLEMENT_JSON_DOCUMENTATION(SecureSignature)
6832
6833 public:
6834
6836 std::string certificate;
6837
6838 // /** @brief Contains the PEM-formatted text of the certificate's public key */
6839 //std::string publicKey;
6840
6842 std::string signature;
6843
6845 {
6846 clear();
6847 }
6848
6849 void clear()
6850 {
6851 certificate.clear();
6852 //publicKey.clear();
6853 signature.clear();
6854 }
6855 };
6856
6857 static void to_json(nlohmann::json& j, const SecureSignature& p)
6858 {
6859 j = nlohmann::json{
6860 TOJSON_IMPL(certificate),
6861 //TOJSON_IMPL(publicKey),
6862 TOJSON_IMPL(signature)
6863 };
6864 }
6865 static void from_json(const nlohmann::json& j, SecureSignature& p)
6866 {
6867 p.clear();
6868 FROMJSON_IMPL(certificate, std::string, EMPTY_STRING);
6869 //FROMJSON_IMPL(publicKey, std::string, EMPTY_STRING);
6870 FROMJSON_IMPL(signature, std::string, EMPTY_STRING);
6871 }
6872
6873 //-----------------------------------------------------------
6874 JSON_SERIALIZED_CLASS(NamedAudioDevice)
6876 {
6877 IMPLEMENT_JSON_SERIALIZATION()
6878 IMPLEMENT_JSON_DOCUMENTATION(NamedAudioDevice)
6879
6880 public:
6881 std::string name;
6882 std::string manufacturer;
6883 std::string model;
6884 std::string id;
6885 std::string serialNumber;
6886 std::string type;
6887 std::string extra;
6888 bool isDefault;
6889
6891 {
6892 clear();
6893 }
6894
6895 void clear()
6896 {
6897 name.clear();
6898 manufacturer.clear();
6899 model.clear();
6900 id.clear();
6901 serialNumber.clear();
6902 type.clear();
6903 extra.clear();
6904 isDefault = false;
6905 }
6906 };
6907
6908 static void to_json(nlohmann::json& j, const NamedAudioDevice& p)
6909 {
6910 j = nlohmann::json{
6911 TOJSON_IMPL(name),
6912 TOJSON_IMPL(manufacturer),
6913 TOJSON_IMPL(model),
6914 TOJSON_IMPL(id),
6915 TOJSON_IMPL(serialNumber),
6916 TOJSON_IMPL(type),
6917 TOJSON_IMPL(extra),
6918 TOJSON_IMPL(isDefault),
6919 };
6920 }
6921 static void from_json(const nlohmann::json& j, NamedAudioDevice& p)
6922 {
6923 p.clear();
6924 getOptional<std::string>("name", p.name, j, EMPTY_STRING);
6925 getOptional<std::string>("manufacturer", p.manufacturer, j, EMPTY_STRING);
6926 getOptional<std::string>("model", p.model, j, EMPTY_STRING);
6927 getOptional<std::string>("id", p.id, j, EMPTY_STRING);
6928 getOptional<std::string>("serialNumber", p.serialNumber, j, EMPTY_STRING);
6929 getOptional<std::string>("type", p.type, j, EMPTY_STRING);
6930 getOptional<std::string>("extra", p.extra, j, EMPTY_STRING);
6931 getOptional<bool>("isDefault", p.isDefault, j, false);
6932 }
6933
6934
6935 //-----------------------------------------------------------
6936 JSON_SERIALIZED_CLASS(EnginePolicyNamedAudioDevices)
6938 {
6939 IMPLEMENT_JSON_SERIALIZATION()
6940 IMPLEMENT_JSON_DOCUMENTATION(EnginePolicyNamedAudioDevices)
6941
6942 public:
6943 std::vector<NamedAudioDevice> inputs;
6944 std::vector<NamedAudioDevice> outputs;
6945
6947 {
6948 clear();
6949 }
6950
6951 void clear()
6952 {
6953 inputs.clear();
6954 outputs.clear();
6955 }
6956 };
6957
6958 static void to_json(nlohmann::json& j, const EnginePolicyNamedAudioDevices& p)
6959 {
6960 j = nlohmann::json{
6961 TOJSON_IMPL(inputs),
6962 TOJSON_IMPL(outputs)
6963 };
6964 }
6965 static void from_json(const nlohmann::json& j, EnginePolicyNamedAudioDevices& p)
6966 {
6967 p.clear();
6968 getOptional<std::vector<NamedAudioDevice>>("inputs", p.inputs, j);
6969 getOptional<std::vector<NamedAudioDevice>>("outputs", p.outputs, j);
6970 }
6971
6972 //-----------------------------------------------------------
6973 JSON_SERIALIZED_CLASS(Licensing)
6986 {
6987 IMPLEMENT_JSON_SERIALIZATION()
6988 IMPLEMENT_JSON_DOCUMENTATION(Licensing)
6989
6990 public:
6991
6993 std::string entitlement;
6994
6996 std::string key;
6997
6999 std::string activationCode;
7000
7002 std::string deviceId;
7003
7005 std::string manufacturerId;
7006
7007 Licensing()
7008 {
7009 clear();
7010 }
7011
7012 void clear()
7013 {
7014 entitlement.clear();
7015 key.clear();
7016 activationCode.clear();
7017 deviceId.clear();
7018 manufacturerId.clear();
7019 }
7020 };
7021
7022 static void to_json(nlohmann::json& j, const Licensing& p)
7023 {
7024 j = nlohmann::json{
7025 TOJSON_IMPL(entitlement),
7026 TOJSON_IMPL(key),
7027 TOJSON_IMPL(activationCode),
7028 TOJSON_IMPL(deviceId),
7029 TOJSON_IMPL(manufacturerId)
7030 };
7031 }
7032 static void from_json(const nlohmann::json& j, Licensing& p)
7033 {
7034 p.clear();
7035 FROMJSON_IMPL(entitlement, std::string, EMPTY_STRING);
7036 FROMJSON_IMPL(key, std::string, EMPTY_STRING);
7037 FROMJSON_IMPL(activationCode, std::string, EMPTY_STRING);
7038 FROMJSON_IMPL(deviceId, std::string, EMPTY_STRING);
7039 FROMJSON_IMPL(manufacturerId, std::string, EMPTY_STRING);
7040 }
7041
7042 //-----------------------------------------------------------
7043 JSON_SERIALIZED_CLASS(DiscoveryMagellan)
7054 {
7055 IMPLEMENT_JSON_SERIALIZATION()
7056 IMPLEMENT_JSON_DOCUMENTATION(DiscoveryMagellan)
7057
7058 public:
7059
7062
7064 std::string interfaceName;
7065
7068
7071
7073 {
7074 clear();
7075 }
7076
7077 void clear()
7078 {
7079 enabled = false;
7080 interfaceName.clear();
7081 security.clear();
7082 tls.clear();
7083 }
7084 };
7085
7086 static void to_json(nlohmann::json& j, const DiscoveryMagellan& p)
7087 {
7088 j = nlohmann::json{
7089 TOJSON_IMPL(enabled),
7090 TOJSON_IMPL(interfaceName),
7091 TOJSON_IMPL(security),
7092 TOJSON_IMPL(tls)
7093 };
7094 }
7095 static void from_json(const nlohmann::json& j, DiscoveryMagellan& p)
7096 {
7097 p.clear();
7098 getOptional("enabled", p.enabled, j, false);
7099 getOptional<Tls>("tls", p.tls, j);
7100 getOptional<SecurityCertificate>("security", p.security, j);
7101 FROMJSON_IMPL(interfaceName, std::string, EMPTY_STRING);
7102 }
7103
7104 //-----------------------------------------------------------
7105 JSON_SERIALIZED_CLASS(DiscoverySsdp)
7116 {
7117 IMPLEMENT_JSON_SERIALIZATION()
7118 IMPLEMENT_JSON_DOCUMENTATION(DiscoverySsdp)
7119
7120 public:
7121
7124
7126 std::string interfaceName;
7127
7130
7132 std::vector<std::string> searchTerms;
7133
7136
7139
7141 {
7142 clear();
7143 }
7144
7145 void clear()
7146 {
7147 enabled = false;
7148 interfaceName.clear();
7149 address.clear();
7150 searchTerms.clear();
7151 ageTimeoutMs = 30000;
7152 advertising.clear();
7153 }
7154 };
7155
7156 static void to_json(nlohmann::json& j, const DiscoverySsdp& p)
7157 {
7158 j = nlohmann::json{
7159 TOJSON_IMPL(enabled),
7160 TOJSON_IMPL(interfaceName),
7161 TOJSON_IMPL(address),
7162 TOJSON_IMPL(searchTerms),
7163 TOJSON_IMPL(ageTimeoutMs),
7164 TOJSON_IMPL(advertising)
7165 };
7166 }
7167 static void from_json(const nlohmann::json& j, DiscoverySsdp& p)
7168 {
7169 p.clear();
7170 getOptional("enabled", p.enabled, j, false);
7171 getOptional<std::string>("interfaceName", p.interfaceName, j);
7172
7173 getOptional<NetworkAddress>("address", p.address, j);
7174 if(p.address.address.empty())
7175 {
7176 p.address.address = "255.255.255.255";
7177 }
7178 if(p.address.port <= 0)
7179 {
7180 p.address.port = 1900;
7181 }
7182
7183 getOptional<std::vector<std::string>>("searchTerms", p.searchTerms, j);
7184 getOptional<int>("ageTimeoutMs", p.ageTimeoutMs, j, 30000);
7185 getOptional<Advertising>("advertising", p.advertising, j);
7186 }
7187
7188 //-----------------------------------------------------------
7189 JSON_SERIALIZED_CLASS(DiscoverySap)
7200 {
7201 IMPLEMENT_JSON_SERIALIZATION()
7202 IMPLEMENT_JSON_DOCUMENTATION(DiscoverySap)
7203
7204 public:
7207
7209 std::string interfaceName;
7210
7213
7216
7219
7220 DiscoverySap()
7221 {
7222 clear();
7223 }
7224
7225 void clear()
7226 {
7227 enabled = false;
7228 interfaceName.clear();
7229 address.clear();
7230 ageTimeoutMs = 30000;
7231 advertising.clear();
7232 }
7233 };
7234
7235 static void to_json(nlohmann::json& j, const DiscoverySap& p)
7236 {
7237 j = nlohmann::json{
7238 TOJSON_IMPL(enabled),
7239 TOJSON_IMPL(interfaceName),
7240 TOJSON_IMPL(address),
7241 TOJSON_IMPL(ageTimeoutMs),
7242 TOJSON_IMPL(advertising)
7243 };
7244 }
7245 static void from_json(const nlohmann::json& j, DiscoverySap& p)
7246 {
7247 p.clear();
7248 getOptional("enabled", p.enabled, j, false);
7249 getOptional<std::string>("interfaceName", p.interfaceName, j);
7250 getOptional<NetworkAddress>("address", p.address, j);
7251 if(p.address.address.empty())
7252 {
7253 p.address.address = "224.2.127.254";
7254 }
7255 if(p.address.port <= 0)
7256 {
7257 p.address.port = 9875;
7258 }
7259
7260 getOptional<int>("ageTimeoutMs", p.ageTimeoutMs, j, 30000);
7261 getOptional<Advertising>("advertising", p.advertising, j);
7262 }
7263
7264 //-----------------------------------------------------------
7265 JSON_SERIALIZED_CLASS(DiscoveryCistech)
7278 {
7279 IMPLEMENT_JSON_SERIALIZATION()
7280 IMPLEMENT_JSON_DOCUMENTATION(DiscoveryCistech)
7281
7282 public:
7283 bool enabled;
7284 std::string interfaceName;
7285 NetworkAddress address;
7286 int ageTimeoutMs;
7287
7289 {
7290 clear();
7291 }
7292
7293 void clear()
7294 {
7295 enabled = false;
7296 interfaceName.clear();
7297 address.clear();
7298 ageTimeoutMs = 30000;
7299 }
7300 };
7301
7302 static void to_json(nlohmann::json& j, const DiscoveryCistech& p)
7303 {
7304 j = nlohmann::json{
7305 TOJSON_IMPL(enabled),
7306 TOJSON_IMPL(interfaceName),
7307 TOJSON_IMPL(address),
7308 TOJSON_IMPL(ageTimeoutMs)
7309 };
7310 }
7311 static void from_json(const nlohmann::json& j, DiscoveryCistech& p)
7312 {
7313 p.clear();
7314 getOptional("enabled", p.enabled, j, false);
7315 getOptional<std::string>("interfaceName", p.interfaceName, j);
7316 getOptional<NetworkAddress>("address", p.address, j);
7317 getOptional<int>("ageTimeoutMs", p.ageTimeoutMs, j, 30000);
7318 }
7319
7320
7321 //-----------------------------------------------------------
7322 JSON_SERIALIZED_CLASS(DiscoveryTrellisware)
7333 {
7334 IMPLEMENT_JSON_SERIALIZATION()
7335 IMPLEMENT_JSON_DOCUMENTATION(DiscoveryTrellisware)
7336
7337 public:
7338
7341
7344
7346 {
7347 clear();
7348 }
7349
7350 void clear()
7351 {
7352 enabled = false;
7353 security.clear();
7354 }
7355 };
7356
7357 static void to_json(nlohmann::json& j, const DiscoveryTrellisware& p)
7358 {
7359 j = nlohmann::json{
7360 TOJSON_IMPL(enabled),
7361 TOJSON_IMPL(security)
7362 };
7363 }
7364 static void from_json(const nlohmann::json& j, DiscoveryTrellisware& p)
7365 {
7366 p.clear();
7367 getOptional("enabled", p.enabled, j, false);
7368 getOptional<SecurityCertificate>("security", p.security, j);
7369 }
7370
7371 //-----------------------------------------------------------
7372 JSON_SERIALIZED_CLASS(DiscoveryConfiguration)
7383 {
7384 IMPLEMENT_JSON_SERIALIZATION()
7385 IMPLEMENT_JSON_DOCUMENTATION(DiscoveryConfiguration)
7386
7387 public:
7390
7393
7396
7399
7402
7404 {
7405 clear();
7406 }
7407
7408 void clear()
7409 {
7410 magellan.clear();
7411 ssdp.clear();
7412 sap.clear();
7413 cistech.clear();
7414 }
7415 };
7416
7417 static void to_json(nlohmann::json& j, const DiscoveryConfiguration& p)
7418 {
7419 j = nlohmann::json{
7420 TOJSON_IMPL(magellan),
7421 TOJSON_IMPL(ssdp),
7422 TOJSON_IMPL(sap),
7423 TOJSON_IMPL(cistech),
7424 TOJSON_IMPL(trellisware)
7425 };
7426 }
7427 static void from_json(const nlohmann::json& j, DiscoveryConfiguration& p)
7428 {
7429 p.clear();
7430 getOptional<DiscoveryMagellan>("magellan", p.magellan, j);
7431 getOptional<DiscoverySsdp>("ssdp", p.ssdp, j);
7432 getOptional<DiscoverySap>("sap", p.sap, j);
7433 getOptional<DiscoveryCistech>("cistech", p.cistech, j);
7434 getOptional<DiscoveryTrellisware>("trellisware", p.trellisware, j);
7435 }
7436
7437
7438 //-----------------------------------------------------------
7439 JSON_SERIALIZED_CLASS(EnginePolicyInternals)
7452 {
7453 IMPLEMENT_JSON_SERIALIZATION()
7454 IMPLEMENT_JSON_DOCUMENTATION(EnginePolicyInternals)
7455
7456 public:
7459
7462
7465
7466 int maxRxSecs;
7467
7468 int logTaskQueueStatsIntervalMs;
7469
7470 bool enableLazySpeakerClosure;
7471
7474
7477
7480
7483
7486
7489
7492
7495
7498
7500 {
7501 clear();
7502 }
7503
7504 void clear()
7505 {
7506 watchdog.clear();
7507 housekeeperIntervalMs = 1000;
7508 logTaskQueueStatsIntervalMs = 0;
7509 maxTxSecs = 30;
7510 maxRxSecs = 0;
7511 enableLazySpeakerClosure = false;
7512 rpClusterStrategy = RallypointCluster::ConnectionStrategy_t::csRoundRobin;
7513 rpClusterRolloverSecs = 10;
7514 rtpExpirationCheckIntervalMs = 250;
7515 rpConnectionTimeoutSecs = 0;
7516 rpTransactionTimeoutMs = 0;
7517 stickyTidHangSecs = 10;
7518 uriStreamingIntervalMs = 60;
7519 delayedMicrophoneClosureSecs = 15;
7520 tuning.clear();
7521 }
7522 };
7523
7524 static void to_json(nlohmann::json& j, const EnginePolicyInternals& p)
7525 {
7526 j = nlohmann::json{
7527 TOJSON_IMPL(watchdog),
7528 TOJSON_IMPL(housekeeperIntervalMs),
7529 TOJSON_IMPL(logTaskQueueStatsIntervalMs),
7530 TOJSON_IMPL(maxTxSecs),
7531 TOJSON_IMPL(maxRxSecs),
7532 TOJSON_IMPL(enableLazySpeakerClosure),
7533 TOJSON_IMPL(rpClusterStrategy),
7534 TOJSON_IMPL(rpClusterRolloverSecs),
7535 TOJSON_IMPL(rtpExpirationCheckIntervalMs),
7536 TOJSON_IMPL(rpConnectionTimeoutSecs),
7537 TOJSON_IMPL(rpTransactionTimeoutMs),
7538 TOJSON_IMPL(stickyTidHangSecs),
7539 TOJSON_IMPL(uriStreamingIntervalMs),
7540 TOJSON_IMPL(delayedMicrophoneClosureSecs),
7541 TOJSON_IMPL(tuning)
7542 };
7543 }
7544 static void from_json(const nlohmann::json& j, EnginePolicyInternals& p)
7545 {
7546 p.clear();
7547 getOptional<WatchdogSettings>("watchdog", p.watchdog, j);
7548 getOptional<int>("housekeeperIntervalMs", p.housekeeperIntervalMs, j, 1000);
7549 getOptional<int>("logTaskQueueStatsIntervalMs", p.logTaskQueueStatsIntervalMs, j, 0);
7550 getOptional<int>("maxTxSecs", p.maxTxSecs, j, 30);
7551 getOptional<int>("maxRxSecs", p.maxRxSecs, j, 0);
7552 getOptional<bool>("enableLazySpeakerClosure", p.enableLazySpeakerClosure, j, false);
7553 getOptional<RallypointCluster::ConnectionStrategy_t>("rpClusterStrategy", p.rpClusterStrategy, j, RallypointCluster::ConnectionStrategy_t::csRoundRobin);
7554 getOptional<int>("rpClusterRolloverSecs", p.rpClusterRolloverSecs, j, 10);
7555 getOptional<int>("rtpExpirationCheckIntervalMs", p.rtpExpirationCheckIntervalMs, j, 250);
7556 getOptional<int>("rpConnectionTimeoutSecs", p.rpConnectionTimeoutSecs, j, 0);
7557 getOptional<int>("rpTransactionTimeoutMs", p.rpTransactionTimeoutMs, j, 0);
7558 getOptional<int>("stickyTidHangSecs", p.stickyTidHangSecs, j, 10);
7559 getOptional<int>("uriStreamingIntervalMs", p.uriStreamingIntervalMs, j, 60);
7560 getOptional<int>("delayedMicrophoneClosureSecs", p.delayedMicrophoneClosureSecs, j, 15);
7561 getOptional<TuningSettings>("tuning", p.tuning, j);
7562 }
7563
7564 //-----------------------------------------------------------
7565 JSON_SERIALIZED_CLASS(EnginePolicyTimelines)
7578 {
7579 IMPLEMENT_JSON_SERIALIZATION()
7580 IMPLEMENT_JSON_DOCUMENTATION(EnginePolicyTimelines)
7581
7582 public:
7583
7590
7592 std::string storageRoot;
7593
7596
7599
7602
7605
7608
7611
7614
7623
7626
7629
7632
7634 {
7635 clear();
7636 }
7637
7638 void clear()
7639 {
7640 enabled = true;
7641 storageRoot.clear();
7642 maxStorageMb = 1024; // 1 Gigabyte
7643 maxMemMb = maxStorageMb;
7644 maxAudioEventMemMb = maxMemMb;
7645 maxDiskMb = maxStorageMb;
7646 maxEventAgeSecs = (86400 * 30); // 30 days
7647 groomingIntervalSecs = (60 * 30); // 30 minutes
7648 maxEvents = 1000;
7649 autosaveIntervalSecs = 5;
7650 security.clear();
7651 disableSigningAndVerification = false;
7652 ephemeral = false;
7653 }
7654 };
7655
7656 static void to_json(nlohmann::json& j, const EnginePolicyTimelines& p)
7657 {
7658 j = nlohmann::json{
7659 TOJSON_IMPL(enabled),
7660 TOJSON_IMPL(storageRoot),
7661 TOJSON_IMPL(maxMemMb),
7662 TOJSON_IMPL(maxAudioEventMemMb),
7663 TOJSON_IMPL(maxDiskMb),
7664 TOJSON_IMPL(maxEventAgeSecs),
7665 TOJSON_IMPL(maxEvents),
7666 TOJSON_IMPL(groomingIntervalSecs),
7667 TOJSON_IMPL(autosaveIntervalSecs),
7668 TOJSON_IMPL(security),
7669 TOJSON_IMPL(disableSigningAndVerification),
7670 TOJSON_IMPL(ephemeral)
7671 };
7672 }
7673 static void from_json(const nlohmann::json& j, EnginePolicyTimelines& p)
7674 {
7675 p.clear();
7676 getOptional<bool>("enabled", p.enabled, j, true);
7677 getOptional<std::string>("storageRoot", p.storageRoot, j, EMPTY_STRING);
7678
7679 getOptional<int>("maxStorageMb", p.maxStorageMb, j, 1024);
7680 getOptional<int>("maxMemMb", p.maxMemMb, j, p.maxStorageMb);
7681 getOptional<int>("maxAudioEventMemMb", p.maxAudioEventMemMb, j, p.maxMemMb);
7682 getOptional<int>("maxDiskMb", p.maxDiskMb, j, p.maxStorageMb);
7683 getOptional<long>("maxEventAgeSecs", p.maxEventAgeSecs, j, (86400 * 30));
7684 getOptional<long>("groomingIntervalSecs", p.groomingIntervalSecs, j, (60 * 30));
7685 getOptional<long>("autosaveIntervalSecs", p.autosaveIntervalSecs, j, 5);
7686 getOptional<int>("maxEvents", p.maxEvents, j, 1000);
7687 getOptional<SecurityCertificate>("security", p.security, j);
7688 getOptional<bool>("disableSigningAndVerification", p.disableSigningAndVerification, j, false);
7689 getOptional<bool>("ephemeral", p.ephemeral, j, false);
7690 }
7691
7692
7693 //-----------------------------------------------------------
7694 JSON_SERIALIZED_CLASS(RtpMapEntry)
7705 {
7706 IMPLEMENT_JSON_SERIALIZATION()
7707 IMPLEMENT_JSON_DOCUMENTATION(RtpMapEntry)
7708
7709 public:
7711 std::string name;
7712
7715
7718
7719 RtpMapEntry()
7720 {
7721 clear();
7722 }
7723
7724 void clear()
7725 {
7726 name.clear();
7727 engageType = -1;
7728 rtpPayloadType = -1;
7729 }
7730 };
7731
7732 static void to_json(nlohmann::json& j, const RtpMapEntry& p)
7733 {
7734 j = nlohmann::json{
7735 TOJSON_IMPL(name),
7736 TOJSON_IMPL(engageType),
7737 TOJSON_IMPL(rtpPayloadType)
7738 };
7739 }
7740 static void from_json(const nlohmann::json& j, RtpMapEntry& p)
7741 {
7742 p.clear();
7743 getOptional<std::string>("name", p.name, j, EMPTY_STRING);
7744 getOptional<int>("engageType", p.engageType, j, -1);
7745 getOptional<int>("rtpPayloadType", p.rtpPayloadType, j, -1);
7746 }
7747
7748 //-----------------------------------------------------------
7749 JSON_SERIALIZED_CLASS(ExternalModule)
7760 {
7761 IMPLEMENT_JSON_SERIALIZATION()
7762 IMPLEMENT_JSON_DOCUMENTATION(ExternalModule)
7763
7764 public:
7766 std::string name;
7767
7769 std::string file;
7770
7772 nlohmann::json configuration;
7773
7775 {
7776 clear();
7777 }
7778
7779 void clear()
7780 {
7781 name.clear();
7782 file.clear();
7783 configuration.clear();
7784 }
7785 };
7786
7787 static void to_json(nlohmann::json& j, const ExternalModule& p)
7788 {
7789 j = nlohmann::json{
7790 TOJSON_IMPL(name),
7791 TOJSON_IMPL(file)
7792 };
7793
7794 if(!p.configuration.empty())
7795 {
7796 j["configuration"] = p.configuration;
7797 }
7798 }
7799 static void from_json(const nlohmann::json& j, ExternalModule& p)
7800 {
7801 p.clear();
7802 getOptional<std::string>("name", p.name, j, EMPTY_STRING);
7803 getOptional<std::string>("file", p.file, j, EMPTY_STRING);
7804
7805 try
7806 {
7807 p.configuration = j.at("configuration");
7808 }
7809 catch(...)
7810 {
7811 p.configuration.clear();
7812 }
7813 }
7814
7815
7816 //-----------------------------------------------------------
7817 JSON_SERIALIZED_CLASS(ExternalCodecDescriptor)
7828 {
7829 IMPLEMENT_JSON_SERIALIZATION()
7830 IMPLEMENT_JSON_DOCUMENTATION(ExternalCodecDescriptor)
7831
7832 public:
7835
7838
7841
7844
7846 {
7847 clear();
7848 }
7849
7850 void clear()
7851 {
7852 rtpPayloadType = -1;
7853 samplingRate = -1;
7854 channels = -1;
7855 rtpTsMultiplier = 0;
7856 }
7857 };
7858
7859 static void to_json(nlohmann::json& j, const ExternalCodecDescriptor& p)
7860 {
7861 j = nlohmann::json{
7862 TOJSON_IMPL(rtpPayloadType),
7863 TOJSON_IMPL(samplingRate),
7864 TOJSON_IMPL(channels),
7865 TOJSON_IMPL(rtpTsMultiplier)
7866 };
7867 }
7868 static void from_json(const nlohmann::json& j, ExternalCodecDescriptor& p)
7869 {
7870 p.clear();
7871
7872 getOptional<int>("rtpPayloadType", p.rtpPayloadType, j, -1);
7873 getOptional<int>("samplingRate", p.samplingRate, j, -1);
7874 getOptional<int>("channels", p.channels, j, -1);
7875 getOptional<int>("rtpTsMultiplier", p.rtpTsMultiplier, j, -1);
7876 }
7877
7878 //-----------------------------------------------------------
7879 JSON_SERIALIZED_CLASS(EngineStatusReportConfiguration)
7890 {
7891 IMPLEMENT_JSON_SERIALIZATION()
7892 IMPLEMENT_JSON_DOCUMENTATION(EngineStatusReportConfiguration)
7893
7894 public:
7896 std::string fileName;
7897
7900
7903
7905 std::string runCmd;
7906
7909
7912
7914 {
7915 clear();
7916 }
7917
7918 void clear()
7919 {
7920 fileName.clear();
7921 intervalSecs = 60;
7922 enabled = false;
7923 includeMemoryDetail = false;
7924 includeTaskQueueDetail = false;
7925 runCmd.clear();
7926 }
7927 };
7928
7929 static void to_json(nlohmann::json& j, const EngineStatusReportConfiguration& p)
7930 {
7931 j = nlohmann::json{
7932 TOJSON_IMPL(fileName),
7933 TOJSON_IMPL(intervalSecs),
7934 TOJSON_IMPL(enabled),
7935 TOJSON_IMPL(includeMemoryDetail),
7936 TOJSON_IMPL(includeTaskQueueDetail),
7937 TOJSON_IMPL(runCmd)
7938 };
7939 }
7940 static void from_json(const nlohmann::json& j, EngineStatusReportConfiguration& p)
7941 {
7942 p.clear();
7943 getOptional<std::string>("fileName", p.fileName, j);
7944 getOptional<int>("intervalSecs", p.intervalSecs, j, 60);
7945 getOptional<bool>("enabled", p.enabled, j, false);
7946 getOptional<std::string>("runCmd", p.runCmd, j);
7947 getOptional<bool>("includeMemoryDetail", p.includeMemoryDetail, j, false);
7948 getOptional<bool>("includeTaskQueueDetail", p.includeTaskQueueDetail, j, false);
7949 }
7950
7951 //-----------------------------------------------------------
7952 JSON_SERIALIZED_CLASS(EnginePolicy)
7965 {
7966 IMPLEMENT_JSON_SERIALIZATION()
7967 IMPLEMENT_JSON_DOCUMENTATION(EnginePolicy)
7968
7969 public:
7970
7972 std::string dataDirectory;
7973
7976
7979
7982
7985
7988
7991
7994
7997
8000
8003
8006
8008 std::vector<ExternalModule> externalCodecs;
8009
8011 std::vector<RtpMapEntry> rtpMap;
8012
8015
8016 EnginePolicy()
8017 {
8018 clear();
8019 }
8020
8021 void clear()
8022 {
8023 dataDirectory.clear();
8024 licensing.clear();
8025 security.clear();
8026 networking.clear();
8027 audio.clear();
8028 discovery.clear();
8029 logging.clear();
8030 internals.clear();
8031 timelines.clear();
8032 database.clear();
8033 featureset.clear();
8034 namedAudioDevices.clear();
8035 externalCodecs.clear();
8036 rtpMap.clear();
8037 statusReport.clear();
8038 }
8039 };
8040
8041 static void to_json(nlohmann::json& j, const EnginePolicy& p)
8042 {
8043 j = nlohmann::json{
8044 TOJSON_IMPL(dataDirectory),
8045 TOJSON_IMPL(licensing),
8046 TOJSON_IMPL(security),
8047 TOJSON_IMPL(networking),
8048 TOJSON_IMPL(audio),
8049 TOJSON_IMPL(discovery),
8050 TOJSON_IMPL(logging),
8051 TOJSON_IMPL(internals),
8052 TOJSON_IMPL(timelines),
8053 TOJSON_IMPL(database),
8054 TOJSON_IMPL(featureset),
8055 TOJSON_IMPL(namedAudioDevices),
8056 TOJSON_IMPL(externalCodecs),
8057 TOJSON_IMPL(rtpMap),
8058 TOJSON_IMPL(statusReport)
8059 };
8060 }
8061 static void from_json(const nlohmann::json& j, EnginePolicy& p)
8062 {
8063 p.clear();
8064 FROMJSON_IMPL_SIMPLE(dataDirectory);
8065 FROMJSON_IMPL_SIMPLE(licensing);
8066 FROMJSON_IMPL_SIMPLE(security);
8067 FROMJSON_IMPL_SIMPLE(networking);
8068 FROMJSON_IMPL_SIMPLE(audio);
8069 FROMJSON_IMPL_SIMPLE(discovery);
8070 FROMJSON_IMPL_SIMPLE(logging);
8071 FROMJSON_IMPL_SIMPLE(internals);
8072 FROMJSON_IMPL_SIMPLE(timelines);
8073 FROMJSON_IMPL_SIMPLE(database);
8074 FROMJSON_IMPL_SIMPLE(featureset);
8075 FROMJSON_IMPL_SIMPLE(namedAudioDevices);
8076 FROMJSON_IMPL_SIMPLE(externalCodecs);
8077 FROMJSON_IMPL_SIMPLE(rtpMap);
8078 FROMJSON_IMPL_SIMPLE(statusReport);
8079 }
8080
8081
8082 //-----------------------------------------------------------
8083 JSON_SERIALIZED_CLASS(TalkgroupAsset)
8094 {
8095 IMPLEMENT_JSON_SERIALIZATION()
8096 IMPLEMENT_JSON_DOCUMENTATION(TalkgroupAsset)
8097
8098 public:
8099
8101 std::string nodeId;
8102
8105
8107 {
8108 clear();
8109 }
8110
8111 void clear()
8112 {
8113 nodeId.clear();
8114 group.clear();
8115 }
8116 };
8117
8118 static void to_json(nlohmann::json& j, const TalkgroupAsset& p)
8119 {
8120 j = nlohmann::json{
8121 TOJSON_IMPL(nodeId),
8122 TOJSON_IMPL(group)
8123 };
8124 }
8125 static void from_json(const nlohmann::json& j, TalkgroupAsset& p)
8126 {
8127 p.clear();
8128 getOptional<std::string>("nodeId", p.nodeId, j);
8129 getOptional<Group>("group", p.group, j);
8130 }
8131
8132 //-----------------------------------------------------------
8133 JSON_SERIALIZED_CLASS(EngageDiscoveredGroup)
8142 {
8143 IMPLEMENT_JSON_SERIALIZATION()
8144 IMPLEMENT_JSON_DOCUMENTATION(EngageDiscoveredGroup)
8145
8146 public:
8148 std::string id;
8149
8151 int type;
8152
8155
8158
8160 {
8161 clear();
8162 }
8163
8164 void clear()
8165 {
8166 id.clear();
8167 type = 0;
8168 rx.clear();
8169 tx.clear();
8170 }
8171 };
8172
8173 static void to_json(nlohmann::json& j, const EngageDiscoveredGroup& p)
8174 {
8175 j = nlohmann::json{
8176 TOJSON_IMPL(id),
8177 TOJSON_IMPL(type),
8178 TOJSON_IMPL(rx),
8179 TOJSON_IMPL(tx)
8180 };
8181 }
8182 static void from_json(const nlohmann::json& j, EngageDiscoveredGroup& p)
8183 {
8184 p.clear();
8185 getOptional<std::string>("id", p.id, j);
8186 getOptional<int>("type", p.type, j, 0);
8187 getOptional<NetworkAddress>("rx", p.rx, j);
8188 getOptional<NetworkAddress>("tx", p.tx, j);
8189 }
8190
8191 //-----------------------------------------------------------
8192 JSON_SERIALIZED_CLASS(RallypointPeer)
8203 {
8204 IMPLEMENT_JSON_SERIALIZATION()
8205 IMPLEMENT_JSON_DOCUMENTATION(RallypointPeer)
8206
8207 public:
8208 typedef enum
8209 {
8211 olpUseRpConfiguration = 0,
8212
8214 olpIsMeshLeaf = 1,
8215
8217 olpNotMeshLeaf = 2
8218 } OutboundLeafPolicy_t;
8219
8220 typedef enum
8221 {
8223 olpUseRpWebSocketTlsConfiguration = 0,
8224
8226 olpUseTlsForWebSocket = 1,
8227
8229 olpDoNotUseTlsForWebSocket = 2
8230 } OutboundWebSocketTlsPolicy_t;
8231
8233 std::string id;
8234
8237
8240
8243
8246
8249
8250 OutboundLeafPolicy_t outboundLeafPolicy;
8251
8254
8256 std::string path;
8257
8260
8263
8265 {
8266 clear();
8267 }
8268
8269 void clear()
8270 {
8271 id.clear();
8272 enabled = true;
8273 host.clear();
8274 certificate.clear();
8275 connectionTimeoutSecs = 0;
8276 forceIsMeshLeaf = false;
8277 outboundLeafPolicy = OutboundLeafPolicy_t::olpUseRpConfiguration;
8278 protocol = Rallypoint::RpProtocol_t::rppTlsTcp;
8279 path.clear();
8280 additionalProtocols.clear();
8281 outboundWebSocketTlsPolicy = OutboundWebSocketTlsPolicy_t::olpUseRpWebSocketTlsConfiguration;
8282 }
8283 };
8284
8285 static void to_json(nlohmann::json& j, const RallypointPeer& p)
8286 {
8287 j = nlohmann::json{
8288 TOJSON_IMPL(id),
8289 TOJSON_IMPL(enabled),
8290 TOJSON_IMPL(host),
8291 TOJSON_IMPL(certificate),
8292 TOJSON_IMPL(connectionTimeoutSecs),
8293 TOJSON_IMPL(forceIsMeshLeaf),
8294 TOJSON_IMPL(outboundLeafPolicy),
8295 TOJSON_IMPL(protocol),
8296 TOJSON_IMPL(path),
8297 TOJSON_IMPL(additionalProtocols),
8298 TOJSON_IMPL(outboundWebSocketTlsPolicy)
8299 };
8300 }
8301 static void from_json(const nlohmann::json& j, RallypointPeer& p)
8302 {
8303 p.clear();
8304 j.at("id").get_to(p.id);
8305 getOptional<bool>("enabled", p.enabled, j, true);
8306 getOptional<NetworkAddress>("host", p.host, j);
8307 getOptional<SecurityCertificate>("certificate", p.certificate, j);
8308 getOptional<int>("connectionTimeoutSecs", p.connectionTimeoutSecs, j, 0);
8309 getOptional<bool>("forceIsMeshLeaf", p.forceIsMeshLeaf, j, false);
8310 getOptional<RallypointPeer::OutboundLeafPolicy_t>("outboundLeafPolicy", p.outboundLeafPolicy, j, RallypointPeer::OutboundLeafPolicy_t::olpUseRpConfiguration);
8311 getOptional<Rallypoint::RpProtocol_t>("protocol", p.protocol, j, Rallypoint::RpProtocol_t::rppTlsTcp);
8312 getOptional<std::string>("path", p.path, j);
8313 getOptional<std::string>("additionalProtocols", p.additionalProtocols, j);
8314 getOptional<RallypointPeer::OutboundWebSocketTlsPolicy_t>("outboundWebSocketTlsPolicy", p.outboundWebSocketTlsPolicy, j, RallypointPeer::OutboundWebSocketTlsPolicy_t::olpUseRpWebSocketTlsConfiguration);
8315 }
8316
8317 //-----------------------------------------------------------
8318 JSON_SERIALIZED_CLASS(RallypointServerLimits)
8329 {
8330 IMPLEMENT_JSON_SERIALIZATION()
8331 IMPLEMENT_JSON_DOCUMENTATION(RallypointServerLimits)
8332
8333 public:
8335 uint32_t maxClients;
8336
8338 uint32_t maxPeers;
8339
8342
8345
8348
8351
8354
8357
8360
8363
8366
8369
8372
8375
8378
8380 {
8381 clear();
8382 }
8383
8384 void clear()
8385 {
8386 maxClients = 0;
8387 maxPeers = 0;
8388 maxMulticastReflectors = 0;
8389 maxRegisteredStreams = 0;
8390 maxStreamPaths = 0;
8391 maxRxPacketsPerSec = 0;
8392 maxTxPacketsPerSec = 0;
8393 maxRxBytesPerSec = 0;
8394 maxTxBytesPerSec = 0;
8395 maxQOpsPerSec = 0;
8396 maxInboundBacklog = 64;
8397 lowPriorityQueueThreshold = 64;
8398 normalPriorityQueueThreshold = 256;
8399 denyNewConnectionCpuThreshold = 75;
8400 warnAtCpuThreshold = 65;
8401 }
8402 };
8403
8404 static void to_json(nlohmann::json& j, const RallypointServerLimits& p)
8405 {
8406 j = nlohmann::json{
8407 TOJSON_IMPL(maxClients),
8408 TOJSON_IMPL(maxPeers),
8409 TOJSON_IMPL(maxMulticastReflectors),
8410 TOJSON_IMPL(maxRegisteredStreams),
8411 TOJSON_IMPL(maxStreamPaths),
8412 TOJSON_IMPL(maxRxPacketsPerSec),
8413 TOJSON_IMPL(maxTxPacketsPerSec),
8414 TOJSON_IMPL(maxRxBytesPerSec),
8415 TOJSON_IMPL(maxTxBytesPerSec),
8416 TOJSON_IMPL(maxQOpsPerSec),
8417 TOJSON_IMPL(maxInboundBacklog),
8418 TOJSON_IMPL(lowPriorityQueueThreshold),
8419 TOJSON_IMPL(normalPriorityQueueThreshold),
8420 TOJSON_IMPL(denyNewConnectionCpuThreshold),
8421 TOJSON_IMPL(warnAtCpuThreshold)
8422 };
8423 }
8424 static void from_json(const nlohmann::json& j, RallypointServerLimits& p)
8425 {
8426 p.clear();
8427 getOptional<uint32_t>("maxClients", p.maxClients, j, 0);
8428 getOptional<uint32_t>("maxPeers", p.maxPeers, j, 0);
8429 getOptional<uint32_t>("maxMulticastReflectors", p.maxMulticastReflectors, j, 0);
8430 getOptional<uint32_t>("maxRegisteredStreams", p.maxRegisteredStreams, j, 0);
8431 getOptional<uint32_t>("maxStreamPaths", p.maxStreamPaths, j, 0);
8432 getOptional<uint32_t>("maxRxPacketsPerSec", p.maxRxPacketsPerSec, j, 0);
8433 getOptional<uint32_t>("maxTxPacketsPerSec", p.maxTxPacketsPerSec, j, 0);
8434 getOptional<uint32_t>("maxRxBytesPerSec", p.maxRxBytesPerSec, j, 0);
8435 getOptional<uint32_t>("maxTxBytesPerSec", p.maxTxBytesPerSec, j, 0);
8436 getOptional<uint32_t>("maxQOpsPerSec", p.maxQOpsPerSec, j, 0);
8437 getOptional<uint32_t>("maxInboundBacklog", p.maxInboundBacklog, j, 64);
8438 getOptional<uint32_t>("lowPriorityQueueThreshold", p.lowPriorityQueueThreshold, j, 64);
8439 getOptional<uint32_t>("normalPriorityQueueThreshold", p.normalPriorityQueueThreshold, j, 256);
8440 getOptional<uint32_t>("denyNewConnectionCpuThreshold", p.denyNewConnectionCpuThreshold, j, 75);
8441 getOptional<uint32_t>("warnAtCpuThreshold", p.warnAtCpuThreshold, j, 65);
8442 }
8443
8444 //-----------------------------------------------------------
8445 JSON_SERIALIZED_CLASS(RallypointServerStatusReportConfiguration)
8456 {
8457 IMPLEMENT_JSON_SERIALIZATION()
8458 IMPLEMENT_JSON_DOCUMENTATION(RallypointServerStatusReportConfiguration)
8459
8460 public:
8462 std::string fileName;
8463
8466
8469
8472
8475
8478
8480 std::string runCmd;
8481
8483 {
8484 clear();
8485 }
8486
8487 void clear()
8488 {
8489 fileName.clear();
8490 intervalSecs = 60;
8491 enabled = false;
8492 includeLinks = false;
8493 includePeerLinkDetails = false;
8494 includeClientLinkDetails = false;
8495 runCmd.clear();
8496 }
8497 };
8498
8499 static void to_json(nlohmann::json& j, const RallypointServerStatusReportConfiguration& p)
8500 {
8501 j = nlohmann::json{
8502 TOJSON_IMPL(fileName),
8503 TOJSON_IMPL(intervalSecs),
8504 TOJSON_IMPL(enabled),
8505 TOJSON_IMPL(includeLinks),
8506 TOJSON_IMPL(includePeerLinkDetails),
8507 TOJSON_IMPL(includeClientLinkDetails),
8508 TOJSON_IMPL(runCmd)
8509 };
8510 }
8511 static void from_json(const nlohmann::json& j, RallypointServerStatusReportConfiguration& p)
8512 {
8513 p.clear();
8514 getOptional<std::string>("fileName", p.fileName, j);
8515 getOptional<int>("intervalSecs", p.intervalSecs, j, 60);
8516 getOptional<bool>("enabled", p.enabled, j, false);
8517 getOptional<bool>("includeLinks", p.includeLinks, j, false);
8518 getOptional<bool>("includePeerLinkDetails", p.includePeerLinkDetails, j, false);
8519 getOptional<bool>("includeClientLinkDetails", p.includeClientLinkDetails, j, false);
8520 getOptional<std::string>("runCmd", p.runCmd, j);
8521 }
8522
8523 //-----------------------------------------------------------
8524 JSON_SERIALIZED_CLASS(RallypointServerLinkGraph)
8526 {
8527 IMPLEMENT_JSON_SERIALIZATION()
8528 IMPLEMENT_JSON_DOCUMENTATION(RallypointServerLinkGraph)
8529
8530 public:
8532 std::string fileName;
8533
8536
8539
8542
8547
8549 std::string coreRpStyling;
8550
8552 std::string leafRpStyling;
8553
8555 std::string clientStyling;
8556
8558 std::string runCmd;
8559
8561 {
8562 clear();
8563 }
8564
8565 void clear()
8566 {
8567 fileName.clear();
8568 minRefreshSecs = 5;
8569 enabled = false;
8570 includeDigraphEnclosure = true;
8571 includeClients = false;
8572 coreRpStyling = "[shape=hexagon color=firebrick style=filled]";
8573 leafRpStyling = "[shape=box color=gray style=filled]";
8574 clientStyling.clear();
8575 runCmd.clear();
8576 }
8577 };
8578
8579 static void to_json(nlohmann::json& j, const RallypointServerLinkGraph& p)
8580 {
8581 j = nlohmann::json{
8582 TOJSON_IMPL(fileName),
8583 TOJSON_IMPL(minRefreshSecs),
8584 TOJSON_IMPL(enabled),
8585 TOJSON_IMPL(includeDigraphEnclosure),
8586 TOJSON_IMPL(includeClients),
8587 TOJSON_IMPL(coreRpStyling),
8588 TOJSON_IMPL(leafRpStyling),
8589 TOJSON_IMPL(clientStyling),
8590 TOJSON_IMPL(runCmd)
8591 };
8592 }
8593 static void from_json(const nlohmann::json& j, RallypointServerLinkGraph& p)
8594 {
8595 p.clear();
8596 getOptional<std::string>("fileName", p.fileName, j);
8597 getOptional<int>("minRefreshSecs", p.minRefreshSecs, j, 5);
8598 getOptional<bool>("enabled", p.enabled, j, false);
8599 getOptional<bool>("includeDigraphEnclosure", p.includeDigraphEnclosure, j, true);
8600 getOptional<bool>("includeClients", p.includeClients, j, false);
8601 getOptional<std::string>("coreRpStyling", p.coreRpStyling, j, "[shape=hexagon color=firebrick style=filled]");
8602 getOptional<std::string>("leafRpStyling", p.leafRpStyling, j, "[shape=box color=gray style=filled]");
8603 getOptional<std::string>("clientStyling", p.clientStyling, j);
8604 getOptional<std::string>("runCmd", p.runCmd, j);
8605 }
8606
8607
8608 //-----------------------------------------------------------
8609 JSON_SERIALIZED_CLASS(RallypointServerStreamStatsExport)
8618 {
8619 IMPLEMENT_JSON_SERIALIZATION()
8620 IMPLEMENT_JSON_DOCUMENTATION(RallypointServerStreamStatsExport)
8621
8622 public:
8624 typedef enum
8625 {
8627 fmtCsv = 0,
8628
8630 fmtJson = 1
8631 } ExportFormat_t;
8632
8634 std::string fileName;
8635
8638
8641
8644
8646 std::string runCmd;
8647
8650
8651
8653 {
8654 clear();
8655 }
8656
8657 void clear()
8658 {
8659 fileName.clear();
8660 intervalSecs = 60;
8661 enabled = false;
8662 resetCountersAfterExport = false;
8663 runCmd.clear();
8664 format = fmtJson;
8665 }
8666 };
8667
8668 static void to_json(nlohmann::json& j, const RallypointServerStreamStatsExport& p)
8669 {
8670 j = nlohmann::json{
8671 TOJSON_IMPL(fileName),
8672 TOJSON_IMPL(intervalSecs),
8673 TOJSON_IMPL(enabled),
8674 TOJSON_IMPL(resetCountersAfterExport),
8675 TOJSON_IMPL(runCmd),
8676 TOJSON_IMPL(format)
8677 };
8678 }
8679 static void from_json(const nlohmann::json& j, RallypointServerStreamStatsExport& p)
8680 {
8681 p.clear();
8682 getOptional<std::string>("fileName", p.fileName, j);
8683 getOptional<int>("intervalSecs", p.intervalSecs, j, 60);
8684 getOptional<bool>("enabled", p.enabled, j, false);
8685 getOptional<bool>("resetCountersAfterExport", p.resetCountersAfterExport, j, false);
8686 getOptional<std::string>("runCmd", p.runCmd, j);
8687 getOptional<RallypointServerStreamStatsExport::ExportFormat_t>("format", p.format, j, RallypointServerStreamStatsExport::ExportFormat_t::fmtCsv);
8688 }
8689
8690 //-----------------------------------------------------------
8691 JSON_SERIALIZED_CLASS(RallypointServerRouteMap)
8693 {
8694 IMPLEMENT_JSON_SERIALIZATION()
8695 IMPLEMENT_JSON_DOCUMENTATION(RallypointServerRouteMap)
8696
8697 public:
8699 std::string fileName;
8700
8703
8706
8708 std::string runCmd;
8709
8711 {
8712 clear();
8713 }
8714
8715 void clear()
8716 {
8717 fileName.clear();
8718 minRefreshSecs = 5;
8719 enabled = false;
8720 }
8721 };
8722
8723 static void to_json(nlohmann::json& j, const RallypointServerRouteMap& p)
8724 {
8725 j = nlohmann::json{
8726 TOJSON_IMPL(fileName),
8727 TOJSON_IMPL(minRefreshSecs),
8728 TOJSON_IMPL(enabled),
8729 TOJSON_IMPL(runCmd)
8730 };
8731 }
8732 static void from_json(const nlohmann::json& j, RallypointServerRouteMap& p)
8733 {
8734 p.clear();
8735 getOptional<std::string>("fileName", p.fileName, j);
8736 getOptional<int>("minRefreshSecs", p.minRefreshSecs, j, 5);
8737 getOptional<bool>("enabled", p.enabled, j, false);
8738 getOptional<std::string>("runCmd", p.runCmd, j);
8739 }
8740
8741
8742 //-----------------------------------------------------------
8743 JSON_SERIALIZED_CLASS(ExternalHealthCheckResponder)
8754 {
8755 IMPLEMENT_JSON_SERIALIZATION()
8756 IMPLEMENT_JSON_DOCUMENTATION(ExternalHealthCheckResponder)
8757
8758 public:
8759
8762
8765
8767 {
8768 clear();
8769 }
8770
8771 void clear()
8772 {
8773 listenPort = 0;
8774 immediateClose = true;
8775 }
8776 };
8777
8778 static void to_json(nlohmann::json& j, const ExternalHealthCheckResponder& p)
8779 {
8780 j = nlohmann::json{
8781 TOJSON_IMPL(listenPort),
8782 TOJSON_IMPL(immediateClose)
8783 };
8784 }
8785 static void from_json(const nlohmann::json& j, ExternalHealthCheckResponder& p)
8786 {
8787 p.clear();
8788 getOptional<int>("listenPort", p.listenPort, j, 0);
8789 getOptional<bool>("immediateClose", p.immediateClose, j, true);
8790 }
8791
8792
8793 //-----------------------------------------------------------
8794 JSON_SERIALIZED_CLASS(PeeringConfiguration)
8803 {
8804 IMPLEMENT_JSON_SERIALIZATION()
8805 IMPLEMENT_JSON_DOCUMENTATION(PeeringConfiguration)
8806
8807 public:
8808
8810 std::string id;
8811
8814
8816 std::string comments;
8817
8819 std::vector<RallypointPeer> peers;
8820
8822 {
8823 clear();
8824 }
8825
8826 void clear()
8827 {
8828 id.clear();
8829 version = 0;
8830 comments.clear();
8831 }
8832 };
8833
8834 static void to_json(nlohmann::json& j, const PeeringConfiguration& p)
8835 {
8836 j = nlohmann::json{
8837 TOJSON_IMPL(id),
8838 TOJSON_IMPL(version),
8839 TOJSON_IMPL(comments),
8840 TOJSON_IMPL(peers)
8841 };
8842 }
8843 static void from_json(const nlohmann::json& j, PeeringConfiguration& p)
8844 {
8845 p.clear();
8846 getOptional<std::string>("id", p.id, j);
8847 getOptional<int>("version", p.version, j, 0);
8848 getOptional<std::string>("comments", p.comments, j);
8849 getOptional<std::vector<RallypointPeer>>("peers", p.peers, j);
8850 }
8851
8852 //-----------------------------------------------------------
8853 JSON_SERIALIZED_CLASS(IgmpSnooping)
8862 {
8863 IMPLEMENT_JSON_SERIALIZATION()
8864 IMPLEMENT_JSON_DOCUMENTATION(IgmpSnooping)
8865
8866 public:
8867
8870
8873
8876
8877
8878 IgmpSnooping()
8879 {
8880 clear();
8881 }
8882
8883 void clear()
8884 {
8885 enabled = false;
8886 queryIntervalMs = 125000;
8887 subscriptionTimeoutMs = 0;
8888 }
8889 };
8890
8891 static void to_json(nlohmann::json& j, const IgmpSnooping& p)
8892 {
8893 j = nlohmann::json{
8894 TOJSON_IMPL(enabled),
8895 TOJSON_IMPL(queryIntervalMs),
8896 TOJSON_IMPL(subscriptionTimeoutMs)
8897 };
8898 }
8899 static void from_json(const nlohmann::json& j, IgmpSnooping& p)
8900 {
8901 p.clear();
8902 getOptional<bool>("enabled", p.enabled, j);
8903 getOptional<int>("queryIntervalMs", p.queryIntervalMs, j, 125000);
8904 getOptional<int>("subscriptionTimeoutMs", p.subscriptionTimeoutMs, j, 0);
8905 }
8906
8907
8908 //-----------------------------------------------------------
8909 JSON_SERIALIZED_CLASS(RallypointReflector)
8917 {
8918 IMPLEMENT_JSON_SERIALIZATION()
8919 IMPLEMENT_JSON_DOCUMENTATION(RallypointReflector)
8920
8921 public:
8923 typedef enum
8924 {
8926 drNone = 0,
8927
8929 drRxOnly = 1,
8930
8932 drTxOnly = 2
8933 } DirectionRestriction_t;
8934
8938 std::string id;
8939
8942
8945
8948
8950 std::vector<NetworkAddress> additionalTx;
8951
8954
8956 {
8957 clear();
8958 }
8959
8960 void clear()
8961 {
8962 id.clear();
8963 rx.clear();
8964 tx.clear();
8965 multicastInterfaceName.clear();
8966 additionalTx.clear();
8967 directionRestriction = drNone;
8968 }
8969 };
8970
8971 static void to_json(nlohmann::json& j, const RallypointReflector& p)
8972 {
8973 j = nlohmann::json{
8974 TOJSON_IMPL(id),
8975 TOJSON_IMPL(rx),
8976 TOJSON_IMPL(tx),
8977 TOJSON_IMPL(multicastInterfaceName),
8978 TOJSON_IMPL(additionalTx),
8979 TOJSON_IMPL(directionRestriction)
8980 };
8981 }
8982 static void from_json(const nlohmann::json& j, RallypointReflector& p)
8983 {
8984 p.clear();
8985 j.at("id").get_to(p.id);
8986 j.at("rx").get_to(p.rx);
8987 j.at("tx").get_to(p.tx);
8988 getOptional<std::string>("multicastInterfaceName", p.multicastInterfaceName, j);
8989 getOptional<std::vector<NetworkAddress>>("additionalTx", p.additionalTx, j);
8990 getOptional<RallypointReflector::DirectionRestriction_t>("directionRestriction", p.directionRestriction, j, RallypointReflector::DirectionRestriction_t::drNone);
8991 }
8992
8993
8994 //-----------------------------------------------------------
8995 JSON_SERIALIZED_CLASS(RallypointUdpStreamingIpvX)
9003 {
9004 IMPLEMENT_JSON_SERIALIZATION()
9005 IMPLEMENT_JSON_DOCUMENTATION(RallypointUdpStreamingIpvX)
9006
9007 public:
9010
9013
9015 {
9016 clear();
9017 }
9018
9019 void clear()
9020 {
9021 enabled = true;
9022 external.clear();
9023 }
9024 };
9025
9026 static void to_json(nlohmann::json& j, const RallypointUdpStreamingIpvX& p)
9027 {
9028 j = nlohmann::json{
9029 TOJSON_IMPL(enabled),
9030 TOJSON_IMPL(external)
9031 };
9032 }
9033 static void from_json(const nlohmann::json& j, RallypointUdpStreamingIpvX& p)
9034 {
9035 p.clear();
9036 getOptional<bool>("enabled", p.enabled, j, true);
9037 getOptional<NetworkAddress>("external", p.external, j);
9038 }
9039
9040 //-----------------------------------------------------------
9041 JSON_SERIALIZED_CLASS(RallypointUdpStreaming)
9049 {
9050 IMPLEMENT_JSON_SERIALIZATION()
9051 IMPLEMENT_JSON_DOCUMENTATION(RallypointUdpStreaming)
9052
9053 public:
9055 typedef enum
9056 {
9058 ctUnknown = 0,
9059
9061 ctSharedKeyAes256FullIv = 1,
9062
9064 ctSharedKeyAes256IdxIv = 2,
9065
9067 ctSharedKeyChaCha20FullIv = 3,
9068
9070 ctSharedKeyChaCha20IdxIv = 4
9071 } CryptoType_t;
9072
9075
9078
9081
9084
9087
9090
9093
9095 int ttl;
9096
9097
9099 {
9100 clear();
9101 }
9102
9103 void clear()
9104 {
9105 enabled = true;
9106 cryptoType = CryptoType_t::ctSharedKeyAes256FullIv;
9107 listenPort = 7444;
9108 ipv4.clear();
9109 ipv6.clear();
9110 keepaliveIntervalSecs = 15;
9111 priority = TxPriority_t::priVoice;
9112 ttl = 64;
9113 }
9114 };
9115
9116 static void to_json(nlohmann::json& j, const RallypointUdpStreaming& p)
9117 {
9118 j = nlohmann::json{
9119 TOJSON_IMPL(enabled),
9120 TOJSON_IMPL(cryptoType),
9121 TOJSON_IMPL(listenPort),
9122 TOJSON_IMPL(keepaliveIntervalSecs),
9123 TOJSON_IMPL(ipv4),
9124 TOJSON_IMPL(ipv6),
9125 TOJSON_IMPL(priority),
9126 TOJSON_IMPL(ttl)
9127 };
9128 }
9129 static void from_json(const nlohmann::json& j, RallypointUdpStreaming& p)
9130 {
9131 p.clear();
9132 getOptional<bool>("enabled", p.enabled, j, true);
9133 getOptional<RallypointUdpStreaming::CryptoType_t>("cryptoType", p.cryptoType, j, RallypointUdpStreaming::CryptoType_t::ctSharedKeyAes256FullIv);
9134 getOptional<int>("listenPort", p.listenPort, j, 7444);
9135 getOptional<int>("keepaliveIntervalSecs", p.keepaliveIntervalSecs, j, 15);
9136 getOptional<RallypointUdpStreamingIpvX>("ipv4", p.ipv4, j);
9137 getOptional<RallypointUdpStreamingIpvX>("ipv6", p.ipv6, j);
9138 getOptional<TxPriority_t>("priority", p.priority, j, TxPriority_t::priVoice);
9139 getOptional<int>("ttl", p.ttl, j, 64);
9140 }
9141
9142 //-----------------------------------------------------------
9143 JSON_SERIALIZED_CLASS(RallypointRpRtTimingBehavior)
9151 {
9152 IMPLEMENT_JSON_SERIALIZATION()
9153 IMPLEMENT_JSON_DOCUMENTATION(RallypointRpRtTimingBehavior)
9154
9155 public:
9157 typedef enum
9158 {
9161
9164
9167
9170
9172 btDrop = 99
9173 } BehaviorType_t;
9174
9177
9179 uint32_t atOrAboveMs;
9180
9182 std::string runCmd;
9183
9185 {
9186 clear();
9187 }
9188
9189 void clear()
9190 {
9191 behavior = btNone;
9192 atOrAboveMs = 0;
9193 runCmd.clear();
9194 }
9195 };
9196
9197 static void to_json(nlohmann::json& j, const RallypointRpRtTimingBehavior& p)
9198 {
9199 j = nlohmann::json{
9200 TOJSON_IMPL(behavior),
9201 TOJSON_IMPL(atOrAboveMs),
9202 TOJSON_IMPL(runCmd)
9203 };
9204 }
9205 static void from_json(const nlohmann::json& j, RallypointRpRtTimingBehavior& p)
9206 {
9207 p.clear();
9208 getOptional<RallypointRpRtTimingBehavior::BehaviorType_t>("behavior", p.behavior, j, RallypointRpRtTimingBehavior::BehaviorType_t::btNone);
9209 getOptional<uint32_t>("atOrAboveMs", p.atOrAboveMs, j, 0);
9210 getOptional<std::string>("runCmd", p.runCmd, j);
9211 }
9212
9213
9214 //-----------------------------------------------------------
9215 JSON_SERIALIZED_CLASS(RallypointWebsocketSettings)
9223 {
9224 IMPLEMENT_JSON_SERIALIZATION()
9225 IMPLEMENT_JSON_DOCUMENTATION(RallypointWebsocketSettings)
9226
9227 public:
9230
9233
9236
9239
9242
9244 {
9245 clear();
9246 }
9247
9248 void clear()
9249 {
9250 enabled = false;
9251 listenPort = 8443;
9252 certificate.clear();
9253 requireClientCertificate = false;
9254 requireTls = true;
9255 }
9256 };
9257
9258 static void to_json(nlohmann::json& j, const RallypointWebsocketSettings& p)
9259 {
9260 j = nlohmann::json{
9261 TOJSON_IMPL(enabled),
9262 TOJSON_IMPL(listenPort),
9263 TOJSON_IMPL(certificate),
9264 TOJSON_IMPL(requireClientCertificate),
9265 TOJSON_IMPL(requireTls)
9266 };
9267 }
9268 static void from_json(const nlohmann::json& j, RallypointWebsocketSettings& p)
9269 {
9270 p.clear();
9271 getOptional<bool>("enabled", p.enabled, j, false);
9272 getOptional<int>("listenPort", p.listenPort, j, 8443);
9273 getOptional<SecurityCertificate>("certificate", p.certificate, j);
9274 getOptional<bool>("requireClientCertificate", p.requireClientCertificate, j, false);
9275 getOptional<bool>("requireTls", p.requireTls, j, true);
9276 }
9277
9278
9279
9280 //-----------------------------------------------------------
9281 JSON_SERIALIZED_CLASS(RallypointAdvertisingSettings)
9289 {
9290 IMPLEMENT_JSON_SERIALIZATION()
9291 IMPLEMENT_JSON_DOCUMENTATION(RallypointAdvertisingSettings)
9292
9293 public:
9296
9298 std::string hostName;
9299
9301 std::string serviceName;
9302
9304 std::string interfaceName;
9305
9307 int port;
9308
9310 int ttl;
9311
9313 {
9314 clear();
9315 }
9316
9317 void clear()
9318 {
9319 enabled = false;
9320 hostName.clear();
9321 serviceName = "_rallypoint._tcp.local.";
9322 interfaceName.clear();
9323 port = 0;
9324 ttl = 60;
9325 }
9326 };
9327
9328 static void to_json(nlohmann::json& j, const RallypointAdvertisingSettings& p)
9329 {
9330 j = nlohmann::json{
9331 TOJSON_IMPL(enabled),
9332 TOJSON_IMPL(hostName),
9333 TOJSON_IMPL(serviceName),
9334 TOJSON_IMPL(interfaceName),
9335 TOJSON_IMPL(port),
9336 TOJSON_IMPL(ttl)
9337 };
9338 }
9339 static void from_json(const nlohmann::json& j, RallypointAdvertisingSettings& p)
9340 {
9341 p.clear();
9342 getOptional<bool>("enabled", p.enabled, j, false);
9343 getOptional<std::string>("hostName", p.hostName, j);
9344 getOptional<std::string>("serviceName", p.serviceName, j, "_rallypoint._tcp.local.");
9345 getOptional<std::string>("interfaceName", p.interfaceName, j);
9346
9347 getOptional<int>("port", p.port, j, 0);
9348 getOptional<int>("ttl", p.ttl, j, 60);
9349 }
9350
9351
9352
9353
9354 //-----------------------------------------------------------
9355 JSON_SERIALIZED_CLASS(NamedIdentity)
9363 {
9364 IMPLEMENT_JSON_SERIALIZATION()
9365 IMPLEMENT_JSON_DOCUMENTATION(NamedIdentity)
9366
9367 public:
9369 std::string name;
9370
9373
9375 {
9376 clear();
9377 }
9378
9379 void clear()
9380 {
9381 name.clear();
9382 certificate.clear();
9383 }
9384 };
9385
9386 static void to_json(nlohmann::json& j, const NamedIdentity& p)
9387 {
9388 j = nlohmann::json{
9389 TOJSON_IMPL(name),
9390 TOJSON_IMPL(certificate)
9391 };
9392 }
9393 static void from_json(const nlohmann::json& j, NamedIdentity& p)
9394 {
9395 p.clear();
9396 getOptional<std::string>("name", p.name, j);
9397 getOptional<SecurityCertificate>("certificate", p.certificate, j);
9398 }
9399
9400 //-----------------------------------------------------------
9401 JSON_SERIALIZED_CLASS(RallypointExtendedGroupRestriction)
9409 {
9410 IMPLEMENT_JSON_SERIALIZATION()
9411 IMPLEMENT_JSON_DOCUMENTATION(RallypointExtendedGroupRestriction)
9412
9413 public:
9415 std::string id;
9416
9418 std::vector<StringRestrictionList> restrictions;
9419
9421 {
9422 clear();
9423 }
9424
9425 void clear()
9426 {
9427 id.clear();
9428 restrictions.clear();
9429 }
9430 };
9431
9432 static void to_json(nlohmann::json& j, const RallypointExtendedGroupRestriction& p)
9433 {
9434 j = nlohmann::json{
9435 TOJSON_IMPL(id),
9436 TOJSON_IMPL(restrictions)
9437 };
9438 }
9439 static void from_json(const nlohmann::json& j, RallypointExtendedGroupRestriction& p)
9440 {
9441 p.clear();
9442 getOptional<std::string>("id", p.id, j);
9443 getOptional<std::vector<StringRestrictionList>>("restrictions", p.restrictions, j);
9444 }
9445
9446
9447 //-----------------------------------------------------------
9448 JSON_SERIALIZED_CLASS(RallypointServer)
9458 {
9459 IMPLEMENT_JSON_SERIALIZATION()
9460 IMPLEMENT_JSON_DOCUMENTATION(RallypointServer)
9461
9462 public:
9463 typedef enum
9464 {
9465 sptDefault = 0,
9466 sptCertificate = 1,
9467 sptCertPublicKey = 2,
9468 sptCertSubject = 3,
9469 sptCertIssuer = 4,
9470 sptCertFingerprint = 5,
9471 sptCertSerial = 6,
9472 sptSubjectC = 7,
9473 sptSubjectST = 8,
9474 sptSubjectL = 9,
9475 sptSubjectO = 10,
9476 sptSubjectOU = 11,
9477 sptSubjectCN = 12,
9478 sptIssuerC = 13,
9479 sptIssuerST = 14,
9480 sptIssuerL = 15,
9481 sptIssuerO = 16,
9482 sptIssuerOU = 17,
9483 sptIssuerCN = 18
9484 } StreamIdPrivacyType_t;
9485
9487 StreamIdPrivacyType_t streamIdPrivacyType;
9488
9491
9494
9496 std::string id;
9497
9499 std::string name;
9500
9503
9506
9508 std::string interfaceName;
9509
9512
9515
9518
9521
9524
9527
9530
9533
9536
9539
9542
9545
9548
9551
9554
9557
9559 PeeringConfiguration peeringConfiguration; // NOTE: This is NOT serialized
9560
9563
9566
9569
9572
9574 std::vector<RallypointReflector> staticReflectors;
9575
9578
9581
9584
9587
9590
9593
9595 std::vector<RallypointExtendedGroupRestriction> extendedGroupRestrictions;
9596
9599
9602
9605
9608
9610 uint32_t sysFlags;
9611
9614
9617
9620
9623
9626
9629
9632
9635
9637 std::vector<RallypointRpRtTimingBehavior> peerRtBehaviors;
9638
9641
9644
9647
9650
9653
9655 std::string domainName;
9656
9658 std::vector<std::string> allowedDomains;
9659
9661 std::vector<std::string> blockedDomains;
9662
9664 std::vector<std::string> extraDomains;
9665
9668
9670 std::vector<NamedIdentity> additionalIdentities;
9671
9673 {
9674 clear();
9675 }
9676
9677 void clear()
9678 {
9679 fipsCrypto.clear();
9680 watchdog.clear();
9681 id.clear();
9682 name.clear();
9683 listenPort = 7443;
9684 interfaceName.clear();
9685 certificate.clear();
9686 allowMulticastForwarding = false;
9687 peeringConfiguration.clear();
9688 peeringConfigurationFileName.clear();
9689 peeringConfigurationFileCommand.clear();
9690 peeringConfigurationFileCheckSecs = 60;
9691 ioPools = -1;
9692 statusReport.clear();
9693 limits.clear();
9694 linkGraph.clear();
9695 externalHealthCheckResponder.clear();
9696 allowPeerForwarding = false;
9697 multicastInterfaceName.clear();
9698 tls.clear();
9699 discovery.clear();
9700 forwardDiscoveredGroups = false;
9701 forwardMulticastAddressing = false;
9702 isMeshLeaf = false;
9703 disableMessageSigning = false;
9704 multicastRestrictions.clear();
9705 igmpSnooping.clear();
9706 staticReflectors.clear();
9707 tcpTxOptions.clear();
9708 multicastTxOptions.clear();
9709 certStoreFileName.clear();
9710 certStorePasswordHex.clear();
9711 groupRestrictions.clear();
9712 configurationCheckSignalName = "rts.7b392d1.${id}";
9713 licensing.clear();
9714 featureset.clear();
9715 udpStreaming.clear();
9716 sysFlags = 0;
9717 normalTaskQueueBias = 0;
9718 enableLeafReflectionReverseSubscription = false;
9719 disableLoopDetection = false;
9720 maxSecurityLevel = 0;
9721 routeMap.clear();
9722 streamStatsExport.clear();
9723 maxOutboundPeerConnectionIntervalDeltaSecs = 15;
9724 peerRtTestIntervalMs = 60000;
9725 peerRtBehaviors.clear();
9726 websocket.clear();
9727 nsm.clear();
9728 advertising.clear();
9729 extendedGroupRestrictions.clear();
9730 groupRestrictionAccessPolicyType = GroupRestrictionAccessPolicyType_t::graptPermissive;
9731 ipFamily = IpFamilyType_t::ifIp4;
9732 rxCapture.clear();
9733 txCapture.clear();
9734 domainName.clear();
9735 allowedDomains.clear();
9736 blockedDomains.clear();
9737 extraDomains.clear();
9738 tuning.clear();
9739 additionalIdentities.clear();
9740 streamIdPrivacyType = StreamIdPrivacyType_t::sptDefault;
9741 }
9742 };
9743
9744 static void to_json(nlohmann::json& j, const RallypointServer& p)
9745 {
9746 j = nlohmann::json{
9747 TOJSON_IMPL(fipsCrypto),
9748 TOJSON_IMPL(watchdog),
9749 TOJSON_IMPL(id),
9750 TOJSON_IMPL(name),
9751 TOJSON_IMPL(listenPort),
9752 TOJSON_IMPL(interfaceName),
9753 TOJSON_IMPL(certificate),
9754 TOJSON_IMPL(allowMulticastForwarding),
9755 // TOJSON_IMPL(peeringConfiguration), // NOTE: Not serialized!
9756 TOJSON_IMPL(peeringConfigurationFileName),
9757 TOJSON_IMPL(peeringConfigurationFileCommand),
9758 TOJSON_IMPL(peeringConfigurationFileCheckSecs),
9759 TOJSON_IMPL(ioPools),
9760 TOJSON_IMPL(statusReport),
9761 TOJSON_IMPL(limits),
9762 TOJSON_IMPL(linkGraph),
9763 TOJSON_IMPL(externalHealthCheckResponder),
9764 TOJSON_IMPL(allowPeerForwarding),
9765 TOJSON_IMPL(multicastInterfaceName),
9766 TOJSON_IMPL(tls),
9767 TOJSON_IMPL(discovery),
9768 TOJSON_IMPL(forwardDiscoveredGroups),
9769 TOJSON_IMPL(forwardMulticastAddressing),
9770 TOJSON_IMPL(isMeshLeaf),
9771 TOJSON_IMPL(disableMessageSigning),
9772 TOJSON_IMPL(multicastRestrictions),
9773 TOJSON_IMPL(igmpSnooping),
9774 TOJSON_IMPL(staticReflectors),
9775 TOJSON_IMPL(tcpTxOptions),
9776 TOJSON_IMPL(multicastTxOptions),
9777 TOJSON_IMPL(certStoreFileName),
9778 TOJSON_IMPL(certStorePasswordHex),
9779 TOJSON_IMPL(groupRestrictions),
9780 TOJSON_IMPL(configurationCheckSignalName),
9781 TOJSON_IMPL(featureset),
9782 TOJSON_IMPL(licensing),
9783 TOJSON_IMPL(udpStreaming),
9784 TOJSON_IMPL(sysFlags),
9785 TOJSON_IMPL(normalTaskQueueBias),
9786 TOJSON_IMPL(enableLeafReflectionReverseSubscription),
9787 TOJSON_IMPL(disableLoopDetection),
9788 TOJSON_IMPL(maxSecurityLevel),
9789 TOJSON_IMPL(routeMap),
9790 TOJSON_IMPL(streamStatsExport),
9791 TOJSON_IMPL(maxOutboundPeerConnectionIntervalDeltaSecs),
9792 TOJSON_IMPL(peerRtTestIntervalMs),
9793 TOJSON_IMPL(peerRtBehaviors),
9794 TOJSON_IMPL(websocket),
9795 TOJSON_IMPL(nsm),
9796 TOJSON_IMPL(advertising),
9797 TOJSON_IMPL(extendedGroupRestrictions),
9798 TOJSON_IMPL(groupRestrictionAccessPolicyType),
9799 TOJSON_IMPL(ipFamily),
9800 TOJSON_IMPL(rxCapture),
9801 TOJSON_IMPL(txCapture),
9802 TOJSON_IMPL(domainName),
9803 TOJSON_IMPL(allowedDomains),
9804 TOJSON_IMPL(blockedDomains),
9805 TOJSON_IMPL(extraDomains),
9806 TOJSON_IMPL(tuning),
9807 TOJSON_IMPL(additionalIdentities),
9808 TOJSON_IMPL(streamIdPrivacyType)
9809 };
9810 }
9811 static void from_json(const nlohmann::json& j, RallypointServer& p)
9812 {
9813 p.clear();
9814 getOptional<FipsCryptoSettings>("fipsCrypto", p.fipsCrypto, j);
9815 getOptional<WatchdogSettings>("watchdog", p.watchdog, j);
9816 getOptional<std::string>("id", p.id, j);
9817 getOptional<std::string>("name", p.name, j);
9818 getOptional<SecurityCertificate>("certificate", p.certificate, j);
9819 getOptional<std::string>("interfaceName", p.interfaceName, j);
9820 getOptional<int>("listenPort", p.listenPort, j, 7443);
9821 getOptional<bool>("allowMulticastForwarding", p.allowMulticastForwarding, j, false);
9822 //getOptional<PeeringConfiguration>("peeringConfiguration", p.peeringConfiguration, j); // NOTE: Not serialized!
9823 getOptional<std::string>("peeringConfigurationFileName", p.peeringConfigurationFileName, j);
9824 getOptional<std::string>("peeringConfigurationFileCommand", p.peeringConfigurationFileCommand, j);
9825 getOptional<int>("peeringConfigurationFileCheckSecs", p.peeringConfigurationFileCheckSecs, j, 60);
9826 getOptional<int>("ioPools", p.ioPools, j, -1);
9827 getOptional<RallypointServerStatusReportConfiguration>("statusReport", p.statusReport, j);
9828 getOptional<RallypointServerLimits>("limits", p.limits, j);
9829 getOptional<RallypointServerLinkGraph>("linkGraph", p.linkGraph, j);
9830 getOptional<ExternalHealthCheckResponder>("externalHealthCheckResponder", p.externalHealthCheckResponder, j);
9831 getOptional<bool>("allowPeerForwarding", p.allowPeerForwarding, j, false);
9832 getOptional<std::string>("multicastInterfaceName", p.multicastInterfaceName, j);
9833 getOptional<Tls>("tls", p.tls, j);
9834 getOptional<DiscoveryConfiguration>("discovery", p.discovery, j);
9835 getOptional<bool>("forwardDiscoveredGroups", p.forwardDiscoveredGroups, j, false);
9836 getOptional<bool>("forwardMulticastAddressing", p.forwardMulticastAddressing, j, false);
9837 getOptional<bool>("isMeshLeaf", p.isMeshLeaf, j, false);
9838 getOptional<bool>("disableMessageSigning", p.disableMessageSigning, j, false);
9839 getOptional<NetworkAddressRestrictionList>("multicastRestrictions", p.multicastRestrictions, j);
9840 getOptional<IgmpSnooping>("igmpSnooping", p.igmpSnooping, j);
9841 getOptional<std::vector<RallypointReflector>>("staticReflectors", p.staticReflectors, j);
9842 getOptional<TcpNetworkTxOptions>("tcpTxOptions", p.tcpTxOptions, j);
9843 getOptional<NetworkTxOptions>("multicastTxOptions", p.multicastTxOptions, j);
9844 getOptional<std::string>("certStoreFileName", p.certStoreFileName, j);
9845 getOptional<std::string>("certStorePasswordHex", p.certStorePasswordHex, j);
9846 getOptional<StringRestrictionList>("groupRestrictions", p.groupRestrictions, j);
9847 getOptional<std::string>("configurationCheckSignalName", p.configurationCheckSignalName, j, "rts.7b392d1.${id}");
9848 getOptional<Licensing>("licensing", p.licensing, j);
9849 getOptional<Featureset>("featureset", p.featureset, j);
9850 getOptional<RallypointUdpStreaming>("udpStreaming", p.udpStreaming, j);
9851 getOptional<uint32_t>("sysFlags", p.sysFlags, j, 0);
9852 getOptional<uint32_t>("normalTaskQueueBias", p.normalTaskQueueBias, j, 0);
9853 getOptional<bool>("enableLeafReflectionReverseSubscription", p.enableLeafReflectionReverseSubscription, j, false);
9854 getOptional<bool>("disableLoopDetection", p.disableLoopDetection, j, false);
9855 getOptional<uint32_t>("maxSecurityLevel", p.maxSecurityLevel, j, 0);
9856 getOptional<RallypointServerRouteMap>("routeMap", p.routeMap, j);
9857 getOptional<RallypointServerStreamStatsExport>("streamStatsExport", p.streamStatsExport, j);
9858 getOptional<uint32_t>("maxOutboundPeerConnectionIntervalDeltaSecs", p.maxOutboundPeerConnectionIntervalDeltaSecs, j, 15);
9859 getOptional<int>("peerRtTestIntervalMs", p.peerRtTestIntervalMs, j, 60000);
9860 getOptional<std::vector<RallypointRpRtTimingBehavior>>("peerRtBehaviors", p.peerRtBehaviors, j);
9861 getOptional<RallypointWebsocketSettings>("websocket", p.websocket, j);
9862 getOptional<NsmConfiguration>("nsm", p.nsm, j);
9863 getOptional<RallypointAdvertisingSettings>("advertising", p.advertising, j);
9864 getOptional<std::vector<RallypointExtendedGroupRestriction>>("extendedGroupRestrictions", p.extendedGroupRestrictions, j);
9865 getOptional<GroupRestrictionAccessPolicyType_t>("groupRestrictionAccessPolicyType", p.groupRestrictionAccessPolicyType, j, GroupRestrictionAccessPolicyType_t::graptPermissive);
9866 getOptional<IpFamilyType_t>("ipFamily", p.ipFamily, j, IpFamilyType_t::ifIp4);
9867 getOptional<PacketCapturer>("rxCapture", p.rxCapture, j);
9868 getOptional<PacketCapturer>("txCapture", p.txCapture, j);
9869 getOptional<std::string>("domainName", p.domainName, j);
9870 getOptional<std::vector<std::string>>("allowedDomains", p.allowedDomains, j);
9871 getOptional<std::vector<std::string>>("blockedDomains", p.blockedDomains, j);
9872 getOptional<std::vector<std::string>>("extraDomains", p.extraDomains, j);
9873 getOptional<TuningSettings>("tuning", p.tuning, j);
9874 getOptional<std::vector<NamedIdentity>>("additionalIdentities", p.additionalIdentities, j);
9875 getOptional<RallypointServer::StreamIdPrivacyType_t>("streamIdPrivacyType", p.streamIdPrivacyType, j, RallypointServer::StreamIdPrivacyType_t::sptDefault);
9876 }
9877
9878 //-----------------------------------------------------------
9879 JSON_SERIALIZED_CLASS(NsmNodeScripts)
9886 {
9887 IMPLEMENT_JSON_SERIALIZATION()
9888 IMPLEMENT_JSON_DOCUMENTATION(NsmNodeScripts)
9889
9890 public:
9891 std::string onIdle;
9892 std::string beforeGoingActive;
9893 std::string onGoingActive;
9894 std::string beforeActive;
9895 std::string onActive;
9896 std::string inDashboard;
9897 std::string onStatusReport;
9898
9900 {
9901 clear();
9902 }
9903
9904 void clear()
9905 {
9906 onIdle.clear();
9907 beforeGoingActive.clear();
9908 onGoingActive.clear();
9909 beforeActive.clear();
9910 onActive.clear();
9911 inDashboard.clear();
9912 onStatusReport.clear();
9913 }
9914 };
9915
9916 static void to_json(nlohmann::json& j, const NsmNodeScripts& p)
9917 {
9918 j = nlohmann::json{
9919 TOJSON_IMPL(onIdle),
9920 TOJSON_IMPL(beforeGoingActive),
9921 TOJSON_IMPL(onGoingActive),
9922 TOJSON_IMPL(beforeActive),
9923 TOJSON_IMPL(onActive),
9924 TOJSON_IMPL(inDashboard),
9925 TOJSON_IMPL(onStatusReport)
9926 };
9927 }
9928 static void from_json(const nlohmann::json& j, NsmNodeScripts& p)
9929 {
9930 p.clear();
9931 getOptional<std::string>("onIdle", p.onIdle, j);
9932 getOptional<std::string>("beforeGoingActive", p.beforeGoingActive, j);
9933 getOptional<std::string>("onGoingActive", p.onGoingActive, j);
9934 getOptional<std::string>("beforeActive", p.beforeActive, j);
9935 getOptional<std::string>("onActive", p.onActive, j);
9936 getOptional<std::string>("inDashboard", p.inDashboard, j);
9937 getOptional<std::string>("onStatusReport", p.onStatusReport, j);
9938 }
9939
9940 //-----------------------------------------------------------
9941 JSON_SERIALIZED_CLASS(NsmNodeLogging)
9948 {
9949 IMPLEMENT_JSON_SERIALIZATION()
9950 IMPLEMENT_JSON_DOCUMENTATION(NsmNodeLogging)
9951
9952 public:
9957 bool logCommandOutput;
9958 bool logResourceStates;
9959
9961 {
9962 clear();
9963 }
9964
9965 void clear()
9966 {
9967 level = 3;
9968 dashboard = false;
9969 logCommandOutput = false;
9970 logResourceStates = false;
9971 }
9972 };
9973
9974 static void to_json(nlohmann::json& j, const NsmNodeLogging& p)
9975 {
9976 j = nlohmann::json{
9977 TOJSON_IMPL(level),
9978 TOJSON_IMPL(dashboard),
9979 TOJSON_IMPL(logCommandOutput),
9980 TOJSON_IMPL(logResourceStates)
9981 };
9982 }
9983 static void from_json(const nlohmann::json& j, NsmNodeLogging& p)
9984 {
9985 p.clear();
9986 getOptional<int>("level", p.level, j, 3);
9987 getOptional<bool>("dashboard", p.dashboard, j, false);
9988 getOptional<bool>("logCommandOutput", p.logCommandOutput, j, false);
9989 getOptional<bool>("logResourceStates", p.logResourceStates, j, false);
9990 }
9991
9992 //-----------------------------------------------------------
9993 JSON_SERIALIZED_CLASS(NsmNodePeriodic)
10000 {
10001 IMPLEMENT_JSON_SERIALIZATION()
10002 IMPLEMENT_JSON_DOCUMENTATION(NsmNodePeriodic)
10003
10004 public:
10005 std::string id;
10006 int intervalSecs;
10007 std::string command;
10008
10010 {
10011 clear();
10012 }
10013
10014 void clear()
10015 {
10016 id.clear();
10017 intervalSecs = 1;
10018 command.clear();
10019 }
10020 };
10021
10022 static void to_json(nlohmann::json& j, const NsmNodePeriodic& p)
10023 {
10024 j = nlohmann::json{
10025 TOJSON_IMPL(id),
10026 TOJSON_IMPL(intervalSecs),
10027 TOJSON_IMPL(command)
10028 };
10029 }
10030 static void from_json(const nlohmann::json& j, NsmNodePeriodic& p)
10031 {
10032 p.clear();
10033 getOptional<std::string>("id", p.id, j);
10034 getOptional<int>("intervalSecs", p.intervalSecs, j, 1);
10035 getOptional<std::string>("command", p.command, j);
10036 }
10037
10038 //-----------------------------------------------------------
10039 JSON_SERIALIZED_CLASS(NsmNodeCotSettings)
10046 {
10047 IMPLEMENT_JSON_SERIALIZATION()
10048 IMPLEMENT_JSON_DOCUMENTATION(NsmNodeCotSettings)
10049
10050 public:
10051 bool useCot;
10052 std::string uid;
10053 std::string type;
10054 std::string how;
10055 std::string lat;
10056 std::string lon;
10057 std::string ce;
10058 std::string hae;
10059 std::string le;
10061 std::string detailJson;
10062
10064 {
10065 clear();
10066 }
10067
10068 void clear()
10069 {
10070 useCot = false;
10071 uid.clear();
10072 type.clear();
10073 how.clear();
10074 lat.clear();
10075 lon.clear();
10076 ce.clear();
10077 hae.clear();
10078 le.clear();
10079 detailJson.clear();
10080 }
10081 };
10082
10083 static void to_json(nlohmann::json& j, const NsmNodeCotSettings& p)
10084 {
10085 j = nlohmann::json{
10086 TOJSON_IMPL(useCot),
10087 TOJSON_IMPL(uid),
10088 TOJSON_IMPL(type),
10089 TOJSON_IMPL(how),
10090 TOJSON_IMPL(lat),
10091 TOJSON_IMPL(lon),
10092 TOJSON_IMPL(ce),
10093 TOJSON_IMPL(hae),
10094 TOJSON_IMPL(le),
10095 TOJSON_IMPL(detailJson)
10096 };
10097 }
10098 static void from_json(const nlohmann::json& j, NsmNodeCotSettings& p)
10099 {
10100 p.clear();
10101 getOptional<bool>("useCot", p.useCot, j, false);
10102 getOptional<std::string>("uid", p.uid, j);
10103 getOptional<std::string>("type", p.type, j);
10104 getOptional<std::string>("how", p.how, j);
10105 getOptional<std::string>("lat", p.lat, j);
10106 getOptional<std::string>("lon", p.lon, j);
10107 getOptional<std::string>("ce", p.ce, j);
10108 getOptional<std::string>("hae", p.hae, j);
10109 getOptional<std::string>("le", p.le, j);
10110 getOptional<std::string>("detailJson", p.detailJson, j);
10111 }
10112
10113 //-----------------------------------------------------------
10114 JSON_SERIALIZED_CLASS(NsmNodeStatusReportConfiguration)
10125 {
10126 IMPLEMENT_JSON_SERIALIZATION()
10127 IMPLEMENT_JSON_DOCUMENTATION(NsmNodeStatusReportConfiguration)
10128
10129 public:
10131 std::string fileName;
10132
10135
10138
10140 std::string runCmd;
10141
10144
10146 {
10147 clear();
10148 }
10149
10150 void clear()
10151 {
10152 fileName.clear();
10153 intervalSecs = 60;
10154 enabled = false;
10155 includeResourceDetail = false;
10156 runCmd.clear();
10157 }
10158 };
10159
10160 static void to_json(nlohmann::json& j, const NsmNodeStatusReportConfiguration& p)
10161 {
10162 j = nlohmann::json{
10163 TOJSON_IMPL(fileName),
10164 TOJSON_IMPL(intervalSecs),
10165 TOJSON_IMPL(enabled),
10166 TOJSON_IMPL(includeResourceDetail),
10167 TOJSON_IMPL(runCmd)
10168 };
10169 }
10170 static void from_json(const nlohmann::json& j, NsmNodeStatusReportConfiguration& p)
10171 {
10172 p.clear();
10173 getOptional<std::string>("fileName", p.fileName, j);
10174 getOptional<int>("intervalSecs", p.intervalSecs, j, 60);
10175 getOptional<bool>("enabled", p.enabled, j, false);
10176 getOptional<std::string>("runCmd", p.runCmd, j);
10177 getOptional<bool>("includeResourceDetail", p.includeResourceDetail, j, false);
10178 }
10179
10180 //-----------------------------------------------------------
10181 JSON_SERIALIZED_CLASS(NsmNode)
10191 {
10192 IMPLEMENT_JSON_SERIALIZATION()
10193 IMPLEMENT_JSON_DOCUMENTATION(NsmNode)
10194
10195 public:
10196
10199
10202
10204 std::string id;
10205
10207 std::string name;
10208
10210 std::string domainName;
10211
10214
10217
10220
10223
10226
10229
10232
10235
10238
10240 std::vector<NsmNodePeriodic> periodics;
10241
10244
10247
10250
10253
10256
10259
10262
10263 NsmNode()
10264 {
10265 clear();
10266 }
10267
10268 void clear()
10269 {
10270 fipsCrypto.clear();
10271 watchdog.clear();
10272 id.clear();
10273 name.clear();
10274 domainName.clear();
10275 multicastInterfaceName.clear();
10276 stateMachine.clear();
10277 defaultPriority = 0;
10278 fixedToken = -1;
10279 dashboardToken = false;
10280 scripts.clear();
10281 logging.clear();
10282 cot.clear();
10283 periodics.clear();
10284 statusReport.clear();
10285 configurationCheckSignalName = "rts.7b392d1.${id}";
10286 licensing.clear();
10287 featureset.clear();
10288 rxCapture.clear();
10289 txCapture.clear();
10290 tuning.clear();
10291 ipFamily = IpFamilyType_t::ifIp4;
10292 }
10293 };
10294
10295 static void to_json(nlohmann::json& j, const NsmNode& p)
10296 {
10297 j = nlohmann::json{
10298 TOJSON_IMPL(fipsCrypto),
10299 TOJSON_IMPL(watchdog),
10300 TOJSON_IMPL(id),
10301 TOJSON_IMPL(name),
10302 TOJSON_IMPL(domainName),
10303 TOJSON_IMPL(multicastInterfaceName),
10304 TOJSON_IMPL(stateMachine),
10305 TOJSON_IMPL(defaultPriority),
10306 TOJSON_IMPL(fixedToken),
10307 TOJSON_IMPL(dashboardToken),
10308 TOJSON_IMPL(scripts),
10309 TOJSON_IMPL(logging),
10310 TOJSON_IMPL(cot),
10311 TOJSON_IMPL(periodics),
10312 TOJSON_IMPL(statusReport),
10313 TOJSON_IMPL(configurationCheckSignalName),
10314 TOJSON_IMPL(featureset),
10315 TOJSON_IMPL(licensing),
10316 TOJSON_IMPL(ipFamily),
10317 TOJSON_IMPL(rxCapture),
10318 TOJSON_IMPL(txCapture),
10319 TOJSON_IMPL(tuning)
10320 };
10321 }
10322 static void from_json(const nlohmann::json& j, NsmNode& p)
10323 {
10324 p.clear();
10325 getOptional<FipsCryptoSettings>("fipsCrypto", p.fipsCrypto, j);
10326 getOptional<WatchdogSettings>("watchdog", p.watchdog, j);
10327 getOptional<std::string>("id", p.id, j);
10328 getOptional<std::string>("name", p.name, j);
10329 getOptional<std::string>("domainName", p.domainName, j);
10330 getOptional<std::string>("multicastInterfaceName", p.multicastInterfaceName, j);
10331 getOptional<NsmConfiguration>("stateMachine", p.stateMachine, j);
10332 getOptional<int>("defaultPriority", p.defaultPriority, j, 0);
10333 getOptional<int>("fixedToken", p.fixedToken, j, -1);
10334 getOptional<bool>("dashboardToken", p.dashboardToken, j, false);
10335 getOptional<NsmNodeScripts>("scripts", p.scripts, j);
10336 getOptional<NsmNodeLogging>("logging", p.logging, j);
10337 getOptional<NsmNodeCotSettings>("cot", p.cot, j);
10338 getOptional<std::vector<NsmNodePeriodic>>("periodics", p.periodics, j);
10339 getOptional<NsmNodeStatusReportConfiguration>("statusReport", p.statusReport, j);
10340 getOptional<std::string>("configurationCheckSignalName", p.configurationCheckSignalName, j, "rts.7b392d1.${id}");
10341 getOptional<Licensing>("licensing", p.licensing, j);
10342 getOptional<Featureset>("featureset", p.featureset, j);
10343 getOptional<PacketCapturer>("rxCapture", p.rxCapture, j);
10344 getOptional<PacketCapturer>("txCapture", p.txCapture, j);
10345 getOptional<TuningSettings>("tuning", p.tuning, j);
10346 getOptional<IpFamilyType_t>("ipFamily", p.ipFamily, j, IpFamilyType_t::ifIp4);
10347 }
10348 //-----------------------------------------------------------
10349 JSON_SERIALIZED_CLASS(PlatformDiscoveredService)
10360 {
10361 IMPLEMENT_JSON_SERIALIZATION()
10362 IMPLEMENT_JSON_DOCUMENTATION(PlatformDiscoveredService)
10363
10364 public:
10365
10367 std::string id;
10368
10370 std::string type;
10371
10373 std::string name;
10374
10377
10379 std::string uri;
10380
10383
10385 {
10386 clear();
10387 }
10388
10389 void clear()
10390 {
10391 id.clear();
10392 type.clear();
10393 name.clear();
10394 address.clear();
10395 uri.clear();
10396 configurationVersion = 0;
10397 }
10398 };
10399
10400 static void to_json(nlohmann::json& j, const PlatformDiscoveredService& p)
10401 {
10402 j = nlohmann::json{
10403 TOJSON_IMPL(id),
10404 TOJSON_IMPL(type),
10405 TOJSON_IMPL(name),
10406 TOJSON_IMPL(address),
10407 TOJSON_IMPL(uri),
10408 TOJSON_IMPL(configurationVersion)
10409 };
10410 }
10411 static void from_json(const nlohmann::json& j, PlatformDiscoveredService& p)
10412 {
10413 p.clear();
10414 getOptional<std::string>("id", p.id, j);
10415 getOptional<std::string>("type", p.type, j);
10416 getOptional<std::string>("name", p.name, j);
10417 getOptional<NetworkAddress>("address", p.address, j);
10418 getOptional<std::string>("uri", p.uri, j);
10419 getOptional<uint32_t>("configurationVersion", p.configurationVersion, j, 0);
10420 }
10421
10422
10423 //-----------------------------------------------------------
10425 {
10426 public:
10427 typedef enum
10428 {
10429 etUndefined = 0,
10430 etAudio = 1,
10431 etLocation = 2,
10432 etUser = 3
10433 } EventType_t;
10434
10435 typedef enum
10436 {
10437 dNone = 0,
10438 dInbound = 1,
10439 dOutbound = 2,
10440 dBoth = 3,
10441 dUndefined = 4,
10442 } Direction_t;
10443 };
10444
10445
10446 //-----------------------------------------------------------
10447 JSON_SERIALIZED_CLASS(TimelineQueryParameters)
10458 {
10459 IMPLEMENT_JSON_SERIALIZATION()
10460 IMPLEMENT_JSON_DOCUMENTATION(TimelineQueryParameters)
10461
10462 public:
10463
10466
10469
10472
10475
10478
10481
10484
10486 std::string onlyAlias;
10487
10489 std::string onlyNodeId;
10490
10493
10495 std::string sql;
10496
10498 {
10499 clear();
10500 }
10501
10502 void clear()
10503 {
10504 maxCount = 50;
10505 mostRecentFirst = true;
10506 startedOnOrAfter = 0;
10507 endedOnOrBefore = 0;
10508 onlyDirection = 0;
10509 onlyType = 0;
10510 onlyCommitted = true;
10511 onlyAlias.clear();
10512 onlyNodeId.clear();
10513 sql.clear();
10514 onlyTxId = 0;
10515 }
10516 };
10517
10518 static void to_json(nlohmann::json& j, const TimelineQueryParameters& p)
10519 {
10520 j = nlohmann::json{
10521 TOJSON_IMPL(maxCount),
10522 TOJSON_IMPL(mostRecentFirst),
10523 TOJSON_IMPL(startedOnOrAfter),
10524 TOJSON_IMPL(endedOnOrBefore),
10525 TOJSON_IMPL(onlyDirection),
10526 TOJSON_IMPL(onlyType),
10527 TOJSON_IMPL(onlyCommitted),
10528 TOJSON_IMPL(onlyAlias),
10529 TOJSON_IMPL(onlyNodeId),
10530 TOJSON_IMPL(onlyTxId),
10531 TOJSON_IMPL(sql)
10532 };
10533 }
10534 static void from_json(const nlohmann::json& j, TimelineQueryParameters& p)
10535 {
10536 p.clear();
10537 getOptional<long>("maxCount", p.maxCount, j, 50);
10538 getOptional<bool>("mostRecentFirst", p.mostRecentFirst, j, false);
10539 getOptional<uint64_t>("startedOnOrAfter", p.startedOnOrAfter, j, 0);
10540 getOptional<uint64_t>("endedOnOrBefore", p.endedOnOrBefore, j, 0);
10541 getOptional<int>("onlyDirection", p.onlyDirection, j, 0);
10542 getOptional<int>("onlyType", p.onlyType, j, 0);
10543 getOptional<bool>("onlyCommitted", p.onlyCommitted, j, true);
10544 getOptional<std::string>("onlyAlias", p.onlyAlias, j, EMPTY_STRING);
10545 getOptional<std::string>("onlyNodeId", p.onlyNodeId, j, EMPTY_STRING);
10546 getOptional<int>("onlyTxId", p.onlyTxId, j, 0);
10547 getOptional<std::string>("sql", p.sql, j, EMPTY_STRING);
10548 }
10549
10550 //-----------------------------------------------------------
10551 JSON_SERIALIZED_CLASS(CertStoreCertificate)
10559 {
10560 IMPLEMENT_JSON_SERIALIZATION()
10561 IMPLEMENT_JSON_DOCUMENTATION(CertStoreCertificate)
10562
10563 public:
10565 std::string id;
10566
10568 std::string certificatePem;
10569
10571 std::string privateKeyPem;
10572
10575
10577 std::string tags;
10578
10580 {
10581 clear();
10582 }
10583
10584 void clear()
10585 {
10586 id.clear();
10587 certificatePem.clear();
10588 privateKeyPem.clear();
10589 internalData = nullptr;
10590 tags.clear();
10591 }
10592 };
10593
10594 static void to_json(nlohmann::json& j, const CertStoreCertificate& p)
10595 {
10596 j = nlohmann::json{
10597 TOJSON_IMPL(id),
10598 TOJSON_IMPL(certificatePem),
10599 TOJSON_IMPL(privateKeyPem),
10600 TOJSON_IMPL(tags)
10601 };
10602 }
10603 static void from_json(const nlohmann::json& j, CertStoreCertificate& p)
10604 {
10605 p.clear();
10606 j.at("id").get_to(p.id);
10607 j.at("certificatePem").get_to(p.certificatePem);
10608 getOptional<std::string>("privateKeyPem", p.privateKeyPem, j, EMPTY_STRING);
10609 getOptional<std::string>("tags", p.tags, j, EMPTY_STRING);
10610 }
10611
10612 //-----------------------------------------------------------
10613 JSON_SERIALIZED_CLASS(CertStore)
10621 {
10622 IMPLEMENT_JSON_SERIALIZATION()
10623 IMPLEMENT_JSON_DOCUMENTATION(CertStore)
10624
10625 public:
10627 std::string id;
10628
10630 std::vector<CertStoreCertificate> certificates;
10631
10633 std::vector<KvPair> kvp;
10634
10635 CertStore()
10636 {
10637 clear();
10638 }
10639
10640 void clear()
10641 {
10642 id.clear();
10643 certificates.clear();
10644 kvp.clear();
10645 }
10646 };
10647
10648 static void to_json(nlohmann::json& j, const CertStore& p)
10649 {
10650 j = nlohmann::json{
10651 TOJSON_IMPL(id),
10652 TOJSON_IMPL(certificates),
10653 TOJSON_IMPL(kvp)
10654 };
10655 }
10656 static void from_json(const nlohmann::json& j, CertStore& p)
10657 {
10658 p.clear();
10659 getOptional<std::string>("id", p.id, j, EMPTY_STRING);
10660 getOptional<std::vector<CertStoreCertificate>>("certificates", p.certificates, j);
10661 getOptional<std::vector<KvPair>>("kvp", p.kvp, j);
10662 }
10663
10664 //-----------------------------------------------------------
10665 JSON_SERIALIZED_CLASS(CertStoreCertificateElement)
10673 {
10674 IMPLEMENT_JSON_SERIALIZATION()
10675 IMPLEMENT_JSON_DOCUMENTATION(CertStoreCertificateElement)
10676
10677 public:
10679 std::string id;
10680
10683
10685 std::string certificatePem;
10686
10688 std::string tags;
10689
10691 {
10692 clear();
10693 }
10694
10695 void clear()
10696 {
10697 id.clear();
10698 hasPrivateKey = false;
10699 tags.clear();
10700 }
10701 };
10702
10703 static void to_json(nlohmann::json& j, const CertStoreCertificateElement& p)
10704 {
10705 j = nlohmann::json{
10706 TOJSON_IMPL(id),
10707 TOJSON_IMPL(hasPrivateKey),
10708 TOJSON_IMPL(tags)
10709 };
10710
10711 if(!p.certificatePem.empty())
10712 {
10713 j["certificatePem"] = p.certificatePem;
10714 }
10715 }
10716 static void from_json(const nlohmann::json& j, CertStoreCertificateElement& p)
10717 {
10718 p.clear();
10719 getOptional<std::string>("id", p.id, j, EMPTY_STRING);
10720 getOptional<bool>("hasPrivateKey", p.hasPrivateKey, j, false);
10721 getOptional<std::string>("certificatePem", p.certificatePem, j, EMPTY_STRING);
10722 getOptional<std::string>("tags", p.tags, j, EMPTY_STRING);
10723 }
10724
10725 //-----------------------------------------------------------
10726 JSON_SERIALIZED_CLASS(CertStoreDescriptor)
10734 {
10735 IMPLEMENT_JSON_SERIALIZATION()
10736 IMPLEMENT_JSON_DOCUMENTATION(CertStoreDescriptor)
10737
10738 public:
10740 std::string id;
10741
10743 std::string fileName;
10744
10747
10750
10752 std::vector<CertStoreCertificateElement> certificates;
10753
10755 std::vector<KvPair> kvp;
10756
10758 {
10759 clear();
10760 }
10761
10762 void clear()
10763 {
10764 id.clear();
10765 fileName.clear();
10766 version = 0;
10767 flags = 0;
10768 certificates.clear();
10769 kvp.clear();
10770 }
10771 };
10772
10773 static void to_json(nlohmann::json& j, const CertStoreDescriptor& p)
10774 {
10775 j = nlohmann::json{
10776 TOJSON_IMPL(id),
10777 TOJSON_IMPL(fileName),
10778 TOJSON_IMPL(version),
10779 TOJSON_IMPL(flags),
10780 TOJSON_IMPL(certificates),
10781 TOJSON_IMPL(kvp)
10782 };
10783 }
10784 static void from_json(const nlohmann::json& j, CertStoreDescriptor& p)
10785 {
10786 p.clear();
10787 getOptional<std::string>("id", p.id, j, EMPTY_STRING);
10788 getOptional<std::string>("fileName", p.fileName, j, EMPTY_STRING);
10789 getOptional<int>("version", p.version, j, 0);
10790 getOptional<int>("flags", p.flags, j, 0);
10791 getOptional<std::vector<CertStoreCertificateElement>>("certificates", p.certificates, j);
10792 getOptional<std::vector<KvPair>>("kvp", p.kvp, j);
10793 }
10794
10795 //-----------------------------------------------------------
10796 JSON_SERIALIZED_CLASS(CertificateSubjectElement)
10804 {
10805 IMPLEMENT_JSON_SERIALIZATION()
10806 IMPLEMENT_JSON_DOCUMENTATION(CertificateSubjectElement)
10807
10808 public:
10810 std::string name;
10811
10813 std::string value;
10814
10816 {
10817 clear();
10818 }
10819
10820 void clear()
10821 {
10822 name.clear();
10823 value.clear();
10824 }
10825 };
10826
10827 static void to_json(nlohmann::json& j, const CertificateSubjectElement& p)
10828 {
10829 j = nlohmann::json{
10830 TOJSON_IMPL(name),
10831 TOJSON_IMPL(value)
10832 };
10833 }
10834 static void from_json(const nlohmann::json& j, CertificateSubjectElement& p)
10835 {
10836 p.clear();
10837 getOptional<std::string>("name", p.name, j, EMPTY_STRING);
10838 getOptional<std::string>("value", p.value, j, EMPTY_STRING);
10839 }
10840
10841
10842 //-----------------------------------------------------------
10843 JSON_SERIALIZED_CLASS(CertificateDescriptor)
10851 {
10852 IMPLEMENT_JSON_SERIALIZATION()
10853 IMPLEMENT_JSON_DOCUMENTATION(CertificateDescriptor)
10854
10855 public:
10857 std::string subject;
10858
10860 std::string issuer;
10861
10864
10867
10869 std::string notBefore;
10870
10872 std::string notAfter;
10873
10875 std::string serial;
10876
10878 std::string fingerprint;
10879
10881 std::vector<CertificateSubjectElement> subjectElements;
10882
10884 std::vector<CertificateSubjectElement> issuerElements;
10885
10887 std::string certificatePem;
10888
10890 std::string publicKeyPem;
10891
10893 {
10894 clear();
10895 }
10896
10897 void clear()
10898 {
10899 subject.clear();
10900 issuer.clear();
10901 selfSigned = false;
10902 version = 0;
10903 notBefore.clear();
10904 notAfter.clear();
10905 serial.clear();
10906 fingerprint.clear();
10907 subjectElements.clear();
10908 issuerElements.clear();
10909 certificatePem.clear();
10910 publicKeyPem.clear();
10911 }
10912 };
10913
10914 static void to_json(nlohmann::json& j, const CertificateDescriptor& p)
10915 {
10916 j = nlohmann::json{
10917 TOJSON_IMPL(subject),
10918 TOJSON_IMPL(issuer),
10919 TOJSON_IMPL(selfSigned),
10920 TOJSON_IMPL(version),
10921 TOJSON_IMPL(notBefore),
10922 TOJSON_IMPL(notAfter),
10923 TOJSON_IMPL(serial),
10924 TOJSON_IMPL(fingerprint),
10925 TOJSON_IMPL(subjectElements),
10926 TOJSON_IMPL(issuerElements),
10927 TOJSON_IMPL(certificatePem),
10928 TOJSON_IMPL(publicKeyPem)
10929 };
10930 }
10931 static void from_json(const nlohmann::json& j, CertificateDescriptor& p)
10932 {
10933 p.clear();
10934 getOptional<std::string>("subject", p.subject, j, EMPTY_STRING);
10935 getOptional<std::string>("issuer", p.issuer, j, EMPTY_STRING);
10936 getOptional<bool>("selfSigned", p.selfSigned, j, false);
10937 getOptional<int>("version", p.version, j, 0);
10938 getOptional<std::string>("notBefore", p.notBefore, j, EMPTY_STRING);
10939 getOptional<std::string>("notAfter", p.notAfter, j, EMPTY_STRING);
10940 getOptional<std::string>("serial", p.serial, j, EMPTY_STRING);
10941 getOptional<std::string>("fingerprint", p.fingerprint, j, EMPTY_STRING);
10942 getOptional<std::string>("certificatePem", p.certificatePem, j, EMPTY_STRING);
10943 getOptional<std::string>("publicKeyPem", p.publicKeyPem, j, EMPTY_STRING);
10944 getOptional<std::vector<CertificateSubjectElement>>("subjectElements", p.subjectElements, j);
10945 getOptional<std::vector<CertificateSubjectElement>>("issuerElements", p.issuerElements, j);
10946 }
10947
10948
10949 //-----------------------------------------------------------
10950 JSON_SERIALIZED_CLASS(RiffDescriptor)
10961 {
10962 IMPLEMENT_JSON_SERIALIZATION()
10963 IMPLEMENT_JSON_DOCUMENTATION(RiffDescriptor)
10964
10965 public:
10967 std::string file;
10968
10971
10974
10977
10979 std::string meta;
10980
10982 std::string certPem;
10983
10986
10988 std::string signature;
10989
10991 {
10992 clear();
10993 }
10994
10995 void clear()
10996 {
10997 file.clear();
10998 verified = false;
10999 channels = 0;
11000 sampleCount = 0;
11001 meta.clear();
11002 certPem.clear();
11003 certDescriptor.clear();
11004 signature.clear();
11005 }
11006 };
11007
11008 static void to_json(nlohmann::json& j, const RiffDescriptor& p)
11009 {
11010 j = nlohmann::json{
11011 TOJSON_IMPL(file),
11012 TOJSON_IMPL(verified),
11013 TOJSON_IMPL(channels),
11014 TOJSON_IMPL(sampleCount),
11015 TOJSON_IMPL(meta),
11016 TOJSON_IMPL(certPem),
11017 TOJSON_IMPL(certDescriptor),
11018 TOJSON_IMPL(signature)
11019 };
11020 }
11021
11022 static void from_json(const nlohmann::json& j, RiffDescriptor& p)
11023 {
11024 p.clear();
11025 FROMJSON_IMPL(file, std::string, EMPTY_STRING);
11026 FROMJSON_IMPL(verified, bool, false);
11027 FROMJSON_IMPL(channels, int, 0);
11028 FROMJSON_IMPL(sampleCount, int, 0);
11029 FROMJSON_IMPL(meta, std::string, EMPTY_STRING);
11030 FROMJSON_IMPL(certPem, std::string, EMPTY_STRING);
11031 getOptional<CertificateDescriptor>("certDescriptor", p.certDescriptor, j);
11032 FROMJSON_IMPL(signature, std::string, EMPTY_STRING);
11033 }
11034
11035
11036 //-----------------------------------------------------------
11037 JSON_SERIALIZED_CLASS(BridgeCreationDetail)
11045 {
11046 IMPLEMENT_JSON_SERIALIZATION()
11047 IMPLEMENT_WRAPPED_JSON_SERIALIZATION(BridgeCreationDetail)
11048 IMPLEMENT_JSON_DOCUMENTATION(BridgeCreationDetail)
11049
11050 public:
11052 typedef enum
11053 {
11055 csUndefined = 0,
11056
11058 csOk = 1,
11059
11061 csNoJson = -1,
11062
11064 csAlreadyExists = -3,
11065
11067 csInvalidConfiguration = -4,
11068
11070 csInvalidJson = -5,
11071
11073 csInsufficientGroups = -6,
11074
11076 csTooManyGroups = -7,
11077
11079 csDuplicateGroup = -8,
11080
11082 csLocalLoopDetected = -9,
11083 } CreationStatus_t;
11084
11086 std::string id;
11087
11090
11092 {
11093 clear();
11094 }
11095
11096 void clear()
11097 {
11098 id.clear();
11099 status = csUndefined;
11100 }
11101 };
11102
11103 static void to_json(nlohmann::json& j, const BridgeCreationDetail& p)
11104 {
11105 j = nlohmann::json{
11106 TOJSON_IMPL(id),
11107 TOJSON_IMPL(status)
11108 };
11109 }
11110 static void from_json(const nlohmann::json& j, BridgeCreationDetail& p)
11111 {
11112 p.clear();
11113 getOptional<std::string>("id", p.id, j, EMPTY_STRING);
11114 getOptional<BridgeCreationDetail::CreationStatus_t>("status", p.status, j, BridgeCreationDetail::CreationStatus_t::csUndefined);
11115 }
11116 //-----------------------------------------------------------
11117 JSON_SERIALIZED_CLASS(GroupConnectionDetail)
11125 {
11126 IMPLEMENT_JSON_SERIALIZATION()
11127 IMPLEMENT_WRAPPED_JSON_SERIALIZATION(GroupConnectionDetail)
11128 IMPLEMENT_JSON_DOCUMENTATION(GroupConnectionDetail)
11129
11130 public:
11132 typedef enum
11133 {
11135 ctUndefined = 0,
11136
11138 ctDirectDatagram = 1,
11139
11141 ctRallypoint = 2
11142 } ConnectionType_t;
11143
11145 std::string id;
11146
11149
11151 std::string peer;
11152
11155
11157 std::string reason;
11158
11160 {
11161 clear();
11162 }
11163
11164 void clear()
11165 {
11166 id.clear();
11167 connectionType = ctUndefined;
11168 peer.clear();
11169 asFailover = false;
11170 reason.clear();
11171 }
11172 };
11173
11174 static void to_json(nlohmann::json& j, const GroupConnectionDetail& p)
11175 {
11176 j = nlohmann::json{
11177 TOJSON_IMPL(id),
11178 TOJSON_IMPL(connectionType),
11179 TOJSON_IMPL(peer),
11180 TOJSON_IMPL(asFailover),
11181 TOJSON_IMPL(reason)
11182 };
11183
11184 if(p.asFailover)
11185 {
11186 j["asFailover"] = p.asFailover;
11187 }
11188 }
11189 static void from_json(const nlohmann::json& j, GroupConnectionDetail& p)
11190 {
11191 p.clear();
11192 getOptional<std::string>("id", p.id, j, EMPTY_STRING);
11193 getOptional<GroupConnectionDetail::ConnectionType_t>("connectionType", p.connectionType, j, GroupConnectionDetail::ConnectionType_t::ctUndefined);
11194 getOptional<std::string>("peer", p.peer, j, EMPTY_STRING);
11195 getOptional<bool>("asFailover", p.asFailover, j, false);
11196 getOptional<std::string>("reason", p.reason, j, EMPTY_STRING);
11197 }
11198
11199 //-----------------------------------------------------------
11200 JSON_SERIALIZED_CLASS(GroupTxDetail)
11208 {
11209 IMPLEMENT_JSON_SERIALIZATION()
11210 IMPLEMENT_WRAPPED_JSON_SERIALIZATION(GroupTxDetail)
11211 IMPLEMENT_JSON_DOCUMENTATION(GroupTxDetail)
11212
11213 public:
11215 typedef enum
11216 {
11218 txsUndefined = 0,
11219
11221 txsTxStarted = 1,
11222
11224 txsTxEnded = 2,
11225
11227 txsNotAnAudioGroup = -1,
11228
11230 txsNotJoined = -2,
11231
11233 txsNotConnected = -3,
11234
11236 txsAlreadyTransmitting = -4,
11237
11239 txsInvalidParams = -5,
11240
11242 txsPriorityTooLow = -6,
11243
11245 txsRxActiveOnNonFdx = -7,
11246
11248 txsCannotSubscribeToInput = -8,
11249
11251 txsInvalidId = -9,
11252
11254 txsTxEndedWithFailure = -10,
11255
11257 txsBridgedButNotMultistream = -11,
11258
11260 txsAutoEndedDueToNonMultistreamBridge = -12,
11261
11263 txsReBeginWithoutPriorBegin = -13
11264 } TxStatus_t;
11265
11267 std::string id;
11268
11271
11274
11277
11280
11282 uint32_t txId;
11283
11285 {
11286 clear();
11287 }
11288
11289 void clear()
11290 {
11291 id.clear();
11292 status = txsUndefined;
11293 localPriority = 0;
11294 remotePriority = 0;
11295 nonFdxMsHangRemaining = 0;
11296 txId = 0;
11297 }
11298 };
11299
11300 static void to_json(nlohmann::json& j, const GroupTxDetail& p)
11301 {
11302 j = nlohmann::json{
11303 TOJSON_IMPL(id),
11304 TOJSON_IMPL(status),
11305 TOJSON_IMPL(localPriority),
11306 TOJSON_IMPL(txId)
11307 };
11308
11309 // Include remote priority if status is related to that
11310 if(p.status == GroupTxDetail::TxStatus_t::txsPriorityTooLow)
11311 {
11312 j["remotePriority"] = p.remotePriority;
11313 }
11314 else if(p.status == GroupTxDetail::TxStatus_t::txsRxActiveOnNonFdx)
11315 {
11316 j["nonFdxMsHangRemaining"] = p.nonFdxMsHangRemaining;
11317 }
11318 }
11319 static void from_json(const nlohmann::json& j, GroupTxDetail& p)
11320 {
11321 p.clear();
11322 getOptional<std::string>("id", p.id, j, EMPTY_STRING);
11323 getOptional<GroupTxDetail::TxStatus_t>("status", p.status, j, GroupTxDetail::TxStatus_t::txsUndefined);
11324 getOptional<int>("localPriority", p.localPriority, j, 0);
11325 getOptional<int>("remotePriority", p.remotePriority, j, 0);
11326 getOptional<long>("nonFdxMsHangRemaining", p.nonFdxMsHangRemaining, j, 0);
11327 getOptional<uint32_t>("txId", p.txId, j, 0);
11328 }
11329
11330 //-----------------------------------------------------------
11331 JSON_SERIALIZED_CLASS(GroupCreationDetail)
11339 {
11340 IMPLEMENT_JSON_SERIALIZATION()
11341 IMPLEMENT_WRAPPED_JSON_SERIALIZATION(GroupCreationDetail)
11342 IMPLEMENT_JSON_DOCUMENTATION(GroupCreationDetail)
11343
11344 public:
11346 typedef enum
11347 {
11349 csUndefined = 0,
11350
11352 csOk = 1,
11353
11355 csNoJson = -1,
11356
11358 csConflictingRpListAndCluster = -2,
11359
11361 csAlreadyExists = -3,
11362
11364 csInvalidConfiguration = -4,
11365
11367 csInvalidJson = -5,
11368
11370 csCryptoFailure = -6,
11371
11373 csAudioInputFailure = -7,
11374
11376 csAudioOutputFailure = -8,
11377
11379 csUnsupportedAudioEncoder = -9,
11380
11382 csNoLicense = -10,
11383
11385 csInvalidTransport = -11,
11386
11388 csAudioInputDeviceNotFound = -12,
11389
11391 csAudioOutputDeviceNotFound = -13
11392 } CreationStatus_t;
11393
11395 std::string id;
11396
11399
11401 {
11402 clear();
11403 }
11404
11405 void clear()
11406 {
11407 id.clear();
11408 status = csUndefined;
11409 }
11410 };
11411
11412 static void to_json(nlohmann::json& j, const GroupCreationDetail& p)
11413 {
11414 j = nlohmann::json{
11415 TOJSON_IMPL(id),
11416 TOJSON_IMPL(status)
11417 };
11418 }
11419 static void from_json(const nlohmann::json& j, GroupCreationDetail& p)
11420 {
11421 p.clear();
11422 getOptional<std::string>("id", p.id, j, EMPTY_STRING);
11423 getOptional<GroupCreationDetail::CreationStatus_t>("status", p.status, j, GroupCreationDetail::CreationStatus_t::csUndefined);
11424 }
11425
11426
11427 //-----------------------------------------------------------
11428 JSON_SERIALIZED_CLASS(GroupReconfigurationDetail)
11436 {
11437 IMPLEMENT_JSON_SERIALIZATION()
11438 IMPLEMENT_WRAPPED_JSON_SERIALIZATION(GroupReconfigurationDetail)
11439 IMPLEMENT_JSON_DOCUMENTATION(GroupReconfigurationDetail)
11440
11441 public:
11443 typedef enum
11444 {
11446 rsUndefined = 0,
11447
11449 rsOk = 1,
11450
11452 rsNoJson = -1,
11453
11455 rsInvalidConfiguration = -2,
11456
11458 rsInvalidJson = -3,
11459
11461 rsAudioInputFailure = -4,
11462
11464 rsAudioOutputFailure = -5,
11465
11467 rsDoesNotExist = -6,
11468
11470 rsAudioInputInUse = -7,
11471
11473 rsAudioDisabledForGroup = -8,
11474
11476 rsGroupIsNotAudio = -9
11477 } ReconfigurationStatus_t;
11478
11480 std::string id;
11481
11484
11486 {
11487 clear();
11488 }
11489
11490 void clear()
11491 {
11492 id.clear();
11493 status = rsUndefined;
11494 }
11495 };
11496
11497 static void to_json(nlohmann::json& j, const GroupReconfigurationDetail& p)
11498 {
11499 j = nlohmann::json{
11500 TOJSON_IMPL(id),
11501 TOJSON_IMPL(status)
11502 };
11503 }
11504 static void from_json(const nlohmann::json& j, GroupReconfigurationDetail& p)
11505 {
11506 p.clear();
11507 getOptional<std::string>("id", p.id, j, EMPTY_STRING);
11508 getOptional<GroupReconfigurationDetail::ReconfigurationStatus_t>("status", p.status, j, GroupReconfigurationDetail::ReconfigurationStatus_t::rsUndefined);
11509 }
11510
11511
11512 //-----------------------------------------------------------
11513 JSON_SERIALIZED_CLASS(GroupHealthReport)
11521 {
11522 IMPLEMENT_JSON_SERIALIZATION()
11523 IMPLEMENT_WRAPPED_JSON_SERIALIZATION(GroupHealthReport)
11524 IMPLEMENT_JSON_DOCUMENTATION(GroupHealthReport)
11525
11526 public:
11527 std::string id;
11528 uint64_t lastErrorTs;
11529 uint64_t decryptionErrors;
11530 uint64_t encryptionErrors;
11531 uint64_t unsupportDecoderErrors;
11532 uint64_t decoderFailures;
11533 uint64_t decoderStartFailures;
11534 uint64_t inboundRtpPacketAllocationFailures;
11535 uint64_t inboundRtpPacketLoadFailures;
11536 uint64_t latePacketsDiscarded;
11537 uint64_t jitterBufferInsertionFailures;
11538 uint64_t presenceDeserializationFailures;
11539 uint64_t notRtpErrors;
11540 uint64_t generalErrors;
11541 uint64_t inboundRtpProcessorAllocationFailures;
11542
11544 {
11545 clear();
11546 }
11547
11548 void clear()
11549 {
11550 id.clear();
11551 lastErrorTs = 0;
11552 decryptionErrors = 0;
11553 encryptionErrors = 0;
11554 unsupportDecoderErrors = 0;
11555 decoderFailures = 0;
11556 decoderStartFailures = 0;
11557 inboundRtpPacketAllocationFailures = 0;
11558 inboundRtpPacketLoadFailures = 0;
11559 latePacketsDiscarded = 0;
11560 jitterBufferInsertionFailures = 0;
11561 presenceDeserializationFailures = 0;
11562 notRtpErrors = 0;
11563 generalErrors = 0;
11564 inboundRtpProcessorAllocationFailures = 0;
11565 }
11566 };
11567
11568 static void to_json(nlohmann::json& j, const GroupHealthReport& p)
11569 {
11570 j = nlohmann::json{
11571 TOJSON_IMPL(id),
11572 TOJSON_IMPL(lastErrorTs),
11573 TOJSON_IMPL(decryptionErrors),
11574 TOJSON_IMPL(encryptionErrors),
11575 TOJSON_IMPL(unsupportDecoderErrors),
11576 TOJSON_IMPL(decoderFailures),
11577 TOJSON_IMPL(decoderStartFailures),
11578 TOJSON_IMPL(inboundRtpPacketAllocationFailures),
11579 TOJSON_IMPL(inboundRtpPacketLoadFailures),
11580 TOJSON_IMPL(latePacketsDiscarded),
11581 TOJSON_IMPL(jitterBufferInsertionFailures),
11582 TOJSON_IMPL(presenceDeserializationFailures),
11583 TOJSON_IMPL(notRtpErrors),
11584 TOJSON_IMPL(generalErrors),
11585 TOJSON_IMPL(inboundRtpProcessorAllocationFailures)
11586 };
11587 }
11588 static void from_json(const nlohmann::json& j, GroupHealthReport& p)
11589 {
11590 p.clear();
11591 getOptional<std::string>("id", p.id, j, EMPTY_STRING);
11592 getOptional<uint64_t>("lastErrorTs", p.lastErrorTs, j, 0);
11593 getOptional<uint64_t>("decryptionErrors", p.decryptionErrors, j, 0);
11594 getOptional<uint64_t>("encryptionErrors", p.encryptionErrors, j, 0);
11595 getOptional<uint64_t>("unsupportDecoderErrors", p.unsupportDecoderErrors, j, 0);
11596 getOptional<uint64_t>("decoderFailures", p.decoderFailures, j, 0);
11597 getOptional<uint64_t>("decoderStartFailures", p.decoderStartFailures, j, 0);
11598 getOptional<uint64_t>("inboundRtpPacketAllocationFailures", p.inboundRtpPacketAllocationFailures, j, 0);
11599 getOptional<uint64_t>("inboundRtpPacketLoadFailures", p.inboundRtpPacketLoadFailures, j, 0);
11600 getOptional<uint64_t>("latePacketsDiscarded", p.latePacketsDiscarded, j, 0);
11601 getOptional<uint64_t>("jitterBufferInsertionFailures", p.jitterBufferInsertionFailures, j, 0);
11602 getOptional<uint64_t>("presenceDeserializationFailures", p.presenceDeserializationFailures, j, 0);
11603 getOptional<uint64_t>("notRtpErrors", p.notRtpErrors, j, 0);
11604 getOptional<uint64_t>("generalErrors", p.generalErrors, j, 0);
11605 getOptional<uint64_t>("inboundRtpProcessorAllocationFailures", p.inboundRtpProcessorAllocationFailures, j, 0);
11606 }
11607
11608 //-----------------------------------------------------------
11609 JSON_SERIALIZED_CLASS(InboundProcessorStats)
11617 {
11618 IMPLEMENT_JSON_SERIALIZATION()
11619 IMPLEMENT_WRAPPED_JSON_SERIALIZATION(InboundProcessorStats)
11620 IMPLEMENT_JSON_DOCUMENTATION(InboundProcessorStats)
11621
11622 public:
11623 uint32_t ssrc;
11624 double jitter;
11625 uint64_t minRtpSamplesInQueue;
11626 uint64_t maxRtpSamplesInQueue;
11627 uint64_t totalSamplesTrimmed;
11628 uint64_t underruns;
11629 uint64_t overruns;
11630 uint64_t samplesInQueue;
11631 uint64_t totalPacketsReceived;
11632 uint64_t totalPacketsLost;
11633 uint64_t totalPacketsDiscarded;
11634
11636 {
11637 clear();
11638 }
11639
11640 void clear()
11641 {
11642 ssrc = 0;
11643 jitter = 0.0;
11644 minRtpSamplesInQueue = 0;
11645 maxRtpSamplesInQueue = 0;
11646 totalSamplesTrimmed = 0;
11647 underruns = 0;
11648 overruns = 0;
11649 samplesInQueue = 0;
11650 totalPacketsReceived = 0;
11651 totalPacketsLost = 0;
11652 totalPacketsDiscarded = 0;
11653 }
11654 };
11655
11656 static void to_json(nlohmann::json& j, const InboundProcessorStats& p)
11657 {
11658 j = nlohmann::json{
11659 TOJSON_IMPL(ssrc),
11660 TOJSON_IMPL(jitter),
11661 TOJSON_IMPL(minRtpSamplesInQueue),
11662 TOJSON_IMPL(maxRtpSamplesInQueue),
11663 TOJSON_IMPL(totalSamplesTrimmed),
11664 TOJSON_IMPL(underruns),
11665 TOJSON_IMPL(overruns),
11666 TOJSON_IMPL(samplesInQueue),
11667 TOJSON_IMPL(totalPacketsReceived),
11668 TOJSON_IMPL(totalPacketsLost),
11669 TOJSON_IMPL(totalPacketsDiscarded)
11670 };
11671 }
11672 static void from_json(const nlohmann::json& j, InboundProcessorStats& p)
11673 {
11674 p.clear();
11675 getOptional<uint32_t>("ssrc", p.ssrc, j, 0);
11676 getOptional<double>("jitter", p.jitter, j, 0.0);
11677 getOptional<uint64_t>("minRtpSamplesInQueue", p.minRtpSamplesInQueue, j, 0);
11678 getOptional<uint64_t>("maxRtpSamplesInQueue", p.maxRtpSamplesInQueue, j, 0);
11679 getOptional<uint64_t>("totalSamplesTrimmed", p.totalSamplesTrimmed, j, 0);
11680 getOptional<uint64_t>("underruns", p.underruns, j, 0);
11681 getOptional<uint64_t>("overruns", p.overruns, j, 0);
11682 getOptional<uint64_t>("samplesInQueue", p.samplesInQueue, j, 0);
11683 getOptional<uint64_t>("totalPacketsReceived", p.totalPacketsReceived, j, 0);
11684 getOptional<uint64_t>("totalPacketsLost", p.totalPacketsLost, j, 0);
11685 getOptional<uint64_t>("totalPacketsDiscarded", p.totalPacketsDiscarded, j, 0);
11686 }
11687
11688 //-----------------------------------------------------------
11689 JSON_SERIALIZED_CLASS(TrafficCounter)
11697 {
11698 IMPLEMENT_JSON_SERIALIZATION()
11699 IMPLEMENT_WRAPPED_JSON_SERIALIZATION(TrafficCounter)
11700 IMPLEMENT_JSON_DOCUMENTATION(TrafficCounter)
11701
11702 public:
11703 uint64_t packets;
11704 uint64_t bytes;
11705 uint64_t errors;
11706
11708 {
11709 clear();
11710 }
11711
11712 void clear()
11713 {
11714 packets = 0;
11715 bytes = 0;
11716 errors = 0;
11717 }
11718 };
11719
11720 static void to_json(nlohmann::json& j, const TrafficCounter& p)
11721 {
11722 j = nlohmann::json{
11723 TOJSON_IMPL(packets),
11724 TOJSON_IMPL(bytes),
11725 TOJSON_IMPL(errors)
11726 };
11727 }
11728 static void from_json(const nlohmann::json& j, TrafficCounter& p)
11729 {
11730 p.clear();
11731 getOptional<uint64_t>("packets", p.packets, j, 0);
11732 getOptional<uint64_t>("bytes", p.bytes, j, 0);
11733 getOptional<uint64_t>("errors", p.errors, j, 0);
11734 }
11735
11736 //-----------------------------------------------------------
11737 JSON_SERIALIZED_CLASS(GroupStats)
11745 {
11746 IMPLEMENT_JSON_SERIALIZATION()
11747 IMPLEMENT_WRAPPED_JSON_SERIALIZATION(GroupStats)
11748 IMPLEMENT_JSON_DOCUMENTATION(GroupStats)
11749
11750 public:
11751 std::string id;
11752 //std::vector<InboundProcessorStats> rtpInbounds;
11753 TrafficCounter rxTraffic;
11754 TrafficCounter txTraffic;
11755
11756 GroupStats()
11757 {
11758 clear();
11759 }
11760
11761 void clear()
11762 {
11763 id.clear();
11764 //rtpInbounds.clear();
11765 rxTraffic.clear();
11766 txTraffic.clear();
11767 }
11768 };
11769
11770 static void to_json(nlohmann::json& j, const GroupStats& p)
11771 {
11772 j = nlohmann::json{
11773 TOJSON_IMPL(id),
11774 //TOJSON_IMPL(rtpInbounds),
11775 TOJSON_IMPL(rxTraffic),
11776 TOJSON_IMPL(txTraffic)
11777 };
11778 }
11779 static void from_json(const nlohmann::json& j, GroupStats& p)
11780 {
11781 p.clear();
11782 getOptional<std::string>("id", p.id, j, EMPTY_STRING);
11783 //getOptional<std::vector<InboundProcessorStats>>("rtpInbounds", p.rtpInbounds, j);
11784 getOptional<TrafficCounter>("rxTraffic", p.rxTraffic, j);
11785 getOptional<TrafficCounter>("txTraffic", p.txTraffic, j);
11786 }
11787
11788 //-----------------------------------------------------------
11789 JSON_SERIALIZED_CLASS(RallypointConnectionDetail)
11797 {
11798 IMPLEMENT_JSON_SERIALIZATION()
11799 IMPLEMENT_WRAPPED_JSON_SERIALIZATION(RallypointConnectionDetail)
11800 IMPLEMENT_JSON_DOCUMENTATION(RallypointConnectionDetail)
11801
11802 public:
11804 std::string internalId;
11805
11807 std::string host;
11808
11810 int port;
11811
11814
11817
11819 {
11820 clear();
11821 }
11822
11823 void clear()
11824 {
11825 internalId.clear();
11826 host.clear();
11827 port = 0;
11828 msToNextConnectionAttempt = 0;
11829 serverProcessingMs = -1.0f;
11830 }
11831 };
11832
11833 static void to_json(nlohmann::json& j, const RallypointConnectionDetail& p)
11834 {
11835 j = nlohmann::json{
11836 TOJSON_IMPL(internalId),
11837 TOJSON_IMPL(host),
11838 TOJSON_IMPL(port)
11839 };
11840
11841 if(p.msToNextConnectionAttempt > 0)
11842 {
11843 j["msToNextConnectionAttempt"] = p.msToNextConnectionAttempt;
11844 }
11845
11846 if(p.serverProcessingMs >= 0.0)
11847 {
11848 j["serverProcessingMs"] = p.serverProcessingMs;
11849 }
11850 }
11851 static void from_json(const nlohmann::json& j, RallypointConnectionDetail& p)
11852 {
11853 p.clear();
11854 getOptional<std::string>("internalId", p.internalId, j, EMPTY_STRING);
11855 getOptional<std::string>("host", p.host, j, EMPTY_STRING);
11856 getOptional<int>("port", p.port, j, 0);
11857 getOptional<uint64_t>("msToNextConnectionAttempt", p.msToNextConnectionAttempt, j, 0);
11858 getOptional<float>("serverProcessingMs", p.serverProcessingMs, j, -1.0);
11859 }
11860
11861 //-----------------------------------------------------------
11862 JSON_SERIALIZED_CLASS(TranslationSession)
11873 {
11874 IMPLEMENT_JSON_SERIALIZATION()
11875 IMPLEMENT_JSON_DOCUMENTATION(TranslationSession)
11876
11877 public:
11879 std::string id;
11880
11882 std::string name;
11883
11885 std::vector<std::string> groups;
11886
11889
11891 {
11892 clear();
11893 }
11894
11895 void clear()
11896 {
11897 id.clear();
11898 name.clear();
11899 groups.clear();
11900 enabled = true;
11901 }
11902 };
11903
11904 static void to_json(nlohmann::json& j, const TranslationSession& p)
11905 {
11906 j = nlohmann::json{
11907 TOJSON_IMPL(id),
11908 TOJSON_IMPL(name),
11909 TOJSON_IMPL(groups),
11910 TOJSON_IMPL(enabled)
11911 };
11912 }
11913 static void from_json(const nlohmann::json& j, TranslationSession& p)
11914 {
11915 p.clear();
11916 FROMJSON_IMPL(id, std::string, EMPTY_STRING);
11917 FROMJSON_IMPL(name, std::string, EMPTY_STRING);
11918 getOptional<std::vector<std::string>>("groups", p.groups, j);
11919 FROMJSON_IMPL(enabled, bool, true);
11920 }
11921
11922 //-----------------------------------------------------------
11923 JSON_SERIALIZED_CLASS(TranslationConfiguration)
11934 {
11935 IMPLEMENT_JSON_SERIALIZATION()
11936 IMPLEMENT_JSON_DOCUMENTATION(TranslationConfiguration)
11937
11938 public:
11940 std::vector<TranslationSession> sessions;
11941
11943 std::vector<Group> groups;
11944
11946 {
11947 clear();
11948 }
11949
11950 void clear()
11951 {
11952 sessions.clear();
11953 groups.clear();
11954 }
11955 };
11956
11957 static void to_json(nlohmann::json& j, const TranslationConfiguration& p)
11958 {
11959 j = nlohmann::json{
11960 TOJSON_IMPL(sessions),
11961 TOJSON_IMPL(groups)
11962 };
11963 }
11964 static void from_json(const nlohmann::json& j, TranslationConfiguration& p)
11965 {
11966 p.clear();
11967 getOptional<std::vector<TranslationSession>>("sessions", p.sessions, j);
11968 getOptional<std::vector<Group>>("groups", p.groups, j);
11969 }
11970
11971 //-----------------------------------------------------------
11972 JSON_SERIALIZED_CLASS(LingoServerStatusReportConfiguration)
11983 {
11984 IMPLEMENT_JSON_SERIALIZATION()
11985 IMPLEMENT_JSON_DOCUMENTATION(LingoServerStatusReportConfiguration)
11986
11987 public:
11989 std::string fileName;
11990
11993
11996
11998 std::string runCmd;
11999
12002
12005
12008
12010 {
12011 clear();
12012 }
12013
12014 void clear()
12015 {
12016 fileName.clear();
12017 intervalSecs = 60;
12018 enabled = false;
12019 includeGroupDetail = false;
12020 includeSessionDetail = false;
12021 includeSessionGroupDetail = false;
12022 runCmd.clear();
12023 }
12024 };
12025
12026 static void to_json(nlohmann::json& j, const LingoServerStatusReportConfiguration& p)
12027 {
12028 j = nlohmann::json{
12029 TOJSON_IMPL(fileName),
12030 TOJSON_IMPL(intervalSecs),
12031 TOJSON_IMPL(enabled),
12032 TOJSON_IMPL(includeGroupDetail),
12033 TOJSON_IMPL(includeSessionDetail),
12034 TOJSON_IMPL(includeSessionGroupDetail),
12035 TOJSON_IMPL(runCmd)
12036 };
12037 }
12038 static void from_json(const nlohmann::json& j, LingoServerStatusReportConfiguration& p)
12039 {
12040 p.clear();
12041 getOptional<std::string>("fileName", p.fileName, j);
12042 getOptional<int>("intervalSecs", p.intervalSecs, j, 60);
12043 getOptional<bool>("enabled", p.enabled, j, false);
12044 getOptional<std::string>("runCmd", p.runCmd, j);
12045 getOptional<bool>("includeGroupDetail", p.includeGroupDetail, j, false);
12046 getOptional<bool>("includeSessionDetail", p.includeSessionDetail, j, false);
12047 getOptional<bool>("includeSessionGroupDetail", p.includeSessionGroupDetail, j, false);
12048 }
12049
12050 //-----------------------------------------------------------
12051 JSON_SERIALIZED_CLASS(LingoServerInternals)
12064 {
12065 IMPLEMENT_JSON_SERIALIZATION()
12066 IMPLEMENT_JSON_DOCUMENTATION(LingoServerInternals)
12067
12068 public:
12071
12074
12077
12079 {
12080 clear();
12081 }
12082
12083 void clear()
12084 {
12085 watchdog.clear();
12086 tuning.clear();
12087 housekeeperIntervalMs = 1000;
12088 }
12089 };
12090
12091 static void to_json(nlohmann::json& j, const LingoServerInternals& p)
12092 {
12093 j = nlohmann::json{
12094 TOJSON_IMPL(watchdog),
12095 TOJSON_IMPL(housekeeperIntervalMs),
12096 TOJSON_IMPL(tuning)
12097 };
12098 }
12099 static void from_json(const nlohmann::json& j, LingoServerInternals& p)
12100 {
12101 p.clear();
12102 getOptional<WatchdogSettings>("watchdog", p.watchdog, j);
12103 getOptional<int>("housekeeperIntervalMs", p.housekeeperIntervalMs, j, 1000);
12104 getOptional<TuningSettings>("tuning", p.tuning, j);
12105 }
12106
12107 //-----------------------------------------------------------
12108 JSON_SERIALIZED_CLASS(LingoServerConfiguration)
12118 {
12119 IMPLEMENT_JSON_SERIALIZATION()
12120 IMPLEMENT_JSON_DOCUMENTATION(LingoServerConfiguration)
12121
12122 public:
12124 std::string id;
12125
12128
12131
12134
12137
12140
12143
12146
12149
12152
12155
12158
12161
12164
12167
12169 {
12170 clear();
12171 }
12172
12173 void clear()
12174 {
12175 id.clear();
12176 serviceConfigurationFileCheckSecs = 60;
12177 lingoConfigurationFileName.clear();
12178 lingoConfigurationFileCommand.clear();
12179 lingoConfigurationFileCheckSecs = 60;
12180 statusReport.clear();
12181 externalHealthCheckResponder.clear();
12182 internals.clear();
12183 certStoreFileName.clear();
12184 certStorePasswordHex.clear();
12185 enginePolicy.clear();
12186 configurationCheckSignalName = "rts.22f4ec3.${id}";
12187 fipsCrypto.clear();
12188 proxy.clear();
12189 nsm.clear();
12190 }
12191 };
12192
12193 static void to_json(nlohmann::json& j, const LingoServerConfiguration& p)
12194 {
12195 j = nlohmann::json{
12196 TOJSON_IMPL(id),
12197 TOJSON_IMPL(serviceConfigurationFileCheckSecs),
12198 TOJSON_IMPL(lingoConfigurationFileName),
12199 TOJSON_IMPL(lingoConfigurationFileCommand),
12200 TOJSON_IMPL(lingoConfigurationFileCheckSecs),
12201 TOJSON_IMPL(statusReport),
12202 TOJSON_IMPL(externalHealthCheckResponder),
12203 TOJSON_IMPL(internals),
12204 TOJSON_IMPL(certStoreFileName),
12205 TOJSON_IMPL(certStorePasswordHex),
12206 TOJSON_IMPL(enginePolicy),
12207 TOJSON_IMPL(configurationCheckSignalName),
12208 TOJSON_IMPL(fipsCrypto),
12209 TOJSON_IMPL(proxy),
12210 TOJSON_IMPL(nsm)
12211 };
12212 }
12213 static void from_json(const nlohmann::json& j, LingoServerConfiguration& p)
12214 {
12215 p.clear();
12216 getOptional<std::string>("id", p.id, j);
12217 getOptional<int>("serviceConfigurationFileCheckSecs", p.serviceConfigurationFileCheckSecs, j, 60);
12218 getOptional<std::string>("lingoConfigurationFileName", p.lingoConfigurationFileName, j);
12219 getOptional<std::string>("lingoConfigurationFileCommand", p.lingoConfigurationFileCommand, j);
12220 getOptional<int>("lingoConfigurationFileCheckSecs", p.lingoConfigurationFileCheckSecs, j, 60);
12221 getOptional<LingoServerStatusReportConfiguration>("statusReport", p.statusReport, j);
12222 getOptional<ExternalHealthCheckResponder>("externalHealthCheckResponder", p.externalHealthCheckResponder, j);
12223 getOptional<LingoServerInternals>("internals", p.internals, j);
12224 getOptional<std::string>("certStoreFileName", p.certStoreFileName, j);
12225 getOptional<std::string>("certStorePasswordHex", p.certStorePasswordHex, j);
12226 j.at("enginePolicy").get_to(p.enginePolicy);
12227 getOptional<std::string>("configurationCheckSignalName", p.configurationCheckSignalName, j, "rts.22f4ec3.${id}");
12228 getOptional<FipsCryptoSettings>("fipsCrypo", p.fipsCrypto, j);
12229 getOptional<NetworkAddress>("proxy", p.proxy, j);
12230 getOptional<NsmConfiguration>("nsm", p.nsm, j);
12231 }
12232
12233
12234 //-----------------------------------------------------------
12235 JSON_SERIALIZED_CLASS(VoiceToVoiceSession)
12246 {
12247 IMPLEMENT_JSON_SERIALIZATION()
12248 IMPLEMENT_JSON_DOCUMENTATION(VoiceToVoiceSession)
12249
12250 public:
12252 std::string id;
12253
12255 std::string name;
12256
12258 std::vector<std::string> groups;
12259
12262
12264 {
12265 clear();
12266 }
12267
12268 void clear()
12269 {
12270 id.clear();
12271 name.clear();
12272 groups.clear();
12273 enabled = true;
12274 }
12275 };
12276
12277 static void to_json(nlohmann::json& j, const VoiceToVoiceSession& p)
12278 {
12279 j = nlohmann::json{
12280 TOJSON_IMPL(id),
12281 TOJSON_IMPL(name),
12282 TOJSON_IMPL(groups),
12283 TOJSON_IMPL(enabled)
12284 };
12285 }
12286 static void from_json(const nlohmann::json& j, VoiceToVoiceSession& p)
12287 {
12288 p.clear();
12289 FROMJSON_IMPL(id, std::string, EMPTY_STRING);
12290 FROMJSON_IMPL(name, std::string, EMPTY_STRING);
12291 getOptional<std::vector<std::string>>("groups", p.groups, j);
12292 FROMJSON_IMPL(enabled, bool, true);
12293 }
12294
12295 //-----------------------------------------------------------
12296 JSON_SERIALIZED_CLASS(LingoConfiguration)
12307 {
12308 IMPLEMENT_JSON_SERIALIZATION()
12309 IMPLEMENT_JSON_DOCUMENTATION(LingoConfiguration)
12310
12311 public:
12313 std::vector<VoiceToVoiceSession> voiceToVoiceSessions;
12314
12316 std::vector<Group> groups;
12317
12319 {
12320 clear();
12321 }
12322
12323 void clear()
12324 {
12325 voiceToVoiceSessions.clear();
12326 groups.clear();
12327 }
12328 };
12329
12330 static void to_json(nlohmann::json& j, const LingoConfiguration& p)
12331 {
12332 j = nlohmann::json{
12333 TOJSON_IMPL(voiceToVoiceSessions),
12334 TOJSON_IMPL(groups)
12335 };
12336 }
12337 static void from_json(const nlohmann::json& j, LingoConfiguration& p)
12338 {
12339 p.clear();
12340 getOptional<std::vector<VoiceToVoiceSession>>("voiceToVoiceSessions", p.voiceToVoiceSessions, j);
12341 getOptional<std::vector<Group>>("groups", p.groups, j);
12342 }
12343
12344 //-----------------------------------------------------------
12345 JSON_SERIALIZED_CLASS(BridgingConfiguration)
12356 {
12357 IMPLEMENT_JSON_SERIALIZATION()
12358 IMPLEMENT_JSON_DOCUMENTATION(BridgingConfiguration)
12359
12360 public:
12362 std::vector<Bridge> bridges;
12363
12365 std::vector<Group> groups;
12366
12368 {
12369 clear();
12370 }
12371
12372 void clear()
12373 {
12374 bridges.clear();
12375 groups.clear();
12376 }
12377 };
12378
12379 static void to_json(nlohmann::json& j, const BridgingConfiguration& p)
12380 {
12381 j = nlohmann::json{
12382 TOJSON_IMPL(bridges),
12383 TOJSON_IMPL(groups)
12384 };
12385 }
12386 static void from_json(const nlohmann::json& j, BridgingConfiguration& p)
12387 {
12388 p.clear();
12389 getOptional<std::vector<Bridge>>("bridges", p.bridges, j);
12390 getOptional<std::vector<Group>>("groups", p.groups, j);
12391 }
12392
12393 //-----------------------------------------------------------
12394 JSON_SERIALIZED_CLASS(BridgingServerStatusReportConfiguration)
12405 {
12406 IMPLEMENT_JSON_SERIALIZATION()
12407 IMPLEMENT_JSON_DOCUMENTATION(BridgingServerStatusReportConfiguration)
12408
12409 public:
12411 std::string fileName;
12412
12415
12418
12420 std::string runCmd;
12421
12424
12427
12430
12432 {
12433 clear();
12434 }
12435
12436 void clear()
12437 {
12438 fileName.clear();
12439 intervalSecs = 60;
12440 enabled = false;
12441 includeGroupDetail = false;
12442 includeBridgeDetail = false;
12443 includeBridgeGroupDetail = false;
12444 runCmd.clear();
12445 }
12446 };
12447
12448 static void to_json(nlohmann::json& j, const BridgingServerStatusReportConfiguration& p)
12449 {
12450 j = nlohmann::json{
12451 TOJSON_IMPL(fileName),
12452 TOJSON_IMPL(intervalSecs),
12453 TOJSON_IMPL(enabled),
12454 TOJSON_IMPL(includeGroupDetail),
12455 TOJSON_IMPL(includeBridgeDetail),
12456 TOJSON_IMPL(includeBridgeGroupDetail),
12457 TOJSON_IMPL(runCmd)
12458 };
12459 }
12460 static void from_json(const nlohmann::json& j, BridgingServerStatusReportConfiguration& p)
12461 {
12462 p.clear();
12463 getOptional<std::string>("fileName", p.fileName, j);
12464 getOptional<int>("intervalSecs", p.intervalSecs, j, 60);
12465 getOptional<bool>("enabled", p.enabled, j, false);
12466 getOptional<std::string>("runCmd", p.runCmd, j);
12467 getOptional<bool>("includeGroupDetail", p.includeGroupDetail, j, false);
12468 getOptional<bool>("includeBridgeDetail", p.includeBridgeDetail, j, false);
12469 getOptional<bool>("includeBridgeGroupDetail", p.includeBridgeGroupDetail, j, false);
12470 }
12471
12472 //-----------------------------------------------------------
12473 JSON_SERIALIZED_CLASS(BridgingServerInternals)
12486 {
12487 IMPLEMENT_JSON_SERIALIZATION()
12488 IMPLEMENT_JSON_DOCUMENTATION(BridgingServerInternals)
12489
12490 public:
12493
12496
12499
12501 {
12502 clear();
12503 }
12504
12505 void clear()
12506 {
12507 watchdog.clear();
12508 tuning.clear();
12509 housekeeperIntervalMs = 1000;
12510 }
12511 };
12512
12513 static void to_json(nlohmann::json& j, const BridgingServerInternals& p)
12514 {
12515 j = nlohmann::json{
12516 TOJSON_IMPL(watchdog),
12517 TOJSON_IMPL(housekeeperIntervalMs),
12518 TOJSON_IMPL(tuning)
12519 };
12520 }
12521 static void from_json(const nlohmann::json& j, BridgingServerInternals& p)
12522 {
12523 p.clear();
12524 getOptional<WatchdogSettings>("watchdog", p.watchdog, j);
12525 getOptional<int>("housekeeperIntervalMs", p.housekeeperIntervalMs, j, 1000);
12526 getOptional<TuningSettings>("tuning", p.tuning, j);
12527 }
12528
12529 //-----------------------------------------------------------
12530 JSON_SERIALIZED_CLASS(BridgingServerConfiguration)
12540 {
12541 IMPLEMENT_JSON_SERIALIZATION()
12542 IMPLEMENT_JSON_DOCUMENTATION(BridgingServerConfiguration)
12543
12544 public:
12551 typedef enum
12552 {
12554 omRaw = 0,
12555
12558 omMultistream = 1,
12559
12562 omMixedStream = 2,
12563
12565 omADictatedByGroup = 3,
12566 } OpMode_t;
12567
12569 std::string id;
12570
12573
12576
12579
12582
12585
12588
12591
12594
12597
12600
12603
12606
12609
12612
12614 {
12615 clear();
12616 }
12617
12618 void clear()
12619 {
12620 id.clear();
12621 mode = omRaw;
12622 serviceConfigurationFileCheckSecs = 60;
12623 bridgingConfigurationFileName.clear();
12624 bridgingConfigurationFileCommand.clear();
12625 bridgingConfigurationFileCheckSecs = 60;
12626 statusReport.clear();
12627 externalHealthCheckResponder.clear();
12628 internals.clear();
12629 certStoreFileName.clear();
12630 certStorePasswordHex.clear();
12631 enginePolicy.clear();
12632 configurationCheckSignalName = "rts.6cc0651.${id}";
12633 fipsCrypto.clear();
12634 nsm.clear();
12635 }
12636 };
12637
12638 static void to_json(nlohmann::json& j, const BridgingServerConfiguration& p)
12639 {
12640 j = nlohmann::json{
12641 TOJSON_IMPL(id),
12642 TOJSON_IMPL(mode),
12643 TOJSON_IMPL(serviceConfigurationFileCheckSecs),
12644 TOJSON_IMPL(bridgingConfigurationFileName),
12645 TOJSON_IMPL(bridgingConfigurationFileCommand),
12646 TOJSON_IMPL(bridgingConfigurationFileCheckSecs),
12647 TOJSON_IMPL(statusReport),
12648 TOJSON_IMPL(externalHealthCheckResponder),
12649 TOJSON_IMPL(internals),
12650 TOJSON_IMPL(certStoreFileName),
12651 TOJSON_IMPL(certStorePasswordHex),
12652 TOJSON_IMPL(enginePolicy),
12653 TOJSON_IMPL(configurationCheckSignalName),
12654 TOJSON_IMPL(fipsCrypto),
12655 TOJSON_IMPL(nsm)
12656 };
12657 }
12658 static void from_json(const nlohmann::json& j, BridgingServerConfiguration& p)
12659 {
12660 p.clear();
12661 getOptional<std::string>("id", p.id, j);
12662 getOptional<BridgingServerConfiguration::OpMode_t>("mode", p.mode, j, BridgingServerConfiguration::OpMode_t::omRaw);
12663 getOptional<int>("serviceConfigurationFileCheckSecs", p.serviceConfigurationFileCheckSecs, j, 60);
12664 getOptional<std::string>("bridgingConfigurationFileName", p.bridgingConfigurationFileName, j);
12665 getOptional<std::string>("bridgingConfigurationFileCommand", p.bridgingConfigurationFileCommand, j);
12666 getOptional<int>("bridgingConfigurationFileCheckSecs", p.bridgingConfigurationFileCheckSecs, j, 60);
12667 getOptional<BridgingServerStatusReportConfiguration>("statusReport", p.statusReport, j);
12668 getOptional<ExternalHealthCheckResponder>("externalHealthCheckResponder", p.externalHealthCheckResponder, j);
12669 getOptional<BridgingServerInternals>("internals", p.internals, j);
12670 getOptional<std::string>("certStoreFileName", p.certStoreFileName, j);
12671 getOptional<std::string>("certStorePasswordHex", p.certStorePasswordHex, j);
12672 j.at("enginePolicy").get_to(p.enginePolicy);
12673 getOptional<std::string>("configurationCheckSignalName", p.configurationCheckSignalName, j, "rts.6cc0651.${id}");
12674 getOptional<FipsCryptoSettings>("fipsCrypto", p.fipsCrypto, j);
12675 getOptional<NsmConfiguration>("nsm", p.nsm, j);
12676 }
12677
12678
12679 //-----------------------------------------------------------
12680 JSON_SERIALIZED_CLASS(EarGroupsConfiguration)
12691 {
12692 IMPLEMENT_JSON_SERIALIZATION()
12693 IMPLEMENT_JSON_DOCUMENTATION(EarGroupsConfiguration)
12694
12695 public:
12697 std::vector<Group> groups;
12698
12700 {
12701 clear();
12702 }
12703
12704 void clear()
12705 {
12706 groups.clear();
12707 }
12708 };
12709
12710 static void to_json(nlohmann::json& j, const EarGroupsConfiguration& p)
12711 {
12712 j = nlohmann::json{
12713 TOJSON_IMPL(groups)
12714 };
12715 }
12716 static void from_json(const nlohmann::json& j, EarGroupsConfiguration& p)
12717 {
12718 p.clear();
12719 getOptional<std::vector<Group>>("groups", p.groups, j);
12720 }
12721
12722 //-----------------------------------------------------------
12723 JSON_SERIALIZED_CLASS(EarServerStatusReportConfiguration)
12734 {
12735 IMPLEMENT_JSON_SERIALIZATION()
12736 IMPLEMENT_JSON_DOCUMENTATION(EarServerStatusReportConfiguration)
12737
12738 public:
12740 std::string fileName;
12741
12744
12747
12749 std::string runCmd;
12750
12753
12755 {
12756 clear();
12757 }
12758
12759 void clear()
12760 {
12761 fileName.clear();
12762 intervalSecs = 60;
12763 enabled = false;
12764 includeGroupDetail = false;
12765 runCmd.clear();
12766 }
12767 };
12768
12769 static void to_json(nlohmann::json& j, const EarServerStatusReportConfiguration& p)
12770 {
12771 j = nlohmann::json{
12772 TOJSON_IMPL(fileName),
12773 TOJSON_IMPL(intervalSecs),
12774 TOJSON_IMPL(enabled),
12775 TOJSON_IMPL(includeGroupDetail),
12776 TOJSON_IMPL(runCmd)
12777 };
12778 }
12779 static void from_json(const nlohmann::json& j, EarServerStatusReportConfiguration& p)
12780 {
12781 p.clear();
12782 getOptional<std::string>("fileName", p.fileName, j);
12783 getOptional<int>("intervalSecs", p.intervalSecs, j, 60);
12784 getOptional<bool>("enabled", p.enabled, j, false);
12785 getOptional<std::string>("runCmd", p.runCmd, j);
12786 getOptional<bool>("includeGroupDetail", p.includeGroupDetail, j, false);
12787 }
12788
12789 //-----------------------------------------------------------
12790 JSON_SERIALIZED_CLASS(EarServerInternals)
12803 {
12804 IMPLEMENT_JSON_SERIALIZATION()
12805 IMPLEMENT_JSON_DOCUMENTATION(EarServerInternals)
12806
12807 public:
12810
12813
12816
12818 {
12819 clear();
12820 }
12821
12822 void clear()
12823 {
12824 watchdog.clear();
12825 tuning.clear();
12826 housekeeperIntervalMs = 1000;
12827 }
12828 };
12829
12830 static void to_json(nlohmann::json& j, const EarServerInternals& p)
12831 {
12832 j = nlohmann::json{
12833 TOJSON_IMPL(watchdog),
12834 TOJSON_IMPL(housekeeperIntervalMs),
12835 TOJSON_IMPL(tuning)
12836 };
12837 }
12838 static void from_json(const nlohmann::json& j, EarServerInternals& p)
12839 {
12840 p.clear();
12841 getOptional<WatchdogSettings>("watchdog", p.watchdog, j);
12842 getOptional<int>("housekeeperIntervalMs", p.housekeeperIntervalMs, j, 1000);
12843 getOptional<TuningSettings>("tuning", p.tuning, j);
12844 }
12845
12846 //-----------------------------------------------------------
12847 JSON_SERIALIZED_CLASS(EarServerConfiguration)
12857 {
12858 IMPLEMENT_JSON_SERIALIZATION()
12859 IMPLEMENT_JSON_DOCUMENTATION(EarServerConfiguration)
12860
12861 public:
12862
12864 std::string id;
12865
12868
12871
12874
12877
12880
12883
12886
12889
12892
12895
12898
12901
12904
12906 {
12907 clear();
12908 }
12909
12910 void clear()
12911 {
12912 id.clear();
12913 serviceConfigurationFileCheckSecs = 60;
12914 groupsConfigurationFileName.clear();
12915 groupsConfigurationFileCommand.clear();
12916 groupsConfigurationFileCheckSecs = 60;
12917 statusReport.clear();
12918 externalHealthCheckResponder.clear();
12919 internals.clear();
12920 certStoreFileName.clear();
12921 certStorePasswordHex.clear();
12922 enginePolicy.clear();
12923 configurationCheckSignalName = "rts.9a164fa.${id}";
12924 fipsCrypto.clear();
12925 nsm.clear();
12926 }
12927 };
12928
12929 static void to_json(nlohmann::json& j, const EarServerConfiguration& p)
12930 {
12931 j = nlohmann::json{
12932 TOJSON_IMPL(id),
12933 TOJSON_IMPL(serviceConfigurationFileCheckSecs),
12934 TOJSON_IMPL(groupsConfigurationFileName),
12935 TOJSON_IMPL(groupsConfigurationFileCommand),
12936 TOJSON_IMPL(groupsConfigurationFileCheckSecs),
12937 TOJSON_IMPL(statusReport),
12938 TOJSON_IMPL(externalHealthCheckResponder),
12939 TOJSON_IMPL(internals),
12940 TOJSON_IMPL(certStoreFileName),
12941 TOJSON_IMPL(certStorePasswordHex),
12942 TOJSON_IMPL(enginePolicy),
12943 TOJSON_IMPL(configurationCheckSignalName),
12944 TOJSON_IMPL(fipsCrypto),
12945 TOJSON_IMPL(nsm)
12946 };
12947 }
12948 static void from_json(const nlohmann::json& j, EarServerConfiguration& p)
12949 {
12950 p.clear();
12951 getOptional<std::string>("id", p.id, j);
12952 getOptional<int>("serviceConfigurationFileCheckSecs", p.serviceConfigurationFileCheckSecs, j, 60);
12953 getOptional<std::string>("groupsConfigurationFileName", p.groupsConfigurationFileName, j);
12954 getOptional<std::string>("groupsConfigurationFileCommand", p.groupsConfigurationFileCommand, j);
12955 getOptional<int>("groupsConfigurationFileCheckSecs", p.groupsConfigurationFileCheckSecs, j, 60);
12956 getOptional<EarServerStatusReportConfiguration>("statusReport", p.statusReport, j);
12957 getOptional<ExternalHealthCheckResponder>("externalHealthCheckResponder", p.externalHealthCheckResponder, j);
12958 getOptional<EarServerInternals>("internals", p.internals, j);
12959 getOptional<std::string>("certStoreFileName", p.certStoreFileName, j);
12960 getOptional<std::string>("certStorePasswordHex", p.certStorePasswordHex, j);
12961 j.at("enginePolicy").get_to(p.enginePolicy);
12962 getOptional<std::string>("configurationCheckSignalName", p.configurationCheckSignalName, j, "rts.9a164fa.${id}");
12963 getOptional<FipsCryptoSettings>("fipsCrypto", p.fipsCrypto, j);
12964 getOptional<NsmConfiguration>("nsm", p.nsm, j);
12965 }
12966
12967//-----------------------------------------------------------
12968 JSON_SERIALIZED_CLASS(EngageSemGroupsConfiguration)
12979 {
12980 IMPLEMENT_JSON_SERIALIZATION()
12981 IMPLEMENT_JSON_DOCUMENTATION(EngageSemGroupsConfiguration)
12982
12983 public:
12985 std::vector<Group> groups;
12986
12988 {
12989 clear();
12990 }
12991
12992 void clear()
12993 {
12994 groups.clear();
12995 }
12996 };
12997
12998 static void to_json(nlohmann::json& j, const EngageSemGroupsConfiguration& p)
12999 {
13000 j = nlohmann::json{
13001 TOJSON_IMPL(groups)
13002 };
13003 }
13004 static void from_json(const nlohmann::json& j, EngageSemGroupsConfiguration& p)
13005 {
13006 p.clear();
13007 getOptional<std::vector<Group>>("groups", p.groups, j);
13008 }
13009
13010 //-----------------------------------------------------------
13011 JSON_SERIALIZED_CLASS(EngageSemServerStatusReportConfiguration)
13022 {
13023 IMPLEMENT_JSON_SERIALIZATION()
13024 IMPLEMENT_JSON_DOCUMENTATION(EngageSemServerStatusReportConfiguration)
13025
13026 public:
13028 std::string fileName;
13029
13032
13035
13037 std::string runCmd;
13038
13041
13043 {
13044 clear();
13045 }
13046
13047 void clear()
13048 {
13049 fileName.clear();
13050 intervalSecs = 60;
13051 enabled = false;
13052 includeGroupDetail = false;
13053 runCmd.clear();
13054 }
13055 };
13056
13057 static void to_json(nlohmann::json& j, const EngageSemServerStatusReportConfiguration& p)
13058 {
13059 j = nlohmann::json{
13060 TOJSON_IMPL(fileName),
13061 TOJSON_IMPL(intervalSecs),
13062 TOJSON_IMPL(enabled),
13063 TOJSON_IMPL(includeGroupDetail),
13064 TOJSON_IMPL(runCmd)
13065 };
13066 }
13067 static void from_json(const nlohmann::json& j, EngageSemServerStatusReportConfiguration& p)
13068 {
13069 p.clear();
13070 getOptional<std::string>("fileName", p.fileName, j);
13071 getOptional<int>("intervalSecs", p.intervalSecs, j, 60);
13072 getOptional<bool>("enabled", p.enabled, j, false);
13073 getOptional<std::string>("runCmd", p.runCmd, j);
13074 getOptional<bool>("includeGroupDetail", p.includeGroupDetail, j, false);
13075 }
13076
13077 //-----------------------------------------------------------
13078 JSON_SERIALIZED_CLASS(EngageSemServerInternals)
13091 {
13092 IMPLEMENT_JSON_SERIALIZATION()
13093 IMPLEMENT_JSON_DOCUMENTATION(EngageSemServerInternals)
13094
13095 public:
13098
13101
13104
13106 {
13107 clear();
13108 }
13109
13110 void clear()
13111 {
13112 watchdog.clear();
13113 tuning.clear();
13114 housekeeperIntervalMs = 1000;
13115 }
13116 };
13117
13118 static void to_json(nlohmann::json& j, const EngageSemServerInternals& p)
13119 {
13120 j = nlohmann::json{
13121 TOJSON_IMPL(watchdog),
13122 TOJSON_IMPL(housekeeperIntervalMs),
13123 TOJSON_IMPL(tuning)
13124 };
13125 }
13126 static void from_json(const nlohmann::json& j, EngageSemServerInternals& p)
13127 {
13128 p.clear();
13129 getOptional<WatchdogSettings>("watchdog", p.watchdog, j);
13130 getOptional<int>("housekeeperIntervalMs", p.housekeeperIntervalMs, j, 1000);
13131 getOptional<TuningSettings>("tuning", p.tuning, j);
13132 }
13133
13134 //-----------------------------------------------------------
13135 JSON_SERIALIZED_CLASS(EngageSemServerConfiguration)
13145 {
13146 IMPLEMENT_JSON_SERIALIZATION()
13147 IMPLEMENT_JSON_DOCUMENTATION(EngageSemServerConfiguration)
13148
13149 public:
13150
13152 std::string id;
13153
13156
13159
13162
13165
13168
13171
13174
13177
13180
13183
13186
13189
13192
13193 int maxQueueLen;
13194 int minQueuingMs;
13195 int maxQueuingMs;
13196 int minPriority;
13197 int maxPriority;
13198
13200 {
13201 clear();
13202 }
13203
13204 void clear()
13205 {
13206 id.clear();
13207 serviceConfigurationFileCheckSecs = 60;
13208 groupsConfigurationFileName.clear();
13209 groupsConfigurationFileCommand.clear();
13210 groupsConfigurationFileCheckSecs = 60;
13211 statusReport.clear();
13212 externalHealthCheckResponder.clear();
13213 internals.clear();
13214 certStoreFileName.clear();
13215 certStorePasswordHex.clear();
13216 enginePolicy.clear();
13217 configurationCheckSignalName = "rts.9a164fa.${id}";
13218 fipsCrypto.clear();
13219 nsm.clear();
13220
13221 maxQueueLen = 64;
13222 minQueuingMs = 0;
13223 maxQueuingMs = 15000;
13224 minPriority = 0;
13225 maxPriority = 255;
13226 }
13227 };
13228
13229 static void to_json(nlohmann::json& j, const EngageSemServerConfiguration& p)
13230 {
13231 j = nlohmann::json{
13232 TOJSON_IMPL(id),
13233 TOJSON_IMPL(serviceConfigurationFileCheckSecs),
13234 TOJSON_IMPL(groupsConfigurationFileName),
13235 TOJSON_IMPL(groupsConfigurationFileCommand),
13236 TOJSON_IMPL(groupsConfigurationFileCheckSecs),
13237 TOJSON_IMPL(statusReport),
13238 TOJSON_IMPL(externalHealthCheckResponder),
13239 TOJSON_IMPL(internals),
13240 TOJSON_IMPL(certStoreFileName),
13241 TOJSON_IMPL(certStorePasswordHex),
13242 TOJSON_IMPL(enginePolicy),
13243 TOJSON_IMPL(configurationCheckSignalName),
13244 TOJSON_IMPL(fipsCrypto),
13245 TOJSON_IMPL(nsm),
13246 TOJSON_IMPL(maxQueueLen),
13247 TOJSON_IMPL(minQueuingMs),
13248 TOJSON_IMPL(maxQueuingMs),
13249 TOJSON_IMPL(minPriority),
13250 TOJSON_IMPL(maxPriority)
13251 };
13252 }
13253 static void from_json(const nlohmann::json& j, EngageSemServerConfiguration& p)
13254 {
13255 p.clear();
13256 getOptional<std::string>("id", p.id, j);
13257 getOptional<int>("serviceConfigurationFileCheckSecs", p.serviceConfigurationFileCheckSecs, j, 60);
13258 getOptional<std::string>("groupsConfigurationFileName", p.groupsConfigurationFileName, j);
13259 getOptional<std::string>("groupsConfigurationFileCommand", p.groupsConfigurationFileCommand, j);
13260 getOptional<int>("groupsConfigurationFileCheckSecs", p.groupsConfigurationFileCheckSecs, j, 60);
13261 getOptional<EngageSemServerStatusReportConfiguration>("statusReport", p.statusReport, j);
13262 getOptional<ExternalHealthCheckResponder>("externalHealthCheckResponder", p.externalHealthCheckResponder, j);
13263 getOptional<EngageSemServerInternals>("internals", p.internals, j);
13264 getOptional<std::string>("certStoreFileName", p.certStoreFileName, j);
13265 getOptional<std::string>("certStorePasswordHex", p.certStorePasswordHex, j);
13266 j.at("enginePolicy").get_to(p.enginePolicy);
13267 getOptional<std::string>("configurationCheckSignalName", p.configurationCheckSignalName, j, "rts.9a164fa.${id}");
13268 getOptional<FipsCryptoSettings>("fipsCrypto", p.fipsCrypto, j);
13269 getOptional<NsmConfiguration>("nsm", p.nsm, j);
13270 getOptional<int>("maxQueueLen", p.maxQueueLen, j, 64);
13271 getOptional<int>("minQueuingMs", p.minQueuingMs, j, 0);
13272 getOptional<int>("maxQueuingMs", p.maxQueuingMs, j, 15000);
13273 getOptional<int>("minPriority", p.minPriority, j, 0);
13274 getOptional<int>("maxPriority", p.maxPriority, j, 255);
13275 }
13276
13277 //-----------------------------------------------------------
13278 JSON_SERIALIZED_CLASS(EngateGroup)
13288 class EngateGroup : public Group
13289 {
13290 IMPLEMENT_JSON_SERIALIZATION()
13291 IMPLEMENT_JSON_DOCUMENTATION(EngateGroup)
13292
13293 public:
13294 bool useVad;
13295 uint32_t inputHangMs;
13296 uint32_t inputActivationPowerThreshold;
13297 uint32_t inputDeactivationPowerThreshold;
13298
13299 EngateGroup()
13300 {
13301 clear();
13302 }
13303
13304 void clear()
13305 {
13306 Group::clear();
13307 useVad = false;
13308 inputHangMs = 750;
13309 inputActivationPowerThreshold = 700;
13310 inputDeactivationPowerThreshold = 125;
13311 }
13312 };
13313
13314 static void to_json(nlohmann::json& j, const EngateGroup& p)
13315 {
13316 nlohmann::json g;
13317 to_json(g, static_cast<const Group&>(p));
13318
13319 j = nlohmann::json{
13320 TOJSON_IMPL(useVad),
13321 TOJSON_IMPL(inputHangMs),
13322 TOJSON_IMPL(inputActivationPowerThreshold),
13323 TOJSON_IMPL(inputDeactivationPowerThreshold)
13324 };
13325 }
13326 static void from_json(const nlohmann::json& j, EngateGroup& p)
13327 {
13328 p.clear();
13329 from_json(j, static_cast<Group&>(p));
13330 getOptional<uint32_t>("inputHangMs", p.inputHangMs, j, 750);
13331 getOptional<uint32_t>("inputActivationPowerThreshold", p.inputActivationPowerThreshold, j, 700);
13332 getOptional<uint32_t>("inputDeactivationPowerThreshold", p.inputDeactivationPowerThreshold, j, 125);
13333 }
13334
13335 //-----------------------------------------------------------
13336 JSON_SERIALIZED_CLASS(EngateGroupsConfiguration)
13347 {
13348 IMPLEMENT_JSON_SERIALIZATION()
13349 IMPLEMENT_JSON_DOCUMENTATION(EngateGroupsConfiguration)
13350
13351 public:
13353 std::vector<EngateGroup> groups;
13354
13356 {
13357 clear();
13358 }
13359
13360 void clear()
13361 {
13362 groups.clear();
13363 }
13364 };
13365
13366 static void to_json(nlohmann::json& j, const EngateGroupsConfiguration& p)
13367 {
13368 j = nlohmann::json{
13369 TOJSON_IMPL(groups)
13370 };
13371 }
13372 static void from_json(const nlohmann::json& j, EngateGroupsConfiguration& p)
13373 {
13374 p.clear();
13375 getOptional<std::vector<EngateGroup>>("groups", p.groups, j);
13376 }
13377
13378 //-----------------------------------------------------------
13379 JSON_SERIALIZED_CLASS(EngateServerStatusReportConfiguration)
13390 {
13391 IMPLEMENT_JSON_SERIALIZATION()
13392 IMPLEMENT_JSON_DOCUMENTATION(EngateServerStatusReportConfiguration)
13393
13394 public:
13396 std::string fileName;
13397
13400
13403
13405 std::string runCmd;
13406
13409
13411 {
13412 clear();
13413 }
13414
13415 void clear()
13416 {
13417 fileName.clear();
13418 intervalSecs = 60;
13419 enabled = false;
13420 includeGroupDetail = false;
13421 runCmd.clear();
13422 }
13423 };
13424
13425 static void to_json(nlohmann::json& j, const EngateServerStatusReportConfiguration& p)
13426 {
13427 j = nlohmann::json{
13428 TOJSON_IMPL(fileName),
13429 TOJSON_IMPL(intervalSecs),
13430 TOJSON_IMPL(enabled),
13431 TOJSON_IMPL(includeGroupDetail),
13432 TOJSON_IMPL(runCmd)
13433 };
13434 }
13435 static void from_json(const nlohmann::json& j, EngateServerStatusReportConfiguration& p)
13436 {
13437 p.clear();
13438 getOptional<std::string>("fileName", p.fileName, j);
13439 getOptional<int>("intervalSecs", p.intervalSecs, j, 60);
13440 getOptional<bool>("enabled", p.enabled, j, false);
13441 getOptional<std::string>("runCmd", p.runCmd, j);
13442 getOptional<bool>("includeGroupDetail", p.includeGroupDetail, j, false);
13443 }
13444
13445 //-----------------------------------------------------------
13446 JSON_SERIALIZED_CLASS(EngateServerInternals)
13459 {
13460 IMPLEMENT_JSON_SERIALIZATION()
13461 IMPLEMENT_JSON_DOCUMENTATION(EngateServerInternals)
13462
13463 public:
13466
13469
13472
13474 {
13475 clear();
13476 }
13477
13478 void clear()
13479 {
13480 watchdog.clear();
13481 tuning.clear();
13482 housekeeperIntervalMs = 1000;
13483 }
13484 };
13485
13486 static void to_json(nlohmann::json& j, const EngateServerInternals& p)
13487 {
13488 j = nlohmann::json{
13489 TOJSON_IMPL(watchdog),
13490 TOJSON_IMPL(housekeeperIntervalMs),
13491 TOJSON_IMPL(tuning)
13492 };
13493 }
13494 static void from_json(const nlohmann::json& j, EngateServerInternals& p)
13495 {
13496 p.clear();
13497 getOptional<WatchdogSettings>("watchdog", p.watchdog, j);
13498 getOptional<int>("housekeeperIntervalMs", p.housekeeperIntervalMs, j, 1000);
13499 getOptional<TuningSettings>("tuning", p.tuning, j);
13500 }
13501
13502 //-----------------------------------------------------------
13503 JSON_SERIALIZED_CLASS(EngateServerConfiguration)
13513 {
13514 IMPLEMENT_JSON_SERIALIZATION()
13515 IMPLEMENT_JSON_DOCUMENTATION(EngateServerConfiguration)
13516
13517 public:
13518
13520 std::string id;
13521
13524
13527
13530
13533
13536
13539
13542
13545
13548
13551
13554
13557
13560
13562 {
13563 clear();
13564 }
13565
13566 void clear()
13567 {
13568 id.clear();
13569 serviceConfigurationFileCheckSecs = 60;
13570 groupsConfigurationFileName.clear();
13571 groupsConfigurationFileCommand.clear();
13572 groupsConfigurationFileCheckSecs = 60;
13573 statusReport.clear();
13574 externalHealthCheckResponder.clear();
13575 internals.clear();
13576 certStoreFileName.clear();
13577 certStorePasswordHex.clear();
13578 enginePolicy.clear();
13579 configurationCheckSignalName = "rts.9a164fa.${id}";
13580 fipsCrypto.clear();
13581 nsm.clear();
13582 }
13583 };
13584
13585 static void to_json(nlohmann::json& j, const EngateServerConfiguration& p)
13586 {
13587 j = nlohmann::json{
13588 TOJSON_IMPL(id),
13589 TOJSON_IMPL(serviceConfigurationFileCheckSecs),
13590 TOJSON_IMPL(groupsConfigurationFileName),
13591 TOJSON_IMPL(groupsConfigurationFileCommand),
13592 TOJSON_IMPL(groupsConfigurationFileCheckSecs),
13593 TOJSON_IMPL(statusReport),
13594 TOJSON_IMPL(externalHealthCheckResponder),
13595 TOJSON_IMPL(internals),
13596 TOJSON_IMPL(certStoreFileName),
13597 TOJSON_IMPL(certStorePasswordHex),
13598 TOJSON_IMPL(enginePolicy),
13599 TOJSON_IMPL(configurationCheckSignalName),
13600 TOJSON_IMPL(fipsCrypto),
13601 TOJSON_IMPL(nsm)
13602 };
13603 }
13604 static void from_json(const nlohmann::json& j, EngateServerConfiguration& p)
13605 {
13606 p.clear();
13607 getOptional<std::string>("id", p.id, j);
13608 getOptional<int>("serviceConfigurationFileCheckSecs", p.serviceConfigurationFileCheckSecs, j, 60);
13609 getOptional<std::string>("groupsConfigurationFileName", p.groupsConfigurationFileName, j);
13610 getOptional<std::string>("groupsConfigurationFileCommand", p.groupsConfigurationFileCommand, j);
13611 getOptional<int>("groupsConfigurationFileCheckSecs", p.groupsConfigurationFileCheckSecs, j, 60);
13612 getOptional<EngateServerStatusReportConfiguration>("statusReport", p.statusReport, j);
13613 getOptional<ExternalHealthCheckResponder>("externalHealthCheckResponder", p.externalHealthCheckResponder, j);
13614 getOptional<EngateServerInternals>("internals", p.internals, j);
13615 getOptional<std::string>("certStoreFileName", p.certStoreFileName, j);
13616 getOptional<std::string>("certStorePasswordHex", p.certStorePasswordHex, j);
13617 j.at("enginePolicy").get_to(p.enginePolicy);
13618 getOptional<std::string>("configurationCheckSignalName", p.configurationCheckSignalName, j, "rts.9a164fa.${id}");
13619 getOptional<FipsCryptoSettings>("fipsCrypto", p.fipsCrypto, j);
13620 getOptional<NsmConfiguration>("nsm", p.nsm, j);
13621 }
13622
13623 //-----------------------------------------------------------
13624 static inline void dumpExampleConfigurations(const char *path)
13625 {
13626 WatchdogSettings::document();
13627 FileRecordingRequest::document();
13628 Feature::document();
13629 Featureset::document();
13630 Agc::document();
13631 RtpPayloadTypeTranslation::document();
13632 NetworkInterfaceDevice::document();
13633 ListOfNetworkInterfaceDevice::document();
13634 RtpHeader::document();
13635 BlobInfo::document();
13636 TxAudioUri::document();
13637 AdvancedTxParams::document();
13638 Identity::document();
13639 Location::document();
13640 Power::document();
13641 Connectivity::document();
13642 PresenceDescriptorGroupItem::document();
13643 PresenceDescriptor::document();
13644 NetworkTxOptions::document();
13645 TcpNetworkTxOptions::document();
13646 NetworkAddress::document();
13647 NetworkAddressRxTx::document();
13648 NetworkAddressRestrictionList::document();
13649 StringRestrictionList::document();
13650 Rallypoint::document();
13651 RallypointCluster::document();
13652 NetworkDeviceDescriptor::document();
13653 TxAudio::document();
13654 AudioDeviceDescriptor::document();
13655 ListOfAudioDeviceDescriptor::document();
13656 Audio::document();
13657 TalkerInformation::document();
13658 GroupTalkers::document();
13659 Presence::document();
13660 Advertising::document();
13661 GroupPriorityTranslation::document();
13662 GroupTimeline::document();
13663 GroupAppTransport::document();
13664 RtpProfile::document();
13665 Group::document();
13666 Mission::document();
13667 LicenseDescriptor::document();
13668 EngineNetworkingRpUdpStreaming::document();
13669 EnginePolicyNetworking::document();
13670 Aec::document();
13671 Vad::document();
13672 Bridge::document();
13673 AndroidAudio::document();
13674 EnginePolicyAudio::document();
13675 SecurityCertificate::document();
13676 EnginePolicySecurity::document();
13677 EnginePolicyLogging::document();
13678 EnginePolicyDatabase::document();
13679 NamedAudioDevice::document();
13680 EnginePolicyNamedAudioDevices::document();
13681 Licensing::document();
13682 DiscoveryMagellan::document();
13683 DiscoverySsdp::document();
13684 DiscoverySap::document();
13685 DiscoveryCistech::document();
13686 DiscoveryTrellisware::document();
13687 DiscoveryConfiguration::document();
13688 EnginePolicyInternals::document();
13689 EnginePolicyTimelines::document();
13690 RtpMapEntry::document();
13691 ExternalModule::document();
13692 ExternalCodecDescriptor::document();
13693 EnginePolicy::document();
13694 TalkgroupAsset::document();
13695 EngageDiscoveredGroup::document();
13696 RallypointPeer::document();
13697 RallypointServerLimits::document();
13698 RallypointServerStatusReportConfiguration::document();
13699 RallypointServerLinkGraph::document();
13700 ExternalHealthCheckResponder::document();
13701 Tls::document();
13702 PeeringConfiguration::document();
13703 IgmpSnooping::document();
13704 RallypointReflector::document();
13705 RallypointUdpStreaming::document();
13706 RallypointServer::document();
13707 PlatformDiscoveredService::document();
13708 TimelineQueryParameters::document();
13709 CertStoreCertificate::document();
13710 CertStore::document();
13711 CertStoreCertificateElement::document();
13712 CertStoreDescriptor::document();
13713 CertificateDescriptor::document();
13714 BridgeCreationDetail::document();
13715 GroupConnectionDetail::document();
13716 GroupTxDetail::document();
13717 GroupCreationDetail::document();
13718 GroupReconfigurationDetail::document();
13719 GroupHealthReport::document();
13720 InboundProcessorStats::document();
13721 TrafficCounter::document();
13722 GroupStats::document();
13723 RallypointConnectionDetail::document();
13724 BridgingConfiguration::document();
13725 BridgingServerStatusReportConfiguration::document();
13726 BridgingServerInternals::document();
13727 BridgingServerConfiguration::document();
13728 EarGroupsConfiguration::document();
13729 EarServerStatusReportConfiguration::document();
13730 EarServerInternals::document();
13731 EarServerConfiguration::document();
13732 RangerPackets::document();
13733 TransportImpairment::document();
13734
13735 EngageSemGroupsConfiguration::document();
13736 EngageSemServerStatusReportConfiguration::document();
13737 EngageSemServerInternals::document();
13738 EngageSemServerConfiguration::document();
13739 }
13740}
13741
13742#ifndef WIN32
13743 #pragma GCC diagnostic pop
13744#endif
13745
13746#endif /* ConfigurationObjects_h */
TxPriority_t
Network Transmission Priority.
AddressResolutionPolicy_t
Address family resolution policy.
#define ENGAGE_IGNORE_COMPILER_UNUSED_WARNING
RestrictionElementType_t
Enum describing restriction element types.
@ retGenericAccessTagPattern
Elements are generic access tags regex patterns.
@ retGroupIdPattern
Elements are group ID regex patterns.
@ retGroupId
A literal group ID.
@ retCertificateIssuerPattern
Elements are X.509 certificate issuer regex patterns.
@ retCertificateSubjectPattern
Elements are X.509 certificate subject regex patterns.
@ retCertificateFingerprintPattern
Elements are X.509 certificate fingerprint regex patterns.
@ retCertificateSerialNumberPattern
Elements are X.509 certificate serial number regex patterns.
static void nsmConfigurationResourcesFromJson(const nlohmann::json &j, std::vector< NsmNodeResource > &out)
Parse stateMachine.resources: array of objects {"id","priority"}.
GroupRestrictionAccessPolicyType_t
Enum describing restriction types.
@ graptStrict
Registration for groups is NOT allowed by default - requires definitive access through something like...
@ graptPermissive
Registration for groups is allowed by default.
RestrictionType_t
Enum describing restriction types.
@ rtWhitelist
Elements are whitelisted.
@ rtBlacklist
Elements are blacklisted.
Configuration when using the engageBeginGroupTxAdvanced API.
TxAudioUri audioUri
[Optional] A URI to stream from instead of the audio input device
uint8_t priority
[Optional, Default: 0] Transmit priority between 0 (lowest) and 255 (highest).
bool receiverRxMuteForAliasSpecializer
[Optional, Default: false] Indicates that the aliasSpecializer must cause receivers to mute this tran...
uint16_t subchannelTag
[Optional, Default: 0] Defines a sub channel within a group. Audio will be opaque to all other client...
bool reBegin
[Optional, Default: false] Indicates that the transmission should be restarted.
uint16_t aliasSpecializer
[Optional, Default: 0] Defines a numeric affinity value to be included in the transmission....
uint16_t flags
[Optional, Default: 0] Combination of the ENGAGE_TXFLAG_xxx flags
std::string alias
[Optional, Default: empty string] The Engage Engine should transmit the user's alias as part of the h...
bool includeNodeId
[Optional, Default: false] The Engage Engine should transmit the NodeId as part of the header extensi...
uint32_t txId
[Optional, Default: 0] Transmission ID
bool muted
[Optional, Default: false] While the microphone should be opened, captured audio should be ignored un...
Defines parameters for advertising of an entity such as a known, public, group.
int intervalMs
[Optional, Default: 20000] Interval at which the advertisement should be sent in milliseconds.
bool enabled
[Optional, Default: false] Enabled advertising
bool alwaysAdvertise
[Optional, Default: false] If true, the node will advertise the item even if it detects other nodes m...
Acoustic Echo Cancellation settings.
int speakerTailMs
[Optional, Default: 60] Milliseconds of speaker tail
bool cng
[Optional, Default: true] Enable comfort noise generation
bool enabled
[Optional, Default: false] Enable acoustic echo cancellation
Mode_t
Acoustic echo cancellation mode enum.
Mode_t mode
[Optional, Default: aecmDefault] Specifies AEC mode. See Mode_t for all modes
bool enabled
[Optional, Default: false] Enables automatic gain control.
int compressionGainDb
[Optional, Default: 25, Minimum = 0, Maximum = 125] Gain in db.
bool enableLimiter
[Optional, Default: false] Enables limiter to prevent overdrive.
int maxLevel
[Optional, Default: 255] Maximum level.
int minLevel
[Optional, Default: 0] Minimum level.
int targetLevelDb
[Optional, Default: 9] Target gain level if there is no compression gain.
Default audio settings for AndroidAudio.
int api
[Optional, Default 0] Android audio API version: 0=Unspecified, 1=AAudio, 2=OpenGLES
int sessionId
[Optional, Default INVALID_SESSION_ID] A session ID from the Android AudioManager
int contentType
[Optional, Default 1] Usage type: 1=Speech 2=Music 3=Movie 4=Sonification
int sharingMode
[Optional, Default 0] Sharing mode: 0=Exclusive, 1=Shared
int performanceMode
[Optional, Default 12] Performance mode: 10=None/Default, 11=PowerSaving, 12=LowLatency
int inputPreset
[Optional, Default 7] Input preset: 1=Generic 5=Camcorder 6=VoiceRecognition 7=VoiceCommunication 9=U...
int usage
[Optional, Default 2] Usage type: 1=Media 2=VoiceCommunication 3=VoiceCommunicationSignalling 4=Alarm...
int engineMode
[Optional, Default 0] 0=use legacy low-level APIs, 1=use high-level Android APIs
int samplingRate
This is the rate that the device will process the PCM audio data at.
std::string name
Name of the device assigned by the platform.
bool isDefault
True if this is the default device for the direction above.
std::string serialNumber
Device serial number (if any)
int channels
Indicates the number of audio channels to process.
std::string hardwareId
Device hardware ID (if any)
std::string manufacturer
Device manufacturer (if any)
Direction_t direction
Audio direction the device supports.
std::string extra
Extra data provided by the platform (if any)
bool isPresent
True if the device is currently present on the system.
int boostPercentage
A percentage at which to gain/attenuate the audio.
bool isAdad
True if the device is an Application-Defined Audio Device.
int deviceId
[Read Only] Unique device identifier assigned by Engage Engine at time of device creation.
double coefficient
[Optional. Default: 1.75] Coefficient by which to multiply the current history average to determine t...
uint32_t hangMs
[Optional. Default: 1500] Hang timer in milliseconds
bool enabled
[Optional. Default: false] Enables the audio gate if true
uint32_t windowMin
[Optional. Default: 25] Number of 10ms history samples to gather before calculating the noise floor -...
bool useVad
[Optional. Default: false] Use voice activity detection rather than audio energy
uint32_t windowMax
[Optional. Default: 125] Maximum number of 10ms history samples - ignored if useVad is true
Used to configure the Audio properties for a group.
int outputLevelRight
[Optional, Default: 100] The percentage at which to set the right audio at.
std::string outputHardwareId
[Optional] Hardware ID of the output audio device to use for this group. If empty,...
bool outputMuted
[Optional, Default: false] Mutes output audio.
std::string inputHardwareId
[Optional] Hardware ID of the input audio device to use for this group. If empty, inputId is used.
bool enabled
[Optional, Default: true] Audio is enabled
int inputId
[Optional, Default: first audio device] Id for the input audio device to use for this group.
int outputGain
[Optional, Default: 0] The percentage at which to gain the output audio.
int outputId
[Optional, Default: first audio device] Id for the output audio device to use for this group.
int inputGain
[Optional, Default: 0] The percentage at which to gain the input audio.
int outputLevelLeft
[Optional, Default: 100] The percentage at which to set the left audio at.
Describes an audio device that is available on the system.
std::string manufacturer
[Optional] Manufacturer
std::string hardwareId
The string identifier used to identify the hardware.
bool isDefault
True if this is the default device.
std::string serialNumber
[Optional] Serial number
std::vector< AudioRegistryDevice > inputs
[Optional] List of input devices to use for the registry.
std::vector< AudioRegistryDevice > outputs
[Optional] List of output devices to use for the registry.
Describes the Blob data being sent used in the engageSendGroupBlob API.
size_t size
[Optional, Default : 0] Size of the payload
RtpHeader rtpHeader
Custom RTP header.
PayloadType_t payloadType
[Optional, Default: bptUndefined] The payload type to send in the blob
std::string target
[Optional, Default: empty string] The nodeId to which this message is targeted. If this is empty,...
std::string source
[Optional, Default: empty string] The nodeId of Engage Engine that sent the message....
int txnTimeoutSecs
[Optional, Default: 0] Number of seconds after which to time out delivery to the target node
PayloadType_t
Payload type. BlobInfo RTP supported Payload types.
std::string txnId
[Optional but required if txnTimeoutSecs is > 0]
Detailed information for a bridge creation.
CreationStatus_t status
The creation status.
std::vector< std::string > groups
List of group IDs to be included in the session.
bool enabled
[Optional, Default: true] Enable the bridge NOTE: this is only used bt EBS and is ignored when callin...
std::vector< Group > groups
Array of bridges in the configuration.
std::vector< Bridge > bridges
Array of bridges in the configuration.
std::string certStoreFileName
Path to the certificate store.
FipsCryptoSettings fipsCrypto
[Optional] Settings for the FIPS crypto.
std::string configurationCheckSignalName
Name to use for signalling a configuration check.
ExternalHealthCheckResponder externalHealthCheckResponder
Details concerning the server's interaction with an external health-checker such as a load-balancer.
OpMode_t mode
Specifies the default operation mode (see OpMode_t).
EnginePolicy enginePolicy
The policy to be used for the underlying Engage Engine.
BridgingServerStatusReportConfiguration statusReport
Details for producing a status report.
std::string bridgingConfigurationFileCommand
Command-line to execute that returns a bridging configuration.
std::string bridgingConfigurationFileName
Name of a file containing the bridging configuration.
std::string certStorePasswordHex
Hex password for the certificate store (if any)
OpMode_t
Enum describing the default mode the bridging service runs in. Values of omRaw, omMultistream,...
BridgingServerInternals internals
Internal settings.
int bridgingConfigurationFileCheckSecs
Number of seconds between checks to see if the bridging configuration has been updated....
int serviceConfigurationFileCheckSecs
Number of seconds between checks to see if the service configuration has been updated....
std::string id
A unqiue identifier for the bridge server.
NsmConfiguration nsm
[Optional] Settings for NSM.
int housekeeperIntervalMs
[Optional, Default: 1000] Interval at which to run the housekeeper thread.
TuningSettings tuning
[Optional] Low-level tuning
WatchdogSettings watchdog
[Optional] Settings for the watchdog.
TODO: Configuration for the bridging server status report file.
Description of a certstore certificate element.
bool hasPrivateKey
True if the certificate has a private key associated with it.
Holds a certificate and (optionally) a private key in a certstore.
std::string certificatePem
Certificate in PEM format.
std::string privateKeyPem
Private key in PEM format.
std::vector< CertStoreCertificateElement > certificates
Array of certificate elements.
std::string fileName
Name of the file the certstore resides in.
std::vector< KvPair > kvp
Array of kv pairs.
std::vector< KvPair > kvp
[Optional] Array of KV pairs
std::vector< CertStoreCertificate > certificates
Array of certificates in this store.
std::string id
The ID of the certstore.
std::vector< CertificateSubjectElement > subjectElements
Array of subject elements.
std::string publicKeyPem
PEM version of the public key.
std::vector< CertificateSubjectElement > issuerElements
Array of issuer elements.
bool selfSigned
Indicates whether the certificqte is self-signed.
std::string certificatePem
PEM version of the certificate.
Description of a certificate subject element.
Connectivity Information used as part of the PresenceDescriptor.
int type
Is the type of connectivity the device has to the network.
int strength
Is the strength of the connection connection as reported by the OS - usually in dbm.
int rating
Is the quality of the network connection as reported by the OS - OS dependent.
Configuration for the Discovery features.
DiscoveryMagellan Discovery settings.
Tls tls
[Optional] Details concerning Transport Layer Security.
std::string interfaceName
[Optional, Default: default system interface] The network interface to bind to for discovery packets.
Session Announcement Discovery settings settings.
int ageTimeoutMs
[Optional, Default 30000] Number of milliseconds of no SAP announcment before the advertised entity i...
Advertising advertising
Parameters for advertising.
NetworkAddress address
[Optional, Default 224.2.127.254:9875] IP address and port.
bool enabled
[Optional, Default: false] Enables the Engage Engine to use SAP for asset discovery.
std::string interfaceName
[Optional, Default: default system interface] The network interface to bind to for discovery packets.
Simple Service Discovery Protocol settings.
bool enabled
[Optional, Default: false] Enables the Engage Engine to use SSDP for asset discovery.
std::vector< std::string > searchTerms
[Optional] An array of regex strings to be used to filter SSDP requests and responses.
int ageTimeoutMs
[Optional, Default 30000] Number of milliseconds of no SSDP announcment before the advertised entity ...
Advertising advertising
Parameters for advertising.
std::string interfaceName
[Optional, Default: default system interface] The network interface to bind to for discovery packets.
NetworkAddress address
[Optional, Default 255.255.255.255:1900] IP address and port.
std::vector< Group > groups
Array of groups in the configuration.
std::string id
A unqiue identifier for the EAR server.
std::string configurationCheckSignalName
Name to use for signalling a configuration check.
std::string certStorePasswordHex
Hex password for the certificate store (if any)
ExternalHealthCheckResponder externalHealthCheckResponder
Details concerning the server's interaction with an external health-checker such as a load-balancer.
FipsCryptoSettings fipsCrypto
[Optional] Settings for the FIPS crypto.
NsmConfiguration nsm
[Optional] Settings for NSM.
int groupsConfigurationFileCheckSecs
Number of seconds between checks to see if the configuration has been updated. Default is 60.
EarServerStatusReportConfiguration statusReport
Details for producing a status report.
std::string certStoreFileName
Path to the certificate store.
std::string groupsConfigurationFileName
Name of a file containing the ear configuration.
int serviceConfigurationFileCheckSecs
Number of seconds between checks to see if the service configuration has been updated....
std::string groupsConfigurationFileCommand
Command-line to execute that returns a configuration.
EnginePolicy enginePolicy
The policy to be used for the underlying Engage Engine.
int housekeeperIntervalMs
[Optional, Default: 1000] Interval at which to run the housekeeper thread.
WatchdogSettings watchdog
[Optional] Settings for the EAR's watchdog.
TuningSettings tuning
[Optional] Low-level tuning
TODO: Configuration for the ear server status report file.
std::vector< Group > groups
Array of groups in the configuration.
FipsCryptoSettings fipsCrypto
[Optional] Settings for the FIPS crypto.
EnginePolicy enginePolicy
The policy to be used for the underlying Engage Engine.
std::string configurationCheckSignalName
Name to use for signalling a configuration check.
EngageSemServerStatusReportConfiguration statusReport
Details for producing a status report.
std::string id
A unqiue identifier for the EFC server.
std::string certStoreFileName
Path to the certificate store.
std::string groupsConfigurationFileName
Name of a file containing the EFC configuration.
int serviceConfigurationFileCheckSecs
Number of seconds between checks to see if the service configuration has been updated....
NsmConfiguration nsm
[Optional] Settings for NSM.
std::string groupsConfigurationFileCommand
Command-line to execute that returns a configuration.
ExternalHealthCheckResponder externalHealthCheckResponder
Details concerning the server's interaction with an external health-checker such as a load-balancer.
EngageSemServerInternals internals
Internal settings.
std::string certStorePasswordHex
Hex password for the certificate store (if any)
int groupsConfigurationFileCheckSecs
Number of seconds between checks to see if the configuration has been updated. Default is 60.
WatchdogSettings watchdog
[Optional] Settings for the EFC's watchdog.
TuningSettings tuning
[Optional] Low-level tuning
int housekeeperIntervalMs
[Optional, Default: 1000] Interval at which to run the housekeeper thread.
TODO: Configuration for the EFC server status report file.
std::vector< EngateGroup > groups
Array of groups in the configuration.
EngateServerStatusReportConfiguration statusReport
Details for producing a status report.
ExternalHealthCheckResponder externalHealthCheckResponder
Details concerning the server's interaction with an external health-checker such as a load-balancer.
std::string certStorePasswordHex
Hex password for the certificate store (if any)
std::string groupsConfigurationFileName
Name of a file containing the ear configuration.
EngateServerInternals internals
Internal settings.
int groupsConfigurationFileCheckSecs
Number of seconds between checks to see if the configuration has been updated. Default is 60.
FipsCryptoSettings fipsCrypto
[Optional] Settings for the FIPS crypto.
std::string certStoreFileName
Path to the certificate store.
NsmConfiguration nsm
[Optional] Settings for NSM.
std::string configurationCheckSignalName
Name to use for signalling a configuration check.
EnginePolicy enginePolicy
The policy to be used for the underlying Engage Engine.
int serviceConfigurationFileCheckSecs
Number of seconds between checks to see if the service configuration has been updated....
std::string id
A unqiue identifier for the EAR server.
std::string groupsConfigurationFileCommand
Command-line to execute that returns a configuration.
TuningSettings tuning
[Optional] Low-level tuning
int housekeeperIntervalMs
[Optional, Default: 1000] Interval at which to run the housekeeper thread.
WatchdogSettings watchdog
[Optional] Settings for the EAR's watchdog.
TODO: Configuration for the engate server status report file.
TxPriority_t priority
[Optional, Default: priVoice] Transmission priority. This has meaning on some operating systems based...
int keepaliveIntervalSecs
Optional, Default: 15] Seconds interval at which to send UDP keepalives to Rallypoints....
int ttl
[Optional, Default: 64] Time to live or hop limit is a mechanism that limits the lifespan or lifetime...
int port
[Optional, 0] The port to be used for Rallypoint UDP streaming. A value of 0 will result in an epheme...
bool enabled
[Optional, false] Enables UDP streaming if the RP supports it
Default audio settings for Engage Engine policy.
AudioRegistry registry
[Optional] If specified, this registry will be used to discover the input and output devices
Vad vad
[Optional] Voice activity detection settings
Agc outputAgc
[Optional] Automatic Gain Control for audio outputs
bool saveOutputPcm
[Optional, Default: false] If true, input audio is written to a PCM file in the data directory
bool enabled
[Optional, Default: true] Enables audio processing
AndroidAudio android
[Optional] Android-specific audio settings
int internalRate
[Optional, Default: 16000] Internal sampling rate - 8000 or 16000
bool muteTxOnTx
[Optional, Default: false] Automatically mute TX when TX begins
Agc inputAgc
[Optional] Automatic Gain Control for audio inputs
bool hardwareEnabled
[Optional, Default: true] Enables local machine hardware audio
Aec aec
[Optional] Acoustic echo cancellation settings
bool denoiseInput
[Optional, Default: false] Denoise input
bool saveInputPcm
[Optional, Default: false] If true, input audio is written to a PCM file in the data directory
bool denoiseOutput
[Optional, Default: false] Denoise output
int internalChannels
[Optional, Default: 2] Internal audio channel count rate - 1 or 2
Provides Engage Engine policy configuration.
std::vector< ExternalModule > externalCodecs
Optional external codecs.
EnginePolicyNamedAudioDevices namedAudioDevices
Optional named audio devices (Linux only)
Featureset featureset
Optional feature set.
EnginePolicyDatabase database
Database settings.
EnginePolicyAudio audio
Audio settings.
std::string dataDirectory
Specifies the root of the physical path to store data.
EnginePolicyLogging logging
Logging settings.
DiscoveryConfiguration discovery
Discovery settings.
std::vector< RtpMapEntry > rtpMap
Optional RTP - overrides the default.
EngineStatusReportConfiguration statusReport
Optional statusReport - details for the status report.
EnginePolicyInternals internals
Internal settings.
EnginePolicySecurity security
Security settings.
EnginePolicyTimelines timelines
Timelines settings.
EnginePolicyNetworking networking
Security settings.
TuningSettings tuning
[Optional] Low-level tuning
int stickyTidHangSecs
[Optional, Default: 10] The number of seconds after which "sticky" transmission IDs expire.
int maxTxSecs
[Optional, Default: 30] The default duration the engageBeginGroupTx and engageBeginGroupTxAdvanced fu...
int rpConnectionTimeoutSecs
[Optional, Default: 5] Connection timeout in seconds to RP
WatchdogSettings watchdog
[Optional] Settings for the Engine's watchdog.
RallypointCluster::ConnectionStrategy_t rpClusterStrategy
[Optional, Default: csRoundRobin] Specifies the default RP cluster connection strategy to be followed...
int delayedMicrophoneClosureSecs
[Optional, Default: 15] The number of seconds to cache an open microphone before actually closing it.
int rpTransactionTimeoutMs
[Optional, Default: 5] Transaction timeout with RP
int rtpExpirationCheckIntervalMs
[Optional, Default: 250] Interval at which to check for RTP expiration.
int rpClusterRolloverSecs
[Optional, Default: 10] Seconds between switching to a new target in a RP cluster
int housekeeperIntervalMs
[Optional, Default: 1000] Interval at which to run the housekeeper thread.
int uriStreamingIntervalMs
[Optional, Default: 60] The packet framing interval for audio streaming from a URI.
int maxLevel
[Optional, Default: 4, Range: 0-4] This is the maximum logging level to display in other words,...
EngineNetworkingRpUdpStreaming rpUdpStreaming
[Optional] Configuration for UDP streaming
std::string defaultNic
The default network interface card the Engage Engine should bind to.
RtpProfile rtpProfile
[Optional] Configuration for RTP profile
AddressResolutionPolicy_t addressResolutionPolicy
[Optional, Default 64] Address resolution policy
int multicastRejoinSecs
[Optional, Default: 8] Number of seconds elapsed between RX of multicast packets before an IGMP rejoi...
bool logRtpJitterBufferStats
[Optional, Default: false] If true, logs RTP jitter buffer statistics periodically
int rallypointRtTestIntervalMs
[Optional, Default: 60000] Milliseconds between sending Rallypoint round-trip test requests
bool preventMulticastFailover
[Optional, Default: false] Overrides/cancels group-level multicast failover if set to true
Default certificate to use for security operation in the Engage Engine.
SecurityCertificate certificate
The default certificate and private key for the Engine instance.
std::vector< std::string > caCertificates
[Optional] An array of CA certificates to be used for validation of far-end X.509 certificates
long autosaveIntervalSecs
[Default 5] Interval at which events are to be saved from memory to disk (a slow operation)
int maxStorageMb
Specifies the maximum storage space to use.
bool enabled
[Optional, Default: true] Specifies if Time Lines are enabled by default.
int maxDiskMb
Specifies the maximum disk space to use - defaults to maxStorageMb.
SecurityCertificate security
The certificate to use for signing the recording.
int maxAudioEventMemMb
Specifies the maximum number of megabytes to allow for a single audio event's memory block - defaults...
long maxEventAgeSecs
Maximum age of an event after which it is to be erased.
int maxMemMb
Specifies the maximum memory to use - defaults to maxStorageMb.
std::string storageRoot
Specifies where the timeline recordings will be stored physically.
bool ephemeral
[Default false] If true, recordings are automatically purged when the Engine is shut down and/or rein...
bool disableSigningAndVerification
[Default false] If true, prevents signing of events - i.e. no anti-tanpering features will be availab...
int maxEvents
Maximum number of events to be retained.
long groomingIntervalSecs
Interval at which events are to be checked for age-based grooming.
TODO: Configuration for the translation server status report file.
TODO: Configuration to enable external systems to use to check if the service is still running.
Base for a description of an external module.
nlohmann::json configuration
Optional free-form JSON configuration to be passed to the module.
bool debug
[Optional, Default false] If true, requests the crypto engine module to run in debugging mode.
bool enabled
[Optional, Default false] If true, requires FIPS140-2 crypto operation.
std::string curves
[Optional] Specifies the NIST-approved curves to be used for FIPS
std::string path
Path where the crypto engine module is located
std::string ciphers
[Optional] Specifies the NIST-approved ciphers to be used for FIPS
Configuration for the optional custom transport functionality for Group.
bool enabled
[Optional, Default: false] Enables custom feature.
std::string id
The id/name of the transport. This must match the id/name supplied when registering the app transport...
BridgingOpMode_t
Enum describing bridging operation mode types where applicable.
AdvancedTxParams mixedStreamTxParams
[Optional] Parameters to be applied when output is mixed (bomMixedStream)
BridgingOpMode_t mode
[Optional] The output mode
Detailed information for a group connection.
bool asFailover
Indicates whether the connection is for purposes of failover.
ConnectionType_t connectionType
The connection type.
std::string reason
[Optional] Additional reason information
Detailed information for a group creation.
CreationStatus_t status
The creation status.
uint8_t tx
[Optional] The default audio priority
uint8_t rx
[Optional] The default audio RX priority
Detailed information regarding a group's health.
GroupAppTransport appTransport
[Optional] Settings necessary if the group is transported via an application-supplied custom transpor...
std::string source
[Optional, Default: null] Indicates the source of this configuration - e.g. from the application or d...
Presence presence
Presence configuration (see Presence).
std::vector< uint16_t > specializerAffinities
List of specializer IDs that the local node has an affinity for/member of.
std::vector< Source > ignoreSources
[Optional] List of sources to ignore for this group
NetworkAddress rtcpPresenceRx
The network address for receiving RTCP presencing packets.
bool allowLoopback
[Optional, Default: false] Allows for processing of looped back packets - primarily meant for debuggi...
Type_t
Enum describing the group types.
NetworkAddress tx
The network address for transmitting network traffic to.
std::string alias
User alias to transmit as part of the realtime audio stream when using the engageBeginGroupTx API.
int stickyTidHangSecs
[Optional, Default: 10] The number of seconds after which "sticky" transmission IDs expire.
TxAudio txAudio
Audio transmit options such as codec, framing size etc (see TxAudio).
int maxRxSecs
[Optional, Default: 0] Maximum number of seconds the Engine will receive for on this group.
PacketCapturer txCapture
Details for capture of transmitted packets
NetworkTxOptions txOptions
Transmit options for the group (see NetworkTxOptions).
std::string synVoice
Name of the synthesis voice to use for the group
TransportImpairment rxImpairment
[Optional] The RX impairment to apply
std::string languageCode
ISO 639-2 language code for the group
std::string cryptoPassword
Password to be used for encryption. Note that this is not the encryption key but, rather,...
std::vector< std::string > presenceGroupAffinities
List of presence group IDs with which this group has an affinity.
GroupTimeline timeline
Audio timeline is configuration.
GroupPriorityTranslation priorityTranslation
[Optional] Describe how traffic for this group on a different addressing scheme translates to priorit...
bool disablePacketEvents
[Optional, Default: false] Disable packet events.
bool blockAdvertising
[Optional, Default: false] Set this to true if you do not want the Engine to advertise this Group on ...
bool ignoreAudioTraffic
[Optional, Default: false] Indicates that the group should ignore traffic that is audio-related
std::string interfaceName
The name of the network interface to use for multicasting for this group. If not provided,...
bool _wasDeserialized_rtpProfile
[Internal - not serialized
bool enableMulticastFailover
[Optional, Default: false] Set this to true to enable failover to multicast operation if a Rallypoint...
std::string name
The human readable name for the group.
NetworkAddress rx
The network address for receiving network traffic on.
Type_t type
Specifies the group type (see Type_t).
GroupDefaultAudioPriority defaultAudioPriority
Default audio priority for the group (see GroupDefaultAudioPriority).
uint16_t blobRtpPayloadType
[Optional, Default: ENGAGE_DEFAULT_BLOB_RTP_PAYLOAD_TYPE] The RTP payload type to be used for blobs s...
std::vector< Rallypoint > rallypoints
[DEPRECATED] List of Rallypoint (s) the Group should use to connect to a Rallypoint router....
RtpProfile rtpProfile
[Optional] RTP profile the group
std::vector< RtpPayloadTypeTranslation > inboundRtpPayloadTypeTranslations
[Optional] A vector of translations from external entity RTP payload types to those used by Engage
int multicastFailoverSecs
[Optional, Default: 10] Specifies the number fo seconds to wait after Rallypoint connection failure t...
InboundAliasGenerationPolicy_t
Enum describing the alias generation policy.
RangerPackets rangerPackets
[Optional] Ranger packet options
int rfc4733RtpPayloadId
[Optional, Default: 0] The RTP payload ID by which to identify (RX and TX) payloads encoded according...
uint32_t securityLevel
[Optional, Default: 0] The security classification level of the group.
PacketCapturer rxCapture
Details for capture of received packets
GroupBridgeTargetOutputDetail bridgeTargetOutputDetail
Output details for when the group is a target in a bridge (see GroupBridgeTargetOutputDetail).
std::string id
Unique identity for the group.
AudioGate gateIn
[Optional] Inbound gating of audio - only audio allowed through by the gate will be processed
RallypointCluster rallypointCluster
Cluster of one or more Rallypoints the group may use.
TransportImpairment txImpairment
[Optional] The TX impairment to apply
Audio audio
Sets audio properties like which audio device to use, audio gain etc (see Audio).
bool lbCrypto
[Optional, Default: false] Use low-bandwidth crypto
std::string spokenName
The group name as spoken - typically by a text-to-speech system
InboundAliasGenerationPolicy_t inboundAliasGenerationPolicy
[Optional, Default: iagpAnonymousAlias]
std::string anonymousAlias
[Optional] Alias to use for inbound streams that do not have an alias component
Details for priority transmission based on unique network addressing.
Detailed information for a group reconfiguration.
ReconfigurationStatus_t status
The creation status.
List of TalkerInformation objects.
std::vector< TalkerInformation > list
List of TalkerInformation objects.
Configuration for Timeline functionality for Group.
bool enabled
[Optional, Default: true] Enables timeline feature.
int maxAudioTimeMs
[Optional, Default: 30000] Maximum audio block size to record in milliseconds.
Detailed information for a group transmit.
int remotePriority
Remote TX priority (optional)
long nonFdxMsHangRemaining
Milliseconds of hang time remaining on a non-FDX group (optional)
int localPriority
Local TX priority (optional)
uint32_t txId
Transmission ID (optional)
std::string displayName
[Optional, Default: empty string] The display name to be used for the user.
std::string userId
[Optional, Default: empty string] The user ID to be used to represent the user.
std::string nodeId
[Optional, Default: Auto Generated] This is the Node ID to use to represent instance on the network.
std::string avatar
[Optional, Default: empty string] This is a application defined field used to indicate a users avatar...
Configuration for IGMP snooping.
int queryIntervalMs
[Optional, Default 125000] Interval between sending IGMP membership queries. If 0,...
int subscriptionTimeoutMs
[Optional, Default 0] Typically calculated according to RFC specifications. Set a value here to manua...
bool enabled
Enables IGMP. Default is false.
Detailed statistics for an inbound processor.
Helper class for serializing and deserializing the LicenseDescriptor JSON.
std::string activationHmac
The HMAC to be used for activation purposes.
std::string entitlement
Entitlement key to use for the product.
std::string cargo
Reserved for internal use.
std::string manufacturerId
[Read only] Manufacturer ID.
std::string key
License Key to be used for the application.
uint8_t cargoFlags
Reserved for internal use.
int type
[Read only] 0 = unknown, 1 = perpetual, 2 = expires
std::string deviceId
[Read only] Unique device identifier generated by the Engine.
time_t expires
[Read only] The time that the license key or activation code expires in Unix timestamp - Zulu/UTC.
std::string activationCode
If the key required activation, this is the activation code generated using the entitlement,...
std::string expiresFormatted
[Read only] The time that the license key or activation code expires formatted in ISO 8601 format,...
std::string deviceId
Device Identifier. See LicenseDescriptor::deviceId for details.
std::string manufacturerId
Manufacturer ID to use for the product. See LicenseDescriptor::manufacturerId for details.
std::string activationCode
Activation Code issued for the license key. See LicenseDescriptor::activationCode for details.
std::string key
License key. See LicenseDescriptor::key for details.
std::string entitlement
Entitlement key to use for the product. See LicenseDescriptor::entitlement for details.
std::vector< Group > groups
Array of groups in the configuration.
std::vector< VoiceToVoiceSession > voiceToVoiceSessions
Array of voiceToVoice sessions in the configuration.
Configuration for the linguistics server.
LingoServerStatusReportConfiguration statusReport
Details for producing a status report.
std::string lingoConfigurationFileName
Name of a file containing the linguistics configuration.
std::string configurationCheckSignalName
Name to use for signalling a configuration check.
std::string id
A unqiue identifier for the linguistics server.
ExternalHealthCheckResponder externalHealthCheckResponder
Details concerning the server's interaction with an external health-checker such as a load-balancer.
NsmConfiguration nsm
[Optional] Settings for NSM.
std::string certStorePasswordHex
Hex password for the certificate store (if any)
std::string lingoConfigurationFileCommand
Command-line to execute that returns a linguistics configuration.
LingoServerInternals internals
Internal settings.
EnginePolicy enginePolicy
The policy to be used for the underlying Engage Engine.
int lingoConfigurationFileCheckSecs
Number of seconds between checks to see if the linguistics configuration has been updated....
std::string certStoreFileName
Path to the certificate store.
FipsCryptoSettings fipsCrypto
[Optional] Settings for the FIPS crypto.
NetworkAddress proxy
Address and port of the proxy.
int serviceConfigurationFileCheckSecs
Number of seconds between checks to see if the service configuration has been updated....
int housekeeperIntervalMs
[Optional, Default: 1000] Interval at which to run the housekeeper thread.
WatchdogSettings watchdog
[Optional] Settings for the watchdog.
TuningSettings tuning
[Optional] Low-level tuning
TODO: Configuration for the translation server status report file.
Location information used as part of the PresenceDescriptor.
double longitude
Its the longitudinal position using the Signed degrees format (DDD.dddd) format. Valid range is -180 ...
double altitude
[Optional, Default: INVALID_LOCATION_VALUE] The altitude above sea level in meters.
uint32_t ts
[Read Only: Unix timestamp - Zulu/UTC] Indicates the timestamp that the location was recorded.
double latitude
Its the latitude position using the using the Signed degrees format (DDD.dddd). Valid range is -90 to...
double direction
[Optional, Default: INVALID_LOCATION_VALUE] Direction the endpoint is traveling in degrees....
double speed
[Optional, Default: INVALID_LOCATION_VALUE] The speed the endpoint is traveling at in meters per seco...
Defines settings for a named identity.
SecurityCertificate certificate
The identity certificate.
RestrictionType_t type
Type indicating how the elements are to be treated.
std::vector< NetworkAddressRxTx > elements
List of elements.
std::string manufacturer
Device manufacturer (if any)
int deviceId
[Read Only] Unique device identifier assigned by Engage Engine at time of device creation.
std::string extra
Extra data provided by the platform (if any)
std::string hardwareId
Device hardware ID (if any)
std::string serialNumber
Device serial number (if any)
std::string name
Name of the device assigned by the platform.
int ttl
[Optional, Default: 1] Time to live or hop limit is a mechanism that limits the lifespan or lifetime ...
TxPriority_t priority
[Optional, Default: priVoice] Transmission priority. This has meaning on some operating systems based...
int goingActiveRandomDelayMs
[Optional, Default: 500] Random delay in ms before entering GOING_ACTIVE (spread elections).
int internalMultiplier
[Optional, Default: 1] Scales TX interval and transition wait (testing / timing).
Cursor-on-Target envelope for NSM wire payloads (optional).
std::string detailJson
Optional JSON object serialized as string for extra CoT detail elements.
Configuration for a Nsm node.
FipsCryptoSettings fipsCrypto
[Optional] Settings for the FIPS crypto.
std::string configurationCheckSignalName
Name to use for signalling a configuration check.
NsmNodeStatusReportConfiguration statusReport
Details for producing a status report.
std::string domainName
Logical domain label for status and monitoring.
WatchdogSettings watchdog
[Optional] Settings for the node's watchdog.
NsmNodeLogging logging
Console / syslog logging.
Licensing licensing
Licensing settings.
Featureset featureset
Optional feature set.
std::string id
Unique identifier for this process instance (also used as default state machine id when stateMachine....
int defaultPriority
[Optional, Default: 0] Election priority byte when a resource omits priority or uses -1 (see NsmNodeR...
bool dashboardToken
[Optional, Default: false] When true with dashboard logging, show resource token in the UI.
std::vector< NsmNodePeriodic > periodics
Periodic commands (JSON output, external token range, etc.).
PacketCapturer txCapture
Details for capture of transmitted packets
NsmNodeScripts scripts
Lifecycle hook scripts.
std::string multicastInterfaceName
Multicast bind / subscription NIC (SO_BINDTODEVICE / IP_ADD_MEMBERSHIP).
std::string name
Human-readable label for operators.
IpFamilyType_t ipFamily
[Optional, Default IpFamilyType_t::ifIp4] Address family for interface validation and logging.
int fixedToken
[Optional, Default: -1] Fixed global token for testing; >= 0 forces that token, -1 uses random per el...
TuningSettings tuning
[Optional] Low-level tuning
PacketCapturer rxCapture
Details for capture of received packets
NsmNodeCotSettings cot
Optional CoT wrapping for wire payloads.
NsmConfiguration stateMachine
Core NSM protocol and networking configuration (UDP, tokens, timing).
Console / syslog logging behaviour for nsmd.
bool dashboard
[Optional, Default: false] Full-screen dashboard instead of line logs.
int level
[Optional, Default: 3] ILogger level (fatal=0 ... debug=5).
Scheduled command (e.g. external token range discovery).
One logical resource in the NSM state machine with its election priority (high byte of token).
int priority
[Optional, Default: -1] Priority byte for token MSB; -1 means use NsmNode.defaultPriority when loaded...
External hook scripts for state transitions and reporting.
Description of a packet capturer.
int version
TODO: A version number for the domain configuration. Change this whenever you update your configurati...
std::string id
An identifier useful for organizations that track different domain configurations by ID.
std::vector< RallypointPeer > peers
List of Rallypoint peers to connect to.
uint32_t configurationVersion
Internal configuration version.
Device Power Information used as part of the PresenceDescriptor.
int state
[Optional, Default: 0] Is the current state that the power system is in.
int source
[Optional, Default: 0] Is the source the power is being delivered from
int level
[Optional, Default: 0] Is the current level of the battery or power system as a percentage....
Group Alias used as part of the PresenceDescriptor.
uint16_t status
Status flags for the user's participation on the group.
std::string groupId
Group Id the alias is associated with.
Represents an endpoints presence properties. Used in engageUpdatePresenceDescriptor API and PFN_ENGAG...
Power power
[Optional, Default: see Power] Device power information like charging state, battery level,...
std::string custom
[Optional, Default: empty string] Custom string application can use of presence descriptor....
bool self
[Read Only] Indicates that this presence declaration was generated by the Engage Engine the applicati...
uint32_t nextUpdate
[Read Only, Unix timestamp - Zulu/UTC] Indicates the next time the presence descriptor will be sent.
std::vector< PresenceDescriptorGroupItem > groupAliases
[Read Only] List of group items associated with this presence descriptor.
Identity identity
[Optional, Default see Identity] Endpoint's identity information.
bool announceOnReceive
[Read Only] Indicates that the Engine will announce its PresenceDescriptor in response to this messag...
uint32_t ts
[Read Only, Unix timestamp - Zulu/UTC] Indicates the timestamp that the message was originally sent.
std::string comment
[Optional] No defined limit on size but the total size of the serialized JSON object must fit inside ...
Connectivity connectivity
[Optional, Default: see Connectivity] Device connectivity information like wifi/cellular,...
uint32_t disposition
[Optional] Indicates the users disposition
Location location
[Optional, Default: see Location] Location information
Describes how the Presence is configured for a group of type Group::gtPresence in Group::Type_t.
Format_t format
Format to be used to represent presence information.
bool reduceImmediacy
[Optional, Default: false] Instructs the Engage Engine reduce the immediacy of presence announcements...
bool listenOnly
Instructs the Engage Engine to not transmit presence descriptor.
int minIntervalSecs
[Optional, Default: 5] The minimum interval to send at to prevent network flooding
int intervalSecs
[Optional, Default: 30] The interval in seconds at which to send the presence descriptor on the prese...
Defines settings for Rallypoint advertising.
std::string interfaceName
The multicast network interface for mDNS.
std::string serviceName
[Optional, Default "_rallypoint._tcp.local."] The service name
std::string hostName
[Optional] This Rallypoint's DNS-SD host name
int port
[Default: RP port] The multicast network interface for mDNS
bool enabled
[Default: false] Advertising is enabled
int rolloverSecs
Seconds between switching to a new target.
int transactionTimeoutMs
[Optional, Default: 10000] Default transaction time in milliseconds to any RP in the cluster
int connectionTimeoutSecs
[Optional, Default: 5] Default connection timeout in seconds to any RP in the cluster
std::vector< Rallypoint > rallypoints
List of Rallypoints.
ConnectionStrategy_t connectionStrategy
[Optional, Default: csRoundRobin] Specifies the connection strategy to be followed....
Detailed information for a rallypoint connection.
float serverProcessingMs
Server processing time in milliseconds - used for roundtrip reports.
uint64_t msToNextConnectionAttempt
Milliseconds until next connection attempt.
Defines settings for Rallypoint extended group restrictions.
std::vector< StringRestrictionList > restrictions
Restrictions.
int transactionTimeoutMs
[Optional, Default 10000] Number of milliseconds that a transaction may take before the link is consi...
bool allowSelfSignedCertificate
[Optional, Default false] Allows the Rallypoint to accept self-signed certificates from the far-end
std::string sni
[Optional] A user-defined string sent as the Server Name Indication (SNI) field in the TLS setup....
std::vector< std::string > caCertificates
[Optional] A vector of certificates (raw content, file names, or certificate store elements) used to ...
std::string certificate
This is the X509 certificate to use for mutual authentication.
bool verifyPeer
[Optional, Default true] Indicates whether the connection peer is to be verified by checking the vali...
bool disableMessageSigning
[Optional, Default false] Indicates whether to forego ECSDA signing of control-plane messages.
NetworkAddress host
This is the host address for the Engine to connect to the RallyPoint service.
std::string additionalProtocols
[Optional, Default: ""] Additional protocols to use for the Rallypoint connection (only used for WebS...
RpProtocol_t protocol
[Optional, Default: rppTlsTcp] Specifies the protocol to be used for the Rallypoint connection....
std::string certificateKey
This is the private key used to generate the X509 certificate.
int connectionTimeoutSecs
[Optional, Default: 5] Connection timeout in seconds to the RP
TcpNetworkTxOptions tcpTxOptions
[Optional] Tx options for the TCP link
std::string path
[Optional, Default: ""] Path to use for the RP connection (only used for WebSocket)
SecurityCertificate certificate
Internal certificate detail.
std::string additionalProtocols
[Optional, Default: ""] Additional protocols to use for the peer (only used for WebSocket)
bool forceIsMeshLeaf
Internal enablement setting.
int connectionTimeoutSecs
[Optional, Default: 0 - OS platform default] Connection timeout in seconds to the peer
NetworkAddress host
Internal host detail.
std::string path
[Optional, Default: ""] Path to use for the peer (only used for WebSocket)
bool enabled
Internal enablement setting.
OutboundWebSocketTlsPolicy_t outboundWebSocketTlsPolicy
Internal enablement setting.
Rallypoint::RpProtocol_t protocol
[Optional, Default: Rallypoint::RpProtocol_t::rppTlsTcp] Protocol to use for the peer
Definition of a static group for Rallypoints.
NetworkAddress rx
The network address for receiving network traffic on.
std::string id
Unique identity for the group.
std::vector< NetworkAddress > additionalTx
[Optional] Vector of additional TX addresses .
NetworkAddress tx
The network address for transmitting network traffic to.
DirectionRestriction_t directionRestriction
[Optional] Restriction of direction of traffic flow
DirectionRestriction_t
Enum describing direction(s) for the reflector.
std::string multicastInterfaceName
[Optional] The name of the NIC on which to send and receive multicast traffic.
Defines a behavior for a Rallypoint peer roundtrip time.
BehaviorType_t behavior
Specifies the streaming mode type (see BehaviorType_t).
Configuration for the Rallypoint server.
uint32_t maxSecurityLevel
[Optional, Default 0] Sets the maximum item security level that can be registered with the RP
bool forwardDiscoveredGroups
Enables automatic forwarding of discovered multicast traffic to peer Rallypoints.
std::string interfaceName
Name of the NIC to bind to for listening for incoming TCP connections.
NetworkTxOptions multicastTxOptions
Tx options for multicast.
bool disableMessageSigning
Set to true to forgo DSA signing of messages. Doing so is is a security risk but can be useful on CPU...
SecurityCertificate certificate
X.509 certificate and private key that identifies the Rallypoint.
std::string multicastInterfaceName
The name of the NIC on which to send and receive multicast traffic.
StringRestrictionList groupRestrictions
Group IDs to be restricted (inclusive or exclusive)
std::string peeringConfigurationFileName
Name of a file containing a JSON array of Rallypoint peers to connect to.
uint32_t sysFlags
[Optional, Default 0] Internal system flags
int listenPort
TCP port to listen on. Default is 7443.
FipsCryptoSettings fipsCrypto
[Optional] Settings for the FIPS crypto.
NetworkAddressRestrictionList multicastRestrictions
Multicasts to be restricted (inclusive or exclusive)
uint32_t normalTaskQueueBias
[Optional, Default 0] Sets the queue's normal task bias
std::string name
A human-readable name for the Rallypoint.
PacketCapturer txCapture
Details for capture of transmitted packets
std::vector< RallypointReflector > staticReflectors
Vector of static groups.
bool enableLeafReflectionReverseSubscription
If enabled, causes a domain leaf to reverse-subscribe to a core node upon the core subscribing and a ...
std::string configurationCheckSignalName
Name to use for signalling a configuration check.
IpFamilyType_t ipFamily
[Optional, Default IpFamilyType_t::ifIp4] Address familiy to be used for listening
int peerRtTestIntervalMs
[Optional, Default: 60000] Milliseconds between sending round-trip test requests to peers
WatchdogSettings watchdog
[Optional] Settings for the Rallypoint's watchdog.
DiscoveryConfiguration discovery
Details discovery capabilities.
bool isMeshLeaf
Indicates whether this Rallypoint is part of a core domain or hangs off the periphery as a leaf node.
std::string certStorePasswordHex
Hex password for the certificate store (if any)
GroupRestrictionAccessPolicyType_t groupRestrictionAccessPolicyType
The policy employed to allow group registration.
RallypointServerStreamStatsExport streamStatsExport
Details for exporting stream statistics.
PacketCapturer rxCapture
Details for capture of received packets
std::vector< std::string > extraDomains
[Optional] List of additional domains that can be reached via this RP
uint32_t maxOutboundPeerConnectionIntervalDeltaSecs
[Optional, Default 15] Sets the delta value for the maximum number of seconds to delay when attemptin...
TuningSettings tuning
[Optional] Low-level tuning
RallypointAdvertisingSettings advertising
[Optional] Settings for advertising.
ExternalHealthCheckResponder externalHealthCheckResponder
Details concerning the Rallypoint's interaction with an external health-checker such as a load-balanc...
std::vector< RallypointExtendedGroupRestriction > extendedGroupRestrictions
Extended group restrictions.
int ioPools
Number of threading pools to create for network I/O. Default is -1 which creates 1 I/O pool per CPU c...
RallypointServerStatusReportConfiguration statusReport
Details for producing a status report.
std::vector< NamedIdentity > additionalIdentities
[Optional] List of additional named identities
IgmpSnooping igmpSnooping
IGMP snooping configuration.
RallypointServerLinkGraph linkGraph
Details for producing a Graphviz-compatible link graph.
RallypointServerLimits limits
Details for capacity limits and determining processing load.
PeeringConfiguration peeringConfiguration
Internal - not serialized.
std::string domainName
[Optional] This Rallypoint's domain name
bool allowMulticastForwarding
Allows traffic received on unicast links to be forwarded to the multicast network.
RallypointWebsocketSettings websocket
[Optional] Settings for websocket operation
std::string peeringConfigurationFileCommand
Command-line to execute that returns a JSON array of Rallypoint peers to connect to.
RallypointServerRouteMap routeMap
Details for producing a report containing the route map.
StreamIdPrivacyType_t streamIdPrivacyType
[Optional, default sptDefault] Modes for stream ID transformation.
bool allowPeerForwarding
Set to true to allow forwarding of packets received from other Rallypoints to all other Rallypoints....
TcpNetworkTxOptions tcpTxOptions
Tx options for TCP.
RallypointUdpStreaming udpStreaming
Optional configuration for high-performance UDP streaming.
bool forwardMulticastAddressing
Enables forwarding of multicast addressing to peer Rallypoints.
std::vector< RallypointRpRtTimingBehavior > peerRtBehaviors
[Optional] Array of behaviors for roundtrip times to peers
std::string id
A unqiue identifier for the Rallypoint.
NsmConfiguration nsm
[Optional] Settings for NSM.
bool disableLoopDetection
If true, turns off loop detection.
std::vector< std::string > blockedDomains
[Optional] List of domains that explictly MAY NOT connect to this RP
std::vector< std::string > allowedDomains
[Optional] List of domains that explicitly MAY connect to this RP
std::string certStoreFileName
Path to the certificate store.
int peeringConfigurationFileCheckSecs
Number of seconds between checks to see if the peering configuration has been updated....
Tls tls
Details concerning Transport Layer Security.
TODO: Configuration for Rallypoint limits.
uint32_t maxQOpsPerSec
Maximum number of queue operations per second (0 = unlimited)
uint32_t maxInboundBacklog
Maximum number of inbound backlog requests the Rallypoint will accept.
uint32_t normalPriorityQueueThreshold
Number of normal priority queue operations after which new connections will not be accepted.
uint32_t maxPeers
Maximum number of peers (0 = unlimited)
uint32_t maxTxBytesPerSec
Maximum number of bytes transmitted per second (0 = unlimited)
uint32_t maxTxPacketsPerSec
Maximum number of packets transmitted per second (0 = unlimited)
uint32_t maxRegisteredStreams
Maximum number of registered streams (0 = unlimited)
uint32_t maxClients
Maximum number of clients (0 = unlimited)
uint32_t maxMulticastReflectors
Maximum number of multicastReflectors (0 = unlimited)
uint32_t maxStreamPaths
Maximum number of bidirectional stream paths (0 = unlimited)
uint32_t lowPriorityQueueThreshold
Number of low priority queue operations after which new connections will not be accepted.
uint32_t maxRxBytesPerSec
Maximum number of bytes received per second (0 = unlimited)
uint32_t denyNewConnectionCpuThreshold
The CPU utilization threshold percentage (0-100) beyond which new connections are denied.
uint32_t maxRxPacketsPerSec
Maximum number of packets received per second (0 = unlimited)
uint32_t warnAtCpuThreshold
The CPU utilization threshold percentage (0-100) beyond which warnings are logged.
TODO: Configuration for the Rallypoint status report file.
ExportFormat_t
Enum describing format(s) for the stream stats export.
Streaming configuration for RP clients.
int listenPort
UDP port to listen on. Default is 7444.
TxPriority_t priority
[Optional, Default: priVoice] Transmission priority. This has meaning on some operating systems based...
bool enabled
[Optional, Default true] If true, enables UDP streaming unless turned off on a per-family basis.
CryptoType_t cryptoType
[Optional, Default ctSharedKeyAes256FullIv] The crypto method to be used
int ttl
[Optional, Default: 64] Time to live or hop limit.
CryptoType_t
Enum describing UDP streaming modes.
int keepaliveIntervalSecs
[Optional, Default: 15] Interval (seconds) at which to send UDP keepalives
bool enabled
[Optional, Default true] If true, enables UDP streaming for vX.
NetworkAddress external
Network address for external entities to transmit to. Defaults to the address of the local interface ...
Defines settings for Rallypoint websockets functionality.
SecurityCertificate certificate
Certificate to be used for WebSockets.
bool requireTls
[Default: false] Indicates whether TLS is required
bool enabled
[Default: false] Websocket is enabled
bool requireClientCertificate
[Default: false] Indicates whether the client is required to present a certificate
int count
[Optional, Default: 5] Number of ranger packets to send when a new interval starts
int hangTimerSecs
[Optional, Default: -1] Number of seconds since last packet transmission before 'count' packets are s...
bool end
Indicates whether this is the end of the event.
Helper class for serializing and deserializing the RiffDescriptor JSON.
CertificateDescriptor certDescriptor
[Optional] X.509 certificate parsed into a CertificateDescriptor object.
std::string meta
[Optional] Meta data associated with the file - typically a stringified JSON object.
bool verified
True if the ECDSA signature is verified.
std::string signature
[Optional] ECDSA signature
std::string certPem
[Optional] X.509 certificate in PEM format used to sign the RIFF file.
std::string file
Name of the RIFF file.
RTP header information as per RFC 3550.
uint32_t ssrc
Psuedo-random synchronization source.
uint16_t seq
Packet sequence number.
bool marker
Indicates whether this is the start of the media stream burst.
int pt
A valid RTP payload between 0 and 127 See IANA Real-Time Transport Protocol (RTP) Parameters
uint32_t ts
Media sample timestamp.
An RTP map entry.
std::string name
Name of the CODEC.
int engageType
An integer representing the codec type.
int rtpPayloadType
The RTP payload type identifier.
uint16_t engage
The payload type used by Engage.
uint16_t external
The payload type used by the external entity.
Configuration for the optional RtpProfile.
int signalledInboundProcessorInactivityMs
[Optional, Default: inboundProcessorInactivityMs * 4] The number of milliseconds of RTP inactivity on...
int jitterUnderrunReductionAger
[Optional, Default: 100] Number of jitter buffer operations after which to reduce any underrun
int jitterMinMs
[Optional, Default: 100] Low-water mark for jitter buffers that are in a buffering state.
int jitterMaxFactor
[Optional, Default: 8] The factor by which to multiply the jitter buffer's active low-water to determ...
int inboundProcessorInactivityMs
[Optional, Default: 500] The number of milliseconds of RTP inactivity before heuristically determinin...
JitterMode_t mode
[Optional, Default: jmStandard] Specifies the operation mode (see JitterMode_t).
int jitterForceTrimAtMs
[Optional, Default: 0] Forces trimming of the jitter buffer if the queue length is greater (and not z...
int latePacketSequenceRange
[Optional, Default: 5] The delta in RTP sequence numbers in order to heuristically determine the star...
int jitterMaxExceededClipHangMs
[Optional, Default: 1500] Number of milliseconds for which the jitter buffer may exceed max before cl...
int jitterTrimPercentage
[Optional, Default: 10] The percentage of the overall jitter buffer sample count to trim when potenti...
int jitterMaxTrimMs
[Optional, Default: 250] Maximum number of milliseconds to be trimmed from a jitter buffer at any one...
int jitterMaxMs
[Optional, Default: 10000] Maximum number of milliseconds allowed in the queue
int latePacketTimestampRangeMs
[Optional, Default: 500] The delta in milliseconds in order to heuristically determine the start of a...
int jitterMaxExceededClipPerc
[Optional, Default: 10] Percentage by which maximum number of samples in the queue exceeded computed ...
int zombieLifetimeMs
[Optional, Default: 15000] The number of milliseconds that a "zombified" RTP processor is kept around...
int rtcpPresenceTimeoutMs
[Optional, Default: 45000] Timeout for RTCP presence.
int jitterUnderrunReductionThresholdMs
[Optional, Default: 1500] Number of milliseconds of error-free operations in a jitter buffer before t...
Configuration for a secure signature.
std::string signature
Contains the signature.
std::string certificate
Contains the PEM-formatted text of the certificate.
Configuration for a Security Certificate used in various configurations.
std::string key
As for above but for certificate's private key.
std::string certificate
Contains the PEM-formatted text of the certificate, OR, a reference to a PEM file denoted by "@file:/...
std::string alias
[Optional] An alias
std::string nodeId
[Optional] A node ID
RestrictionType_t type
Type indicating how the elements are to be treated.
std::vector< std::string > elements
List of elements.
RestrictionElementType_t elementsType
Type indicating what kind of data each element contains.
Contains talker information used in providing a list in GroupTalkers.
uint32_t txId
Transmission ID associated with a talker's transmission.
uint32_t ssrc
The RTS SSRC associated with a talker's transmission.
int duplicateCount
Number of duplicates detected.
int txPriority
Priority associated with a talker's transmission.
std::string alias
The user alias to represent as a "talker".
std::string nodeId
The nodeId the talker is originating from.
ManufacturedAliasType_t manufacturedAliasType
The method used to "manufacture" the alias.
ManufacturedAliasType_t
Manufactured alias type If an alias is "manufactured" then the alias is not a real user but is instea...
bool rxMuted
Indicates if RX is muted for this talker.
uint16_t rxFlags
Flags associated with a talker's transmission.
uint16_t aliasSpecializer
The numeric specializer (if any) associated with the alias.
std::string nodeId
A unique identifier for the asset.
Parameters for querying the group timeline.
bool onlyCommitted
Include only committed (not in-progress) events.
uint64_t startedOnOrAfter
Include events that started on or after this UNIX millisecond timestamp.
long maxCount
Maximum number of records to return.
uint64_t endedOnOrBefore
Include events that ended on or after this UNIX millisecond timestamp.
std::string sql
Ignore all other settings for SQL construction and use this query string instead.
bool mostRecentFirst
Sorted results with most recent timestamp first.
std::string onlyNodeId
Include events for this transmitter node ID.
int onlyDirection
Include events for this direction.
int onlyTxId
Include events for this transmission ID.
std::string onlyAlias
Include events for this transmitter alias.
TODO: Transport Security Layer (TLS) settings.
bool verifyPeers
[Optional, Default: true] When true, checks the far-end certificate validity and Engage-specific TLS ...
StringRestrictionList subjectRestrictions
[NOT USED AT THIS TIME]
std::vector< std::string > caCertificates
[Optional] Array of CA certificates (PEM or "@" file/certstore references) to be used to validate far...
StringRestrictionList issuerRestrictions
[NOT USED AT THIS TIME]
bool allowSelfSignedCertificates
[Optional, Default: false] When true, accepts far-end certificates that are self-signed.
std::vector< std::string > crlSerials
[Optional] Array of serial numbers certificates that have been revoked
std::vector< TranslationSession > sessions
Array of sessions in the configuration.
std::vector< Group > groups
Array of groups in the configuration.
std::vector< std::string > groups
List of group IDs to be included in the session.
bool enabled
[Optional, Default: true] Enable the session
Description of a transport impairment.
int errorPercentage
[Optional, Default: 0] When > 0, percentage of packets forced to error path.
uint32_t maxActiveBlobObjects
[Optional, Default 0 (no max)] Maximum number of blob objects allowed to be active
uint32_t maxActiveRtpProcessors
[Optional, Default 0 (no max)] Maximum number concurrent RTP processors
uint32_t maxPooledBufferMb
[Optional, Default 0 (no max)] Maximum number of buffer bytes allowed to be pooled
uint32_t maxActiveBufferObjects
[Optional, Default 0 (no max)] Maximum number of buffer objects allowed to be active
uint32_t maxPooledBufferObjects
[Optional, Default 0 (no max)] Maximum number of buffer objects allowed to be pooled
uint32_t maxPooledRtpObjects
[Optional, Default 0 (no max)] Maximum number of RTP objects allowed to be pooled
uint32_t maxPooledBlobMb
[Optional, Default 0 (no max)] Maximum number of blob bytes allowed to be pooled
uint32_t maxPooledRtpMb
[Optional, Default 0 (no max)] Maximum number of RTP bytes allowed to be pooled
uint32_t maxActiveRtpObjects
[Optional, Default 0 (no max)] Maximum number of RTP objects allowed to be active
uint32_t maxPooledBlobObjects
[Optional, Default 0 (no max)] Maximum number of blob objects allowed to be pooled
Configuration for the audio transmit properties for a group.
int startTxNotifications
[Optional, Default: 5] Number of start TX notifications to send when TX is about to begin.
int framingMs
[Optional, Default: 60] Audio sample framing size in milliseconds.
HeaderExtensionType_t hdrExtType
[Optional, Default: hetEngageStandard] The header extension type to use. See HeaderExtensionType_t fo...
int maxTxSecs
[Optional, Default: 0] Maximum number of seconds the Engine will transmit for.
uint32_t internalKey
[INTERNAL] The Engine-assigned key for the codec
bool enabled
[Optional, Default: true] Audio transmission is enabled
bool fdx
[Optional, Default: false] Indicates if full duplex audio is supported.
int initialHeaderBurst
[Optional, Default: 5] Number of headers to send at the beginning of a talk burst.
bool resetRtpOnTx
[Optional, Default: true] Resets RTP counters on each new transmission.
bool dtx
[Optional, Default: false] Support discontinuous transmission on those CODECs that allow it
std::string encoderName
[Optional] The name of the external codec - overrides encoder
TxCodec_t encoder
[Optional, Default: ctOpus8000] Specifies the Codec Type to use for the transmission....
HeaderExtensionType_t
Header extension types.
int blockCount
[Optional, Default: 0] If >0, derives framingMs based on the encoder's internal operation
int smoothedHangTimeMs
[Optional, Default: 0] Hang timer for ongoing TX - only applicable if enableSmoothing is true
int customRtpPayloadType
[Optional, Default: -1] The custom RTP payload type to use for transmission. A value of -1 causes the...
bool noHdrExt
[Optional, Default: false] Set to true whether to disable header extensions.
bool enableSmoothing
[Optional, Default: true] Smooth input audio
int trailingHeaderBurst
[Optional, Default: 5] Number of headers to send at the conclusion of a talk burst.
int extensionSendInterval
[Optional, Default: 10] The number of packets when to periodically send the header extension.
Optional audio streaming from a URI for engageBeginGroupTxAdvanced.
int repeatCount
[Optional, Default: 0] Number of times to repeat
Voice Activity Detection settings.
bool enabled
[Optional, Default: false] Enable VAD
Mode_t mode
[Optional, Default: vamDefault] Specifies VAD mode. See Mode_t for all modes
std::vector< std::string > groups
List of group IDs to be included in the session.
bool enabled
[Optional, Default: true] Enable the session
int intervalMs
[Optional, Default: 5000] Interval at which checks are made.
int hangDetectionMs
[Optional, Default: 2000] Number of milliseconds that must pass before a hang is assumed.
int slowExecutionThresholdMs
[Optional, Default: 100] Maximum number of milliseconds that a task may take before being considered ...
bool abortOnHang
[Optional, Default: true] If true, aborts the process if a hang is detected.
bool enabled
[Optional, Default: true] Enables/disables a watchdog.
static ENGAGE_IGNORE_COMPILER_UNUSED_WARNING const char * OID_RTS_PEM
Rally Tactical Systems' PEN as assigned by IANA.
static ENGAGE_IGNORE_COMPILER_UNUSED_WARNING const char * OID_RTS_CERT_SUBJ_ACCESS_TAGS
The link to the Rallypoint is down.
static ENGAGE_IGNORE_COMPILER_UNUSED_WARNING const char * GROUP_DISCONNECTED_REASON_EXCLUDED_SERIAL
The Rallypoint denied the registration request because the far-end's certificate serial number has be...
static ENGAGE_IGNORE_COMPILER_UNUSED_WARNING const char * GROUP_DISCONNECTED_REASON_SECURITY_CLASSIFICATION_LEVEL_TOO_HIGH
The Rallypoint has denied the registration because the registration is for a security level not allow...
static ENGAGE_IGNORE_COMPILER_UNUSED_WARNING const char * GROUP_DISCONNECTED_REASON_ON_BLACKLIST
The Rallypoint denied the registration request because the far-end does appears in blackist criteria.
static ENGAGE_IGNORE_COMPILER_UNUSED_WARNING const char * GROUP_DISCONNECTED_REASON_EXCLUDED_FINGERPRINT
The Rallypoint denied the registration request because the far-end's certificate fingerprint has been...
static ENGAGE_IGNORE_COMPILER_UNUSED_WARNING const char * GROUP_DISCONNECTED_REASON_NO_ISSUER
The Rallypoint denied the registration request because the far-end's certificate does not have an an ...
static ENGAGE_IGNORE_COMPILER_UNUSED_WARNING const char * GROUP_DISCONNECTED_REASON_GENERAL_DENIAL
The Rallypoint has denied the registration for no specific reason.
static ENGAGE_IGNORE_COMPILER_UNUSED_WARNING const char * GROUP_DISCONNECTED_REASON_NO_ACCESS_TAG
The Rallypoint denied the registration request because the far-end's certificate does not have an acc...
static ENGAGE_IGNORE_COMPILER_UNUSED_WARNING const char * GROUP_DISCONNECTED_REASON_NO_SUBJECT
The Rallypoint denied the registration request because the far-end's certificate does not have an an ...
static ENGAGE_IGNORE_COMPILER_UNUSED_WARNING const char * GROUP_DISCONNECTED_REASON_NOT_ALLOWED
The Rallypoint is not accepting registration for the group at this time.
static ENGAGE_IGNORE_COMPILER_UNUSED_WARNING const char * GROUP_DISCONNECTED_REASON_EXCLUDED_SUBJECT
The Rallypoint denied the registration request because the far-end's certificate subject has been exc...
static ENGAGE_IGNORE_COMPILER_UNUSED_WARNING const char * GROUP_DISCONNECTED_REASON_NO_LINK
The link to the Rallypoint is down.
static ENGAGE_IGNORE_COMPILER_UNUSED_WARNING const char * GROUP_DISCONNECTED_REASON_NO_SERIAL
The Rallypoint denied the registration request because the far-end's certificate does not have an an ...
static ENGAGE_IGNORE_COMPILER_UNUSED_WARNING const char * GROUP_DISCONNECTED_REASON_NO_FINGERPRINT
The Rallypoint denied the registration request because the far-end's certificate does not have an an ...
static ENGAGE_IGNORE_COMPILER_UNUSED_WARNING const char * GROUP_DISCONNECTED_REASON_EXCLUDED_ISSUER
The Rallypoint denied the registration request because the far-end's certificate issuer has been excl...
static ENGAGE_IGNORE_COMPILER_UNUSED_WARNING const char * GROUP_DISCONNECTED_REASON_EXCLUDED_ACCESS_TAG
The Rallypoint denied the registration request because the far-end's certificate does not have an acc...
static ENGAGE_IGNORE_COMPILER_UNUSED_WARNING const char * GROUP_DISCONNECTED_REASON_UNREGISTERED
The group has been gracefully unregistered from the Rallypoint.
static ENGAGE_IGNORE_COMPILER_UNUSED_WARNING const char * GROUP_DISCONNECTED_REASON_NO_REAON
No particular reason was provided.
static ENGAGE_IGNORE_COMPILER_UNUSED_WARNING const char * GROUP_DISCONNECTED_REASON_NOT_ON_WHITELIST
The Rallypoint denied the registration request because the far-end does not appear in any whitelist c...
static ENGAGE_IGNORE_COMPILER_UNUSED_WARNING const char * GROUP_SOURCE_ENGAGE_MAGELLAN_DOMO
The source is Domo Tactical via Magellan discovery.
static ENGAGE_IGNORE_COMPILER_UNUSED_WARNING const char * GROUP_SOURCE_ENGAGE_MAGELLAN_CISTECH
The source is CISTECH via Magellan discovery.
static ENGAGE_IGNORE_COMPILER_UNUSED_WARNING const char * GROUP_SOURCE_ENGAGE_MAGELLAN_CORE
The source is a Magellan-capable entity.
static ENGAGE_IGNORE_COMPILER_UNUSED_WARNING const char * GROUP_SOURCE_ENGAGE_INTERNAL
Internal to Engage.
static ENGAGE_IGNORE_COMPILER_UNUSED_WARNING const char * GROUP_SOURCE_ENGAGE_MAGELLAN_TAIT
The source is Tait via Magellan discovery.
static ENGAGE_IGNORE_COMPILER_UNUSED_WARNING const char * GROUP_SOURCE_ENGAGE_MAGELLAN_TRELLISWARE
The source is Trellisware via Magellan discovery.
static ENGAGE_IGNORE_COMPILER_UNUSED_WARNING const char * GROUP_SOURCE_ENGAGE_MAGELLAN_SILVUS
The source is Silvus via Magellan discovery.
static ENGAGE_IGNORE_COMPILER_UNUSED_WARNING const char * GROUP_SOURCE_ENGAGE_MAGELLAN_VOCALITY
The source is Vocality via Magellan discovery.
static ENGAGE_IGNORE_COMPILER_UNUSED_WARNING const char * GROUP_SOURCE_ENGAGE_MAGELLAN_PERSISTENT
The source is Persistent Systems via Magellan discovery.
static ENGAGE_IGNORE_COMPILER_UNUSED_WARNING const char * GROUP_SOURCE_ENGAGE_MAGELLAN_KENWOOD
The source is Kenwood via Magellan discovery.
static const uint8_t ENGAGE_DEFAULT_BLOB_RTP_PAYLOAD_TYPE
The default RTP payload type Engage uses for RTP blob messaging.
uint8_t t
DataSeries Type. Currently supported types.
uint8_t it
Increment type. Valid Types:
uint32_t ts
Timestamp representing the number of seconds elapsed since January 1, 1970 - based on traditional Uni...
uint8_t im
Increment multiplier. The increment multiplier is an additional field that allows you apply a multipl...