Engage Engine API  1.251.9091
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(BlobInfo)
1227 {
1228 IMPLEMENT_JSON_SERIALIZATION()
1229 IMPLEMENT_JSON_DOCUMENTATION(BlobInfo)
1230
1231 public:
1235 typedef enum
1236 {
1238 bptUndefined = 0,
1239
1241 bptAppTextUtf8 = 1,
1242
1244 bptJsonTextUtf8 = 2,
1245
1247 bptAppBinary = 3,
1248
1250 bptEngageBinaryHumanBiometrics = 4,
1251
1253 bptAppMimeMessage = 5,
1254
1256 bptEngageInternal = 42
1257 } PayloadType_t;
1258
1260 size_t size;
1261
1263 std::string source;
1264
1266 std::string target;
1267
1270
1273
1275 std::string txnId;
1276
1279
1280 BlobInfo()
1281 {
1282 clear();
1283 }
1284
1285 void clear()
1286 {
1287 size = 0;
1288 source.clear();
1289 target.clear();
1290 rtpHeader.clear();
1291 payloadType = PayloadType_t::bptUndefined;
1292 txnId.clear();
1293 txnTimeoutSecs = 0;
1294 }
1295
1296 virtual void initForDocumenting()
1297 {
1298 clear();
1299 rtpHeader.initForDocumenting();
1300 }
1301 };
1302
1303 static void to_json(nlohmann::json& j, const BlobInfo& p)
1304 {
1305 j = nlohmann::json{
1306 TOJSON_IMPL(size),
1307 TOJSON_IMPL(source),
1308 TOJSON_IMPL(target),
1309 TOJSON_IMPL(rtpHeader),
1310 TOJSON_IMPL(payloadType),
1311 TOJSON_IMPL(txnId),
1312 TOJSON_IMPL(txnTimeoutSecs)
1313 };
1314 }
1315 static void from_json(const nlohmann::json& j, BlobInfo& p)
1316 {
1317 p.clear();
1318 getOptional<size_t>("size", p.size, j, 0);
1319 getOptional<std::string>("source", p.source, j, EMPTY_STRING);
1320 getOptional<std::string>("target", p.target, j, EMPTY_STRING);
1321 getOptional<RtpHeader>("rtpHeader", p.rtpHeader, j);
1322 getOptional<BlobInfo::PayloadType_t>("payloadType", p.payloadType, j, BlobInfo::PayloadType_t::bptUndefined);
1323 getOptional<std::string>("txnId", p.txnId, j, EMPTY_STRING);
1324 getOptional<int>("txnTimeoutSecs", p.txnTimeoutSecs, j, 0);
1325 }
1326
1327
1328 //-----------------------------------------------------------
1329 JSON_SERIALIZED_CLASS(TxAudioUri)
1342 {
1343 IMPLEMENT_JSON_SERIALIZATION()
1344 IMPLEMENT_JSON_DOCUMENTATION(TxAudioUri)
1345
1346 public:
1348 std::string uri;
1349
1352
1353 TxAudioUri()
1354 {
1355 clear();
1356 }
1357
1358 void clear()
1359 {
1360 uri.clear();
1361 repeatCount = 0;
1362 }
1363
1364 virtual void initForDocumenting()
1365 {
1366 }
1367 };
1368
1369 static void to_json(nlohmann::json& j, const TxAudioUri& p)
1370 {
1371 j = nlohmann::json{
1372 TOJSON_IMPL(uri),
1373 TOJSON_IMPL(repeatCount)
1374 };
1375 }
1376 static void from_json(const nlohmann::json& j, TxAudioUri& p)
1377 {
1378 p.clear();
1379 getOptional<std::string>("uri", p.uri, j, EMPTY_STRING);
1380 getOptional<int>("repeatCount", p.repeatCount, j, 0);
1381 }
1382
1383
1384 //-----------------------------------------------------------
1385 JSON_SERIALIZED_CLASS(AdvancedTxParams)
1398 {
1399 IMPLEMENT_JSON_SERIALIZATION()
1400 IMPLEMENT_JSON_DOCUMENTATION(AdvancedTxParams)
1401
1402 public:
1403
1405 uint16_t flags;
1406
1408 uint8_t priority;
1409
1412
1415
1417 std::string alias;
1418
1420 bool muted;
1421
1423 uint32_t txId;
1424
1427
1430
1433
1436
1438 {
1439 clear();
1440 }
1441
1442 void clear()
1443 {
1444 flags = 0;
1445 priority = 0;
1446 subchannelTag = 0;
1447 includeNodeId = false;
1448 alias.clear();
1449 muted = false;
1450 txId = 0;
1451 audioUri.clear();
1452 aliasSpecializer = 0;
1453 receiverRxMuteForAliasSpecializer = false;
1454 reBegin = false;
1455 }
1456
1457 virtual void initForDocumenting()
1458 {
1459 }
1460 };
1461
1462 static void to_json(nlohmann::json& j, const AdvancedTxParams& p)
1463 {
1464 j = nlohmann::json{
1465 TOJSON_IMPL(flags),
1466 TOJSON_IMPL(priority),
1467 TOJSON_IMPL(subchannelTag),
1468 TOJSON_IMPL(includeNodeId),
1469 TOJSON_IMPL(alias),
1470 TOJSON_IMPL(muted),
1471 TOJSON_IMPL(txId),
1472 TOJSON_IMPL(audioUri),
1473 TOJSON_IMPL(aliasSpecializer),
1474 TOJSON_IMPL(receiverRxMuteForAliasSpecializer),
1475 TOJSON_IMPL(reBegin)
1476 };
1477 }
1478 static void from_json(const nlohmann::json& j, AdvancedTxParams& p)
1479 {
1480 p.clear();
1481 getOptional<uint16_t>("flags", p.flags, j, 0);
1482 getOptional<uint8_t>("priority", p.priority, j, 0);
1483 getOptional<uint16_t>("subchannelTag", p.subchannelTag, j, 0);
1484 getOptional<bool>("includeNodeId", p.includeNodeId, j, false);
1485 getOptional<std::string>("alias", p.alias, j, EMPTY_STRING);
1486 getOptional<bool>("muted", p.muted, j, false);
1487 getOptional<uint32_t>("txId", p.txId, j, 0);
1488 getOptional<TxAudioUri>("audioUri", p.audioUri, j);
1489 getOptional<uint16_t>("aliasSpecializer", p.aliasSpecializer, j, 0);
1490 getOptional<bool>("receiverRxMuteForAliasSpecializer", p.receiverRxMuteForAliasSpecializer, j, false);
1491 getOptional<bool>("reBegin", p.reBegin, j, false);
1492 }
1493
1494 //-----------------------------------------------------------
1495 JSON_SERIALIZED_CLASS(Identity)
1508 {
1509 IMPLEMENT_JSON_SERIALIZATION()
1510 IMPLEMENT_JSON_DOCUMENTATION(Identity)
1511
1512 public:
1520 std::string nodeId;
1521
1523 std::string userId;
1524
1526 std::string displayName;
1527
1529 std::string avatar;
1530
1531 Identity()
1532 {
1533 clear();
1534 }
1535
1536 void clear()
1537 {
1538 nodeId.clear();
1539 userId.clear();
1540 displayName.clear();
1541 avatar.clear();
1542 }
1543
1544 virtual void initForDocumenting()
1545 {
1546 }
1547 };
1548
1549 static void to_json(nlohmann::json& j, const Identity& p)
1550 {
1551 j = nlohmann::json{
1552 TOJSON_IMPL(nodeId),
1553 TOJSON_IMPL(userId),
1554 TOJSON_IMPL(displayName),
1555 TOJSON_IMPL(avatar)
1556 };
1557 }
1558 static void from_json(const nlohmann::json& j, Identity& p)
1559 {
1560 p.clear();
1561 getOptional<std::string>("nodeId", p.nodeId, j);
1562 getOptional<std::string>("userId", p.userId, j);
1563 getOptional<std::string>("displayName", p.displayName, j);
1564 getOptional<std::string>("avatar", p.avatar, j);
1565 }
1566
1567
1568 //-----------------------------------------------------------
1569 JSON_SERIALIZED_CLASS(Location)
1582 {
1583 IMPLEMENT_JSON_SERIALIZATION()
1584 IMPLEMENT_JSON_DOCUMENTATION(Location)
1585
1586 public:
1587 constexpr static double INVALID_LOCATION_VALUE = -999.999;
1588
1590 uint32_t ts;
1591
1593 double latitude;
1594
1597
1599 double altitude;
1600
1603
1605 double speed;
1606
1607 Location()
1608 {
1609 clear();
1610 }
1611
1612 void clear()
1613 {
1614 ts = 0;
1615 latitude = INVALID_LOCATION_VALUE;
1616 longitude = INVALID_LOCATION_VALUE;
1617 altitude = INVALID_LOCATION_VALUE;
1618 direction = INVALID_LOCATION_VALUE;
1619 speed = INVALID_LOCATION_VALUE;
1620 }
1621
1622 virtual void initForDocumenting()
1623 {
1624 clear();
1625
1626 ts = 123456;
1627 latitude = 123.456;
1628 longitude = 456.789;
1629 altitude = 123;
1630 direction = 1;
1631 speed = 1234;
1632 }
1633 };
1634
1635 static void to_json(nlohmann::json& j, const Location& p)
1636 {
1637 if(p.latitude != Location::INVALID_LOCATION_VALUE && p.longitude != Location::INVALID_LOCATION_VALUE)
1638 {
1639 j = nlohmann::json{
1640 TOJSON_IMPL(latitude),
1641 TOJSON_IMPL(longitude),
1642 };
1643
1644 if(p.ts != 0) j["ts"] = p.ts;
1645 if(p.altitude != Location::INVALID_LOCATION_VALUE) j["altitude"] = p.altitude;
1646 if(p.speed != Location::INVALID_LOCATION_VALUE) j["speed"] = p.speed;
1647 if(p.direction != Location::INVALID_LOCATION_VALUE) j["direction"] = p.direction;
1648 }
1649 }
1650 static void from_json(const nlohmann::json& j, Location& p)
1651 {
1652 p.clear();
1653 getOptional<uint32_t>("ts", p.ts, j, 0);
1654 j.at("latitude").get_to(p.latitude);
1655 j.at("longitude").get_to(p.longitude);
1656 getOptional<double>("altitude", p.altitude, j, Location::INVALID_LOCATION_VALUE);
1657 getOptional<double>("direction", p.direction, j, Location::INVALID_LOCATION_VALUE);
1658 getOptional<double>("speed", p.speed, j, Location::INVALID_LOCATION_VALUE);
1659 }
1660
1661 //-----------------------------------------------------------
1662 JSON_SERIALIZED_CLASS(Power)
1673 {
1674 IMPLEMENT_JSON_SERIALIZATION()
1675 IMPLEMENT_JSON_DOCUMENTATION(Power)
1676
1677 public:
1678
1691
1705
1708
1709 Power()
1710 {
1711 clear();
1712 }
1713
1714 void clear()
1715 {
1716 source = 0;
1717 state = 0;
1718 level = 0;
1719 }
1720
1721 virtual void initForDocumenting()
1722 {
1723 }
1724 };
1725
1726 static void to_json(nlohmann::json& j, const Power& p)
1727 {
1728 if(p.source != 0 && p.state != 0 && p.level != 0)
1729 {
1730 j = nlohmann::json{
1731 TOJSON_IMPL(source),
1732 TOJSON_IMPL(state),
1733 TOJSON_IMPL(level)
1734 };
1735 }
1736 }
1737 static void from_json(const nlohmann::json& j, Power& p)
1738 {
1739 p.clear();
1740 getOptional<int>("source", p.source, j, 0);
1741 getOptional<int>("state", p.state, j, 0);
1742 getOptional<int>("level", p.level, j, 0);
1743 }
1744
1745
1746 //-----------------------------------------------------------
1747 JSON_SERIALIZED_CLASS(Connectivity)
1758 {
1759 IMPLEMENT_JSON_SERIALIZATION()
1760 IMPLEMENT_JSON_DOCUMENTATION(Connectivity)
1761
1762 public:
1776 int type;
1777
1780
1783
1784 Connectivity()
1785 {
1786 clear();
1787 }
1788
1789 void clear()
1790 {
1791 type = 0;
1792 strength = 0;
1793 rating = 0;
1794 }
1795
1796 virtual void initForDocumenting()
1797 {
1798 clear();
1799
1800 type = 1;
1801 strength = 2;
1802 rating = 3;
1803 }
1804 };
1805
1806 static void to_json(nlohmann::json& j, const Connectivity& p)
1807 {
1808 if(p.type != 0)
1809 {
1810 j = nlohmann::json{
1811 TOJSON_IMPL(type),
1812 TOJSON_IMPL(strength),
1813 TOJSON_IMPL(rating)
1814 };
1815 }
1816 }
1817 static void from_json(const nlohmann::json& j, Connectivity& p)
1818 {
1819 p.clear();
1820 getOptional<int>("type", p.type, j, 0);
1821 getOptional<int>("strength", p.strength, j, 0);
1822 getOptional<int>("rating", p.rating, j, 0);
1823 }
1824
1825
1826 //-----------------------------------------------------------
1827 JSON_SERIALIZED_CLASS(PresenceDescriptorGroupItem)
1838 {
1839 IMPLEMENT_JSON_SERIALIZATION()
1840 IMPLEMENT_JSON_DOCUMENTATION(PresenceDescriptorGroupItem)
1841
1842 public:
1844 std::string groupId;
1845
1847 std::string alias;
1848
1850 uint16_t status;
1851
1853 {
1854 clear();
1855 }
1856
1857 void clear()
1858 {
1859 groupId.clear();
1860 alias.clear();
1861 status = 0;
1862 }
1863
1864 virtual void initForDocumenting()
1865 {
1866 groupId = "{123-456}";
1867 alias = "MYALIAS";
1868 status = 0;
1869 }
1870 };
1871
1872 static void to_json(nlohmann::json& j, const PresenceDescriptorGroupItem& p)
1873 {
1874 j = nlohmann::json{
1875 TOJSON_IMPL(groupId),
1876 TOJSON_IMPL(alias),
1877 TOJSON_IMPL(status)
1878 };
1879 }
1880 static void from_json(const nlohmann::json& j, PresenceDescriptorGroupItem& p)
1881 {
1882 p.clear();
1883 getOptional<std::string>("groupId", p.groupId, j);
1884 getOptional<std::string>("alias", p.alias, j);
1885 getOptional<uint16_t>("status", p.status, j);
1886 }
1887
1888
1889 //-----------------------------------------------------------
1890 JSON_SERIALIZED_CLASS(PresenceDescriptor)
1901 {
1902 IMPLEMENT_JSON_SERIALIZATION()
1903 IMPLEMENT_JSON_DOCUMENTATION(PresenceDescriptor)
1904
1905 public:
1906
1912 bool self;
1913
1919 uint32_t ts;
1920
1926 uint32_t nextUpdate;
1927
1930
1932 std::string comment;
1933
1947 uint32_t disposition;
1948
1950 std::vector<PresenceDescriptorGroupItem> groupAliases;
1951
1954
1956 std::string custom;
1957
1960
1963
1966
1968 {
1969 clear();
1970 }
1971
1972 void clear()
1973 {
1974 self = false;
1975 ts = 0;
1976 nextUpdate = 0;
1977 identity.clear();
1978 comment.clear();
1979 disposition = 0;
1980 groupAliases.clear();
1981 location.clear();
1982 custom.clear();
1983 announceOnReceive = false;
1984 connectivity.clear();
1985 power.clear();
1986 }
1987
1988 virtual void initForDocumenting()
1989 {
1990 clear();
1991
1992 self = true;
1993 ts = 123;
1994 nextUpdate = 0;
1995 identity.initForDocumenting();
1996 comment = "This is a comment";
1997 disposition = 123;
1998
1999 PresenceDescriptorGroupItem gi;
2000 gi.initForDocumenting();
2001 groupAliases.push_back(gi);
2002
2003 location.initForDocumenting();
2004 custom = "{}";
2005 announceOnReceive = true;
2006 connectivity.initForDocumenting();
2007 power.initForDocumenting();
2008 }
2009 };
2010
2011 static void to_json(nlohmann::json& j, const PresenceDescriptor& p)
2012 {
2013 j = nlohmann::json{
2014 TOJSON_IMPL(ts),
2015 TOJSON_IMPL(nextUpdate),
2016 TOJSON_IMPL(identity),
2017 TOJSON_IMPL(comment),
2018 TOJSON_IMPL(disposition),
2019 TOJSON_IMPL(groupAliases),
2020 TOJSON_IMPL(location),
2021 TOJSON_IMPL(custom),
2022 TOJSON_IMPL(announceOnReceive),
2023 TOJSON_IMPL(connectivity),
2024 TOJSON_IMPL(power)
2025 };
2026
2027 if(!p.comment.empty()) j["comment"] = p.comment;
2028 if(!p.custom.empty()) j["custom"] = p.custom;
2029
2030 if(p.self)
2031 {
2032 j["self"] = true;
2033 }
2034 }
2035 static void from_json(const nlohmann::json& j, PresenceDescriptor& p)
2036 {
2037 p.clear();
2038 getOptional<bool>("self", p.self, j);
2039 getOptional<uint32_t>("ts", p.ts, j);
2040 getOptional<uint32_t>("nextUpdate", p.nextUpdate, j);
2041 getOptional<Identity>("identity", p.identity, j);
2042 getOptional<std::string>("comment", p.comment, j);
2043 getOptional<uint32_t>("disposition", p.disposition, j);
2044 getOptional<std::vector<PresenceDescriptorGroupItem>>("groupAliases", p.groupAliases, j);
2045 getOptional<Location>("location", p.location, j);
2046 getOptional<std::string>("custom", p.custom, j);
2047 getOptional<bool>("announceOnReceive", p.announceOnReceive, j);
2048 getOptional<Connectivity>("connectivity", p.connectivity, j);
2049 getOptional<Power>("power", p.power, j);
2050 }
2051
2057 typedef enum
2058 {
2061
2064
2067
2069 priVoice = 3
2070 } TxPriority_t;
2071
2077 typedef enum
2078 {
2081
2084
2087
2089 arpIpv6ThenIpv4 = 64
2090 } AddressResolutionPolicy_t;
2091
2092 //-----------------------------------------------------------
2093 JSON_SERIALIZED_CLASS(NetworkTxOptions)
2106 {
2107 IMPLEMENT_JSON_SERIALIZATION()
2108 IMPLEMENT_JSON_DOCUMENTATION(NetworkTxOptions)
2109
2110 public:
2113
2119 int ttl;
2120
2122 {
2123 clear();
2124 }
2125
2126 void clear()
2127 {
2128 priority = priVoice;
2129 ttl = 1;
2130 }
2131
2132 virtual void initForDocumenting()
2133 {
2134 }
2135 };
2136
2137 static void to_json(nlohmann::json& j, const NetworkTxOptions& p)
2138 {
2139 j = nlohmann::json{
2140 TOJSON_IMPL(priority),
2141 TOJSON_IMPL(ttl)
2142 };
2143 }
2144 static void from_json(const nlohmann::json& j, NetworkTxOptions& p)
2145 {
2146 p.clear();
2147 getOptional<TxPriority_t>("priority", p.priority, j, TxPriority_t::priVoice);
2148 getOptional<int>("ttl", p.ttl, j, 1);
2149 }
2150
2151
2152 //-----------------------------------------------------------
2153 JSON_SERIALIZED_CLASS(TcpNetworkTxOptions)
2162 {
2163 IMPLEMENT_JSON_SERIALIZATION()
2164 IMPLEMENT_JSON_DOCUMENTATION(TcpNetworkTxOptions)
2165
2166 public:
2168 {
2169 clear();
2170 }
2171
2172 void clear()
2173 {
2174 priority = priVoice;
2175 ttl = -1;
2176 }
2177
2178 virtual void initForDocumenting()
2179 {
2180 }
2181 };
2182
2183 static void to_json(nlohmann::json& j, const TcpNetworkTxOptions& p)
2184 {
2185 j = nlohmann::json{
2186 TOJSON_IMPL(priority),
2187 TOJSON_IMPL(ttl)
2188 };
2189 }
2190 static void from_json(const nlohmann::json& j, TcpNetworkTxOptions& p)
2191 {
2192 p.clear();
2193 getOptional<TxPriority_t>("priority", p.priority, j, TxPriority_t::priVoice);
2194 getOptional<int>("ttl", p.ttl, j, -1);
2195 }
2196
2197 typedef enum
2198 {
2201
2204
2206 ifIp6 = 6
2207 } IpFamilyType_t;
2208
2209 //-----------------------------------------------------------
2210 JSON_SERIALIZED_CLASS(NetworkAddress)
2222 {
2223 IMPLEMENT_JSON_SERIALIZATION()
2224 IMPLEMENT_JSON_DOCUMENTATION(NetworkAddress)
2225
2226 public:
2228 std::string address;
2229
2231 int port;
2232
2234 {
2235 clear();
2236 }
2237
2238 void clear()
2239 {
2240 address.clear();
2241 port = 0;
2242 }
2243
2244 bool matches(const NetworkAddress& other)
2245 {
2246 if(address.compare(other.address) != 0)
2247 {
2248 return false;
2249 }
2250
2251 if(port != other.port)
2252 {
2253 return false;
2254 }
2255
2256 return true;
2257 }
2258 };
2259
2260 static void to_json(nlohmann::json& j, const NetworkAddress& p)
2261 {
2262 j = nlohmann::json{
2263 TOJSON_IMPL(address),
2264 TOJSON_IMPL(port)
2265 };
2266 }
2267 static void from_json(const nlohmann::json& j, NetworkAddress& p)
2268 {
2269 p.clear();
2270 getOptional<std::string>("address", p.address, j);
2271 getOptional<int>("port", p.port, j);
2272 }
2273
2274
2275 //-----------------------------------------------------------
2276 JSON_SERIALIZED_CLASS(NetworkAddressRxTx)
2288 {
2289 IMPLEMENT_JSON_SERIALIZATION()
2290 IMPLEMENT_JSON_DOCUMENTATION(NetworkAddressRxTx)
2291
2292 public:
2295
2298
2300 {
2301 clear();
2302 }
2303
2304 void clear()
2305 {
2306 rx.clear();
2307 tx.clear();
2308 }
2309 };
2310
2311 static void to_json(nlohmann::json& j, const NetworkAddressRxTx& p)
2312 {
2313 j = nlohmann::json{
2314 TOJSON_IMPL(rx),
2315 TOJSON_IMPL(tx)
2316 };
2317 }
2318 static void from_json(const nlohmann::json& j, NetworkAddressRxTx& p)
2319 {
2320 p.clear();
2321 getOptional<NetworkAddress>("rx", p.rx, j);
2322 getOptional<NetworkAddress>("tx", p.tx, j);
2323 }
2324
2326 typedef enum
2327 {
2330
2332 graptStrict = 1
2333 } GroupRestrictionAccessPolicyType_t;
2334
2335 static bool isValidGroupRestrictionAccessPolicyType(GroupRestrictionAccessPolicyType_t t)
2336 {
2337 return (t == GroupRestrictionAccessPolicyType_t::graptPermissive ||
2338 t == GroupRestrictionAccessPolicyType_t::graptStrict );
2339 }
2340
2342 typedef enum
2343 {
2346
2349
2351 rtBlacklist = 2
2352 } RestrictionType_t;
2353
2354 static bool isValidRestrictionType(RestrictionType_t t)
2355 {
2356 return (t == RestrictionType_t::rtUndefined ||
2357 t == RestrictionType_t::rtWhitelist ||
2358 t == RestrictionType_t::rtBlacklist );
2359 }
2360
2385
2386 static bool isValidRestrictionElementType(RestrictionElementType_t t)
2387 {
2388 return (t == RestrictionElementType_t::retGroupId ||
2389 t == RestrictionElementType_t::retGroupIdPattern ||
2390 t == RestrictionElementType_t::retGenericAccessTagPattern ||
2391 t == RestrictionElementType_t::retCertificateSerialNumberPattern ||
2392 t == RestrictionElementType_t::retCertificateFingerprintPattern ||
2393 t == RestrictionElementType_t::retCertificateSubjectPattern ||
2394 t == RestrictionElementType_t::retCertificateIssuerPattern);
2395 }
2396
2397
2398 //-----------------------------------------------------------
2399 JSON_SERIALIZED_CLASS(NetworkAddressRestrictionList)
2411 {
2412 IMPLEMENT_JSON_SERIALIZATION()
2413 IMPLEMENT_JSON_DOCUMENTATION(NetworkAddressRestrictionList)
2414
2415 public:
2418
2420 std::vector<NetworkAddressRxTx> elements;
2421
2423 {
2424 clear();
2425 }
2426
2427 void clear()
2428 {
2429 type = RestrictionType_t::rtUndefined;
2430 elements.clear();
2431 }
2432 };
2433
2434 static void to_json(nlohmann::json& j, const NetworkAddressRestrictionList& p)
2435 {
2436 j = nlohmann::json{
2437 TOJSON_IMPL(type),
2438 TOJSON_IMPL(elements)
2439 };
2440 }
2441 static void from_json(const nlohmann::json& j, NetworkAddressRestrictionList& p)
2442 {
2443 p.clear();
2444 getOptional<RestrictionType_t>("type", p.type, j, RestrictionType_t::rtUndefined);
2445 getOptional<std::vector<NetworkAddressRxTx>>("elements", p.elements, j);
2446 }
2447
2448 //-----------------------------------------------------------
2449 JSON_SERIALIZED_CLASS(StringRestrictionList)
2461 {
2462 IMPLEMENT_JSON_SERIALIZATION()
2463 IMPLEMENT_JSON_DOCUMENTATION(StringRestrictionList)
2464
2465 public:
2468
2471
2473 std::vector<std::string> elements;
2474
2476 {
2477 type = RestrictionType_t::rtUndefined;
2478 elementsType = RestrictionElementType_t::retGroupId;
2479 clear();
2480 }
2481
2482 void clear()
2483 {
2484 elements.clear();
2485 }
2486 };
2487
2488 static void to_json(nlohmann::json& j, const StringRestrictionList& p)
2489 {
2490 j = nlohmann::json{
2491 TOJSON_IMPL(type),
2492 TOJSON_IMPL(elementsType),
2493 TOJSON_IMPL(elements)
2494 };
2495 }
2496 static void from_json(const nlohmann::json& j, StringRestrictionList& p)
2497 {
2498 p.clear();
2499 getOptional<RestrictionType_t>("type", p.type, j, RestrictionType_t::rtUndefined);
2500 getOptional<RestrictionElementType_t>("elementsType", p.elementsType, j, RestrictionElementType_t::retGroupId);
2501 getOptional<std::vector<std::string>>("elements", p.elements, j);
2502 }
2503
2504
2505 //-----------------------------------------------------------
2506 JSON_SERIALIZED_CLASS(PacketCapturer)
2516 {
2517 IMPLEMENT_JSON_SERIALIZATION()
2518 IMPLEMENT_JSON_DOCUMENTATION(PacketCapturer)
2519
2520 public:
2521 bool enabled;
2522 uint32_t maxMb;
2523 std::string filePrefix;
2524
2526 {
2527 clear();
2528 }
2529
2530 void clear()
2531 {
2532 enabled = false;
2533 maxMb = 10;
2534 filePrefix.clear();
2535 }
2536 };
2537
2538 static void to_json(nlohmann::json& j, const PacketCapturer& p)
2539 {
2540 j = nlohmann::json{
2541 TOJSON_IMPL(enabled),
2542 TOJSON_IMPL(maxMb),
2543 TOJSON_IMPL(filePrefix)
2544 };
2545 }
2546 static void from_json(const nlohmann::json& j, PacketCapturer& p)
2547 {
2548 p.clear();
2549 getOptional<bool>("enabled", p.enabled, j, false);
2550 getOptional<uint32_t>("maxMb", p.maxMb, j, 10);
2551 getOptional<std::string>("filePrefix", p.filePrefix, j, EMPTY_STRING);
2552 }
2553
2554
2555 //-----------------------------------------------------------
2556 JSON_SERIALIZED_CLASS(TransportImpairment)
2566 {
2567 IMPLEMENT_JSON_SERIALIZATION()
2568 IMPLEMENT_JSON_DOCUMENTATION(TransportImpairment)
2569
2570 public:
2571 int applicationPercentage;
2572 int jitterMs;
2573 int lossPercentage;
2574
2576 {
2577 clear();
2578 }
2579
2580 void clear()
2581 {
2582 applicationPercentage = 0;
2583 jitterMs = 0;
2584 lossPercentage = 0;
2585 }
2586 };
2587
2588 static void to_json(nlohmann::json& j, const TransportImpairment& p)
2589 {
2590 j = nlohmann::json{
2591 TOJSON_IMPL(applicationPercentage),
2592 TOJSON_IMPL(jitterMs),
2593 TOJSON_IMPL(lossPercentage)
2594 };
2595 }
2596 static void from_json(const nlohmann::json& j, TransportImpairment& p)
2597 {
2598 p.clear();
2599 getOptional<int>("applicationPercentage", p.applicationPercentage, j, 0);
2600 getOptional<int>("jitterMs", p.jitterMs, j, 0);
2601 getOptional<int>("lossPercentage", p.lossPercentage, j, 0);
2602 }
2603
2604 //-----------------------------------------------------------
2605 JSON_SERIALIZED_CLASS(NsmNetworking)
2615 {
2616 IMPLEMENT_JSON_SERIALIZATION()
2617 IMPLEMENT_JSON_DOCUMENTATION(NsmNetworking)
2618
2619 public:
2620 std::string interfaceName;
2621 NetworkAddress address;
2622 int ttl;
2623 int tos;
2624 int txOversend;
2625 TransportImpairment rxImpairment;
2626 TransportImpairment txImpairment;
2627 std::string cryptoPassword;
2628
2630 {
2631 clear();
2632 }
2633
2634 void clear()
2635 {
2636 interfaceName.clear();
2637 address.clear();
2638 ttl = 1;
2639 tos = 56;
2640 txOversend = 0;
2641 rxImpairment.clear();
2642 txImpairment.clear();
2643 cryptoPassword.clear();
2644 }
2645 };
2646
2647 static void to_json(nlohmann::json& j, const NsmNetworking& p)
2648 {
2649 j = nlohmann::json{
2650 TOJSON_IMPL(interfaceName),
2651 TOJSON_IMPL(address),
2652 TOJSON_IMPL(ttl),
2653 TOJSON_IMPL(tos),
2654 TOJSON_IMPL(txOversend),
2655 TOJSON_IMPL(rxImpairment),
2656 TOJSON_IMPL(txImpairment),
2657 TOJSON_IMPL(cryptoPassword)
2658 };
2659 }
2660 static void from_json(const nlohmann::json& j, NsmNetworking& p)
2661 {
2662 p.clear();
2663 getOptional("interfaceName", p.interfaceName, j, EMPTY_STRING);
2664 getOptional<NetworkAddress>("address", p.address, j);
2665 getOptional<int>("ttl", p.ttl, j, 1);
2666 getOptional<int>("tos", p.tos, j, 56);
2667 getOptional<int>("txOversend", p.txOversend, j, 0);
2668 getOptional<TransportImpairment>("rxImpairment", p.rxImpairment, j);
2669 getOptional<TransportImpairment>("txImpairment", p.txImpairment, j);
2670 getOptional("cryptoPassword", p.cryptoPassword, j, EMPTY_STRING);
2671 }
2672
2673
2674 //-----------------------------------------------------------
2675 JSON_SERIALIZED_CLASS(NsmConfiguration)
2685 {
2686 IMPLEMENT_JSON_SERIALIZATION()
2687 IMPLEMENT_JSON_DOCUMENTATION(NsmConfiguration)
2688
2689 public:
2690
2691 std::string id;
2692 bool favorUptime;
2693 NsmNetworking networking;
2694 std::vector<std::string> resources;
2695 int tokenStart;
2696 int tokenEnd;
2697 int intervalSecs;
2698 int transitionSecsFactor;
2699
2701 {
2702 clear();
2703 }
2704
2705 void clear()
2706 {
2707 id.clear();
2708 favorUptime = false;
2709 networking.clear();
2710 resources.clear();
2711 tokenStart = 1000000;
2712 tokenEnd = 2000000;
2713 intervalSecs = 1;
2714 transitionSecsFactor = 3;
2715 }
2716 };
2717
2718 static void to_json(nlohmann::json& j, const NsmConfiguration& p)
2719 {
2720 j = nlohmann::json{
2721 TOJSON_IMPL(id),
2722 TOJSON_IMPL(favorUptime),
2723 TOJSON_IMPL(networking),
2724 TOJSON_IMPL(resources),
2725 TOJSON_IMPL(tokenStart),
2726 TOJSON_IMPL(tokenEnd),
2727 TOJSON_IMPL(intervalSecs),
2728 TOJSON_IMPL(transitionSecsFactor)
2729 };
2730 }
2731 static void from_json(const nlohmann::json& j, NsmConfiguration& p)
2732 {
2733 p.clear();
2734 getOptional("id", p.id, j);
2735 getOptional<bool>("favorUptime", p.favorUptime, j, false);
2736 getOptional<NsmNetworking>("networking", p.networking, j);
2737 getOptional<std::vector<std::string>>("resources", p.resources, j);
2738 getOptional<int>("tokenStart", p.tokenStart, j, 1000000);
2739 getOptional<int>("tokenEnd", p.tokenEnd, j, 2000000);
2740 getOptional<int>("intervalSecs", p.intervalSecs, j, 1);
2741 getOptional<int>("transitionSecsFactor", p.transitionSecsFactor, j, 3);
2742 }
2743
2744
2745 //-----------------------------------------------------------
2746 JSON_SERIALIZED_CLASS(Rallypoint)
2755 {
2756 IMPLEMENT_JSON_SERIALIZATION()
2757 IMPLEMENT_JSON_DOCUMENTATION(Rallypoint)
2758
2759 public:
2764 typedef enum
2765 {
2767 rppTlsTcp = 0,
2768
2770 rppTlsWs = 1,
2771
2773 rppInvalid = -1
2774 } RpProtocol_t;
2775
2781
2793 std::string certificate;
2794
2806 std::string certificateKey;
2807
2812
2817
2821 std::vector<std::string> caCertificates;
2822
2827
2832
2835
2838
2844 std::string sni;
2845
2846
2849
2851 std::string path;
2852
2855
2856
2857 Rallypoint()
2858 {
2859 clear();
2860 }
2861
2862 void clear()
2863 {
2864 host.clear();
2865 certificate.clear();
2866 certificateKey.clear();
2867 caCertificates.clear();
2868 verifyPeer = false;
2869 transactionTimeoutMs = 0;
2870 disableMessageSigning = false;
2871 connectionTimeoutSecs = 0;
2872 tcpTxOptions.clear();
2873 sni.clear();
2874 protocol = rppTlsTcp;
2875 path.clear();
2876 additionalProtocols.clear();
2877 }
2878
2879 bool matches(const Rallypoint& other)
2880 {
2881 if(!host.matches(other.host))
2882 {
2883 return false;
2884 }
2885
2886 if(protocol != other.protocol)
2887 {
2888 return false;
2889 }
2890
2891 if(path.compare(other.path) != 0)
2892 {
2893 return false;
2894 }
2895
2896 if(certificate.compare(other.certificate) != 0)
2897 {
2898 return false;
2899 }
2900
2901 if(certificateKey.compare(other.certificateKey) != 0)
2902 {
2903 return false;
2904 }
2905
2906 if(verifyPeer != other.verifyPeer)
2907 {
2908 return false;
2909 }
2910
2911 if(allowSelfSignedCertificate != other.allowSelfSignedCertificate)
2912 {
2913 return false;
2914 }
2915
2916 if(caCertificates.size() != other.caCertificates.size())
2917 {
2918 return false;
2919 }
2920
2921 for(size_t x = 0; x < caCertificates.size(); x++)
2922 {
2923 bool found = false;
2924
2925 for(size_t y = 0; y < other.caCertificates.size(); y++)
2926 {
2927 if(caCertificates[x].compare(other.caCertificates[y]) == 0)
2928 {
2929 found = true;
2930 break;
2931 }
2932 }
2933
2934 if(!found)
2935 {
2936 return false;
2937 }
2938 }
2939
2940 if(transactionTimeoutMs != other.transactionTimeoutMs)
2941 {
2942 return false;
2943 }
2944
2945 if(disableMessageSigning != other.disableMessageSigning)
2946 {
2947 return false;
2948 }
2949 if(connectionTimeoutSecs != other.connectionTimeoutSecs)
2950 {
2951 return false;
2952 }
2953 if(tcpTxOptions.priority != other.tcpTxOptions.priority)
2954 {
2955 return false;
2956 }
2957 if(sni.compare(other.sni) != 0)
2958 {
2959 return false;
2960 }
2961
2962 return true;
2963 }
2964 };
2965
2966 static void to_json(nlohmann::json& j, const Rallypoint& p)
2967 {
2968 j = nlohmann::json{
2969 TOJSON_IMPL(host),
2970 TOJSON_IMPL(certificate),
2971 TOJSON_IMPL(certificateKey),
2972 TOJSON_IMPL(verifyPeer),
2973 TOJSON_IMPL(allowSelfSignedCertificate),
2974 TOJSON_IMPL(caCertificates),
2975 TOJSON_IMPL(transactionTimeoutMs),
2976 TOJSON_IMPL(disableMessageSigning),
2977 TOJSON_IMPL(connectionTimeoutSecs),
2978 TOJSON_IMPL(tcpTxOptions),
2979 TOJSON_IMPL(sni),
2980 TOJSON_IMPL(protocol),
2981 TOJSON_IMPL(path),
2982 TOJSON_IMPL(additionalProtocols)
2983 };
2984 }
2985
2986 static void from_json(const nlohmann::json& j, Rallypoint& p)
2987 {
2988 p.clear();
2989 j.at("host").get_to(p.host);
2990 getOptional("certificate", p.certificate, j);
2991 getOptional("certificateKey", p.certificateKey, j);
2992 getOptional<bool>("verifyPeer", p.verifyPeer, j, true);
2993 getOptional<bool>("allowSelfSignedCertificate", p.allowSelfSignedCertificate, j, false);
2994 getOptional<std::vector<std::string>>("caCertificates", p.caCertificates, j);
2995 getOptional<int>("transactionTimeoutMs", p.transactionTimeoutMs, j, 0);
2996 getOptional<bool>("disableMessageSigning", p.disableMessageSigning, j, false);
2997 getOptional<int>("connectionTimeoutSecs", p.connectionTimeoutSecs, j, 0);
2998 getOptional<TcpNetworkTxOptions>("tcpTxOptions", p.tcpTxOptions, j);
2999 getOptional<std::string>("sni", p.sni, j);
3000 getOptional<Rallypoint::RpProtocol_t>("protocol", p.protocol, j, Rallypoint::RpProtocol_t::rppTlsTcp);
3001 getOptional<std::string>("path", p.path, j);
3002 getOptional<std::string>("additionalProtocols", p.additionalProtocols, j);
3003 }
3004
3005 //-----------------------------------------------------------
3006 JSON_SERIALIZED_CLASS(RallypointCluster)
3018 {
3019 IMPLEMENT_JSON_SERIALIZATION()
3020 IMPLEMENT_JSON_DOCUMENTATION(RallypointCluster)
3021
3022 public:
3028 typedef enum
3029 {
3031 csRoundRobin = 0,
3032
3034 csFailback = 1
3035 } ConnectionStrategy_t;
3036
3039
3041 std::vector<Rallypoint> rallypoints;
3042
3045
3048
3051
3053 {
3054 clear();
3055 }
3056
3057 void clear()
3058 {
3059 connectionStrategy = csRoundRobin;
3060 rallypoints.clear();
3061 rolloverSecs = 10;
3062 connectionTimeoutSecs = 5;
3063 transactionTimeoutMs = 10000;
3064 }
3065 };
3066
3067 static void to_json(nlohmann::json& j, const RallypointCluster& p)
3068 {
3069 j = nlohmann::json{
3070 TOJSON_IMPL(connectionStrategy),
3071 TOJSON_IMPL(rallypoints),
3072 TOJSON_IMPL(rolloverSecs),
3073 TOJSON_IMPL(connectionTimeoutSecs),
3074 TOJSON_IMPL(transactionTimeoutMs)
3075 };
3076 }
3077 static void from_json(const nlohmann::json& j, RallypointCluster& p)
3078 {
3079 p.clear();
3080 getOptional<RallypointCluster::ConnectionStrategy_t>("connectionStrategy", p.connectionStrategy, RallypointCluster::ConnectionStrategy_t::csRoundRobin);
3081 getOptional<std::vector<Rallypoint>>("rallypoints", p.rallypoints, j);
3082 getOptional<int>("rolloverSecs", p.rolloverSecs, j, 10);
3083 getOptional<int>("connectionTimeoutSecs", p.connectionTimeoutSecs, j, 5);
3084 getOptional<int>("transactionTimeoutMs", p.transactionTimeoutMs, j, 10000);
3085 }
3086
3087
3088 //-----------------------------------------------------------
3089 JSON_SERIALIZED_CLASS(NetworkDeviceDescriptor)
3100 {
3101 IMPLEMENT_JSON_SERIALIZATION()
3102 IMPLEMENT_JSON_DOCUMENTATION(NetworkDeviceDescriptor)
3103
3104 public:
3110
3112 std::string name;
3113
3115 std::string manufacturer;
3116
3118 std::string model;
3119
3121 std::string hardwareId;
3122
3124 std::string serialNumber;
3125
3127 std::string type;
3128
3130 std::string extra;
3131
3133 {
3134 clear();
3135 }
3136
3137 void clear()
3138 {
3139 deviceId = 0;
3140
3141 name.clear();
3142 manufacturer.clear();
3143 model.clear();
3144 hardwareId.clear();
3145 serialNumber.clear();
3146 type.clear();
3147 extra.clear();
3148 }
3149
3150 virtual std::string toString()
3151 {
3152 char buff[2048];
3153
3154 snprintf(buff, sizeof(buff), "deviceId=%d, name=%s, manufacturer=%s, model=%s, hardwareId=%s, serialNumber=%s, type=%s, extra=%s",
3155 deviceId,
3156 name.c_str(),
3157 manufacturer.c_str(),
3158 model.c_str(),
3159 hardwareId.c_str(),
3160 serialNumber.c_str(),
3161 type.c_str(),
3162 extra.c_str());
3163
3164 return std::string(buff);
3165 }
3166 };
3167
3168 static void to_json(nlohmann::json& j, const NetworkDeviceDescriptor& p)
3169 {
3170 j = nlohmann::json{
3171 TOJSON_IMPL(deviceId),
3172 TOJSON_IMPL(name),
3173 TOJSON_IMPL(manufacturer),
3174 TOJSON_IMPL(model),
3175 TOJSON_IMPL(hardwareId),
3176 TOJSON_IMPL(serialNumber),
3177 TOJSON_IMPL(type),
3178 TOJSON_IMPL(extra)
3179 };
3180 }
3181 static void from_json(const nlohmann::json& j, NetworkDeviceDescriptor& p)
3182 {
3183 p.clear();
3184 getOptional<int>("deviceId", p.deviceId, j, 0);
3185 getOptional("name", p.name, j);
3186 getOptional("manufacturer", p.manufacturer, j);
3187 getOptional("model", p.model, j);
3188 getOptional("hardwareId", p.hardwareId, j);
3189 getOptional("serialNumber", p.serialNumber, j);
3190 getOptional("type", p.type, j);
3191 getOptional("extra", p.extra, j);
3192 }
3193
3194 //-----------------------------------------------------------
3195 JSON_SERIALIZED_CLASS(AudioGate)
3205 {
3206 IMPLEMENT_JSON_SERIALIZATION()
3207 IMPLEMENT_JSON_DOCUMENTATION(AudioGate)
3208
3209 public:
3212
3215
3217 uint32_t hangMs;
3218
3220 uint32_t windowMin;
3221
3223 uint32_t windowMax;
3224
3227
3228
3229 AudioGate()
3230 {
3231 clear();
3232 }
3233
3234 void clear()
3235 {
3236 enabled = false;
3237 useVad = false;
3238 hangMs = 1500;
3239 windowMin = 25;
3240 windowMax = 125;
3241 coefficient = 1.75;
3242 }
3243 };
3244
3245 static void to_json(nlohmann::json& j, const AudioGate& p)
3246 {
3247 j = nlohmann::json{
3248 TOJSON_IMPL(enabled),
3249 TOJSON_IMPL(useVad),
3250 TOJSON_IMPL(hangMs),
3251 TOJSON_IMPL(windowMin),
3252 TOJSON_IMPL(windowMax),
3253 TOJSON_IMPL(coefficient)
3254 };
3255 }
3256 static void from_json(const nlohmann::json& j, AudioGate& p)
3257 {
3258 p.clear();
3259 getOptional<bool>("enabled", p.enabled, j, false);
3260 getOptional<bool>("useVad", p.useVad, j, false);
3261 getOptional<uint32_t>("hangMs", p.hangMs, j, 1500);
3262 getOptional<uint32_t>("windowMin", p.windowMin, j, 25);
3263 getOptional<uint32_t>("windowMax", p.windowMax, j, 125);
3264 getOptional<double>("coefficient", p.coefficient, j, 1.75);
3265 }
3266
3267 //-----------------------------------------------------------
3268 JSON_SERIALIZED_CLASS(TxAudio)
3282 {
3283 IMPLEMENT_JSON_SERIALIZATION()
3284 IMPLEMENT_JSON_DOCUMENTATION(TxAudio)
3285
3286 public:
3292 typedef enum
3293 {
3295 ctExternal = -1,
3296
3298 ctUnknown = 0,
3299
3300 /* G.711 */
3302 ctG711ulaw = 1,
3303
3305 ctG711alaw = 2,
3306
3307
3308 /* GSM */
3310 ctGsm610 = 3,
3311
3312
3313 /* G.729 */
3315 ctG729a = 4,
3316
3317
3318 /* PCM */
3320 ctPcm = 5,
3321
3322 // AMR Narrowband */
3324 ctAmrNb4750 = 10,
3325
3327 ctAmrNb5150 = 11,
3328
3330 ctAmrNb5900 = 12,
3331
3333 ctAmrNb6700 = 13,
3334
3336 ctAmrNb7400 = 14,
3337
3339 ctAmrNb7950 = 15,
3340
3342 ctAmrNb10200 = 16,
3343
3345 ctAmrNb12200 = 17,
3346
3347
3348 /* Opus */
3350 ctOpus6000 = 20,
3351
3353 ctOpus8000 = 21,
3354
3356 ctOpus10000 = 22,
3357
3359 ctOpus12000 = 23,
3360
3362 ctOpus14000 = 24,
3363
3365 ctOpus16000 = 25,
3366
3368 ctOpus18000 = 26,
3369
3371 ctOpus20000 = 27,
3372
3374 ctOpus22000 = 28,
3375
3377 ctOpus24000 = 29,
3378
3379
3380 /* Speex */
3382 ctSpxNb2150 = 30,
3383
3385 ctSpxNb3950 = 31,
3386
3388 ctSpxNb5950 = 32,
3389
3391 ctSpxNb8000 = 33,
3392
3394 ctSpxNb11000 = 34,
3395
3397 ctSpxNb15000 = 35,
3398
3400 ctSpxNb18200 = 36,
3401
3403 ctSpxNb24600 = 37,
3404
3405
3406 /* Codec2 */
3408 ctC2450 = 40,
3409
3411 ctC2700 = 41,
3412
3414 ctC21200 = 42,
3415
3417 ctC21300 = 43,
3418
3420 ctC21400 = 44,
3421
3423 ctC21600 = 45,
3424
3426 ctC22400 = 46,
3427
3429 ctC23200 = 47,
3430
3431
3432 /* MELPe */
3434 ctMelpe600 = 50,
3435
3437 ctMelpe1200 = 51,
3438
3440 ctMelpe2400 = 52
3441 } TxCodec_t;
3442
3445
3448
3450 std::string encoderName;
3451
3454
3457
3459 bool fdx;
3460
3468
3475
3482
3485
3488
3491
3496
3498 uint32_t internalKey;
3499
3502
3505
3507 bool dtx;
3508
3511
3512 TxAudio()
3513 {
3514 clear();
3515 }
3516
3517 void clear()
3518 {
3519 enabled = true;
3520 encoder = TxAudio::TxCodec_t::ctUnknown;
3521 encoderName.clear();
3522 framingMs = 60;
3523 blockCount = 0;
3524 fdx = false;
3525 noHdrExt = false;
3526 maxTxSecs = 0;
3527 extensionSendInterval = 10;
3528 initialHeaderBurst = 5;
3529 trailingHeaderBurst = 5;
3530 startTxNotifications = 5;
3531 customRtpPayloadType = -1;
3532 internalKey = 0;
3533 resetRtpOnTx = true;
3534 enableSmoothing = true;
3535 dtx = false;
3536 smoothedHangTimeMs = 0;
3537 }
3538 };
3539
3540 static void to_json(nlohmann::json& j, const TxAudio& p)
3541 {
3542 j = nlohmann::json{
3543 TOJSON_IMPL(enabled),
3544 TOJSON_IMPL(encoder),
3545 TOJSON_IMPL(encoderName),
3546 TOJSON_IMPL(framingMs),
3547 TOJSON_IMPL(blockCount),
3548 TOJSON_IMPL(fdx),
3549 TOJSON_IMPL(noHdrExt),
3550 TOJSON_IMPL(maxTxSecs),
3551 TOJSON_IMPL(extensionSendInterval),
3552 TOJSON_IMPL(initialHeaderBurst),
3553 TOJSON_IMPL(trailingHeaderBurst),
3554 TOJSON_IMPL(startTxNotifications),
3555 TOJSON_IMPL(customRtpPayloadType),
3556 TOJSON_IMPL(resetRtpOnTx),
3557 TOJSON_IMPL(enableSmoothing),
3558 TOJSON_IMPL(dtx),
3559 TOJSON_IMPL(smoothedHangTimeMs)
3560 };
3561
3562 // internalKey is not serialized
3563 }
3564 static void from_json(const nlohmann::json& j, TxAudio& p)
3565 {
3566 p.clear();
3567 getOptional<bool>("enabled", p.enabled, j, true);
3568 getOptional<TxAudio::TxCodec_t>("encoder", p.encoder, j, TxAudio::TxCodec_t::ctOpus8000);
3569 getOptional<std::string>("encoderName", p.encoderName, j, EMPTY_STRING);
3570 getOptional("framingMs", p.framingMs, j, 60);
3571 getOptional("blockCount", p.blockCount, j, 0);
3572 getOptional("fdx", p.fdx, j, false);
3573 getOptional("noHdrExt", p.noHdrExt, j, false);
3574 getOptional("maxTxSecs", p.maxTxSecs, j, 0);
3575 getOptional("extensionSendInterval", p.extensionSendInterval, j, 10);
3576 getOptional("initialHeaderBurst", p.initialHeaderBurst, j, 5);
3577 getOptional("trailingHeaderBurst", p.trailingHeaderBurst, j, 5);
3578 getOptional("startTxNotifications", p.startTxNotifications, j, 5);
3579 getOptional("customRtpPayloadType", p.customRtpPayloadType, j, -1);
3580 getOptional("resetRtpOnTx", p.resetRtpOnTx, j, true);
3581 getOptional("enableSmoothing", p.enableSmoothing, j, true);
3582 getOptional("dtx", p.dtx, j, false);
3583 getOptional("smoothedHangTimeMs", p.smoothedHangTimeMs, j, 0);
3584
3585 // internalKey is not serialized
3586 }
3587
3588 //-----------------------------------------------------------
3589 JSON_SERIALIZED_CLASS(AudioRegistryDevice)
3600 {
3601 IMPLEMENT_JSON_SERIALIZATION()
3602 IMPLEMENT_JSON_DOCUMENTATION(AudioRegistryDevice)
3603
3604 public:
3606 std::string hardwareId;
3607
3610
3612 std::string name;
3613
3615 std::string manufacturer;
3616
3618 std::string model;
3619
3621 std::string serialNumber;
3622
3623
3625 std::string type;
3626
3628 std::string extra;
3629
3631 {
3632 clear();
3633 }
3634
3635 void clear()
3636 {
3637 hardwareId.clear();
3638 isDefault = false;
3639 name.clear();
3640 manufacturer.clear();
3641 model.clear();
3642 serialNumber.clear();
3643 type.clear();
3644 extra.clear();
3645 }
3646
3647 virtual std::string toString()
3648 {
3649 char buff[2048];
3650
3651 snprintf(buff, sizeof(buff), "hardwareId=%s, isDefault=%d, name=%s, manufacturer=%s, model=%s, serialNumber=%s, type=%s, extra=%s",
3652 hardwareId.c_str(),
3653 (int)isDefault,
3654 name.c_str(),
3655 manufacturer.c_str(),
3656 model.c_str(),
3657 serialNumber.c_str(),
3658 type.c_str(),
3659 extra.c_str());
3660
3661 return std::string(buff);
3662 }
3663 };
3664
3665 static void to_json(nlohmann::json& j, const AudioRegistryDevice& p)
3666 {
3667 j = nlohmann::json{
3668 TOJSON_IMPL(hardwareId),
3669 TOJSON_IMPL(isDefault),
3670 TOJSON_IMPL(name),
3671 TOJSON_IMPL(manufacturer),
3672 TOJSON_IMPL(model),
3673 TOJSON_IMPL(serialNumber),
3674 TOJSON_IMPL(type),
3675 TOJSON_IMPL(extra)
3676 };
3677 }
3678 static void from_json(const nlohmann::json& j, AudioRegistryDevice& p)
3679 {
3680 p.clear();
3681 getOptional<std::string>("hardwareId", p.hardwareId, j, EMPTY_STRING);
3682 getOptional<bool>("isDefault", p.isDefault, j, false);
3683 getOptional("name", p.name, j);
3684 getOptional("manufacturer", p.manufacturer, j);
3685 getOptional("model", p.model, j);
3686 getOptional("serialNumber", p.serialNumber, j);
3687 getOptional("type", p.type, j);
3688 getOptional("extra", p.extra, j);
3689 }
3690
3691
3692 //-----------------------------------------------------------
3693 JSON_SERIALIZED_CLASS(AudioRegistry)
3704 {
3705 IMPLEMENT_JSON_SERIALIZATION()
3706 IMPLEMENT_JSON_DOCUMENTATION(AudioRegistry)
3707
3708 public:
3710 std::vector<AudioRegistryDevice> inputs;
3711
3713 std::vector<AudioRegistryDevice> outputs;
3714
3716 {
3717 clear();
3718 }
3719
3720 void clear()
3721 {
3722 inputs.clear();
3723 outputs.clear();
3724 }
3725
3726 virtual std::string toString()
3727 {
3728 return std::string("");
3729 }
3730 };
3731
3732 static void to_json(nlohmann::json& j, const AudioRegistry& p)
3733 {
3734 j = nlohmann::json{
3735 TOJSON_IMPL(inputs),
3736 TOJSON_IMPL(outputs)
3737 };
3738 }
3739 static void from_json(const nlohmann::json& j, AudioRegistry& p)
3740 {
3741 p.clear();
3742 getOptional<std::vector<AudioRegistryDevice>>("inputs", p.inputs, j);
3743 getOptional<std::vector<AudioRegistryDevice>>("outputs", p.outputs, j);
3744 }
3745
3746 //-----------------------------------------------------------
3747 JSON_SERIALIZED_CLASS(AudioDeviceDescriptor)
3758 {
3759 IMPLEMENT_JSON_SERIALIZATION()
3760 IMPLEMENT_JSON_DOCUMENTATION(AudioDeviceDescriptor)
3761
3762 public:
3763
3765 typedef enum
3766 {
3768 dirUnknown = 0,
3769
3772
3775
3777 dirBoth
3778 } Direction_t;
3779
3785
3793
3801
3804
3812
3815
3817 std::string name;
3818
3820 std::string manufacturer;
3821
3823 std::string model;
3824
3826 std::string hardwareId;
3827
3829 std::string serialNumber;
3830
3833
3835 std::string type;
3836
3838 std::string extra;
3839
3842
3844 {
3845 clear();
3846 }
3847
3848 void clear()
3849 {
3850 deviceId = 0;
3851 samplingRate = 0;
3852 channels = 0;
3853 direction = dirUnknown;
3854 boostPercentage = 0;
3855 isAdad = false;
3856 isDefault = false;
3857
3858 name.clear();
3859 manufacturer.clear();
3860 model.clear();
3861 hardwareId.clear();
3862 serialNumber.clear();
3863 type.clear();
3864 extra.clear();
3865 isPresent = false;
3866 }
3867
3868 virtual std::string toString()
3869 {
3870 char buff[2048];
3871
3872 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",
3873 deviceId,
3874 samplingRate,
3875 channels,
3876 (int)direction,
3877 boostPercentage,
3878 (int)isAdad,
3879 name.c_str(),
3880 manufacturer.c_str(),
3881 model.c_str(),
3882 hardwareId.c_str(),
3883 serialNumber.c_str(),
3884 (int)isDefault,
3885 type.c_str(),
3886 (int)isPresent,
3887 extra.c_str());
3888
3889 return std::string(buff);
3890 }
3891 };
3892
3893 static void to_json(nlohmann::json& j, const AudioDeviceDescriptor& p)
3894 {
3895 j = nlohmann::json{
3896 TOJSON_IMPL(deviceId),
3897 TOJSON_IMPL(samplingRate),
3898 TOJSON_IMPL(channels),
3899 TOJSON_IMPL(direction),
3900 TOJSON_IMPL(boostPercentage),
3901 TOJSON_IMPL(isAdad),
3902 TOJSON_IMPL(name),
3903 TOJSON_IMPL(manufacturer),
3904 TOJSON_IMPL(model),
3905 TOJSON_IMPL(hardwareId),
3906 TOJSON_IMPL(serialNumber),
3907 TOJSON_IMPL(isDefault),
3908 TOJSON_IMPL(type),
3909 TOJSON_IMPL(extra),
3910 TOJSON_IMPL(isPresent)
3911 };
3912 }
3913 static void from_json(const nlohmann::json& j, AudioDeviceDescriptor& p)
3914 {
3915 p.clear();
3916 getOptional<int>("deviceId", p.deviceId, j, 0);
3917 getOptional<int>("samplingRate", p.samplingRate, j, 0);
3918 getOptional<int>("channels", p.channels, j, 0);
3919 getOptional<AudioDeviceDescriptor::Direction_t>("direction", p.direction, j,
3920 AudioDeviceDescriptor::Direction_t::dirUnknown);
3921 getOptional<int>("boostPercentage", p.boostPercentage, j, 0);
3922
3923 getOptional<bool>("isAdad", p.isAdad, j, false);
3924 getOptional("name", p.name, j);
3925 getOptional("manufacturer", p.manufacturer, j);
3926 getOptional("model", p.model, j);
3927 getOptional("hardwareId", p.hardwareId, j);
3928 getOptional("serialNumber", p.serialNumber, j);
3929 getOptional("isDefault", p.isDefault, j);
3930 getOptional("type", p.type, j);
3931 getOptional("extra", p.extra, j);
3932 getOptional<bool>("isPresent", p.isPresent, j, false);
3933 }
3934
3935 //-----------------------------------------------------------
3936 JSON_SERIALIZED_CLASS(ListOfAudioDeviceDescriptor)
3938 {
3939 IMPLEMENT_JSON_SERIALIZATION()
3940 IMPLEMENT_JSON_DOCUMENTATION(ListOfAudioDeviceDescriptor)
3941
3942 public:
3943 std::vector<AudioDeviceDescriptor> list;
3944
3946 {
3947 clear();
3948 }
3949
3950 void clear()
3951 {
3952 list.clear();
3953 }
3954 };
3955
3956 static void to_json(nlohmann::json& j, const ListOfAudioDeviceDescriptor& p)
3957 {
3958 j = nlohmann::json{
3959 TOJSON_IMPL(list)
3960 };
3961 }
3962 static void from_json(const nlohmann::json& j, ListOfAudioDeviceDescriptor& p)
3963 {
3964 p.clear();
3965 getOptional<std::vector<AudioDeviceDescriptor>>("list", p.list, j);
3966 }
3967
3968 //-----------------------------------------------------------
3969 JSON_SERIALIZED_CLASS(Audio)
3978 {
3979 IMPLEMENT_JSON_SERIALIZATION()
3980 IMPLEMENT_JSON_DOCUMENTATION(Audio)
3981
3982 public:
3985
3988
3990 std::string inputHardwareId;
3991
3994
3997
3999 std::string outputHardwareId;
4000
4003
4006
4009
4012
4013 Audio()
4014 {
4015 clear();
4016 }
4017
4018 void clear()
4019 {
4020 enabled = true;
4021 inputId = 0;
4022 inputHardwareId.clear();
4023 inputGain = 0;
4024 outputId = 0;
4025 outputHardwareId.clear();
4026 outputGain = 0;
4027 outputLevelLeft = 100;
4028 outputLevelRight = 100;
4029 outputMuted = false;
4030 }
4031 };
4032
4033 static void to_json(nlohmann::json& j, const Audio& p)
4034 {
4035 j = nlohmann::json{
4036 TOJSON_IMPL(enabled),
4037 TOJSON_IMPL(inputId),
4038 TOJSON_IMPL(inputHardwareId),
4039 TOJSON_IMPL(inputGain),
4040 TOJSON_IMPL(outputId),
4041 TOJSON_IMPL(outputHardwareId),
4042 TOJSON_IMPL(outputLevelLeft),
4043 TOJSON_IMPL(outputLevelRight),
4044 TOJSON_IMPL(outputMuted)
4045 };
4046 }
4047 static void from_json(const nlohmann::json& j, Audio& p)
4048 {
4049 p.clear();
4050 getOptional<bool>("enabled", p.enabled, j, true);
4051 getOptional<int>("inputId", p.inputId, j, 0);
4052 getOptional<std::string>("inputHardwareId", p.inputHardwareId, j, EMPTY_STRING);
4053 getOptional<int>("inputGain", p.inputGain, j, 0);
4054 getOptional<int>("outputId", p.outputId, j, 0);
4055 getOptional<std::string>("outputHardwareId", p.outputHardwareId, j, EMPTY_STRING);
4056 getOptional<int>("outputGain", p.outputGain, j, 0);
4057 getOptional<int>("outputLevelLeft", p.outputLevelLeft, j, 100);
4058 getOptional<int>("outputLevelRight", p.outputLevelRight, j, 100);
4059 getOptional<bool>("outputMuted", p.outputMuted, j, false);
4060 }
4061
4062 //-----------------------------------------------------------
4063 JSON_SERIALIZED_CLASS(TalkerInformation)
4074 {
4075 IMPLEMENT_JSON_SERIALIZATION()
4076 IMPLEMENT_JSON_DOCUMENTATION(TalkerInformation)
4077
4078 public:
4082 typedef enum
4083 {
4085 matNone = 0,
4086
4088 matAnonymous = 1,
4089
4091 matSsrcGenerated = 2
4092 } ManufacturedAliasType_t;
4093
4095 std::string alias;
4096
4098 std::string nodeId;
4099
4101 uint16_t rxFlags;
4102
4105
4107 uint32_t txId;
4108
4111
4114
4117
4119 uint32_t ssrc;
4120
4123
4125 {
4126 clear();
4127 }
4128
4129 void clear()
4130 {
4131 alias.clear();
4132 nodeId.clear();
4133 rxFlags = 0;
4134 txPriority = 0;
4135 txId = 0;
4136 duplicateCount = 0;
4137 aliasSpecializer = 0;
4138 rxMuted = false;
4139 manufacturedAliasType = ManufacturedAliasType_t::matNone;
4140 ssrc = 0;
4141 }
4142 };
4143
4144 static void to_json(nlohmann::json& j, const TalkerInformation& p)
4145 {
4146 j = nlohmann::json{
4147 TOJSON_IMPL(alias),
4148 TOJSON_IMPL(nodeId),
4149 TOJSON_IMPL(rxFlags),
4150 TOJSON_IMPL(txPriority),
4151 TOJSON_IMPL(txId),
4152 TOJSON_IMPL(duplicateCount),
4153 TOJSON_IMPL(aliasSpecializer),
4154 TOJSON_IMPL(rxMuted),
4155 TOJSON_IMPL(manufacturedAliasType),
4156 TOJSON_IMPL(ssrc)
4157 };
4158 }
4159 static void from_json(const nlohmann::json& j, TalkerInformation& p)
4160 {
4161 p.clear();
4162 getOptional<std::string>("alias", p.alias, j, EMPTY_STRING);
4163 getOptional<std::string>("nodeId", p.nodeId, j, EMPTY_STRING);
4164 getOptional<uint16_t>("rxFlags", p.rxFlags, j, 0);
4165 getOptional<int>("txPriority", p.txPriority, j, 0);
4166 getOptional<uint32_t>("txId", p.txId, j, 0);
4167 getOptional<int>("duplicateCount", p.duplicateCount, j, 0);
4168 getOptional<uint16_t>("aliasSpecializer", p.aliasSpecializer, j, 0);
4169 getOptional<bool>("rxMuted", p.rxMuted, j, false);
4170 getOptional<TalkerInformation::ManufacturedAliasType_t>("manufacturedAliasType", p.manufacturedAliasType, j, TalkerInformation::ManufacturedAliasType_t::matNone);
4171 getOptional<uint32_t>("ssrc", p.ssrc, j, 0);
4172 }
4173
4174 //-----------------------------------------------------------
4175 JSON_SERIALIZED_CLASS(GroupTalkers)
4188 {
4189 IMPLEMENT_JSON_SERIALIZATION()
4190 IMPLEMENT_JSON_DOCUMENTATION(GroupTalkers)
4191
4192 public:
4194 std::vector<TalkerInformation> list;
4195
4196 GroupTalkers()
4197 {
4198 clear();
4199 }
4200
4201 void clear()
4202 {
4203 list.clear();
4204 }
4205 };
4206
4207 static void to_json(nlohmann::json& j, const GroupTalkers& p)
4208 {
4209 j = nlohmann::json{
4210 TOJSON_IMPL(list)
4211 };
4212 }
4213 static void from_json(const nlohmann::json& j, GroupTalkers& p)
4214 {
4215 p.clear();
4216 getOptional<std::vector<TalkerInformation>>("list", p.list, j);
4217 }
4218
4219 //-----------------------------------------------------------
4220 JSON_SERIALIZED_CLASS(Presence)
4231 {
4232 IMPLEMENT_JSON_SERIALIZATION()
4233 IMPLEMENT_JSON_DOCUMENTATION(Presence)
4234
4235 public:
4239 typedef enum
4240 {
4242 pfUnknown = 0,
4243
4245 pfEngage = 1,
4246
4253 pfCot = 2
4254 } Format_t;
4255
4258
4261
4264
4267
4270
4271 Presence()
4272 {
4273 clear();
4274 }
4275
4276 void clear()
4277 {
4278 format = pfUnknown;
4279 intervalSecs = 30;
4280 listenOnly = false;
4281 minIntervalSecs = 5;
4282 reduceImmediacy = false;
4283 }
4284 };
4285
4286 static void to_json(nlohmann::json& j, const Presence& p)
4287 {
4288 j = nlohmann::json{
4289 TOJSON_IMPL(format),
4290 TOJSON_IMPL(intervalSecs),
4291 TOJSON_IMPL(listenOnly),
4292 TOJSON_IMPL(minIntervalSecs),
4293 TOJSON_IMPL(reduceImmediacy)
4294 };
4295 }
4296 static void from_json(const nlohmann::json& j, Presence& p)
4297 {
4298 p.clear();
4299 getOptional<Presence::Format_t>("format", p.format, j, Presence::Format_t::pfEngage);
4300 getOptional<int>("intervalSecs", p.intervalSecs, j, 30);
4301 getOptional<bool>("listenOnly", p.listenOnly, j, false);
4302 getOptional<int>("minIntervalSecs", p.minIntervalSecs, j, 5);
4303 getOptional<bool>("reduceImmediacy", p.reduceImmediacy, j, false);
4304 }
4305
4306
4307 //-----------------------------------------------------------
4308 JSON_SERIALIZED_CLASS(Advertising)
4319 {
4320 IMPLEMENT_JSON_SERIALIZATION()
4321 IMPLEMENT_JSON_DOCUMENTATION(Advertising)
4322
4323 public:
4326
4329
4332
4333 Advertising()
4334 {
4335 clear();
4336 }
4337
4338 void clear()
4339 {
4340 enabled = false;
4341 intervalMs = 20000;
4342 alwaysAdvertise = false;
4343 }
4344 };
4345
4346 static void to_json(nlohmann::json& j, const Advertising& p)
4347 {
4348 j = nlohmann::json{
4349 TOJSON_IMPL(enabled),
4350 TOJSON_IMPL(intervalMs),
4351 TOJSON_IMPL(alwaysAdvertise)
4352 };
4353 }
4354 static void from_json(const nlohmann::json& j, Advertising& p)
4355 {
4356 p.clear();
4357 getOptional("enabled", p.enabled, j, false);
4358 getOptional<int>("intervalMs", p.intervalMs, j, 20000);
4359 getOptional<bool>("alwaysAdvertise", p.alwaysAdvertise, j, false);
4360 }
4361
4362 //-----------------------------------------------------------
4363 JSON_SERIALIZED_CLASS(GroupPriorityTranslation)
4374 {
4375 IMPLEMENT_JSON_SERIALIZATION()
4376 IMPLEMENT_JSON_DOCUMENTATION(GroupPriorityTranslation)
4377
4378 public:
4381
4384
4387
4389 {
4390 clear();
4391 }
4392
4393 void clear()
4394 {
4395 rx.clear();
4396 tx.clear();
4397 priority = 0;
4398 }
4399 };
4400
4401 static void to_json(nlohmann::json& j, const GroupPriorityTranslation& p)
4402 {
4403 j = nlohmann::json{
4404 TOJSON_IMPL(rx),
4405 TOJSON_IMPL(tx),
4406 TOJSON_IMPL(priority)
4407 };
4408 }
4409 static void from_json(const nlohmann::json& j, GroupPriorityTranslation& p)
4410 {
4411 p.clear();
4412 j.at("rx").get_to(p.rx);
4413 j.at("tx").get_to(p.tx);
4414 FROMJSON_IMPL(priority, int, 0);
4415 }
4416
4417 //-----------------------------------------------------------
4418 JSON_SERIALIZED_CLASS(GroupTimeline)
4431 {
4432 IMPLEMENT_JSON_SERIALIZATION()
4433 IMPLEMENT_JSON_DOCUMENTATION(GroupTimeline)
4434
4435 public:
4438
4441 bool recordAudio;
4442
4444 {
4445 clear();
4446 }
4447
4448 void clear()
4449 {
4450 enabled = true;
4451 maxAudioTimeMs = 30000;
4452 recordAudio = true;
4453 }
4454 };
4455
4456 static void to_json(nlohmann::json& j, const GroupTimeline& p)
4457 {
4458 j = nlohmann::json{
4459 TOJSON_IMPL(enabled),
4460 TOJSON_IMPL(maxAudioTimeMs),
4461 TOJSON_IMPL(recordAudio)
4462 };
4463 }
4464 static void from_json(const nlohmann::json& j, GroupTimeline& p)
4465 {
4466 p.clear();
4467 getOptional("enabled", p.enabled, j, true);
4468 getOptional<int>("maxAudioTimeMs", p.maxAudioTimeMs, j, 30000);
4469 getOptional("recordAudio", p.recordAudio, j, true);
4470 }
4471
4479 ENGAGE_IGNORE_COMPILER_UNUSED_WARNING static const char *GROUP_SOURCE_ENGAGE_INTERNAL = "com.rallytac.engage.internal";
4481 ENGAGE_IGNORE_COMPILER_UNUSED_WARNING static const char *GROUP_SOURCE_ENGAGE_MAGELLAN_CORE = "com.rallytac.magellan.core";
4483 ENGAGE_IGNORE_COMPILER_UNUSED_WARNING static const char *GROUP_SOURCE_ENGAGE_MAGELLAN_CISTECH = "com.rallytac.engage.magellan.cistech";
4485 ENGAGE_IGNORE_COMPILER_UNUSED_WARNING static const char *GROUP_SOURCE_ENGAGE_MAGELLAN_TRELLISWARE = "com.rallytac.engage.magellan.trellisware";
4487 ENGAGE_IGNORE_COMPILER_UNUSED_WARNING static const char *GROUP_SOURCE_ENGAGE_MAGELLAN_SILVUS = "com.rallytac.engage.magellan.silvus";
4489 ENGAGE_IGNORE_COMPILER_UNUSED_WARNING static const char *GROUP_SOURCE_ENGAGE_MAGELLAN_PERSISTENT = "com.rallytac.engage.magellan.persistent";
4491 ENGAGE_IGNORE_COMPILER_UNUSED_WARNING static const char *GROUP_SOURCE_ENGAGE_MAGELLAN_DOMO = "com.rallytac.engage.magellan.domo";
4493 ENGAGE_IGNORE_COMPILER_UNUSED_WARNING static const char *GROUP_SOURCE_ENGAGE_MAGELLAN_KENWOOD = "com.rallytac.engage.magellan.kenwood";
4495 ENGAGE_IGNORE_COMPILER_UNUSED_WARNING static const char *GROUP_SOURCE_ENGAGE_MAGELLAN_TAIT = "com.rallytac.engage.magellan.tait";
4497 ENGAGE_IGNORE_COMPILER_UNUSED_WARNING static const char *GROUP_SOURCE_ENGAGE_MAGELLAN_VOCALITY = "com.rallytac.engage.magellan.vocality";
4518
4543
4559 //-----------------------------------------------------------
4560 JSON_SERIALIZED_CLASS(GroupAppTransport)
4571 {
4572 IMPLEMENT_JSON_SERIALIZATION()
4573 IMPLEMENT_JSON_DOCUMENTATION(GroupAppTransport)
4574
4575 public:
4578
4580 std::string id;
4581
4583 {
4584 clear();
4585 }
4586
4587 void clear()
4588 {
4589 enabled = false;
4590 id.clear();
4591 }
4592 };
4593
4594 static void to_json(nlohmann::json& j, const GroupAppTransport& p)
4595 {
4596 j = nlohmann::json{
4597 TOJSON_IMPL(enabled),
4598 TOJSON_IMPL(id)
4599 };
4600 }
4601 static void from_json(const nlohmann::json& j, GroupAppTransport& p)
4602 {
4603 p.clear();
4604 getOptional<bool>("enabled", p.enabled, j, false);
4605 getOptional<std::string>("id", p.id, j);
4606 }
4607
4608 //-----------------------------------------------------------
4609 JSON_SERIALIZED_CLASS(RtpProfile)
4620 {
4621 IMPLEMENT_JSON_SERIALIZATION()
4622 IMPLEMENT_JSON_DOCUMENTATION(RtpProfile)
4623
4624 public:
4630 typedef enum
4631 {
4633 jmStandard = 0,
4634
4636 jmLowLatency = 1,
4637
4639 jmReleaseOnTxEnd = 2
4640 } JitterMode_t;
4641
4644
4647
4650
4653
4656
4659
4662
4665
4668
4671
4674
4677
4680
4683
4686
4689
4693
4694 RtpProfile()
4695 {
4696 clear();
4697 }
4698
4699 void clear()
4700 {
4701 mode = jmStandard;
4702 jitterMaxMs = 10000;
4703 jitterMinMs = 100;
4704 jitterMaxFactor = 8;
4705 jitterTrimPercentage = 10;
4706 jitterUnderrunReductionThresholdMs = 1500;
4707 jitterUnderrunReductionAger = 100;
4708 latePacketSequenceRange = 5;
4709 latePacketTimestampRangeMs = 2000;
4710 inboundProcessorInactivityMs = 500;
4711 jitterForceTrimAtMs = 0;
4712 rtcpPresenceTimeoutMs = 45000;
4713 jitterMaxExceededClipPerc = 10;
4714 jitterMaxExceededClipHangMs = 1500;
4715 zombieLifetimeMs = 15000;
4716 jitterMaxTrimMs = 250;
4717 signalledInboundProcessorInactivityMs = (inboundProcessorInactivityMs * 4);
4718 }
4719 };
4720
4721 static void to_json(nlohmann::json& j, const RtpProfile& p)
4722 {
4723 j = nlohmann::json{
4724 TOJSON_IMPL(mode),
4725 TOJSON_IMPL(jitterMaxMs),
4726 TOJSON_IMPL(inboundProcessorInactivityMs),
4727 TOJSON_IMPL(jitterMinMs),
4728 TOJSON_IMPL(jitterMaxFactor),
4729 TOJSON_IMPL(jitterTrimPercentage),
4730 TOJSON_IMPL(jitterUnderrunReductionThresholdMs),
4731 TOJSON_IMPL(jitterUnderrunReductionAger),
4732 TOJSON_IMPL(latePacketSequenceRange),
4733 TOJSON_IMPL(latePacketTimestampRangeMs),
4734 TOJSON_IMPL(inboundProcessorInactivityMs),
4735 TOJSON_IMPL(jitterForceTrimAtMs),
4736 TOJSON_IMPL(jitterMaxExceededClipPerc),
4737 TOJSON_IMPL(jitterMaxExceededClipHangMs),
4738 TOJSON_IMPL(zombieLifetimeMs),
4739 TOJSON_IMPL(jitterMaxTrimMs),
4740 TOJSON_IMPL(signalledInboundProcessorInactivityMs)
4741 };
4742 }
4743 static void from_json(const nlohmann::json& j, RtpProfile& p)
4744 {
4745 p.clear();
4746 FROMJSON_IMPL(mode, RtpProfile::JitterMode_t, RtpProfile::JitterMode_t::jmStandard);
4747 FROMJSON_IMPL(jitterMaxMs, int, 10000);
4748 FROMJSON_IMPL(jitterMinMs, int, 20);
4749 FROMJSON_IMPL(jitterMaxFactor, int, 8);
4750 FROMJSON_IMPL(jitterTrimPercentage, int, 10);
4751 FROMJSON_IMPL(jitterUnderrunReductionThresholdMs, int, 1500);
4752 FROMJSON_IMPL(jitterUnderrunReductionAger, int, 100);
4753 FROMJSON_IMPL(latePacketSequenceRange, int, 5);
4754 FROMJSON_IMPL(latePacketTimestampRangeMs, int, 2000);
4755 FROMJSON_IMPL(inboundProcessorInactivityMs, int, 500);
4756 FROMJSON_IMPL(jitterForceTrimAtMs, int, 0);
4757 FROMJSON_IMPL(rtcpPresenceTimeoutMs, int, 45000);
4758 FROMJSON_IMPL(jitterMaxExceededClipPerc, int, 10);
4759 FROMJSON_IMPL(jitterMaxExceededClipHangMs, int, 1500);
4760 FROMJSON_IMPL(zombieLifetimeMs, int, 15000);
4761 FROMJSON_IMPL(jitterMaxTrimMs, int, 250);
4762 FROMJSON_IMPL(signalledInboundProcessorInactivityMs, int, (p.inboundProcessorInactivityMs * 4));
4763 }
4764
4765 //-----------------------------------------------------------
4766 JSON_SERIALIZED_CLASS(Tls)
4777 {
4778 IMPLEMENT_JSON_SERIALIZATION()
4779 IMPLEMENT_JSON_DOCUMENTATION(Tls)
4780
4781 public:
4782
4785
4788
4790 std::vector<std::string> caCertificates;
4791
4794
4797
4799 std::vector<std::string> crlSerials;
4800
4801 Tls()
4802 {
4803 clear();
4804 }
4805
4806 void clear()
4807 {
4808 verifyPeers = true;
4809 allowSelfSignedCertificates = false;
4810 caCertificates.clear();
4811 subjectRestrictions.clear();
4812 issuerRestrictions.clear();
4813 crlSerials.clear();
4814 }
4815 };
4816
4817 static void to_json(nlohmann::json& j, const Tls& p)
4818 {
4819 j = nlohmann::json{
4820 TOJSON_IMPL(verifyPeers),
4821 TOJSON_IMPL(allowSelfSignedCertificates),
4822 TOJSON_IMPL(caCertificates),
4823 TOJSON_IMPL(subjectRestrictions),
4824 TOJSON_IMPL(issuerRestrictions),
4825 TOJSON_IMPL(crlSerials)
4826 };
4827 }
4828 static void from_json(const nlohmann::json& j, Tls& p)
4829 {
4830 p.clear();
4831 getOptional<bool>("verifyPeers", p.verifyPeers, j, true);
4832 getOptional<bool>("allowSelfSignedCertificates", p.allowSelfSignedCertificates, j, false);
4833 getOptional<std::vector<std::string>>("caCertificates", p.caCertificates, j);
4834 getOptional<StringRestrictionList>("subjectRestrictions", p.subjectRestrictions, j);
4835 getOptional<StringRestrictionList>("issuerRestrictions", p.issuerRestrictions, j);
4836 getOptional<std::vector<std::string>>("crlSerials", p.crlSerials, j);
4837 }
4838
4839 //-----------------------------------------------------------
4840 JSON_SERIALIZED_CLASS(RangerPackets)
4853 {
4854 IMPLEMENT_JSON_SERIALIZATION()
4855 IMPLEMENT_JSON_DOCUMENTATION(RangerPackets)
4856
4857 public:
4860
4863
4865 {
4866 clear();
4867 }
4868
4869 void clear()
4870 {
4871 hangTimerSecs = -1;
4872 count = 5;
4873 }
4874
4875 virtual void initForDocumenting()
4876 {
4877 }
4878 };
4879
4880 static void to_json(nlohmann::json& j, const RangerPackets& p)
4881 {
4882 j = nlohmann::json{
4883 TOJSON_IMPL(hangTimerSecs),
4884 TOJSON_IMPL(count)
4885 };
4886 }
4887 static void from_json(const nlohmann::json& j, RangerPackets& p)
4888 {
4889 p.clear();
4890 getOptional<int>("hangTimerSecs", p.hangTimerSecs, j, 11);
4891 getOptional<int>("count", p.count, j, 5);
4892 }
4893
4894 //-----------------------------------------------------------
4895 JSON_SERIALIZED_CLASS(Source)
4908 {
4909 IMPLEMENT_JSON_SERIALIZATION()
4910 IMPLEMENT_JSON_DOCUMENTATION(Source)
4911
4912 public:
4914 std::string nodeId;
4915
4916 /* NOTE: Not serialized ! */
4917 uint8_t _internal_binary_nodeId[ENGAGE_MAX_NODE_ID_SIZE];
4918
4920 std::string alias;
4921
4922 /* NOTE: Not serialized ! */
4923 uint8_t _internal_binary_alias[ENGAGE_MAX_ALIAS_SIZE];
4924
4925 Source()
4926 {
4927 clear();
4928 }
4929
4930 void clear()
4931 {
4932 nodeId.clear();
4933 memset(_internal_binary_nodeId, 0, sizeof(_internal_binary_nodeId));
4934
4935 alias.clear();
4936 memset(_internal_binary_alias, 0, sizeof(_internal_binary_alias));
4937 }
4938
4939 virtual void initForDocumenting()
4940 {
4941 }
4942 };
4943
4944 static void to_json(nlohmann::json& j, const Source& p)
4945 {
4946 j = nlohmann::json{
4947 TOJSON_IMPL(nodeId),
4948 TOJSON_IMPL(alias)
4949 };
4950 }
4951 static void from_json(const nlohmann::json& j, Source& p)
4952 {
4953 p.clear();
4954 FROMJSON_IMPL_SIMPLE(nodeId);
4955 FROMJSON_IMPL_SIMPLE(alias);
4956 }
4957
4958 //-----------------------------------------------------------
4959 JSON_SERIALIZED_CLASS(GroupBridgeTargetOutputDetail)
4972 {
4973 IMPLEMENT_JSON_SERIALIZATION()
4974 IMPLEMENT_JSON_DOCUMENTATION(GroupBridgeTargetOutputDetail)
4975
4976 public:
4978 typedef enum
4979 {
4983 bomRaw = 0,
4984
4987 bomMultistream = 1,
4988
4991 bomMixedStream = 2,
4992
4994 bomNone = 3
4995 } BridgingOpMode_t;
4996
4999
5002
5004 {
5005 clear();
5006 }
5007
5008 void clear()
5009 {
5010 mode = BridgingOpMode_t::bomRaw;
5011 mixedStreamTxParams.clear();
5012 }
5013
5014 virtual void initForDocumenting()
5015 {
5016 clear();
5017 }
5018 };
5019
5020 static void to_json(nlohmann::json& j, const GroupBridgeTargetOutputDetail& p)
5021 {
5022 j = nlohmann::json{
5023 TOJSON_IMPL(mode),
5024 TOJSON_IMPL(mixedStreamTxParams)
5025 };
5026 }
5027 static void from_json(const nlohmann::json& j, GroupBridgeTargetOutputDetail& p)
5028 {
5029 p.clear();
5030 FROMJSON_IMPL_SIMPLE(mode);
5031 FROMJSON_IMPL_SIMPLE(mixedStreamTxParams);
5032 }
5033
5034 //-----------------------------------------------------------
5035 JSON_SERIALIZED_CLASS(Group)
5047 {
5048 IMPLEMENT_JSON_SERIALIZATION()
5049 IMPLEMENT_JSON_DOCUMENTATION(Group)
5050
5051 public:
5053 typedef enum
5054 {
5056 gtUnknown = 0,
5057
5059 gtAudio = 1,
5060
5062 gtPresence = 2,
5063
5065 gtRaw = 3
5066 } Type_t;
5067
5069 typedef enum
5070 {
5072 iagpAnonymousAlias = 0,
5073
5075 iagpSsrcInHex = 1
5076 } InboundAliasGenerationPolicy_t;
5077
5080
5083
5090 std::string id;
5091
5093 std::string name;
5094
5096 std::string spokenName;
5097
5099 std::string interfaceName;
5100
5103
5106
5109
5112
5115
5117 std::string cryptoPassword;
5118
5121
5123 std::vector<Rallypoint> rallypoints;
5124
5127
5130
5139
5141 std::string alias;
5142
5145
5147 std::string source;
5148
5155
5158
5161
5164
5166 std::vector<std::string> presenceGroupAffinities;
5167
5170
5173
5175 std::vector<RtpPayloadTypeTranslation> inboundRtpPayloadTypeTranslations;
5176
5179
5182
5184 std::string anonymousAlias;
5185
5188
5191
5194
5197
5200
5203
5206
5208 std::vector<uint16_t> specializerAffinities;
5209
5212
5214 std::vector<Source> ignoreSources;
5215
5217 std::string languageCode;
5218
5220 std::string synVoice;
5221
5224
5227
5230
5233
5236
5239
5240 Group()
5241 {
5242 clear();
5243 }
5244
5245 void clear()
5246 {
5247 type = gtUnknown;
5248 bridgeTargetOutputDetail.clear();
5249 id.clear();
5250 name.clear();
5251 spokenName.clear();
5252 interfaceName.clear();
5253 rx.clear();
5254 tx.clear();
5255 txOptions.clear();
5256 txAudio.clear();
5257 presence.clear();
5258 cryptoPassword.clear();
5259
5260 alias.clear();
5261
5262 rallypoints.clear();
5263 rallypointCluster.clear();
5264
5265 audio.clear();
5266 timeline.clear();
5267
5268 blockAdvertising = false;
5269
5270 source.clear();
5271
5272 maxRxSecs = 0;
5273
5274 enableMulticastFailover = false;
5275 multicastFailoverSecs = 10;
5276
5277 rtcpPresenceRx.clear();
5278
5279 presenceGroupAffinities.clear();
5280 disablePacketEvents = false;
5281
5282 rfc4733RtpPayloadId = 0;
5283 inboundRtpPayloadTypeTranslations.clear();
5284 priorityTranslation.clear();
5285
5286 stickyTidHangSecs = 10;
5287 anonymousAlias.clear();
5288 lbCrypto = false;
5289
5290 appTransport.clear();
5291 allowLoopback = false;
5292
5293 rtpProfile.clear();
5294 rangerPackets.clear();
5295
5296 _wasDeserialized_rtpProfile = false;
5297
5298 txImpairment.clear();
5299 rxImpairment.clear();
5300
5301 specializerAffinities.clear();
5302
5303 securityLevel = 0;
5304
5305 ignoreSources.clear();
5306
5307 languageCode.clear();
5308 synVoice.clear();
5309
5310 rxCapture.clear();
5311 txCapture.clear();
5312
5313 blobRtpPayloadType = ENGAGE_DEFAULT_BLOB_RTP_PAYLOAD_TYPE;
5314 inboundAliasGenerationPolicy = iagpAnonymousAlias;
5315 gateIn.clear();
5316
5317 ignoreAudioTraffic = false;
5318 }
5319 };
5320
5321 static void to_json(nlohmann::json& j, const Group& p)
5322 {
5323 j = nlohmann::json{
5324 TOJSON_IMPL(type),
5325 TOJSON_IMPL(bridgeTargetOutputDetail),
5326 TOJSON_IMPL(id),
5327 TOJSON_IMPL(name),
5328 TOJSON_IMPL(spokenName),
5329 TOJSON_IMPL(interfaceName),
5330 TOJSON_IMPL(rx),
5331 TOJSON_IMPL(tx),
5332 TOJSON_IMPL(txOptions),
5333 TOJSON_IMPL(txAudio),
5334 TOJSON_IMPL(presence),
5335 TOJSON_IMPL(cryptoPassword),
5336 TOJSON_IMPL(alias),
5337
5338 // See below
5339 //TOJSON_IMPL(rallypoints),
5340 //TOJSON_IMPL(rallypointCluster),
5341
5342 TOJSON_IMPL(alias),
5343 TOJSON_IMPL(audio),
5344 TOJSON_IMPL(timeline),
5345 TOJSON_IMPL(blockAdvertising),
5346 TOJSON_IMPL(source),
5347 TOJSON_IMPL(maxRxSecs),
5348 TOJSON_IMPL(enableMulticastFailover),
5349 TOJSON_IMPL(multicastFailoverSecs),
5350 TOJSON_IMPL(rtcpPresenceRx),
5351 TOJSON_IMPL(presenceGroupAffinities),
5352 TOJSON_IMPL(disablePacketEvents),
5353 TOJSON_IMPL(rfc4733RtpPayloadId),
5354 TOJSON_IMPL(inboundRtpPayloadTypeTranslations),
5355 TOJSON_IMPL(priorityTranslation),
5356 TOJSON_IMPL(stickyTidHangSecs),
5357 TOJSON_IMPL(anonymousAlias),
5358 TOJSON_IMPL(lbCrypto),
5359 TOJSON_IMPL(appTransport),
5360 TOJSON_IMPL(allowLoopback),
5361 TOJSON_IMPL(rangerPackets),
5362
5363 TOJSON_IMPL(txImpairment),
5364 TOJSON_IMPL(rxImpairment),
5365
5366 TOJSON_IMPL(specializerAffinities),
5367
5368 TOJSON_IMPL(securityLevel),
5369
5370 TOJSON_IMPL(ignoreSources),
5371
5372 TOJSON_IMPL(languageCode),
5373 TOJSON_IMPL(synVoice),
5374
5375 TOJSON_IMPL(rxCapture),
5376 TOJSON_IMPL(txCapture),
5377
5378 TOJSON_IMPL(blobRtpPayloadType),
5379
5380 TOJSON_IMPL(inboundAliasGenerationPolicy),
5381
5382 TOJSON_IMPL(gateIn),
5383
5384 TOJSON_IMPL(ignoreAudioTraffic)
5385 };
5386
5387 TOJSON_BASE_IMPL();
5388
5389 // TODO: need a better way to indicate whether rtpProfile is present
5390 if(p._wasDeserialized_rtpProfile || p.isDocumenting())
5391 {
5392 j["rtpProfile"] = p.rtpProfile;
5393 }
5394
5395 if(p.isDocumenting())
5396 {
5397 j["rallypointCluster"] = p.rallypointCluster;
5398 j["rallypoints"] = p.rallypoints;
5399 }
5400 else
5401 {
5402 // rallypointCluster takes precedence if it has elements
5403 if(!p.rallypointCluster.rallypoints.empty())
5404 {
5405 j["rallypointCluster"] = p.rallypointCluster;
5406 }
5407 else if(!p.rallypoints.empty())
5408 {
5409 j["rallypoints"] = p.rallypoints;
5410 }
5411 }
5412 }
5413 static void from_json(const nlohmann::json& j, Group& p)
5414 {
5415 p.clear();
5416 j.at("type").get_to(p.type);
5417 getOptional<GroupBridgeTargetOutputDetail>("bridgeTargetOutputDetail", p.bridgeTargetOutputDetail, j);
5418 j.at("id").get_to(p.id);
5419 getOptional<std::string>("name", p.name, j);
5420 getOptional<std::string>("spokenName", p.spokenName, j);
5421 getOptional<std::string>("interfaceName", p.interfaceName, j);
5422 getOptional<NetworkAddress>("rx", p.rx, j);
5423 getOptional<NetworkAddress>("tx", p.tx, j);
5424 getOptional<NetworkTxOptions>("txOptions", p.txOptions, j);
5425 getOptional<std::string>("cryptoPassword", p.cryptoPassword, j);
5426 getOptional<std::string>("alias", p.alias, j);
5427 getOptional<TxAudio>("txAudio", p.txAudio, j);
5428 getOptional<Presence>("presence", p.presence, j);
5429 getOptional<std::vector<Rallypoint>>("rallypoints", p.rallypoints, j);
5430 getOptional<RallypointCluster>("rallypointCluster", p.rallypointCluster, j);
5431 getOptional<Audio>("audio", p.audio, j);
5432 getOptional<GroupTimeline>("timeline", p.timeline, j);
5433 getOptional<bool>("blockAdvertising", p.blockAdvertising, j, false);
5434 getOptional<std::string>("source", p.source, j);
5435 getOptional<int>("maxRxSecs", p.maxRxSecs, j, 0);
5436 getOptional<bool>("enableMulticastFailover", p.enableMulticastFailover, j, false);
5437 getOptional<int>("multicastFailoverSecs", p.multicastFailoverSecs, j, 10);
5438 getOptional<NetworkAddress>("rtcpPresenceRx", p.rtcpPresenceRx, j);
5439 getOptional<std::vector<std::string>>("presenceGroupAffinities", p.presenceGroupAffinities, j);
5440 getOptional<bool>("disablePacketEvents", p.disablePacketEvents, j, false);
5441 getOptional<int>("rfc4733RtpPayloadId", p.rfc4733RtpPayloadId, j, 0);
5442 getOptional<std::vector<RtpPayloadTypeTranslation>>("inboundRtpPayloadTypeTranslations", p.inboundRtpPayloadTypeTranslations, j);
5443 getOptional<GroupPriorityTranslation>("priorityTranslation", p.priorityTranslation, j);
5444 getOptional<int>("stickyTidHangSecs", p.stickyTidHangSecs, j, 10);
5445 getOptional<std::string>("anonymousAlias", p.anonymousAlias, j);
5446 getOptional<bool>("lbCrypto", p.lbCrypto, j, false);
5447 getOptional<GroupAppTransport>("appTransport", p.appTransport, j);
5448 getOptional<bool>("allowLoopback", p.allowLoopback, j, false);
5449 getOptionalWithIndicator<RtpProfile>("rtpProfile", p.rtpProfile, j, &p._wasDeserialized_rtpProfile);
5450 getOptional<RangerPackets>("rangerPackets", p.rangerPackets, j);
5451 getOptional<TransportImpairment>("txImpairment", p.txImpairment, j);
5452 getOptional<TransportImpairment>("rxImpairment", p.rxImpairment, j);
5453 getOptional<std::vector<uint16_t>>("specializerAffinities", p.specializerAffinities, j);
5454 getOptional<uint32_t>("securityLevel", p.securityLevel, j, 0);
5455 getOptional<std::vector<Source>>("ignoreSources", p.ignoreSources, j);
5456 getOptional<std::string>("languageCode", p.languageCode, j);
5457 getOptional<std::string>("synVoice", p.synVoice, j);
5458
5459 getOptional<PacketCapturer>("rxCapture", p.rxCapture, j);
5460 getOptional<PacketCapturer>("txCapture", p.txCapture, j);
5461
5462 getOptional<uint16_t>("blobRtpPayloadType", p.blobRtpPayloadType, j, ENGAGE_DEFAULT_BLOB_RTP_PAYLOAD_TYPE);
5463
5464 getOptional<Group::InboundAliasGenerationPolicy_t>("inboundAliasGenerationPolicy", p.inboundAliasGenerationPolicy, j, Group::InboundAliasGenerationPolicy_t::iagpAnonymousAlias);
5465
5466 getOptional<AudioGate>("gateIn", p.gateIn, j);
5467
5468 getOptional<bool>("ignoreAudioTraffic", p.ignoreAudioTraffic, j, false);
5469
5470 FROMJSON_BASE_IMPL();
5471 }
5472
5473
5474 //-----------------------------------------------------------
5475 JSON_SERIALIZED_CLASS(Mission)
5477 {
5478 IMPLEMENT_JSON_SERIALIZATION()
5479 IMPLEMENT_JSON_DOCUMENTATION(Mission)
5480
5481 public:
5482 std::string id;
5483 std::string name;
5484 std::vector<Group> groups;
5485 std::chrono::system_clock::time_point begins;
5486 std::chrono::system_clock::time_point ends;
5487 std::string certStoreId;
5488 int multicastFailoverPolicy;
5489 Rallypoint rallypoint;
5490
5491 void clear()
5492 {
5493 id.clear();
5494 name.clear();
5495 groups.clear();
5496 certStoreId.clear();
5497 multicastFailoverPolicy = 0;
5498 rallypoint.clear();
5499 }
5500 };
5501
5502 static void to_json(nlohmann::json& j, const Mission& p)
5503 {
5504 j = nlohmann::json{
5505 TOJSON_IMPL(id),
5506 TOJSON_IMPL(name),
5507 TOJSON_IMPL(groups),
5508 TOJSON_IMPL(certStoreId),
5509 TOJSON_IMPL(multicastFailoverPolicy),
5510 TOJSON_IMPL(rallypoint)
5511 };
5512 }
5513
5514 static void from_json(const nlohmann::json& j, Mission& p)
5515 {
5516 p.clear();
5517 j.at("id").get_to(p.id);
5518 j.at("name").get_to(p.name);
5519
5520 // Groups are optional
5521 try
5522 {
5523 j.at("groups").get_to(p.groups);
5524 }
5525 catch(...)
5526 {
5527 p.groups.clear();
5528 }
5529
5530 FROMJSON_IMPL(certStoreId, std::string, EMPTY_STRING);
5531 FROMJSON_IMPL(multicastFailoverPolicy, int, 0);
5532 getOptional<Rallypoint>("rallypoint", p.rallypoint, j);
5533 }
5534
5535 //-----------------------------------------------------------
5536 JSON_SERIALIZED_CLASS(LicenseDescriptor)
5547 {
5548 IMPLEMENT_JSON_SERIALIZATION()
5549 IMPLEMENT_JSON_DOCUMENTATION(LicenseDescriptor)
5550
5551 public:
5557 static const int STATUS_OK = 0;
5558 static const int ERR_NULL_ENTITLEMENT_KEY = -1;
5559 static const int ERR_NULL_LICENSE_KEY = -2;
5560 static const int ERR_INVALID_LICENSE_KEY_LEN = -3;
5561 static const int ERR_LICENSE_KEY_VERIFICATION_FAILURE = -4;
5562 static const int ERR_ACTIVATION_CODE_VERIFICATION_FAILURE = -5;
5563 static const int ERR_INVALID_EXPIRATION_DATE = -6;
5564 static const int ERR_GENERAL_FAILURE = -7;
5565 static const int ERR_NOT_INITIALIZED = -8;
5566 static const int ERR_REQUIRES_ACTIVATION = -9;
5567 static const int ERR_LICENSE_NOT_SUITED_FOR_ACTIVATION = -10;
5575 static const uint8_t LIC_CARGO_FLAG_LIMIT_TO_FEATURES = 0x01;
5586 std::string entitlement;
5587
5594 std::string key;
5595
5597 std::string activationCode;
5598
5600 std::string deviceId;
5601
5603 int type;
5604
5606 time_t expires;
5607
5609 std::string expiresFormatted;
5610
5615 uint32_t flags;
5616
5618 std::string cargo;
5619
5621 uint8_t cargoFlags;
5622
5628
5630 std::string manufacturerId;
5631
5633 {
5634 clear();
5635 }
5636
5637 void clear()
5638 {
5639 entitlement.clear();
5640 key.clear();
5641 activationCode.clear();
5642 type = 0;
5643 expires = 0;
5644 expiresFormatted.clear();
5645 flags = 0;
5646 cargo.clear();
5647 cargoFlags = 0;
5648 deviceId.clear();
5649 status = ERR_NOT_INITIALIZED;
5650 manufacturerId.clear();
5651 }
5652 };
5653
5654 static void to_json(nlohmann::json& j, const LicenseDescriptor& p)
5655 {
5656 j = nlohmann::json{
5657 //TOJSON_IMPL(entitlement),
5658 {"entitlement", "*entitlement*"},
5659 TOJSON_IMPL(key),
5660 TOJSON_IMPL(activationCode),
5661 TOJSON_IMPL(type),
5662 TOJSON_IMPL(expires),
5663 TOJSON_IMPL(expiresFormatted),
5664 TOJSON_IMPL(flags),
5665 TOJSON_IMPL(deviceId),
5666 TOJSON_IMPL(status),
5667 //TOJSON_IMPL(manufacturerId),
5668 {"manufacturerId", "*manufacturerId*"},
5669 TOJSON_IMPL(cargo),
5670 TOJSON_IMPL(cargoFlags)
5671 };
5672 }
5673
5674 static void from_json(const nlohmann::json& j, LicenseDescriptor& p)
5675 {
5676 p.clear();
5677 FROMJSON_IMPL(entitlement, std::string, EMPTY_STRING);
5678 FROMJSON_IMPL(key, std::string, EMPTY_STRING);
5679 FROMJSON_IMPL(activationCode, std::string, EMPTY_STRING);
5680 FROMJSON_IMPL(type, int, 0);
5681 FROMJSON_IMPL(expires, time_t, 0);
5682 FROMJSON_IMPL(expiresFormatted, std::string, EMPTY_STRING);
5683 FROMJSON_IMPL(flags, uint32_t, 0);
5684 FROMJSON_IMPL(deviceId, std::string, EMPTY_STRING);
5685 FROMJSON_IMPL(status, int, LicenseDescriptor::ERR_NOT_INITIALIZED);
5686 FROMJSON_IMPL(manufacturerId, std::string, EMPTY_STRING);
5687 FROMJSON_IMPL(cargo, std::string, EMPTY_STRING);
5688 FROMJSON_IMPL(cargoFlags, uint8_t, 0);
5689 }
5690
5691
5692 //-----------------------------------------------------------
5693 JSON_SERIALIZED_CLASS(EngineNetworkingRpUdpStreaming)
5706 {
5707 IMPLEMENT_JSON_SERIALIZATION()
5708 IMPLEMENT_JSON_DOCUMENTATION(EngineNetworkingRpUdpStreaming)
5709
5710 public:
5713
5715 int port;
5716
5719
5722
5724 int ttl;
5725
5727 {
5728 clear();
5729 }
5730
5731 void clear()
5732 {
5733 enabled = false;
5734 port = 0;
5735 keepaliveIntervalSecs = 15;
5736 priority = TxPriority_t::priVoice;
5737 ttl = 64;
5738 }
5739
5740 virtual void initForDocumenting()
5741 {
5742 }
5743 };
5744
5745 static void to_json(nlohmann::json& j, const EngineNetworkingRpUdpStreaming& p)
5746 {
5747 j = nlohmann::json{
5748 TOJSON_IMPL(enabled),
5749 TOJSON_IMPL(port),
5750 TOJSON_IMPL(keepaliveIntervalSecs),
5751 TOJSON_IMPL(priority),
5752 TOJSON_IMPL(ttl)
5753 };
5754 }
5755 static void from_json(const nlohmann::json& j, EngineNetworkingRpUdpStreaming& p)
5756 {
5757 p.clear();
5758 getOptional<bool>("enabled", p.enabled, j, false);
5759 getOptional<int>("port", p.port, j, 0);
5760 getOptional<int>("keepaliveIntervalSecs", p.keepaliveIntervalSecs, j, 15);
5761 getOptional<TxPriority_t>("priority", p.priority, j, TxPriority_t::priVoice);
5762 getOptional<int>("ttl", p.ttl, j, 64);
5763 }
5764
5765 //-----------------------------------------------------------
5766 JSON_SERIALIZED_CLASS(EnginePolicyNetworking)
5776 {
5777 IMPLEMENT_JSON_SERIALIZATION()
5778 IMPLEMENT_JSON_DOCUMENTATION(EnginePolicyNetworking)
5779
5780 public:
5782 std::string defaultNic;
5783
5786
5789
5792
5795
5798
5801
5804
5806 {
5807 clear();
5808 }
5809
5810 void clear()
5811 {
5812 defaultNic.clear();
5813 multicastRejoinSecs = 8;
5814 rallypointRtTestIntervalMs = 60000;
5815 logRtpJitterBufferStats = false;
5816 preventMulticastFailover = false;
5817 addressResolutionPolicy = AddressResolutionPolicy_t::arpIpv6ThenIpv4;
5818
5819 rpUdpStreaming.clear();
5820 rtpProfile.clear();
5821 }
5822 };
5823
5824 static void to_json(nlohmann::json& j, const EnginePolicyNetworking& p)
5825 {
5826 j = nlohmann::json{
5827 TOJSON_IMPL(defaultNic),
5828 TOJSON_IMPL(multicastRejoinSecs),
5829
5830 TOJSON_IMPL(rallypointRtTestIntervalMs),
5831 TOJSON_IMPL(logRtpJitterBufferStats),
5832 TOJSON_IMPL(preventMulticastFailover),
5833
5834 TOJSON_IMPL(rpUdpStreaming),
5835 TOJSON_IMPL(rtpProfile),
5836 TOJSON_IMPL(addressResolutionPolicy)
5837 };
5838 }
5839 static void from_json(const nlohmann::json& j, EnginePolicyNetworking& p)
5840 {
5841 p.clear();
5842 FROMJSON_IMPL(defaultNic, std::string, EMPTY_STRING);
5843 FROMJSON_IMPL(multicastRejoinSecs, int, 8);
5844 FROMJSON_IMPL(rallypointRtTestIntervalMs, int, 60000);
5845 FROMJSON_IMPL(logRtpJitterBufferStats, bool, false);
5846 FROMJSON_IMPL(preventMulticastFailover, bool, false);
5847
5848 getOptional<EngineNetworkingRpUdpStreaming>("rpUdpStreaming", p.rpUdpStreaming, j);
5849 getOptional<RtpProfile>("rtpProfile", p.rtpProfile, j);
5850 getOptional<AddressResolutionPolicy_t>("addressResolutionPolicy", p.addressResolutionPolicy, j, AddressResolutionPolicy_t::arpIpv6ThenIpv4);
5851 }
5852
5853 //-----------------------------------------------------------
5854 JSON_SERIALIZED_CLASS(Aec)
5865 {
5866 IMPLEMENT_JSON_SERIALIZATION()
5867 IMPLEMENT_JSON_DOCUMENTATION(Aec)
5868
5869 public:
5875 typedef enum
5876 {
5878 aecmDefault = 0,
5879
5881 aecmLow = 1,
5882
5884 aecmMedium = 2,
5885
5887 aecmHigh = 3,
5888
5890 aecmVeryHigh = 4,
5891
5893 aecmHighest = 5
5894 } Mode_t;
5895
5898
5901
5904
5906 bool cng;
5907
5908 Aec()
5909 {
5910 clear();
5911 }
5912
5913 void clear()
5914 {
5915 enabled = false;
5916 mode = aecmDefault;
5917 speakerTailMs = 60;
5918 cng = true;
5919 }
5920 };
5921
5922 static void to_json(nlohmann::json& j, const Aec& p)
5923 {
5924 j = nlohmann::json{
5925 TOJSON_IMPL(enabled),
5926 TOJSON_IMPL(mode),
5927 TOJSON_IMPL(speakerTailMs),
5928 TOJSON_IMPL(cng)
5929 };
5930 }
5931 static void from_json(const nlohmann::json& j, Aec& p)
5932 {
5933 p.clear();
5934 FROMJSON_IMPL(enabled, bool, false);
5935 FROMJSON_IMPL(mode, Aec::Mode_t, Aec::Mode_t::aecmDefault);
5936 FROMJSON_IMPL(speakerTailMs, int, 60);
5937 FROMJSON_IMPL(cng, bool, true);
5938 }
5939
5940 //-----------------------------------------------------------
5941 JSON_SERIALIZED_CLASS(Vad)
5952 {
5953 IMPLEMENT_JSON_SERIALIZATION()
5954 IMPLEMENT_JSON_DOCUMENTATION(Vad)
5955
5956 public:
5962 typedef enum
5963 {
5965 vamDefault = 0,
5966
5968 vamLowBitRate = 1,
5969
5971 vamAggressive = 2,
5972
5974 vamVeryAggressive = 3
5975 } Mode_t;
5976
5979
5982
5983 Vad()
5984 {
5985 clear();
5986 }
5987
5988 void clear()
5989 {
5990 enabled = false;
5991 mode = vamDefault;
5992 }
5993 };
5994
5995 static void to_json(nlohmann::json& j, const Vad& p)
5996 {
5997 j = nlohmann::json{
5998 TOJSON_IMPL(enabled),
5999 TOJSON_IMPL(mode)
6000 };
6001 }
6002 static void from_json(const nlohmann::json& j, Vad& p)
6003 {
6004 p.clear();
6005 FROMJSON_IMPL(enabled, bool, false);
6006 FROMJSON_IMPL(mode, Vad::Mode_t, Vad::Mode_t::vamDefault);
6007 }
6008
6009 //-----------------------------------------------------------
6010 JSON_SERIALIZED_CLASS(Bridge)
6021 {
6022 IMPLEMENT_JSON_SERIALIZATION()
6023 IMPLEMENT_JSON_DOCUMENTATION(Bridge)
6024
6025 public:
6027 std::string id;
6028
6030 std::string name;
6031
6033 std::vector<std::string> groups;
6034
6039
6040 Bridge()
6041 {
6042 clear();
6043 }
6044
6045 void clear()
6046 {
6047 id.clear();
6048 name.clear();
6049 groups.clear();
6050 enabled = true;
6051 }
6052 };
6053
6054 static void to_json(nlohmann::json& j, const Bridge& p)
6055 {
6056 j = nlohmann::json{
6057 TOJSON_IMPL(id),
6058 TOJSON_IMPL(name),
6059 TOJSON_IMPL(groups),
6060 TOJSON_IMPL(enabled)
6061 };
6062 }
6063 static void from_json(const nlohmann::json& j, Bridge& p)
6064 {
6065 p.clear();
6066 FROMJSON_IMPL(id, std::string, EMPTY_STRING);
6067 FROMJSON_IMPL(name, std::string, EMPTY_STRING);
6068 getOptional<std::vector<std::string>>("groups", p.groups, j);
6069 FROMJSON_IMPL(enabled, bool, true);
6070 }
6071
6072 //-----------------------------------------------------------
6073 JSON_SERIALIZED_CLASS(AndroidAudio)
6084 {
6085 IMPLEMENT_JSON_SERIALIZATION()
6086 IMPLEMENT_JSON_DOCUMENTATION(AndroidAudio)
6087
6088 public:
6089 constexpr static int INVALID_SESSION_ID = -9999;
6090
6092 int api;
6093
6096
6099
6115
6123
6133
6136
6139
6140
6141 AndroidAudio()
6142 {
6143 clear();
6144 }
6145
6146 void clear()
6147 {
6148 api = 0;
6149 sharingMode = 0;
6150 performanceMode = 12;
6151 usage = 2;
6152 contentType = 1;
6153 inputPreset = 7;
6154 sessionId = AndroidAudio::INVALID_SESSION_ID;
6155 engineMode = 0;
6156 }
6157 };
6158
6159 static void to_json(nlohmann::json& j, const AndroidAudio& p)
6160 {
6161 j = nlohmann::json{
6162 TOJSON_IMPL(api),
6163 TOJSON_IMPL(sharingMode),
6164 TOJSON_IMPL(performanceMode),
6165 TOJSON_IMPL(usage),
6166 TOJSON_IMPL(contentType),
6167 TOJSON_IMPL(inputPreset),
6168 TOJSON_IMPL(sessionId),
6169 TOJSON_IMPL(engineMode)
6170 };
6171 }
6172 static void from_json(const nlohmann::json& j, AndroidAudio& p)
6173 {
6174 p.clear();
6175 FROMJSON_IMPL(api, int, 0);
6176 FROMJSON_IMPL(sharingMode, int, 0);
6177 FROMJSON_IMPL(performanceMode, int, 12);
6178 FROMJSON_IMPL(usage, int, 2);
6179 FROMJSON_IMPL(contentType, int, 1);
6180 FROMJSON_IMPL(inputPreset, int, 7);
6181 FROMJSON_IMPL(sessionId, int, AndroidAudio::INVALID_SESSION_ID);
6182 FROMJSON_IMPL(engineMode, int, 0);
6183 }
6184
6185 //-----------------------------------------------------------
6186 JSON_SERIALIZED_CLASS(EnginePolicyAudio)
6197 {
6198 IMPLEMENT_JSON_SERIALIZATION()
6199 IMPLEMENT_JSON_DOCUMENTATION(EnginePolicyAudio)
6200
6201 public:
6204
6207
6210
6213
6216
6219
6222
6225
6228
6231
6234
6237
6240
6243
6246
6247
6249 {
6250 clear();
6251 }
6252
6253 void clear()
6254 {
6255 enabled = true;
6256 hardwareEnabled = true;
6257 internalRate = 16000;
6258 internalChannels = 2;
6259 muteTxOnTx = false;
6260 aec.clear();
6261 vad.clear();
6262 android.clear();
6263 inputAgc.clear();
6264 outputAgc.clear();
6265 denoiseInput = false;
6266 denoiseOutput = false;
6267 saveInputPcm = false;
6268 saveOutputPcm = false;
6269 registry.clear();
6270 }
6271 };
6272
6273 static void to_json(nlohmann::json& j, const EnginePolicyAudio& p)
6274 {
6275 j = nlohmann::json{
6276 TOJSON_IMPL(enabled),
6277 TOJSON_IMPL(hardwareEnabled),
6278 TOJSON_IMPL(internalRate),
6279 TOJSON_IMPL(internalChannels),
6280 TOJSON_IMPL(muteTxOnTx),
6281 TOJSON_IMPL(aec),
6282 TOJSON_IMPL(vad),
6283 TOJSON_IMPL(android),
6284 TOJSON_IMPL(inputAgc),
6285 TOJSON_IMPL(outputAgc),
6286 TOJSON_IMPL(denoiseInput),
6287 TOJSON_IMPL(denoiseOutput),
6288 TOJSON_IMPL(saveInputPcm),
6289 TOJSON_IMPL(saveOutputPcm),
6290 TOJSON_IMPL(registry)
6291 };
6292 }
6293 static void from_json(const nlohmann::json& j, EnginePolicyAudio& p)
6294 {
6295 p.clear();
6296 getOptional<bool>("enabled", p.enabled, j, true);
6297 getOptional<bool>("hardwareEnabled", p.hardwareEnabled, j, true);
6298 FROMJSON_IMPL(internalRate, int, 16000);
6299 FROMJSON_IMPL(internalChannels, int, 2);
6300
6301 FROMJSON_IMPL(muteTxOnTx, bool, false);
6302 getOptional<Aec>("aec", p.aec, j);
6303 getOptional<Vad>("vad", p.vad, j);
6304 getOptional<AndroidAudio>("android", p.android, j);
6305 getOptional<Agc>("inputAgc", p.inputAgc, j);
6306 getOptional<Agc>("outputAgc", p.outputAgc, j);
6307 FROMJSON_IMPL(denoiseInput, bool, false);
6308 FROMJSON_IMPL(denoiseOutput, bool, false);
6309 FROMJSON_IMPL(saveInputPcm, bool, false);
6310 FROMJSON_IMPL(saveOutputPcm, bool, false);
6311 getOptional<AudioRegistry>("registry", p.registry, j);
6312 }
6313
6314 //-----------------------------------------------------------
6315 JSON_SERIALIZED_CLASS(SecurityCertificate)
6326 {
6327 IMPLEMENT_JSON_SERIALIZATION()
6328 IMPLEMENT_JSON_DOCUMENTATION(SecurityCertificate)
6329
6330 public:
6331
6337 std::string certificate;
6338
6340 std::string key;
6341
6343 {
6344 clear();
6345 }
6346
6347 void clear()
6348 {
6349 certificate.clear();
6350 key.clear();
6351 }
6352 };
6353
6354 static void to_json(nlohmann::json& j, const SecurityCertificate& p)
6355 {
6356 j = nlohmann::json{
6357 TOJSON_IMPL(certificate),
6358 TOJSON_IMPL(key)
6359 };
6360 }
6361 static void from_json(const nlohmann::json& j, SecurityCertificate& p)
6362 {
6363 p.clear();
6364 FROMJSON_IMPL(certificate, std::string, EMPTY_STRING);
6365 FROMJSON_IMPL(key, std::string, EMPTY_STRING);
6366 }
6367
6368 // This is where spell checking stops
6369 //-----------------------------------------------------------
6370 JSON_SERIALIZED_CLASS(EnginePolicySecurity)
6371
6372
6382 {
6383 IMPLEMENT_JSON_SERIALIZATION()
6384 IMPLEMENT_JSON_DOCUMENTATION(EnginePolicySecurity)
6385
6386 public:
6387
6399
6407 std::vector<std::string> caCertificates;
6408
6410 {
6411 clear();
6412 }
6413
6414 void clear()
6415 {
6416 certificate.clear();
6417 caCertificates.clear();
6418 }
6419 };
6420
6421 static void to_json(nlohmann::json& j, const EnginePolicySecurity& p)
6422 {
6423 j = nlohmann::json{
6424 TOJSON_IMPL(certificate),
6425 TOJSON_IMPL(caCertificates)
6426 };
6427 }
6428 static void from_json(const nlohmann::json& j, EnginePolicySecurity& p)
6429 {
6430 p.clear();
6431 getOptional("certificate", p.certificate, j);
6432 getOptional<std::vector<std::string>>("caCertificates", p.caCertificates, j);
6433 }
6434
6435 //-----------------------------------------------------------
6436 JSON_SERIALIZED_CLASS(EnginePolicyLogging)
6447 {
6448 IMPLEMENT_JSON_SERIALIZATION()
6449 IMPLEMENT_JSON_DOCUMENTATION(EnginePolicyLogging)
6450
6451 public:
6452
6469
6472
6474 {
6475 clear();
6476 }
6477
6478 void clear()
6479 {
6480 maxLevel = 4; // ILogger::Level::debug
6481 enableSyslog = false;
6482 }
6483 };
6484
6485 static void to_json(nlohmann::json& j, const EnginePolicyLogging& p)
6486 {
6487 j = nlohmann::json{
6488 TOJSON_IMPL(maxLevel),
6489 TOJSON_IMPL(enableSyslog)
6490 };
6491 }
6492 static void from_json(const nlohmann::json& j, EnginePolicyLogging& p)
6493 {
6494 p.clear();
6495 getOptional("maxLevel", p.maxLevel, j, 4); // ILogger::Level::debug
6496 getOptional("enableSyslog", p.enableSyslog, j);
6497 }
6498
6499
6500 //-----------------------------------------------------------
6501 JSON_SERIALIZED_CLASS(EnginePolicyDatabase)
6503 {
6504 IMPLEMENT_JSON_SERIALIZATION()
6505 IMPLEMENT_JSON_DOCUMENTATION(EnginePolicyDatabase)
6506
6507 public:
6508 typedef enum
6509 {
6510 dbtFixedMemory = 0,
6511 dbtPagedMemory = 1,
6512 dbtFixedFile = 2
6513 } DatabaseType_t;
6514
6515 DatabaseType_t type;
6516 std::string fixedFileName;
6517 bool forceMaintenance;
6518 bool reclaimSpace;
6519
6521 {
6522 clear();
6523 }
6524
6525 void clear()
6526 {
6527 type = DatabaseType_t::dbtFixedMemory;
6528 fixedFileName.clear();
6529 forceMaintenance = false;
6530 reclaimSpace = false;
6531 }
6532 };
6533
6534 static void to_json(nlohmann::json& j, const EnginePolicyDatabase& p)
6535 {
6536 j = nlohmann::json{
6537 TOJSON_IMPL(type),
6538 TOJSON_IMPL(fixedFileName),
6539 TOJSON_IMPL(forceMaintenance),
6540 TOJSON_IMPL(reclaimSpace)
6541 };
6542 }
6543 static void from_json(const nlohmann::json& j, EnginePolicyDatabase& p)
6544 {
6545 p.clear();
6546 FROMJSON_IMPL(type, EnginePolicyDatabase::DatabaseType_t, EnginePolicyDatabase::DatabaseType_t::dbtFixedMemory);
6547 FROMJSON_IMPL(fixedFileName, std::string, EMPTY_STRING);
6548 FROMJSON_IMPL(forceMaintenance, bool, false);
6549 FROMJSON_IMPL(reclaimSpace, bool, false);
6550 }
6551
6552
6553 //-----------------------------------------------------------
6554 JSON_SERIALIZED_CLASS(SecureSignature)
6563 {
6564 IMPLEMENT_JSON_SERIALIZATION()
6565 IMPLEMENT_JSON_DOCUMENTATION(SecureSignature)
6566
6567 public:
6568
6570 std::string certificate;
6571
6572 // /** @brief Contains the PEM-formatted text of the certificate's public key */
6573 //std::string publicKey;
6574
6576 std::string signature;
6577
6579 {
6580 clear();
6581 }
6582
6583 void clear()
6584 {
6585 certificate.clear();
6586 //publicKey.clear();
6587 signature.clear();
6588 }
6589 };
6590
6591 static void to_json(nlohmann::json& j, const SecureSignature& p)
6592 {
6593 j = nlohmann::json{
6594 TOJSON_IMPL(certificate),
6595 //TOJSON_IMPL(publicKey),
6596 TOJSON_IMPL(signature)
6597 };
6598 }
6599 static void from_json(const nlohmann::json& j, SecureSignature& p)
6600 {
6601 p.clear();
6602 FROMJSON_IMPL(certificate, std::string, EMPTY_STRING);
6603 //FROMJSON_IMPL(publicKey, std::string, EMPTY_STRING);
6604 FROMJSON_IMPL(signature, std::string, EMPTY_STRING);
6605 }
6606
6607 //-----------------------------------------------------------
6608 JSON_SERIALIZED_CLASS(NamedAudioDevice)
6610 {
6611 IMPLEMENT_JSON_SERIALIZATION()
6612 IMPLEMENT_JSON_DOCUMENTATION(NamedAudioDevice)
6613
6614 public:
6615 std::string name;
6616 std::string manufacturer;
6617 std::string model;
6618 std::string id;
6619 std::string serialNumber;
6620 std::string type;
6621 std::string extra;
6622 bool isDefault;
6623
6625 {
6626 clear();
6627 }
6628
6629 void clear()
6630 {
6631 name.clear();
6632 manufacturer.clear();
6633 model.clear();
6634 id.clear();
6635 serialNumber.clear();
6636 type.clear();
6637 extra.clear();
6638 isDefault = false;
6639 }
6640 };
6641
6642 static void to_json(nlohmann::json& j, const NamedAudioDevice& p)
6643 {
6644 j = nlohmann::json{
6645 TOJSON_IMPL(name),
6646 TOJSON_IMPL(manufacturer),
6647 TOJSON_IMPL(model),
6648 TOJSON_IMPL(id),
6649 TOJSON_IMPL(serialNumber),
6650 TOJSON_IMPL(type),
6651 TOJSON_IMPL(extra),
6652 TOJSON_IMPL(isDefault),
6653 };
6654 }
6655 static void from_json(const nlohmann::json& j, NamedAudioDevice& p)
6656 {
6657 p.clear();
6658 getOptional<std::string>("name", p.name, j, EMPTY_STRING);
6659 getOptional<std::string>("manufacturer", p.manufacturer, j, EMPTY_STRING);
6660 getOptional<std::string>("model", p.model, j, EMPTY_STRING);
6661 getOptional<std::string>("id", p.id, j, EMPTY_STRING);
6662 getOptional<std::string>("serialNumber", p.serialNumber, j, EMPTY_STRING);
6663 getOptional<std::string>("type", p.type, j, EMPTY_STRING);
6664 getOptional<std::string>("extra", p.extra, j, EMPTY_STRING);
6665 getOptional<bool>("isDefault", p.isDefault, j, false);
6666 }
6667
6668
6669 //-----------------------------------------------------------
6670 JSON_SERIALIZED_CLASS(EnginePolicyNamedAudioDevices)
6672 {
6673 IMPLEMENT_JSON_SERIALIZATION()
6674 IMPLEMENT_JSON_DOCUMENTATION(EnginePolicyNamedAudioDevices)
6675
6676 public:
6677 std::vector<NamedAudioDevice> inputs;
6678 std::vector<NamedAudioDevice> outputs;
6679
6681 {
6682 clear();
6683 }
6684
6685 void clear()
6686 {
6687 inputs.clear();
6688 outputs.clear();
6689 }
6690 };
6691
6692 static void to_json(nlohmann::json& j, const EnginePolicyNamedAudioDevices& p)
6693 {
6694 j = nlohmann::json{
6695 TOJSON_IMPL(inputs),
6696 TOJSON_IMPL(outputs)
6697 };
6698 }
6699 static void from_json(const nlohmann::json& j, EnginePolicyNamedAudioDevices& p)
6700 {
6701 p.clear();
6702 getOptional<std::vector<NamedAudioDevice>>("inputs", p.inputs, j);
6703 getOptional<std::vector<NamedAudioDevice>>("outputs", p.outputs, j);
6704 }
6705
6706 //-----------------------------------------------------------
6707 JSON_SERIALIZED_CLASS(Licensing)
6720 {
6721 IMPLEMENT_JSON_SERIALIZATION()
6722 IMPLEMENT_JSON_DOCUMENTATION(Licensing)
6723
6724 public:
6725
6727 std::string entitlement;
6728
6730 std::string key;
6731
6733 std::string activationCode;
6734
6736 std::string deviceId;
6737
6739 std::string manufacturerId;
6740
6741 Licensing()
6742 {
6743 clear();
6744 }
6745
6746 void clear()
6747 {
6748 entitlement.clear();
6749 key.clear();
6750 activationCode.clear();
6751 deviceId.clear();
6752 manufacturerId.clear();
6753 }
6754 };
6755
6756 static void to_json(nlohmann::json& j, const Licensing& p)
6757 {
6758 j = nlohmann::json{
6759 TOJSON_IMPL(entitlement),
6760 TOJSON_IMPL(key),
6761 TOJSON_IMPL(activationCode),
6762 TOJSON_IMPL(deviceId),
6763 TOJSON_IMPL(manufacturerId)
6764 };
6765 }
6766 static void from_json(const nlohmann::json& j, Licensing& p)
6767 {
6768 p.clear();
6769 FROMJSON_IMPL(entitlement, std::string, EMPTY_STRING);
6770 FROMJSON_IMPL(key, std::string, EMPTY_STRING);
6771 FROMJSON_IMPL(activationCode, std::string, EMPTY_STRING);
6772 FROMJSON_IMPL(deviceId, std::string, EMPTY_STRING);
6773 FROMJSON_IMPL(manufacturerId, std::string, EMPTY_STRING);
6774 }
6775
6776 //-----------------------------------------------------------
6777 JSON_SERIALIZED_CLASS(DiscoveryMagellan)
6788 {
6789 IMPLEMENT_JSON_SERIALIZATION()
6790 IMPLEMENT_JSON_DOCUMENTATION(DiscoveryMagellan)
6791
6792 public:
6793
6796
6798 std::string interfaceName;
6799
6802
6805
6807 {
6808 clear();
6809 }
6810
6811 void clear()
6812 {
6813 enabled = false;
6814 interfaceName.clear();
6815 security.clear();
6816 tls.clear();
6817 }
6818 };
6819
6820 static void to_json(nlohmann::json& j, const DiscoveryMagellan& p)
6821 {
6822 j = nlohmann::json{
6823 TOJSON_IMPL(enabled),
6824 TOJSON_IMPL(interfaceName),
6825 TOJSON_IMPL(security),
6826 TOJSON_IMPL(tls)
6827 };
6828 }
6829 static void from_json(const nlohmann::json& j, DiscoveryMagellan& p)
6830 {
6831 p.clear();
6832 getOptional("enabled", p.enabled, j, false);
6833 getOptional<Tls>("tls", p.tls, j);
6834 getOptional<SecurityCertificate>("security", p.security, j);
6835 FROMJSON_IMPL(interfaceName, std::string, EMPTY_STRING);
6836 }
6837
6838 //-----------------------------------------------------------
6839 JSON_SERIALIZED_CLASS(DiscoverySsdp)
6850 {
6851 IMPLEMENT_JSON_SERIALIZATION()
6852 IMPLEMENT_JSON_DOCUMENTATION(DiscoverySsdp)
6853
6854 public:
6855
6858
6860 std::string interfaceName;
6861
6864
6866 std::vector<std::string> searchTerms;
6867
6870
6873
6875 {
6876 clear();
6877 }
6878
6879 void clear()
6880 {
6881 enabled = false;
6882 interfaceName.clear();
6883 address.clear();
6884 searchTerms.clear();
6885 ageTimeoutMs = 30000;
6886 advertising.clear();
6887 }
6888 };
6889
6890 static void to_json(nlohmann::json& j, const DiscoverySsdp& p)
6891 {
6892 j = nlohmann::json{
6893 TOJSON_IMPL(enabled),
6894 TOJSON_IMPL(interfaceName),
6895 TOJSON_IMPL(address),
6896 TOJSON_IMPL(searchTerms),
6897 TOJSON_IMPL(ageTimeoutMs),
6898 TOJSON_IMPL(advertising)
6899 };
6900 }
6901 static void from_json(const nlohmann::json& j, DiscoverySsdp& p)
6902 {
6903 p.clear();
6904 getOptional("enabled", p.enabled, j, false);
6905 getOptional<std::string>("interfaceName", p.interfaceName, j);
6906
6907 getOptional<NetworkAddress>("address", p.address, j);
6908 if(p.address.address.empty())
6909 {
6910 p.address.address = "255.255.255.255";
6911 }
6912 if(p.address.port <= 0)
6913 {
6914 p.address.port = 1900;
6915 }
6916
6917 getOptional<std::vector<std::string>>("searchTerms", p.searchTerms, j);
6918 getOptional<int>("ageTimeoutMs", p.ageTimeoutMs, j, 30000);
6919 getOptional<Advertising>("advertising", p.advertising, j);
6920 }
6921
6922 //-----------------------------------------------------------
6923 JSON_SERIALIZED_CLASS(DiscoverySap)
6934 {
6935 IMPLEMENT_JSON_SERIALIZATION()
6936 IMPLEMENT_JSON_DOCUMENTATION(DiscoverySap)
6937
6938 public:
6941
6943 std::string interfaceName;
6944
6947
6950
6953
6954 DiscoverySap()
6955 {
6956 clear();
6957 }
6958
6959 void clear()
6960 {
6961 enabled = false;
6962 interfaceName.clear();
6963 address.clear();
6964 ageTimeoutMs = 30000;
6965 advertising.clear();
6966 }
6967 };
6968
6969 static void to_json(nlohmann::json& j, const DiscoverySap& p)
6970 {
6971 j = nlohmann::json{
6972 TOJSON_IMPL(enabled),
6973 TOJSON_IMPL(interfaceName),
6974 TOJSON_IMPL(address),
6975 TOJSON_IMPL(ageTimeoutMs),
6976 TOJSON_IMPL(advertising)
6977 };
6978 }
6979 static void from_json(const nlohmann::json& j, DiscoverySap& p)
6980 {
6981 p.clear();
6982 getOptional("enabled", p.enabled, j, false);
6983 getOptional<std::string>("interfaceName", p.interfaceName, j);
6984 getOptional<NetworkAddress>("address", p.address, j);
6985 if(p.address.address.empty())
6986 {
6987 p.address.address = "224.2.127.254";
6988 }
6989 if(p.address.port <= 0)
6990 {
6991 p.address.port = 9875;
6992 }
6993
6994 getOptional<int>("ageTimeoutMs", p.ageTimeoutMs, j, 30000);
6995 getOptional<Advertising>("advertising", p.advertising, j);
6996 }
6997
6998 //-----------------------------------------------------------
6999 JSON_SERIALIZED_CLASS(DiscoveryCistech)
7012 {
7013 IMPLEMENT_JSON_SERIALIZATION()
7014 IMPLEMENT_JSON_DOCUMENTATION(DiscoveryCistech)
7015
7016 public:
7017 bool enabled;
7018 std::string interfaceName;
7019 NetworkAddress address;
7020 int ageTimeoutMs;
7021
7023 {
7024 clear();
7025 }
7026
7027 void clear()
7028 {
7029 enabled = false;
7030 interfaceName.clear();
7031 address.clear();
7032 ageTimeoutMs = 30000;
7033 }
7034 };
7035
7036 static void to_json(nlohmann::json& j, const DiscoveryCistech& p)
7037 {
7038 j = nlohmann::json{
7039 TOJSON_IMPL(enabled),
7040 TOJSON_IMPL(interfaceName),
7041 TOJSON_IMPL(address),
7042 TOJSON_IMPL(ageTimeoutMs)
7043 };
7044 }
7045 static void from_json(const nlohmann::json& j, DiscoveryCistech& p)
7046 {
7047 p.clear();
7048 getOptional("enabled", p.enabled, j, false);
7049 getOptional<std::string>("interfaceName", p.interfaceName, j);
7050 getOptional<NetworkAddress>("address", p.address, j);
7051 getOptional<int>("ageTimeoutMs", p.ageTimeoutMs, j, 30000);
7052 }
7053
7054
7055 //-----------------------------------------------------------
7056 JSON_SERIALIZED_CLASS(DiscoveryTrellisware)
7067 {
7068 IMPLEMENT_JSON_SERIALIZATION()
7069 IMPLEMENT_JSON_DOCUMENTATION(DiscoveryTrellisware)
7070
7071 public:
7072
7075
7078
7080 {
7081 clear();
7082 }
7083
7084 void clear()
7085 {
7086 enabled = false;
7087 security.clear();
7088 }
7089 };
7090
7091 static void to_json(nlohmann::json& j, const DiscoveryTrellisware& p)
7092 {
7093 j = nlohmann::json{
7094 TOJSON_IMPL(enabled),
7095 TOJSON_IMPL(security)
7096 };
7097 }
7098 static void from_json(const nlohmann::json& j, DiscoveryTrellisware& p)
7099 {
7100 p.clear();
7101 getOptional("enabled", p.enabled, j, false);
7102 getOptional<SecurityCertificate>("security", p.security, j);
7103 }
7104
7105 //-----------------------------------------------------------
7106 JSON_SERIALIZED_CLASS(DiscoveryConfiguration)
7117 {
7118 IMPLEMENT_JSON_SERIALIZATION()
7119 IMPLEMENT_JSON_DOCUMENTATION(DiscoveryConfiguration)
7120
7121 public:
7124
7127
7130
7133
7136
7138 {
7139 clear();
7140 }
7141
7142 void clear()
7143 {
7144 magellan.clear();
7145 ssdp.clear();
7146 sap.clear();
7147 cistech.clear();
7148 }
7149 };
7150
7151 static void to_json(nlohmann::json& j, const DiscoveryConfiguration& p)
7152 {
7153 j = nlohmann::json{
7154 TOJSON_IMPL(magellan),
7155 TOJSON_IMPL(ssdp),
7156 TOJSON_IMPL(sap),
7157 TOJSON_IMPL(cistech),
7158 TOJSON_IMPL(trellisware)
7159 };
7160 }
7161 static void from_json(const nlohmann::json& j, DiscoveryConfiguration& p)
7162 {
7163 p.clear();
7164 getOptional<DiscoveryMagellan>("magellan", p.magellan, j);
7165 getOptional<DiscoverySsdp>("ssdp", p.ssdp, j);
7166 getOptional<DiscoverySap>("sap", p.sap, j);
7167 getOptional<DiscoveryCistech>("cistech", p.cistech, j);
7168 getOptional<DiscoveryTrellisware>("trellisware", p.trellisware, j);
7169 }
7170
7171
7172 //-----------------------------------------------------------
7173 JSON_SERIALIZED_CLASS(EnginePolicyInternals)
7186 {
7187 IMPLEMENT_JSON_SERIALIZATION()
7188 IMPLEMENT_JSON_DOCUMENTATION(EnginePolicyInternals)
7189
7190 public:
7193
7196
7199
7200 int maxRxSecs;
7201
7202 int logTaskQueueStatsIntervalMs;
7203
7204 bool enableLazySpeakerClosure;
7205
7208
7211
7214
7217
7220
7223
7226
7229
7232
7234 {
7235 clear();
7236 }
7237
7238 void clear()
7239 {
7240 watchdog.clear();
7241 housekeeperIntervalMs = 1000;
7242 logTaskQueueStatsIntervalMs = 0;
7243 maxTxSecs = 30;
7244 maxRxSecs = 0;
7245 enableLazySpeakerClosure = false;
7246 rpClusterStrategy = RallypointCluster::ConnectionStrategy_t::csRoundRobin;
7247 rpClusterRolloverSecs = 10;
7248 rtpExpirationCheckIntervalMs = 250;
7249 rpConnectionTimeoutSecs = 0;
7250 rpTransactionTimeoutMs = 0;
7251 stickyTidHangSecs = 10;
7252 uriStreamingIntervalMs = 60;
7253 delayedMicrophoneClosureSecs = 15;
7254 tuning.clear();
7255 }
7256 };
7257
7258 static void to_json(nlohmann::json& j, const EnginePolicyInternals& p)
7259 {
7260 j = nlohmann::json{
7261 TOJSON_IMPL(watchdog),
7262 TOJSON_IMPL(housekeeperIntervalMs),
7263 TOJSON_IMPL(logTaskQueueStatsIntervalMs),
7264 TOJSON_IMPL(maxTxSecs),
7265 TOJSON_IMPL(maxRxSecs),
7266 TOJSON_IMPL(enableLazySpeakerClosure),
7267 TOJSON_IMPL(rpClusterStrategy),
7268 TOJSON_IMPL(rpClusterRolloverSecs),
7269 TOJSON_IMPL(rtpExpirationCheckIntervalMs),
7270 TOJSON_IMPL(rpConnectionTimeoutSecs),
7271 TOJSON_IMPL(rpTransactionTimeoutMs),
7272 TOJSON_IMPL(stickyTidHangSecs),
7273 TOJSON_IMPL(uriStreamingIntervalMs),
7274 TOJSON_IMPL(delayedMicrophoneClosureSecs),
7275 TOJSON_IMPL(tuning)
7276 };
7277 }
7278 static void from_json(const nlohmann::json& j, EnginePolicyInternals& p)
7279 {
7280 p.clear();
7281 getOptional<WatchdogSettings>("watchdog", p.watchdog, j);
7282 getOptional<int>("housekeeperIntervalMs", p.housekeeperIntervalMs, j, 1000);
7283 getOptional<int>("logTaskQueueStatsIntervalMs", p.logTaskQueueStatsIntervalMs, j, 0);
7284 getOptional<int>("maxTxSecs", p.maxTxSecs, j, 30);
7285 getOptional<int>("maxRxSecs", p.maxRxSecs, j, 0);
7286 getOptional<bool>("enableLazySpeakerClosure", p.enableLazySpeakerClosure, j, false);
7287 getOptional<RallypointCluster::ConnectionStrategy_t>("rpClusterStrategy", p.rpClusterStrategy, j, RallypointCluster::ConnectionStrategy_t::csRoundRobin);
7288 getOptional<int>("rpClusterRolloverSecs", p.rpClusterRolloverSecs, j, 10);
7289 getOptional<int>("rtpExpirationCheckIntervalMs", p.rtpExpirationCheckIntervalMs, j, 250);
7290 getOptional<int>("rpConnectionTimeoutSecs", p.rpConnectionTimeoutSecs, j, 0);
7291 getOptional<int>("rpTransactionTimeoutMs", p.rpTransactionTimeoutMs, j, 0);
7292 getOptional<int>("stickyTidHangSecs", p.stickyTidHangSecs, j, 10);
7293 getOptional<int>("uriStreamingIntervalMs", p.uriStreamingIntervalMs, j, 60);
7294 getOptional<int>("delayedMicrophoneClosureSecs", p.delayedMicrophoneClosureSecs, j, 15);
7295 getOptional<TuningSettings>("tuning", p.tuning, j);
7296 }
7297
7298 //-----------------------------------------------------------
7299 JSON_SERIALIZED_CLASS(EnginePolicyTimelines)
7312 {
7313 IMPLEMENT_JSON_SERIALIZATION()
7314 IMPLEMENT_JSON_DOCUMENTATION(EnginePolicyTimelines)
7315
7316 public:
7317
7324
7326 std::string storageRoot;
7327
7330
7333
7336
7339
7342
7345
7348
7357
7360
7363
7366
7368 {
7369 clear();
7370 }
7371
7372 void clear()
7373 {
7374 enabled = true;
7375 storageRoot.clear();
7376 maxStorageMb = 1024; // 1 Gigabyte
7377 maxMemMb = maxStorageMb;
7378 maxAudioEventMemMb = maxMemMb;
7379 maxDiskMb = maxStorageMb;
7380 maxEventAgeSecs = (86400 * 30); // 30 days
7381 groomingIntervalSecs = (60 * 30); // 30 minutes
7382 maxEvents = 1000;
7383 autosaveIntervalSecs = 5;
7384 security.clear();
7385 disableSigningAndVerification = false;
7386 ephemeral = false;
7387 }
7388 };
7389
7390 static void to_json(nlohmann::json& j, const EnginePolicyTimelines& p)
7391 {
7392 j = nlohmann::json{
7393 TOJSON_IMPL(enabled),
7394 TOJSON_IMPL(storageRoot),
7395 TOJSON_IMPL(maxMemMb),
7396 TOJSON_IMPL(maxAudioEventMemMb),
7397 TOJSON_IMPL(maxDiskMb),
7398 TOJSON_IMPL(maxEventAgeSecs),
7399 TOJSON_IMPL(maxEvents),
7400 TOJSON_IMPL(groomingIntervalSecs),
7401 TOJSON_IMPL(autosaveIntervalSecs),
7402 TOJSON_IMPL(security),
7403 TOJSON_IMPL(disableSigningAndVerification),
7404 TOJSON_IMPL(ephemeral)
7405 };
7406 }
7407 static void from_json(const nlohmann::json& j, EnginePolicyTimelines& p)
7408 {
7409 p.clear();
7410 getOptional<bool>("enabled", p.enabled, j, true);
7411 getOptional<std::string>("storageRoot", p.storageRoot, j, EMPTY_STRING);
7412
7413 getOptional<int>("maxStorageMb", p.maxStorageMb, j, 1024);
7414 getOptional<int>("maxMemMb", p.maxMemMb, j, p.maxStorageMb);
7415 getOptional<int>("maxAudioEventMemMb", p.maxAudioEventMemMb, j, p.maxMemMb);
7416 getOptional<int>("maxDiskMb", p.maxDiskMb, j, p.maxStorageMb);
7417 getOptional<long>("maxEventAgeSecs", p.maxEventAgeSecs, j, (86400 * 30));
7418 getOptional<long>("groomingIntervalSecs", p.groomingIntervalSecs, j, (60 * 30));
7419 getOptional<long>("autosaveIntervalSecs", p.autosaveIntervalSecs, j, 5);
7420 getOptional<int>("maxEvents", p.maxEvents, j, 1000);
7421 getOptional<SecurityCertificate>("security", p.security, j);
7422 getOptional<bool>("disableSigningAndVerification", p.disableSigningAndVerification, j, false);
7423 getOptional<bool>("ephemeral", p.ephemeral, j, false);
7424 }
7425
7426
7427 //-----------------------------------------------------------
7428 JSON_SERIALIZED_CLASS(RtpMapEntry)
7439 {
7440 IMPLEMENT_JSON_SERIALIZATION()
7441 IMPLEMENT_JSON_DOCUMENTATION(RtpMapEntry)
7442
7443 public:
7445 std::string name;
7446
7449
7452
7453 RtpMapEntry()
7454 {
7455 clear();
7456 }
7457
7458 void clear()
7459 {
7460 name.clear();
7461 engageType = -1;
7462 rtpPayloadType = -1;
7463 }
7464 };
7465
7466 static void to_json(nlohmann::json& j, const RtpMapEntry& p)
7467 {
7468 j = nlohmann::json{
7469 TOJSON_IMPL(name),
7470 TOJSON_IMPL(engageType),
7471 TOJSON_IMPL(rtpPayloadType)
7472 };
7473 }
7474 static void from_json(const nlohmann::json& j, RtpMapEntry& p)
7475 {
7476 p.clear();
7477 getOptional<std::string>("name", p.name, j, EMPTY_STRING);
7478 getOptional<int>("engageType", p.engageType, j, -1);
7479 getOptional<int>("rtpPayloadType", p.rtpPayloadType, j, -1);
7480 }
7481
7482 //-----------------------------------------------------------
7483 JSON_SERIALIZED_CLASS(ExternalModule)
7494 {
7495 IMPLEMENT_JSON_SERIALIZATION()
7496 IMPLEMENT_JSON_DOCUMENTATION(ExternalModule)
7497
7498 public:
7500 std::string name;
7501
7503 std::string file;
7504
7506 nlohmann::json configuration;
7507
7509 {
7510 clear();
7511 }
7512
7513 void clear()
7514 {
7515 name.clear();
7516 file.clear();
7517 configuration.clear();
7518 }
7519 };
7520
7521 static void to_json(nlohmann::json& j, const ExternalModule& p)
7522 {
7523 j = nlohmann::json{
7524 TOJSON_IMPL(name),
7525 TOJSON_IMPL(file)
7526 };
7527
7528 if(!p.configuration.empty())
7529 {
7530 j["configuration"] = p.configuration;
7531 }
7532 }
7533 static void from_json(const nlohmann::json& j, ExternalModule& p)
7534 {
7535 p.clear();
7536 getOptional<std::string>("name", p.name, j, EMPTY_STRING);
7537 getOptional<std::string>("file", p.file, j, EMPTY_STRING);
7538
7539 try
7540 {
7541 p.configuration = j.at("configuration");
7542 }
7543 catch(...)
7544 {
7545 p.configuration.clear();
7546 }
7547 }
7548
7549
7550 //-----------------------------------------------------------
7551 JSON_SERIALIZED_CLASS(ExternalCodecDescriptor)
7562 {
7563 IMPLEMENT_JSON_SERIALIZATION()
7564 IMPLEMENT_JSON_DOCUMENTATION(ExternalCodecDescriptor)
7565
7566 public:
7569
7572
7575
7578
7580 {
7581 clear();
7582 }
7583
7584 void clear()
7585 {
7586 rtpPayloadType = -1;
7587 samplingRate = -1;
7588 channels = -1;
7589 rtpTsMultiplier = 0;
7590 }
7591 };
7592
7593 static void to_json(nlohmann::json& j, const ExternalCodecDescriptor& p)
7594 {
7595 j = nlohmann::json{
7596 TOJSON_IMPL(rtpPayloadType),
7597 TOJSON_IMPL(samplingRate),
7598 TOJSON_IMPL(channels),
7599 TOJSON_IMPL(rtpTsMultiplier)
7600 };
7601 }
7602 static void from_json(const nlohmann::json& j, ExternalCodecDescriptor& p)
7603 {
7604 p.clear();
7605
7606 getOptional<int>("rtpPayloadType", p.rtpPayloadType, j, -1);
7607 getOptional<int>("samplingRate", p.samplingRate, j, -1);
7608 getOptional<int>("channels", p.channels, j, -1);
7609 getOptional<int>("rtpTsMultiplier", p.rtpTsMultiplier, j, -1);
7610 }
7611
7612 //-----------------------------------------------------------
7613 JSON_SERIALIZED_CLASS(EngineStatusReportConfiguration)
7624 {
7625 IMPLEMENT_JSON_SERIALIZATION()
7626 IMPLEMENT_JSON_DOCUMENTATION(EngineStatusReportConfiguration)
7627
7628 public:
7630 std::string fileName;
7631
7634
7637
7639 std::string runCmd;
7640
7643
7646
7648 {
7649 clear();
7650 }
7651
7652 void clear()
7653 {
7654 fileName.clear();
7655 intervalSecs = 60;
7656 enabled = false;
7657 includeMemoryDetail = false;
7658 includeTaskQueueDetail = false;
7659 runCmd.clear();
7660 }
7661 };
7662
7663 static void to_json(nlohmann::json& j, const EngineStatusReportConfiguration& p)
7664 {
7665 j = nlohmann::json{
7666 TOJSON_IMPL(fileName),
7667 TOJSON_IMPL(intervalSecs),
7668 TOJSON_IMPL(enabled),
7669 TOJSON_IMPL(includeMemoryDetail),
7670 TOJSON_IMPL(includeTaskQueueDetail),
7671 TOJSON_IMPL(runCmd)
7672 };
7673 }
7674 static void from_json(const nlohmann::json& j, EngineStatusReportConfiguration& p)
7675 {
7676 p.clear();
7677 getOptional<std::string>("fileName", p.fileName, j);
7678 getOptional<int>("intervalSecs", p.intervalSecs, j, 60);
7679 getOptional<bool>("enabled", p.enabled, j, false);
7680 getOptional<std::string>("runCmd", p.runCmd, j);
7681 getOptional<bool>("includeMemoryDetail", p.includeMemoryDetail, j, false);
7682 getOptional<bool>("includeTaskQueueDetail", p.includeTaskQueueDetail, j, false);
7683 }
7684
7685 //-----------------------------------------------------------
7686 JSON_SERIALIZED_CLASS(EnginePolicy)
7699 {
7700 IMPLEMENT_JSON_SERIALIZATION()
7701 IMPLEMENT_JSON_DOCUMENTATION(EnginePolicy)
7702
7703 public:
7704
7706 std::string dataDirectory;
7707
7710
7713
7716
7719
7722
7725
7728
7731
7734
7737
7740
7742 std::vector<ExternalModule> externalCodecs;
7743
7745 std::vector<RtpMapEntry> rtpMap;
7746
7749
7750 EnginePolicy()
7751 {
7752 clear();
7753 }
7754
7755 void clear()
7756 {
7757 dataDirectory.clear();
7758 licensing.clear();
7759 security.clear();
7760 networking.clear();
7761 audio.clear();
7762 discovery.clear();
7763 logging.clear();
7764 internals.clear();
7765 timelines.clear();
7766 database.clear();
7767 featureset.clear();
7768 namedAudioDevices.clear();
7769 externalCodecs.clear();
7770 rtpMap.clear();
7771 statusReport.clear();
7772 }
7773 };
7774
7775 static void to_json(nlohmann::json& j, const EnginePolicy& p)
7776 {
7777 j = nlohmann::json{
7778 TOJSON_IMPL(dataDirectory),
7779 TOJSON_IMPL(licensing),
7780 TOJSON_IMPL(security),
7781 TOJSON_IMPL(networking),
7782 TOJSON_IMPL(audio),
7783 TOJSON_IMPL(discovery),
7784 TOJSON_IMPL(logging),
7785 TOJSON_IMPL(internals),
7786 TOJSON_IMPL(timelines),
7787 TOJSON_IMPL(database),
7788 TOJSON_IMPL(featureset),
7789 TOJSON_IMPL(namedAudioDevices),
7790 TOJSON_IMPL(externalCodecs),
7791 TOJSON_IMPL(rtpMap),
7792 TOJSON_IMPL(statusReport)
7793 };
7794 }
7795 static void from_json(const nlohmann::json& j, EnginePolicy& p)
7796 {
7797 p.clear();
7798 FROMJSON_IMPL_SIMPLE(dataDirectory);
7799 FROMJSON_IMPL_SIMPLE(licensing);
7800 FROMJSON_IMPL_SIMPLE(security);
7801 FROMJSON_IMPL_SIMPLE(networking);
7802 FROMJSON_IMPL_SIMPLE(audio);
7803 FROMJSON_IMPL_SIMPLE(discovery);
7804 FROMJSON_IMPL_SIMPLE(logging);
7805 FROMJSON_IMPL_SIMPLE(internals);
7806 FROMJSON_IMPL_SIMPLE(timelines);
7807 FROMJSON_IMPL_SIMPLE(database);
7808 FROMJSON_IMPL_SIMPLE(featureset);
7809 FROMJSON_IMPL_SIMPLE(namedAudioDevices);
7810 FROMJSON_IMPL_SIMPLE(externalCodecs);
7811 FROMJSON_IMPL_SIMPLE(rtpMap);
7812 FROMJSON_IMPL_SIMPLE(statusReport);
7813 }
7814
7815
7816 //-----------------------------------------------------------
7817 JSON_SERIALIZED_CLASS(TalkgroupAsset)
7828 {
7829 IMPLEMENT_JSON_SERIALIZATION()
7830 IMPLEMENT_JSON_DOCUMENTATION(TalkgroupAsset)
7831
7832 public:
7833
7835 std::string nodeId;
7836
7839
7841 {
7842 clear();
7843 }
7844
7845 void clear()
7846 {
7847 nodeId.clear();
7848 group.clear();
7849 }
7850 };
7851
7852 static void to_json(nlohmann::json& j, const TalkgroupAsset& p)
7853 {
7854 j = nlohmann::json{
7855 TOJSON_IMPL(nodeId),
7856 TOJSON_IMPL(group)
7857 };
7858 }
7859 static void from_json(const nlohmann::json& j, TalkgroupAsset& p)
7860 {
7861 p.clear();
7862 getOptional<std::string>("nodeId", p.nodeId, j);
7863 getOptional<Group>("group", p.group, j);
7864 }
7865
7866 //-----------------------------------------------------------
7867 JSON_SERIALIZED_CLASS(EngageDiscoveredGroup)
7876 {
7877 IMPLEMENT_JSON_SERIALIZATION()
7878 IMPLEMENT_JSON_DOCUMENTATION(EngageDiscoveredGroup)
7879
7880 public:
7882 std::string id;
7883
7885 int type;
7886
7889
7892
7894 {
7895 clear();
7896 }
7897
7898 void clear()
7899 {
7900 id.clear();
7901 type = 0;
7902 rx.clear();
7903 tx.clear();
7904 }
7905 };
7906
7907 static void to_json(nlohmann::json& j, const EngageDiscoveredGroup& p)
7908 {
7909 j = nlohmann::json{
7910 TOJSON_IMPL(id),
7911 TOJSON_IMPL(type),
7912 TOJSON_IMPL(rx),
7913 TOJSON_IMPL(tx)
7914 };
7915 }
7916 static void from_json(const nlohmann::json& j, EngageDiscoveredGroup& p)
7917 {
7918 p.clear();
7919 getOptional<std::string>("id", p.id, j);
7920 getOptional<int>("type", p.type, j, 0);
7921 getOptional<NetworkAddress>("rx", p.rx, j);
7922 getOptional<NetworkAddress>("tx", p.tx, j);
7923 }
7924
7925 //-----------------------------------------------------------
7926 JSON_SERIALIZED_CLASS(RallypointPeer)
7937 {
7938 IMPLEMENT_JSON_SERIALIZATION()
7939 IMPLEMENT_JSON_DOCUMENTATION(RallypointPeer)
7940
7941 public:
7942 typedef enum
7943 {
7945 olpUseRpConfiguration = 0,
7946
7948 olpIsMeshLeaf = 1,
7949
7951 olpNotMeshLeaf = 2
7952 } OutboundLeafPolicy_t;
7953
7955 std::string id;
7956
7959
7962
7965
7968
7971
7972 OutboundLeafPolicy_t outboundLeafPolicy;
7973
7976
7978 std::string path;
7979
7982
7984 {
7985 clear();
7986 }
7987
7988 void clear()
7989 {
7990 id.clear();
7991 enabled = true;
7992 host.clear();
7993 certificate.clear();
7994 connectionTimeoutSecs = 0;
7995 forceIsMeshLeaf = false;
7996 outboundLeafPolicy = OutboundLeafPolicy_t::olpUseRpConfiguration;
7997 protocol = Rallypoint::RpProtocol_t::rppTlsTcp;
7998 path.clear();
7999 additionalProtocols.clear();
8000 }
8001 };
8002
8003 static void to_json(nlohmann::json& j, const RallypointPeer& p)
8004 {
8005 j = nlohmann::json{
8006 TOJSON_IMPL(id),
8007 TOJSON_IMPL(enabled),
8008 TOJSON_IMPL(host),
8009 TOJSON_IMPL(certificate),
8010 TOJSON_IMPL(connectionTimeoutSecs),
8011 TOJSON_IMPL(forceIsMeshLeaf),
8012 TOJSON_IMPL(outboundLeafPolicy),
8013 TOJSON_IMPL(protocol),
8014 TOJSON_IMPL(path),
8015 TOJSON_IMPL(additionalProtocols)
8016 };
8017 }
8018 static void from_json(const nlohmann::json& j, RallypointPeer& p)
8019 {
8020 p.clear();
8021 j.at("id").get_to(p.id);
8022 getOptional<bool>("enabled", p.enabled, j, true);
8023 getOptional<NetworkAddress>("host", p.host, j);
8024 getOptional<SecurityCertificate>("certificate", p.certificate, j);
8025 getOptional<int>("connectionTimeoutSecs", p.connectionTimeoutSecs, j, 0);
8026 getOptional<bool>("forceIsMeshLeaf", p.forceIsMeshLeaf, j, false);
8027 getOptional<RallypointPeer::OutboundLeafPolicy_t>("outboundLeafPolicy", p.outboundLeafPolicy, j, RallypointPeer::OutboundLeafPolicy_t::olpUseRpConfiguration);
8028 getOptional<Rallypoint::RpProtocol_t>("protocol", p.protocol, j, Rallypoint::RpProtocol_t::rppTlsTcp);
8029 getOptional<std::string>("path", p.path, j);
8030 getOptional<std::string>("additionalProtocols", p.additionalProtocols, j);
8031 }
8032
8033 //-----------------------------------------------------------
8034 JSON_SERIALIZED_CLASS(RallypointServerLimits)
8045 {
8046 IMPLEMENT_JSON_SERIALIZATION()
8047 IMPLEMENT_JSON_DOCUMENTATION(RallypointServerLimits)
8048
8049 public:
8051 uint32_t maxClients;
8052
8054 uint32_t maxPeers;
8055
8058
8061
8064
8067
8070
8073
8076
8079
8082
8085
8088
8091
8094
8096 {
8097 clear();
8098 }
8099
8100 void clear()
8101 {
8102 maxClients = 0;
8103 maxPeers = 0;
8104 maxMulticastReflectors = 0;
8105 maxRegisteredStreams = 0;
8106 maxStreamPaths = 0;
8107 maxRxPacketsPerSec = 0;
8108 maxTxPacketsPerSec = 0;
8109 maxRxBytesPerSec = 0;
8110 maxTxBytesPerSec = 0;
8111 maxQOpsPerSec = 0;
8112 maxInboundBacklog = 64;
8113 lowPriorityQueueThreshold = 64;
8114 normalPriorityQueueThreshold = 256;
8115 denyNewConnectionCpuThreshold = 75;
8116 warnAtCpuThreshold = 65;
8117 }
8118 };
8119
8120 static void to_json(nlohmann::json& j, const RallypointServerLimits& p)
8121 {
8122 j = nlohmann::json{
8123 TOJSON_IMPL(maxClients),
8124 TOJSON_IMPL(maxPeers),
8125 TOJSON_IMPL(maxMulticastReflectors),
8126 TOJSON_IMPL(maxRegisteredStreams),
8127 TOJSON_IMPL(maxStreamPaths),
8128 TOJSON_IMPL(maxRxPacketsPerSec),
8129 TOJSON_IMPL(maxTxPacketsPerSec),
8130 TOJSON_IMPL(maxRxBytesPerSec),
8131 TOJSON_IMPL(maxTxBytesPerSec),
8132 TOJSON_IMPL(maxQOpsPerSec),
8133 TOJSON_IMPL(maxInboundBacklog),
8134 TOJSON_IMPL(lowPriorityQueueThreshold),
8135 TOJSON_IMPL(normalPriorityQueueThreshold),
8136 TOJSON_IMPL(denyNewConnectionCpuThreshold),
8137 TOJSON_IMPL(warnAtCpuThreshold)
8138 };
8139 }
8140 static void from_json(const nlohmann::json& j, RallypointServerLimits& p)
8141 {
8142 p.clear();
8143 getOptional<uint32_t>("maxClients", p.maxClients, j, 0);
8144 getOptional<uint32_t>("maxPeers", p.maxPeers, j, 0);
8145 getOptional<uint32_t>("maxMulticastReflectors", p.maxMulticastReflectors, j, 0);
8146 getOptional<uint32_t>("maxRegisteredStreams", p.maxRegisteredStreams, j, 0);
8147 getOptional<uint32_t>("maxStreamPaths", p.maxStreamPaths, j, 0);
8148 getOptional<uint32_t>("maxRxPacketsPerSec", p.maxRxPacketsPerSec, j, 0);
8149 getOptional<uint32_t>("maxTxPacketsPerSec", p.maxTxPacketsPerSec, j, 0);
8150 getOptional<uint32_t>("maxRxBytesPerSec", p.maxRxBytesPerSec, j, 0);
8151 getOptional<uint32_t>("maxTxBytesPerSec", p.maxTxBytesPerSec, j, 0);
8152 getOptional<uint32_t>("maxQOpsPerSec", p.maxQOpsPerSec, j, 0);
8153 getOptional<uint32_t>("maxInboundBacklog", p.maxInboundBacklog, j, 64);
8154 getOptional<uint32_t>("lowPriorityQueueThreshold", p.lowPriorityQueueThreshold, j, 64);
8155 getOptional<uint32_t>("normalPriorityQueueThreshold", p.normalPriorityQueueThreshold, j, 256);
8156 getOptional<uint32_t>("denyNewConnectionCpuThreshold", p.denyNewConnectionCpuThreshold, j, 75);
8157 getOptional<uint32_t>("warnAtCpuThreshold", p.warnAtCpuThreshold, j, 65);
8158 }
8159
8160 //-----------------------------------------------------------
8161 JSON_SERIALIZED_CLASS(RallypointServerStatusReportConfiguration)
8172 {
8173 IMPLEMENT_JSON_SERIALIZATION()
8174 IMPLEMENT_JSON_DOCUMENTATION(RallypointServerStatusReportConfiguration)
8175
8176 public:
8178 std::string fileName;
8179
8182
8185
8188
8191
8194
8196 std::string runCmd;
8197
8199 {
8200 clear();
8201 }
8202
8203 void clear()
8204 {
8205 fileName.clear();
8206 intervalSecs = 60;
8207 enabled = false;
8208 includeLinks = false;
8209 includePeerLinkDetails = false;
8210 includeClientLinkDetails = false;
8211 runCmd.clear();
8212 }
8213 };
8214
8215 static void to_json(nlohmann::json& j, const RallypointServerStatusReportConfiguration& p)
8216 {
8217 j = nlohmann::json{
8218 TOJSON_IMPL(fileName),
8219 TOJSON_IMPL(intervalSecs),
8220 TOJSON_IMPL(enabled),
8221 TOJSON_IMPL(includeLinks),
8222 TOJSON_IMPL(includePeerLinkDetails),
8223 TOJSON_IMPL(includeClientLinkDetails),
8224 TOJSON_IMPL(runCmd)
8225 };
8226 }
8227 static void from_json(const nlohmann::json& j, RallypointServerStatusReportConfiguration& p)
8228 {
8229 p.clear();
8230 getOptional<std::string>("fileName", p.fileName, j);
8231 getOptional<int>("intervalSecs", p.intervalSecs, j, 60);
8232 getOptional<bool>("enabled", p.enabled, j, false);
8233 getOptional<bool>("includeLinks", p.includeLinks, j, false);
8234 getOptional<bool>("includePeerLinkDetails", p.includePeerLinkDetails, j, false);
8235 getOptional<bool>("includeClientLinkDetails", p.includeClientLinkDetails, j, false);
8236 getOptional<std::string>("runCmd", p.runCmd, j);
8237 }
8238
8239 //-----------------------------------------------------------
8240 JSON_SERIALIZED_CLASS(RallypointServerLinkGraph)
8242 {
8243 IMPLEMENT_JSON_SERIALIZATION()
8244 IMPLEMENT_JSON_DOCUMENTATION(RallypointServerLinkGraph)
8245
8246 public:
8248 std::string fileName;
8249
8252
8255
8258
8263
8265 std::string coreRpStyling;
8266
8268 std::string leafRpStyling;
8269
8271 std::string clientStyling;
8272
8274 std::string runCmd;
8275
8277 {
8278 clear();
8279 }
8280
8281 void clear()
8282 {
8283 fileName.clear();
8284 minRefreshSecs = 5;
8285 enabled = false;
8286 includeDigraphEnclosure = true;
8287 includeClients = false;
8288 coreRpStyling = "[shape=hexagon color=firebrick style=filled]";
8289 leafRpStyling = "[shape=box color=gray style=filled]";
8290 clientStyling.clear();
8291 runCmd.clear();
8292 }
8293 };
8294
8295 static void to_json(nlohmann::json& j, const RallypointServerLinkGraph& p)
8296 {
8297 j = nlohmann::json{
8298 TOJSON_IMPL(fileName),
8299 TOJSON_IMPL(minRefreshSecs),
8300 TOJSON_IMPL(enabled),
8301 TOJSON_IMPL(includeDigraphEnclosure),
8302 TOJSON_IMPL(includeClients),
8303 TOJSON_IMPL(coreRpStyling),
8304 TOJSON_IMPL(leafRpStyling),
8305 TOJSON_IMPL(clientStyling),
8306 TOJSON_IMPL(runCmd)
8307 };
8308 }
8309 static void from_json(const nlohmann::json& j, RallypointServerLinkGraph& p)
8310 {
8311 p.clear();
8312 getOptional<std::string>("fileName", p.fileName, j);
8313 getOptional<int>("minRefreshSecs", p.minRefreshSecs, j, 5);
8314 getOptional<bool>("enabled", p.enabled, j, false);
8315 getOptional<bool>("includeDigraphEnclosure", p.includeDigraphEnclosure, j, true);
8316 getOptional<bool>("includeClients", p.includeClients, j, false);
8317 getOptional<std::string>("coreRpStyling", p.coreRpStyling, j, "[shape=hexagon color=firebrick style=filled]");
8318 getOptional<std::string>("leafRpStyling", p.leafRpStyling, j, "[shape=box color=gray style=filled]");
8319 getOptional<std::string>("clientStyling", p.clientStyling, j);
8320 getOptional<std::string>("runCmd", p.runCmd, j);
8321 }
8322
8323
8324 //-----------------------------------------------------------
8325 JSON_SERIALIZED_CLASS(RallypointServerStreamStatsExport)
8334 {
8335 IMPLEMENT_JSON_SERIALIZATION()
8336 IMPLEMENT_JSON_DOCUMENTATION(RallypointServerStreamStatsExport)
8337
8338 public:
8340 typedef enum
8341 {
8343 fmtJson = 0,
8344
8346 fmtBinary = 1,
8347
8349 fmtCsv = 2
8350 } ExportFormat_t;
8351
8353 std::string fileName;
8354
8357
8360
8362 std::string namedPipePath;
8363
8366
8368 std::string runCmd;
8369
8372
8373
8375 {
8376 clear();
8377 }
8378
8379 void clear()
8380 {
8381 fileName.clear();
8382 intervalSecs = 60;
8383 enabled = false;
8384 namedPipePath.clear();
8385 resetCountersAfterExport = false;
8386 runCmd.clear();
8387 format = fmtJson;
8388 }
8389 };
8390
8391 static void to_json(nlohmann::json& j, const RallypointServerStreamStatsExport& p)
8392 {
8393 j = nlohmann::json{
8394 TOJSON_IMPL(fileName),
8395 TOJSON_IMPL(intervalSecs),
8396 TOJSON_IMPL(enabled),
8397 TOJSON_IMPL(namedPipePath),
8398 TOJSON_IMPL(resetCountersAfterExport),
8399 TOJSON_IMPL(runCmd),
8400 TOJSON_IMPL(format)
8401 };
8402 }
8403 static void from_json(const nlohmann::json& j, RallypointServerStreamStatsExport& p)
8404 {
8405 p.clear();
8406 getOptional<std::string>("fileName", p.fileName, j);
8407 getOptional<int>("intervalSecs", p.intervalSecs, j, 60);
8408 getOptional<bool>("enabled", p.enabled, j, false);
8409 getOptional<std::string>("namedPipePath", p.namedPipePath, j);
8410 getOptional<bool>("resetCountersAfterExport", p.resetCountersAfterExport, j, false);
8411 getOptional<std::string>("runCmd", p.runCmd, j);
8412 getOptional<RallypointServerStreamStatsExport::ExportFormat_t>("format", p.format, j, RallypointServerStreamStatsExport::ExportFormat_t::fmtJson);
8413 }
8414
8415 //-----------------------------------------------------------
8416 JSON_SERIALIZED_CLASS(RallypointServerRouteMap)
8418 {
8419 IMPLEMENT_JSON_SERIALIZATION()
8420 IMPLEMENT_JSON_DOCUMENTATION(RallypointServerRouteMap)
8421
8422 public:
8424 std::string fileName;
8425
8428
8431
8433 std::string runCmd;
8434
8436 {
8437 clear();
8438 }
8439
8440 void clear()
8441 {
8442 fileName.clear();
8443 minRefreshSecs = 5;
8444 enabled = false;
8445 }
8446 };
8447
8448 static void to_json(nlohmann::json& j, const RallypointServerRouteMap& p)
8449 {
8450 j = nlohmann::json{
8451 TOJSON_IMPL(fileName),
8452 TOJSON_IMPL(minRefreshSecs),
8453 TOJSON_IMPL(enabled),
8454 TOJSON_IMPL(runCmd)
8455 };
8456 }
8457 static void from_json(const nlohmann::json& j, RallypointServerRouteMap& p)
8458 {
8459 p.clear();
8460 getOptional<std::string>("fileName", p.fileName, j);
8461 getOptional<int>("minRefreshSecs", p.minRefreshSecs, j, 5);
8462 getOptional<bool>("enabled", p.enabled, j, false);
8463 getOptional<std::string>("runCmd", p.runCmd, j);
8464 }
8465
8466
8467 //-----------------------------------------------------------
8468 JSON_SERIALIZED_CLASS(ExternalHealthCheckResponder)
8479 {
8480 IMPLEMENT_JSON_SERIALIZATION()
8481 IMPLEMENT_JSON_DOCUMENTATION(ExternalHealthCheckResponder)
8482
8483 public:
8484
8487
8490
8492 {
8493 clear();
8494 }
8495
8496 void clear()
8497 {
8498 listenPort = 0;
8499 immediateClose = true;
8500 }
8501 };
8502
8503 static void to_json(nlohmann::json& j, const ExternalHealthCheckResponder& p)
8504 {
8505 j = nlohmann::json{
8506 TOJSON_IMPL(listenPort),
8507 TOJSON_IMPL(immediateClose)
8508 };
8509 }
8510 static void from_json(const nlohmann::json& j, ExternalHealthCheckResponder& p)
8511 {
8512 p.clear();
8513 getOptional<int>("listenPort", p.listenPort, j, 0);
8514 getOptional<bool>("immediateClose", p.immediateClose, j, true);
8515 }
8516
8517
8518 //-----------------------------------------------------------
8519 JSON_SERIALIZED_CLASS(PeeringConfiguration)
8528 {
8529 IMPLEMENT_JSON_SERIALIZATION()
8530 IMPLEMENT_JSON_DOCUMENTATION(PeeringConfiguration)
8531
8532 public:
8533
8535 std::string id;
8536
8539
8541 std::string comments;
8542
8544 std::vector<RallypointPeer> peers;
8545
8547 {
8548 clear();
8549 }
8550
8551 void clear()
8552 {
8553 id.clear();
8554 version = 0;
8555 comments.clear();
8556 }
8557 };
8558
8559 static void to_json(nlohmann::json& j, const PeeringConfiguration& p)
8560 {
8561 j = nlohmann::json{
8562 TOJSON_IMPL(id),
8563 TOJSON_IMPL(version),
8564 TOJSON_IMPL(comments),
8565 TOJSON_IMPL(peers)
8566 };
8567 }
8568 static void from_json(const nlohmann::json& j, PeeringConfiguration& p)
8569 {
8570 p.clear();
8571 getOptional<std::string>("id", p.id, j);
8572 getOptional<int>("version", p.version, j, 0);
8573 getOptional<std::string>("comments", p.comments, j);
8574 getOptional<std::vector<RallypointPeer>>("peers", p.peers, j);
8575 }
8576
8577 //-----------------------------------------------------------
8578 JSON_SERIALIZED_CLASS(IgmpSnooping)
8587 {
8588 IMPLEMENT_JSON_SERIALIZATION()
8589 IMPLEMENT_JSON_DOCUMENTATION(IgmpSnooping)
8590
8591 public:
8592
8595
8598
8601
8602
8603 IgmpSnooping()
8604 {
8605 clear();
8606 }
8607
8608 void clear()
8609 {
8610 enabled = false;
8611 queryIntervalMs = 125000;
8612 subscriptionTimeoutMs = 0;
8613 }
8614 };
8615
8616 static void to_json(nlohmann::json& j, const IgmpSnooping& p)
8617 {
8618 j = nlohmann::json{
8619 TOJSON_IMPL(enabled),
8620 TOJSON_IMPL(queryIntervalMs),
8621 TOJSON_IMPL(subscriptionTimeoutMs)
8622 };
8623 }
8624 static void from_json(const nlohmann::json& j, IgmpSnooping& p)
8625 {
8626 p.clear();
8627 getOptional<bool>("enabled", p.enabled, j);
8628 getOptional<int>("queryIntervalMs", p.queryIntervalMs, j, 125000);
8629 getOptional<int>("subscriptionTimeoutMs", p.subscriptionTimeoutMs, j, 0);
8630 }
8631
8632
8633 //-----------------------------------------------------------
8634 JSON_SERIALIZED_CLASS(RallypointReflector)
8642 {
8643 IMPLEMENT_JSON_SERIALIZATION()
8644 IMPLEMENT_JSON_DOCUMENTATION(RallypointReflector)
8645
8646 public:
8648 typedef enum
8649 {
8651 drNone = 0,
8652
8654 drRxOnly = 1,
8655
8657 drTxOnly = 2
8658 } DirectionRestriction_t;
8659
8663 std::string id;
8664
8667
8670
8673
8675 std::vector<NetworkAddress> additionalTx;
8676
8679
8681 {
8682 clear();
8683 }
8684
8685 void clear()
8686 {
8687 id.clear();
8688 rx.clear();
8689 tx.clear();
8690 multicastInterfaceName.clear();
8691 additionalTx.clear();
8692 directionRestriction = drNone;
8693 }
8694 };
8695
8696 static void to_json(nlohmann::json& j, const RallypointReflector& p)
8697 {
8698 j = nlohmann::json{
8699 TOJSON_IMPL(id),
8700 TOJSON_IMPL(rx),
8701 TOJSON_IMPL(tx),
8702 TOJSON_IMPL(multicastInterfaceName),
8703 TOJSON_IMPL(additionalTx),
8704 TOJSON_IMPL(directionRestriction)
8705 };
8706 }
8707 static void from_json(const nlohmann::json& j, RallypointReflector& p)
8708 {
8709 p.clear();
8710 j.at("id").get_to(p.id);
8711 j.at("rx").get_to(p.rx);
8712 j.at("tx").get_to(p.tx);
8713 getOptional<std::string>("multicastInterfaceName", p.multicastInterfaceName, j);
8714 getOptional<std::vector<NetworkAddress>>("additionalTx", p.additionalTx, j);
8715 getOptional<RallypointReflector::DirectionRestriction_t>("directionRestriction", p.directionRestriction, j, RallypointReflector::DirectionRestriction_t::drNone);
8716 }
8717
8718
8719 //-----------------------------------------------------------
8720 JSON_SERIALIZED_CLASS(RallypointUdpStreamingIpvX)
8728 {
8729 IMPLEMENT_JSON_SERIALIZATION()
8730 IMPLEMENT_JSON_DOCUMENTATION(RallypointUdpStreamingIpvX)
8731
8732 public:
8735
8738
8740 {
8741 clear();
8742 }
8743
8744 void clear()
8745 {
8746 enabled = true;
8747 external.clear();
8748 }
8749 };
8750
8751 static void to_json(nlohmann::json& j, const RallypointUdpStreamingIpvX& p)
8752 {
8753 j = nlohmann::json{
8754 TOJSON_IMPL(enabled),
8755 TOJSON_IMPL(external)
8756 };
8757 }
8758 static void from_json(const nlohmann::json& j, RallypointUdpStreamingIpvX& p)
8759 {
8760 p.clear();
8761 getOptional<bool>("enabled", p.enabled, j, true);
8762 getOptional<NetworkAddress>("external", p.external, j);
8763 }
8764
8765 //-----------------------------------------------------------
8766 JSON_SERIALIZED_CLASS(RallypointUdpStreaming)
8774 {
8775 IMPLEMENT_JSON_SERIALIZATION()
8776 IMPLEMENT_JSON_DOCUMENTATION(RallypointUdpStreaming)
8777
8778 public:
8780 typedef enum
8781 {
8783 ctUnknown = 0,
8784
8786 ctSharedKeyAes256FullIv = 1,
8787
8789 ctSharedKeyAes256IdxIv = 2,
8790
8792 ctSharedKeyChaCha20FullIv = 3,
8793
8795 ctSharedKeyChaCha20IdxIv = 4
8796 } CryptoType_t;
8797
8800
8803
8806
8809
8812
8815
8818
8820 int ttl;
8821
8822
8824 {
8825 clear();
8826 }
8827
8828 void clear()
8829 {
8830 enabled = true;
8831 cryptoType = CryptoType_t::ctSharedKeyAes256FullIv;
8832 listenPort = 7444;
8833 ipv4.clear();
8834 ipv6.clear();
8835 keepaliveIntervalSecs = 15;
8836 priority = TxPriority_t::priVoice;
8837 ttl = 64;
8838 }
8839 };
8840
8841 static void to_json(nlohmann::json& j, const RallypointUdpStreaming& p)
8842 {
8843 j = nlohmann::json{
8844 TOJSON_IMPL(enabled),
8845 TOJSON_IMPL(cryptoType),
8846 TOJSON_IMPL(listenPort),
8847 TOJSON_IMPL(keepaliveIntervalSecs),
8848 TOJSON_IMPL(ipv4),
8849 TOJSON_IMPL(ipv6),
8850 TOJSON_IMPL(priority),
8851 TOJSON_IMPL(ttl)
8852 };
8853 }
8854 static void from_json(const nlohmann::json& j, RallypointUdpStreaming& p)
8855 {
8856 p.clear();
8857 getOptional<bool>("enabled", p.enabled, j, true);
8858 getOptional<RallypointUdpStreaming::CryptoType_t>("cryptoType", p.cryptoType, j, RallypointUdpStreaming::CryptoType_t::ctSharedKeyAes256FullIv);
8859 getOptional<int>("listenPort", p.listenPort, j, 7444);
8860 getOptional<int>("keepaliveIntervalSecs", p.keepaliveIntervalSecs, j, 15);
8861 getOptional<RallypointUdpStreamingIpvX>("ipv4", p.ipv4, j);
8862 getOptional<RallypointUdpStreamingIpvX>("ipv6", p.ipv6, j);
8863 getOptional<TxPriority_t>("priority", p.priority, j, TxPriority_t::priVoice);
8864 getOptional<int>("ttl", p.ttl, j, 64);
8865 }
8866
8867 //-----------------------------------------------------------
8868 JSON_SERIALIZED_CLASS(RallypointRpRtTimingBehavior)
8876 {
8877 IMPLEMENT_JSON_SERIALIZATION()
8878 IMPLEMENT_JSON_DOCUMENTATION(RallypointRpRtTimingBehavior)
8879
8880 public:
8882 typedef enum
8883 {
8886
8889
8892
8895
8897 btDrop = 99
8898 } BehaviorType_t;
8899
8902
8904 uint32_t atOrAboveMs;
8905
8907 std::string runCmd;
8908
8910 {
8911 clear();
8912 }
8913
8914 void clear()
8915 {
8916 behavior = btNone;
8917 atOrAboveMs = 0;
8918 runCmd.clear();
8919 }
8920 };
8921
8922 static void to_json(nlohmann::json& j, const RallypointRpRtTimingBehavior& p)
8923 {
8924 j = nlohmann::json{
8925 TOJSON_IMPL(behavior),
8926 TOJSON_IMPL(atOrAboveMs),
8927 TOJSON_IMPL(runCmd)
8928 };
8929 }
8930 static void from_json(const nlohmann::json& j, RallypointRpRtTimingBehavior& p)
8931 {
8932 p.clear();
8933 getOptional<RallypointRpRtTimingBehavior::BehaviorType_t>("behavior", p.behavior, j, RallypointRpRtTimingBehavior::BehaviorType_t::btNone);
8934 getOptional<uint32_t>("atOrAboveMs", p.atOrAboveMs, j, 0);
8935 getOptional<std::string>("runCmd", p.runCmd, j);
8936 }
8937
8938
8939 //-----------------------------------------------------------
8940 JSON_SERIALIZED_CLASS(RallypointWebsocketSettings)
8948 {
8949 IMPLEMENT_JSON_SERIALIZATION()
8950 IMPLEMENT_JSON_DOCUMENTATION(RallypointWebsocketSettings)
8951
8952 public:
8955
8958
8961
8964
8967
8969 {
8970 clear();
8971 }
8972
8973 void clear()
8974 {
8975 enabled = false;
8976 listenPort = 8443;
8977 certificate.clear();
8978 requireClientCertificate = false;
8979 requireTls = true;
8980 }
8981 };
8982
8983 static void to_json(nlohmann::json& j, const RallypointWebsocketSettings& p)
8984 {
8985 j = nlohmann::json{
8986 TOJSON_IMPL(enabled),
8987 TOJSON_IMPL(listenPort),
8988 TOJSON_IMPL(certificate),
8989 TOJSON_IMPL(requireClientCertificate),
8990 TOJSON_IMPL(requireTls)
8991 };
8992 }
8993 static void from_json(const nlohmann::json& j, RallypointWebsocketSettings& p)
8994 {
8995 p.clear();
8996 getOptional<bool>("enabled", p.enabled, j, false);
8997 getOptional<int>("listenPort", p.listenPort, j, 8443);
8998 getOptional<SecurityCertificate>("certificate", p.certificate, j);
8999 getOptional<bool>("requireClientCertificate", p.requireClientCertificate, j, false);
9000 getOptional<bool>("requireTls", p.requireTls, j, true);
9001 }
9002
9003
9004
9005 //-----------------------------------------------------------
9006 JSON_SERIALIZED_CLASS(RallypointAdvertisingSettings)
9014 {
9015 IMPLEMENT_JSON_SERIALIZATION()
9016 IMPLEMENT_JSON_DOCUMENTATION(RallypointAdvertisingSettings)
9017
9018 public:
9021
9023 std::string hostName;
9024
9026 std::string serviceName;
9027
9029 std::string interfaceName;
9030
9032 int port;
9033
9035 int ttl;
9036
9038 {
9039 clear();
9040 }
9041
9042 void clear()
9043 {
9044 enabled = false;
9045 hostName.clear();
9046 serviceName = "_rallypoint._tcp.local.";
9047 interfaceName.clear();
9048 port = 0;
9049 ttl = 60;
9050 }
9051 };
9052
9053 static void to_json(nlohmann::json& j, const RallypointAdvertisingSettings& p)
9054 {
9055 j = nlohmann::json{
9056 TOJSON_IMPL(enabled),
9057 TOJSON_IMPL(hostName),
9058 TOJSON_IMPL(serviceName),
9059 TOJSON_IMPL(interfaceName),
9060 TOJSON_IMPL(port),
9061 TOJSON_IMPL(ttl)
9062 };
9063 }
9064 static void from_json(const nlohmann::json& j, RallypointAdvertisingSettings& p)
9065 {
9066 p.clear();
9067 getOptional<bool>("enabled", p.enabled, j, false);
9068 getOptional<std::string>("hostName", p.hostName, j);
9069 getOptional<std::string>("serviceName", p.serviceName, j, "_rallypoint._tcp.local.");
9070 getOptional<std::string>("interfaceName", p.interfaceName, j);
9071
9072 getOptional<int>("port", p.port, j, 0);
9073 getOptional<int>("ttl", p.ttl, j, 60);
9074 }
9075
9076
9077
9078
9079 //-----------------------------------------------------------
9080 JSON_SERIALIZED_CLASS(NamedIdentity)
9088 {
9089 IMPLEMENT_JSON_SERIALIZATION()
9090 IMPLEMENT_JSON_DOCUMENTATION(NamedIdentity)
9091
9092 public:
9094 std::string name;
9095
9098
9100 {
9101 clear();
9102 }
9103
9104 void clear()
9105 {
9106 name.clear();
9107 certificate.clear();
9108 }
9109 };
9110
9111 static void to_json(nlohmann::json& j, const NamedIdentity& p)
9112 {
9113 j = nlohmann::json{
9114 TOJSON_IMPL(name),
9115 TOJSON_IMPL(certificate)
9116 };
9117 }
9118 static void from_json(const nlohmann::json& j, NamedIdentity& p)
9119 {
9120 p.clear();
9121 getOptional<std::string>("name", p.name, j);
9122 getOptional<SecurityCertificate>("certificate", p.certificate, j);
9123 }
9124
9125 //-----------------------------------------------------------
9126 JSON_SERIALIZED_CLASS(RallypointExtendedGroupRestriction)
9134 {
9135 IMPLEMENT_JSON_SERIALIZATION()
9136 IMPLEMENT_JSON_DOCUMENTATION(RallypointExtendedGroupRestriction)
9137
9138 public:
9140 std::string id;
9141
9143 std::vector<StringRestrictionList> restrictions;
9144
9146 {
9147 clear();
9148 }
9149
9150 void clear()
9151 {
9152 id.clear();
9153 restrictions.clear();
9154 }
9155 };
9156
9157 static void to_json(nlohmann::json& j, const RallypointExtendedGroupRestriction& p)
9158 {
9159 j = nlohmann::json{
9160 TOJSON_IMPL(id),
9161 TOJSON_IMPL(restrictions)
9162 };
9163 }
9164 static void from_json(const nlohmann::json& j, RallypointExtendedGroupRestriction& p)
9165 {
9166 p.clear();
9167 getOptional<std::string>("id", p.id, j);
9168 getOptional<std::vector<StringRestrictionList>>("restrictions", p.restrictions, j);
9169 }
9170
9171
9172 //-----------------------------------------------------------
9173 JSON_SERIALIZED_CLASS(RallypointServer)
9183 {
9184 IMPLEMENT_JSON_SERIALIZATION()
9185 IMPLEMENT_JSON_DOCUMENTATION(RallypointServer)
9186
9187 public:
9188 typedef enum
9189 {
9190 sptDefault = 0,
9191 sptCertificate = 1,
9192 sptCertPublicKey = 2,
9193 sptCertSubject = 3,
9194 sptCertIssuer = 4,
9195 sptCertFingerprint = 5,
9196 sptCertSerial = 6,
9197 sptSubjectC = 7,
9198 sptSubjectST = 8,
9199 sptSubjectL = 9,
9200 sptSubjectO = 10,
9201 sptSubjectOU = 11,
9202 sptSubjectCN = 12,
9203 sptIssuerC = 13,
9204 sptIssuerST = 14,
9205 sptIssuerL = 15,
9206 sptIssuerO = 16,
9207 sptIssuerOU = 17,
9208 sptIssuerCN = 18
9209 } StreamIdPrivacyType_t;
9210
9212 StreamIdPrivacyType_t streamIdPrivacyType;
9213
9216
9219
9221 std::string id;
9222
9225
9228
9230 std::string interfaceName;
9231
9234
9237
9240
9243
9246
9249
9252
9255
9258
9261
9264
9267
9270
9273
9276
9279
9281 PeeringConfiguration peeringConfiguration; // NOTE: This is NOT serialized
9282
9285
9288
9291
9294
9296 std::vector<RallypointReflector> staticReflectors;
9297
9300
9303
9306
9309
9312
9315
9317 std::vector<RallypointExtendedGroupRestriction> extendedGroupRestrictions;
9318
9321
9324
9327
9330
9332 uint32_t sysFlags;
9333
9336
9339
9342
9345
9348
9351
9354
9357
9359 std::vector<RallypointRpRtTimingBehavior> peerRtBehaviors;
9360
9363
9366
9369
9372
9375
9377 std::string domainName;
9378
9380 std::vector<std::string> allowedDomains;
9381
9383 std::vector<std::string> blockedDomains;
9384
9386 std::vector<std::string> extraDomains;
9387
9390
9392 std::vector<NamedIdentity> additionalIdentities;
9393
9395 {
9396 clear();
9397 }
9398
9399 void clear()
9400 {
9401 fipsCrypto.clear();
9402 watchdog.clear();
9403 id.clear();
9404 listenPort = 7443;
9405 interfaceName.clear();
9406 certificate.clear();
9407 allowMulticastForwarding = false;
9408 peeringConfiguration.clear();
9409 peeringConfigurationFileName.clear();
9410 peeringConfigurationFileCommand.clear();
9411 peeringConfigurationFileCheckSecs = 60;
9412 ioPools = -1;
9413 statusReport.clear();
9414 limits.clear();
9415 linkGraph.clear();
9416 externalHealthCheckResponder.clear();
9417 allowPeerForwarding = false;
9418 multicastInterfaceName.clear();
9419 tls.clear();
9420 discovery.clear();
9421 forwardDiscoveredGroups = false;
9422 forwardMulticastAddressing = false;
9423 isMeshLeaf = false;
9424 disableMessageSigning = false;
9425 multicastRestrictions.clear();
9426 igmpSnooping.clear();
9427 staticReflectors.clear();
9428 tcpTxOptions.clear();
9429 multicastTxOptions.clear();
9430 certStoreFileName.clear();
9431 certStorePasswordHex.clear();
9432 groupRestrictions.clear();
9433 configurationCheckSignalName = "rts.7b392d1.${id}";
9434 licensing.clear();
9435 featureset.clear();
9436 udpStreaming.clear();
9437 sysFlags = 0;
9438 normalTaskQueueBias = 0;
9439 enableLeafReflectionReverseSubscription = false;
9440 disableLoopDetection = false;
9441 maxSecurityLevel = 0;
9442 routeMap.clear();
9443 streamStatsExport.clear();
9444 maxOutboundPeerConnectionIntervalDeltaSecs = 15;
9445 peerRtTestIntervalMs = 60000;
9446 peerRtBehaviors.clear();
9447 websocket.clear();
9448 nsm.clear();
9449 advertising.clear();
9450 extendedGroupRestrictions.clear();
9451 groupRestrictionAccessPolicyType = GroupRestrictionAccessPolicyType_t::graptPermissive;
9452 ipFamily = IpFamilyType_t::ifIp4;
9453 rxCapture.clear();
9454 txCapture.clear();
9455 domainName.clear();
9456 allowedDomains.clear();
9457 blockedDomains.clear();
9458 extraDomains.clear();
9459 tuning.clear();
9460 additionalIdentities.clear();
9461 streamIdPrivacyType = StreamIdPrivacyType_t::sptDefault;
9462 }
9463 };
9464
9465 static void to_json(nlohmann::json& j, const RallypointServer& p)
9466 {
9467 j = nlohmann::json{
9468 TOJSON_IMPL(fipsCrypto),
9469 TOJSON_IMPL(watchdog),
9470 TOJSON_IMPL(id),
9471 TOJSON_IMPL(listenPort),
9472 TOJSON_IMPL(interfaceName),
9473 TOJSON_IMPL(certificate),
9474 TOJSON_IMPL(allowMulticastForwarding),
9475 // TOJSON_IMPL(peeringConfiguration), // NOTE: Not serialized!
9476 TOJSON_IMPL(peeringConfigurationFileName),
9477 TOJSON_IMPL(peeringConfigurationFileCommand),
9478 TOJSON_IMPL(peeringConfigurationFileCheckSecs),
9479 TOJSON_IMPL(ioPools),
9480 TOJSON_IMPL(statusReport),
9481 TOJSON_IMPL(limits),
9482 TOJSON_IMPL(linkGraph),
9483 TOJSON_IMPL(externalHealthCheckResponder),
9484 TOJSON_IMPL(allowPeerForwarding),
9485 TOJSON_IMPL(multicastInterfaceName),
9486 TOJSON_IMPL(tls),
9487 TOJSON_IMPL(discovery),
9488 TOJSON_IMPL(forwardDiscoveredGroups),
9489 TOJSON_IMPL(forwardMulticastAddressing),
9490 TOJSON_IMPL(isMeshLeaf),
9491 TOJSON_IMPL(disableMessageSigning),
9492 TOJSON_IMPL(multicastRestrictions),
9493 TOJSON_IMPL(igmpSnooping),
9494 TOJSON_IMPL(staticReflectors),
9495 TOJSON_IMPL(tcpTxOptions),
9496 TOJSON_IMPL(multicastTxOptions),
9497 TOJSON_IMPL(certStoreFileName),
9498 TOJSON_IMPL(certStorePasswordHex),
9499 TOJSON_IMPL(groupRestrictions),
9500 TOJSON_IMPL(configurationCheckSignalName),
9501 TOJSON_IMPL(featureset),
9502 TOJSON_IMPL(licensing),
9503 TOJSON_IMPL(udpStreaming),
9504 TOJSON_IMPL(sysFlags),
9505 TOJSON_IMPL(normalTaskQueueBias),
9506 TOJSON_IMPL(enableLeafReflectionReverseSubscription),
9507 TOJSON_IMPL(disableLoopDetection),
9508 TOJSON_IMPL(maxSecurityLevel),
9509 TOJSON_IMPL(routeMap),
9510 TOJSON_IMPL(streamStatsExport),
9511 TOJSON_IMPL(maxOutboundPeerConnectionIntervalDeltaSecs),
9512 TOJSON_IMPL(peerRtTestIntervalMs),
9513 TOJSON_IMPL(peerRtBehaviors),
9514 TOJSON_IMPL(websocket),
9515 TOJSON_IMPL(nsm),
9516 TOJSON_IMPL(advertising),
9517 TOJSON_IMPL(extendedGroupRestrictions),
9518 TOJSON_IMPL(groupRestrictionAccessPolicyType),
9519 TOJSON_IMPL(ipFamily),
9520 TOJSON_IMPL(rxCapture),
9521 TOJSON_IMPL(txCapture),
9522 TOJSON_IMPL(domainName),
9523 TOJSON_IMPL(allowedDomains),
9524 TOJSON_IMPL(blockedDomains),
9525 TOJSON_IMPL(extraDomains),
9526 TOJSON_IMPL(tuning),
9527 TOJSON_IMPL(additionalIdentities),
9528 TOJSON_IMPL(streamIdPrivacyType)
9529 };
9530 }
9531 static void from_json(const nlohmann::json& j, RallypointServer& p)
9532 {
9533 p.clear();
9534 getOptional<FipsCryptoSettings>("fipsCrypto", p.fipsCrypto, j);
9535 getOptional<WatchdogSettings>("watchdog", p.watchdog, j);
9536 getOptional<std::string>("id", p.id, j);
9537 getOptional<SecurityCertificate>("certificate", p.certificate, j);
9538 getOptional<std::string>("interfaceName", p.interfaceName, j);
9539 getOptional<int>("listenPort", p.listenPort, j, 7443);
9540 getOptional<bool>("allowMulticastForwarding", p.allowMulticastForwarding, j, false);
9541 //getOptional<PeeringConfiguration>("peeringConfiguration", p.peeringConfiguration, j); // NOTE: Not serialized!
9542 getOptional<std::string>("peeringConfigurationFileName", p.peeringConfigurationFileName, j);
9543 getOptional<std::string>("peeringConfigurationFileCommand", p.peeringConfigurationFileCommand, j);
9544 getOptional<int>("peeringConfigurationFileCheckSecs", p.peeringConfigurationFileCheckSecs, j, 60);
9545 getOptional<int>("ioPools", p.ioPools, j, -1);
9546 getOptional<RallypointServerStatusReportConfiguration>("statusReport", p.statusReport, j);
9547 getOptional<RallypointServerLimits>("limits", p.limits, j);
9548 getOptional<RallypointServerLinkGraph>("linkGraph", p.linkGraph, j);
9549 getOptional<ExternalHealthCheckResponder>("externalHealthCheckResponder", p.externalHealthCheckResponder, j);
9550 getOptional<bool>("allowPeerForwarding", p.allowPeerForwarding, j, false);
9551 getOptional<std::string>("multicastInterfaceName", p.multicastInterfaceName, j);
9552 getOptional<Tls>("tls", p.tls, j);
9553 getOptional<DiscoveryConfiguration>("discovery", p.discovery, j);
9554 getOptional<bool>("forwardDiscoveredGroups", p.forwardDiscoveredGroups, j, false);
9555 getOptional<bool>("forwardMulticastAddressing", p.forwardMulticastAddressing, j, false);
9556 getOptional<bool>("isMeshLeaf", p.isMeshLeaf, j, false);
9557 getOptional<bool>("disableMessageSigning", p.disableMessageSigning, j, false);
9558 getOptional<NetworkAddressRestrictionList>("multicastRestrictions", p.multicastRestrictions, j);
9559 getOptional<IgmpSnooping>("igmpSnooping", p.igmpSnooping, j);
9560 getOptional<std::vector<RallypointReflector>>("staticReflectors", p.staticReflectors, j);
9561 getOptional<TcpNetworkTxOptions>("tcpTxOptions", p.tcpTxOptions, j);
9562 getOptional<NetworkTxOptions>("multicastTxOptions", p.multicastTxOptions, j);
9563 getOptional<std::string>("certStoreFileName", p.certStoreFileName, j);
9564 getOptional<std::string>("certStorePasswordHex", p.certStorePasswordHex, j);
9565 getOptional<StringRestrictionList>("groupRestrictions", p.groupRestrictions, j);
9566 getOptional<std::string>("configurationCheckSignalName", p.configurationCheckSignalName, j, "rts.7b392d1.${id}");
9567 getOptional<Licensing>("licensing", p.licensing, j);
9568 getOptional<Featureset>("featureset", p.featureset, j);
9569 getOptional<RallypointUdpStreaming>("udpStreaming", p.udpStreaming, j);
9570 getOptional<uint32_t>("sysFlags", p.sysFlags, j, 0);
9571 getOptional<uint32_t>("normalTaskQueueBias", p.normalTaskQueueBias, j, 0);
9572 getOptional<bool>("enableLeafReflectionReverseSubscription", p.enableLeafReflectionReverseSubscription, j, false);
9573 getOptional<bool>("disableLoopDetection", p.disableLoopDetection, j, false);
9574 getOptional<uint32_t>("maxSecurityLevel", p.maxSecurityLevel, j, 0);
9575 getOptional<RallypointServerRouteMap>("routeMap", p.routeMap, j);
9576 getOptional<RallypointServerStreamStatsExport>("streamStatsExport", p.streamStatsExport, j);
9577 getOptional<uint32_t>("maxOutboundPeerConnectionIntervalDeltaSecs", p.maxOutboundPeerConnectionIntervalDeltaSecs, j, 15);
9578 getOptional<int>("peerRtTestIntervalMs", p.peerRtTestIntervalMs, j, 60000);
9579 getOptional<std::vector<RallypointRpRtTimingBehavior>>("peerRtBehaviors", p.peerRtBehaviors, j);
9580 getOptional<RallypointWebsocketSettings>("websocket", p.websocket, j);
9581 getOptional<NsmConfiguration>("nsm", p.nsm, j);
9582 getOptional<RallypointAdvertisingSettings>("advertising", p.advertising, j);
9583 getOptional<std::vector<RallypointExtendedGroupRestriction>>("extendedGroupRestrictions", p.extendedGroupRestrictions, j);
9584 getOptional<GroupRestrictionAccessPolicyType_t>("groupRestrictionAccessPolicyType", p.groupRestrictionAccessPolicyType, j, GroupRestrictionAccessPolicyType_t::graptPermissive);
9585 getOptional<IpFamilyType_t>("ipFamily", p.ipFamily, j, IpFamilyType_t::ifIp4);
9586 getOptional<PacketCapturer>("rxCapture", p.rxCapture, j);
9587 getOptional<PacketCapturer>("txCapture", p.txCapture, j);
9588 getOptional<std::string>("domainName", p.domainName, j);
9589 getOptional<std::vector<std::string>>("allowedDomains", p.allowedDomains, j);
9590 getOptional<std::vector<std::string>>("blockedDomains", p.blockedDomains, j);
9591 getOptional<std::vector<std::string>>("extraDomains", p.extraDomains, j);
9592 getOptional<TuningSettings>("tuning", p.tuning, j);
9593 getOptional<std::vector<NamedIdentity>>("additionalIdentities", p.additionalIdentities, j);
9594 getOptional<RallypointServer::StreamIdPrivacyType_t>("streamIdPrivacyType", p.streamIdPrivacyType, j, RallypointServer::StreamIdPrivacyType_t::sptDefault);
9595 }
9596
9597 //-----------------------------------------------------------
9598 JSON_SERIALIZED_CLASS(PlatformDiscoveredService)
9609 {
9610 IMPLEMENT_JSON_SERIALIZATION()
9611 IMPLEMENT_JSON_DOCUMENTATION(PlatformDiscoveredService)
9612
9613 public:
9614
9616 std::string id;
9617
9619 std::string type;
9620
9622 std::string name;
9623
9626
9628 std::string uri;
9629
9632
9634 {
9635 clear();
9636 }
9637
9638 void clear()
9639 {
9640 id.clear();
9641 type.clear();
9642 name.clear();
9643 address.clear();
9644 uri.clear();
9645 configurationVersion = 0;
9646 }
9647 };
9648
9649 static void to_json(nlohmann::json& j, const PlatformDiscoveredService& p)
9650 {
9651 j = nlohmann::json{
9652 TOJSON_IMPL(id),
9653 TOJSON_IMPL(type),
9654 TOJSON_IMPL(name),
9655 TOJSON_IMPL(address),
9656 TOJSON_IMPL(uri),
9657 TOJSON_IMPL(configurationVersion)
9658 };
9659 }
9660 static void from_json(const nlohmann::json& j, PlatformDiscoveredService& p)
9661 {
9662 p.clear();
9663 getOptional<std::string>("id", p.id, j);
9664 getOptional<std::string>("type", p.type, j);
9665 getOptional<std::string>("name", p.name, j);
9666 getOptional<NetworkAddress>("address", p.address, j);
9667 getOptional<std::string>("uri", p.uri, j);
9668 getOptional<uint32_t>("configurationVersion", p.configurationVersion, j, 0);
9669 }
9670
9671
9672 //-----------------------------------------------------------
9674 {
9675 public:
9676 typedef enum
9677 {
9678 etUndefined = 0,
9679 etAudio = 1,
9680 etLocation = 2,
9681 etUser = 3
9682 } EventType_t;
9683
9684 typedef enum
9685 {
9686 dNone = 0,
9687 dInbound = 1,
9688 dOutbound = 2,
9689 dBoth = 3,
9690 dUndefined = 4,
9691 } Direction_t;
9692 };
9693
9694
9695 //-----------------------------------------------------------
9696 JSON_SERIALIZED_CLASS(TimelineQueryParameters)
9707 {
9708 IMPLEMENT_JSON_SERIALIZATION()
9709 IMPLEMENT_JSON_DOCUMENTATION(TimelineQueryParameters)
9710
9711 public:
9712
9715
9718
9721
9724
9727
9730
9733
9735 std::string onlyAlias;
9736
9738 std::string onlyNodeId;
9739
9742
9744 std::string sql;
9745
9747 {
9748 clear();
9749 }
9750
9751 void clear()
9752 {
9753 maxCount = 50;
9754 mostRecentFirst = true;
9755 startedOnOrAfter = 0;
9756 endedOnOrBefore = 0;
9757 onlyDirection = 0;
9758 onlyType = 0;
9759 onlyCommitted = true;
9760 onlyAlias.clear();
9761 onlyNodeId.clear();
9762 sql.clear();
9763 onlyTxId = 0;
9764 }
9765 };
9766
9767 static void to_json(nlohmann::json& j, const TimelineQueryParameters& p)
9768 {
9769 j = nlohmann::json{
9770 TOJSON_IMPL(maxCount),
9771 TOJSON_IMPL(mostRecentFirst),
9772 TOJSON_IMPL(startedOnOrAfter),
9773 TOJSON_IMPL(endedOnOrBefore),
9774 TOJSON_IMPL(onlyDirection),
9775 TOJSON_IMPL(onlyType),
9776 TOJSON_IMPL(onlyCommitted),
9777 TOJSON_IMPL(onlyAlias),
9778 TOJSON_IMPL(onlyNodeId),
9779 TOJSON_IMPL(onlyTxId),
9780 TOJSON_IMPL(sql)
9781 };
9782 }
9783 static void from_json(const nlohmann::json& j, TimelineQueryParameters& p)
9784 {
9785 p.clear();
9786 getOptional<long>("maxCount", p.maxCount, j, 50);
9787 getOptional<bool>("mostRecentFirst", p.mostRecentFirst, j, false);
9788 getOptional<uint64_t>("startedOnOrAfter", p.startedOnOrAfter, j, 0);
9789 getOptional<uint64_t>("endedOnOrBefore", p.endedOnOrBefore, j, 0);
9790 getOptional<int>("onlyDirection", p.onlyDirection, j, 0);
9791 getOptional<int>("onlyType", p.onlyType, j, 0);
9792 getOptional<bool>("onlyCommitted", p.onlyCommitted, j, true);
9793 getOptional<std::string>("onlyAlias", p.onlyAlias, j, EMPTY_STRING);
9794 getOptional<std::string>("onlyNodeId", p.onlyNodeId, j, EMPTY_STRING);
9795 getOptional<int>("onlyTxId", p.onlyTxId, j, 0);
9796 getOptional<std::string>("sql", p.sql, j, EMPTY_STRING);
9797 }
9798
9799 //-----------------------------------------------------------
9800 JSON_SERIALIZED_CLASS(CertStoreCertificate)
9808 {
9809 IMPLEMENT_JSON_SERIALIZATION()
9810 IMPLEMENT_JSON_DOCUMENTATION(CertStoreCertificate)
9811
9812 public:
9814 std::string id;
9815
9817 std::string certificatePem;
9818
9820 std::string privateKeyPem;
9821
9824
9826 std::string tags;
9827
9829 {
9830 clear();
9831 }
9832
9833 void clear()
9834 {
9835 id.clear();
9836 certificatePem.clear();
9837 privateKeyPem.clear();
9838 internalData = nullptr;
9839 tags.clear();
9840 }
9841 };
9842
9843 static void to_json(nlohmann::json& j, const CertStoreCertificate& p)
9844 {
9845 j = nlohmann::json{
9846 TOJSON_IMPL(id),
9847 TOJSON_IMPL(certificatePem),
9848 TOJSON_IMPL(privateKeyPem),
9849 TOJSON_IMPL(tags)
9850 };
9851 }
9852 static void from_json(const nlohmann::json& j, CertStoreCertificate& p)
9853 {
9854 p.clear();
9855 j.at("id").get_to(p.id);
9856 j.at("certificatePem").get_to(p.certificatePem);
9857 getOptional<std::string>("privateKeyPem", p.privateKeyPem, j, EMPTY_STRING);
9858 getOptional<std::string>("tags", p.tags, j, EMPTY_STRING);
9859 }
9860
9861 //-----------------------------------------------------------
9862 JSON_SERIALIZED_CLASS(CertStore)
9870 {
9871 IMPLEMENT_JSON_SERIALIZATION()
9872 IMPLEMENT_JSON_DOCUMENTATION(CertStore)
9873
9874 public:
9876 std::string id;
9877
9879 std::vector<CertStoreCertificate> certificates;
9880
9882 std::vector<KvPair> kvp;
9883
9884 CertStore()
9885 {
9886 clear();
9887 }
9888
9889 void clear()
9890 {
9891 id.clear();
9892 certificates.clear();
9893 kvp.clear();
9894 }
9895 };
9896
9897 static void to_json(nlohmann::json& j, const CertStore& p)
9898 {
9899 j = nlohmann::json{
9900 TOJSON_IMPL(id),
9901 TOJSON_IMPL(certificates),
9902 TOJSON_IMPL(kvp)
9903 };
9904 }
9905 static void from_json(const nlohmann::json& j, CertStore& p)
9906 {
9907 p.clear();
9908 getOptional<std::string>("id", p.id, j, EMPTY_STRING);
9909 getOptional<std::vector<CertStoreCertificate>>("certificates", p.certificates, j);
9910 getOptional<std::vector<KvPair>>("kvp", p.kvp, j);
9911 }
9912
9913 //-----------------------------------------------------------
9914 JSON_SERIALIZED_CLASS(CertStoreCertificateElement)
9922 {
9923 IMPLEMENT_JSON_SERIALIZATION()
9924 IMPLEMENT_JSON_DOCUMENTATION(CertStoreCertificateElement)
9925
9926 public:
9928 std::string id;
9929
9932
9934 std::string certificatePem;
9935
9937 std::string tags;
9938
9940 {
9941 clear();
9942 }
9943
9944 void clear()
9945 {
9946 id.clear();
9947 hasPrivateKey = false;
9948 tags.clear();
9949 }
9950 };
9951
9952 static void to_json(nlohmann::json& j, const CertStoreCertificateElement& p)
9953 {
9954 j = nlohmann::json{
9955 TOJSON_IMPL(id),
9956 TOJSON_IMPL(hasPrivateKey),
9957 TOJSON_IMPL(tags)
9958 };
9959
9960 if(!p.certificatePem.empty())
9961 {
9962 j["certificatePem"] = p.certificatePem;
9963 }
9964 }
9965 static void from_json(const nlohmann::json& j, CertStoreCertificateElement& p)
9966 {
9967 p.clear();
9968 getOptional<std::string>("id", p.id, j, EMPTY_STRING);
9969 getOptional<bool>("hasPrivateKey", p.hasPrivateKey, j, false);
9970 getOptional<std::string>("certificatePem", p.certificatePem, j, EMPTY_STRING);
9971 getOptional<std::string>("tags", p.tags, j, EMPTY_STRING);
9972 }
9973
9974 //-----------------------------------------------------------
9975 JSON_SERIALIZED_CLASS(CertStoreDescriptor)
9983 {
9984 IMPLEMENT_JSON_SERIALIZATION()
9985 IMPLEMENT_JSON_DOCUMENTATION(CertStoreDescriptor)
9986
9987 public:
9989 std::string id;
9990
9992 std::string fileName;
9993
9996
9999
10001 std::vector<CertStoreCertificateElement> certificates;
10002
10004 std::vector<KvPair> kvp;
10005
10007 {
10008 clear();
10009 }
10010
10011 void clear()
10012 {
10013 id.clear();
10014 fileName.clear();
10015 version = 0;
10016 flags = 0;
10017 certificates.clear();
10018 kvp.clear();
10019 }
10020 };
10021
10022 static void to_json(nlohmann::json& j, const CertStoreDescriptor& p)
10023 {
10024 j = nlohmann::json{
10025 TOJSON_IMPL(id),
10026 TOJSON_IMPL(fileName),
10027 TOJSON_IMPL(version),
10028 TOJSON_IMPL(flags),
10029 TOJSON_IMPL(certificates),
10030 TOJSON_IMPL(kvp)
10031 };
10032 }
10033 static void from_json(const nlohmann::json& j, CertStoreDescriptor& p)
10034 {
10035 p.clear();
10036 getOptional<std::string>("id", p.id, j, EMPTY_STRING);
10037 getOptional<std::string>("fileName", p.fileName, j, EMPTY_STRING);
10038 getOptional<int>("version", p.version, j, 0);
10039 getOptional<int>("flags", p.flags, j, 0);
10040 getOptional<std::vector<CertStoreCertificateElement>>("certificates", p.certificates, j);
10041 getOptional<std::vector<KvPair>>("kvp", p.kvp, j);
10042 }
10043
10044 //-----------------------------------------------------------
10045 JSON_SERIALIZED_CLASS(CertificateSubjectElement)
10053 {
10054 IMPLEMENT_JSON_SERIALIZATION()
10055 IMPLEMENT_JSON_DOCUMENTATION(CertificateSubjectElement)
10056
10057 public:
10059 std::string name;
10060
10062 std::string value;
10063
10065 {
10066 clear();
10067 }
10068
10069 void clear()
10070 {
10071 name.clear();
10072 value.clear();
10073 }
10074 };
10075
10076 static void to_json(nlohmann::json& j, const CertificateSubjectElement& p)
10077 {
10078 j = nlohmann::json{
10079 TOJSON_IMPL(name),
10080 TOJSON_IMPL(value)
10081 };
10082 }
10083 static void from_json(const nlohmann::json& j, CertificateSubjectElement& p)
10084 {
10085 p.clear();
10086 getOptional<std::string>("name", p.name, j, EMPTY_STRING);
10087 getOptional<std::string>("value", p.value, j, EMPTY_STRING);
10088 }
10089
10090
10091 //-----------------------------------------------------------
10092 JSON_SERIALIZED_CLASS(CertificateDescriptor)
10100 {
10101 IMPLEMENT_JSON_SERIALIZATION()
10102 IMPLEMENT_JSON_DOCUMENTATION(CertificateDescriptor)
10103
10104 public:
10106 std::string subject;
10107
10109 std::string issuer;
10110
10113
10116
10118 std::string notBefore;
10119
10121 std::string notAfter;
10122
10124 std::string serial;
10125
10127 std::string fingerprint;
10128
10130 std::vector<CertificateSubjectElement> subjectElements;
10131
10133 std::vector<CertificateSubjectElement> issuerElements;
10134
10136 std::string certificatePem;
10137
10139 std::string publicKeyPem;
10140
10142 {
10143 clear();
10144 }
10145
10146 void clear()
10147 {
10148 subject.clear();
10149 issuer.clear();
10150 selfSigned = false;
10151 version = 0;
10152 notBefore.clear();
10153 notAfter.clear();
10154 serial.clear();
10155 fingerprint.clear();
10156 subjectElements.clear();
10157 issuerElements.clear();
10158 certificatePem.clear();
10159 publicKeyPem.clear();
10160 }
10161 };
10162
10163 static void to_json(nlohmann::json& j, const CertificateDescriptor& p)
10164 {
10165 j = nlohmann::json{
10166 TOJSON_IMPL(subject),
10167 TOJSON_IMPL(issuer),
10168 TOJSON_IMPL(selfSigned),
10169 TOJSON_IMPL(version),
10170 TOJSON_IMPL(notBefore),
10171 TOJSON_IMPL(notAfter),
10172 TOJSON_IMPL(serial),
10173 TOJSON_IMPL(fingerprint),
10174 TOJSON_IMPL(subjectElements),
10175 TOJSON_IMPL(issuerElements),
10176 TOJSON_IMPL(certificatePem),
10177 TOJSON_IMPL(publicKeyPem)
10178 };
10179 }
10180 static void from_json(const nlohmann::json& j, CertificateDescriptor& p)
10181 {
10182 p.clear();
10183 getOptional<std::string>("subject", p.subject, j, EMPTY_STRING);
10184 getOptional<std::string>("issuer", p.issuer, j, EMPTY_STRING);
10185 getOptional<bool>("selfSigned", p.selfSigned, j, false);
10186 getOptional<int>("version", p.version, j, 0);
10187 getOptional<std::string>("notBefore", p.notBefore, j, EMPTY_STRING);
10188 getOptional<std::string>("notAfter", p.notAfter, j, EMPTY_STRING);
10189 getOptional<std::string>("serial", p.serial, j, EMPTY_STRING);
10190 getOptional<std::string>("fingerprint", p.fingerprint, j, EMPTY_STRING);
10191 getOptional<std::string>("certificatePem", p.certificatePem, j, EMPTY_STRING);
10192 getOptional<std::string>("publicKeyPem", p.publicKeyPem, j, EMPTY_STRING);
10193 getOptional<std::vector<CertificateSubjectElement>>("subjectElements", p.subjectElements, j);
10194 getOptional<std::vector<CertificateSubjectElement>>("issuerElements", p.issuerElements, j);
10195 }
10196
10197
10198 //-----------------------------------------------------------
10199 JSON_SERIALIZED_CLASS(RiffDescriptor)
10210 {
10211 IMPLEMENT_JSON_SERIALIZATION()
10212 IMPLEMENT_JSON_DOCUMENTATION(RiffDescriptor)
10213
10214 public:
10216 std::string file;
10217
10220
10223
10226
10228 std::string meta;
10229
10231 std::string certPem;
10232
10235
10237 std::string signature;
10238
10240 {
10241 clear();
10242 }
10243
10244 void clear()
10245 {
10246 file.clear();
10247 verified = false;
10248 channels = 0;
10249 sampleCount = 0;
10250 meta.clear();
10251 certPem.clear();
10252 certDescriptor.clear();
10253 signature.clear();
10254 }
10255 };
10256
10257 static void to_json(nlohmann::json& j, const RiffDescriptor& p)
10258 {
10259 j = nlohmann::json{
10260 TOJSON_IMPL(file),
10261 TOJSON_IMPL(verified),
10262 TOJSON_IMPL(channels),
10263 TOJSON_IMPL(sampleCount),
10264 TOJSON_IMPL(meta),
10265 TOJSON_IMPL(certPem),
10266 TOJSON_IMPL(certDescriptor),
10267 TOJSON_IMPL(signature)
10268 };
10269 }
10270
10271 static void from_json(const nlohmann::json& j, RiffDescriptor& p)
10272 {
10273 p.clear();
10274 FROMJSON_IMPL(file, std::string, EMPTY_STRING);
10275 FROMJSON_IMPL(verified, bool, false);
10276 FROMJSON_IMPL(channels, int, 0);
10277 FROMJSON_IMPL(sampleCount, int, 0);
10278 FROMJSON_IMPL(meta, std::string, EMPTY_STRING);
10279 FROMJSON_IMPL(certPem, std::string, EMPTY_STRING);
10280 getOptional<CertificateDescriptor>("certDescriptor", p.certDescriptor, j);
10281 FROMJSON_IMPL(signature, std::string, EMPTY_STRING);
10282 }
10283
10284
10285 //-----------------------------------------------------------
10286 JSON_SERIALIZED_CLASS(BridgeCreationDetail)
10294 {
10295 IMPLEMENT_JSON_SERIALIZATION()
10296 IMPLEMENT_WRAPPED_JSON_SERIALIZATION(BridgeCreationDetail)
10297 IMPLEMENT_JSON_DOCUMENTATION(BridgeCreationDetail)
10298
10299 public:
10301 typedef enum
10302 {
10304 csUndefined = 0,
10305
10307 csOk = 1,
10308
10310 csNoJson = -1,
10311
10313 csAlreadyExists = -3,
10314
10316 csInvalidConfiguration = -4,
10317
10319 csInvalidJson = -5,
10320
10322 csInsufficientGroups = -6,
10323
10325 csTooManyGroups = -7,
10326
10328 csDuplicateGroup = -8,
10329
10331 csLocalLoopDetected = -9,
10332 } CreationStatus_t;
10333
10335 std::string id;
10336
10339
10341 {
10342 clear();
10343 }
10344
10345 void clear()
10346 {
10347 id.clear();
10348 status = csUndefined;
10349 }
10350 };
10351
10352 static void to_json(nlohmann::json& j, const BridgeCreationDetail& p)
10353 {
10354 j = nlohmann::json{
10355 TOJSON_IMPL(id),
10356 TOJSON_IMPL(status)
10357 };
10358 }
10359 static void from_json(const nlohmann::json& j, BridgeCreationDetail& p)
10360 {
10361 p.clear();
10362 getOptional<std::string>("id", p.id, j, EMPTY_STRING);
10363 getOptional<BridgeCreationDetail::CreationStatus_t>("status", p.status, j, BridgeCreationDetail::CreationStatus_t::csUndefined);
10364 }
10365 //-----------------------------------------------------------
10366 JSON_SERIALIZED_CLASS(GroupConnectionDetail)
10374 {
10375 IMPLEMENT_JSON_SERIALIZATION()
10376 IMPLEMENT_WRAPPED_JSON_SERIALIZATION(GroupConnectionDetail)
10377 IMPLEMENT_JSON_DOCUMENTATION(GroupConnectionDetail)
10378
10379 public:
10381 typedef enum
10382 {
10384 ctUndefined = 0,
10385
10387 ctDirectDatagram = 1,
10388
10390 ctRallypoint = 2
10391 } ConnectionType_t;
10392
10394 std::string id;
10395
10398
10400 std::string peer;
10401
10404
10406 std::string reason;
10407
10409 {
10410 clear();
10411 }
10412
10413 void clear()
10414 {
10415 id.clear();
10416 connectionType = ctUndefined;
10417 peer.clear();
10418 asFailover = false;
10419 reason.clear();
10420 }
10421 };
10422
10423 static void to_json(nlohmann::json& j, const GroupConnectionDetail& p)
10424 {
10425 j = nlohmann::json{
10426 TOJSON_IMPL(id),
10427 TOJSON_IMPL(connectionType),
10428 TOJSON_IMPL(peer),
10429 TOJSON_IMPL(asFailover),
10430 TOJSON_IMPL(reason)
10431 };
10432
10433 if(p.asFailover)
10434 {
10435 j["asFailover"] = p.asFailover;
10436 }
10437 }
10438 static void from_json(const nlohmann::json& j, GroupConnectionDetail& p)
10439 {
10440 p.clear();
10441 getOptional<std::string>("id", p.id, j, EMPTY_STRING);
10442 getOptional<GroupConnectionDetail::ConnectionType_t>("connectionType", p.connectionType, j, GroupConnectionDetail::ConnectionType_t::ctUndefined);
10443 getOptional<std::string>("peer", p.peer, j, EMPTY_STRING);
10444 getOptional<bool>("asFailover", p.asFailover, j, false);
10445 getOptional<std::string>("reason", p.reason, j, EMPTY_STRING);
10446 }
10447
10448 //-----------------------------------------------------------
10449 JSON_SERIALIZED_CLASS(GroupTxDetail)
10457 {
10458 IMPLEMENT_JSON_SERIALIZATION()
10459 IMPLEMENT_WRAPPED_JSON_SERIALIZATION(GroupTxDetail)
10460 IMPLEMENT_JSON_DOCUMENTATION(GroupTxDetail)
10461
10462 public:
10464 typedef enum
10465 {
10467 txsUndefined = 0,
10468
10470 txsTxStarted = 1,
10471
10473 txsTxEnded = 2,
10474
10476 txsNotAnAudioGroup = -1,
10477
10479 txsNotJoined = -2,
10480
10482 txsNotConnected = -3,
10483
10485 txsAlreadyTransmitting = -4,
10486
10488 txsInvalidParams = -5,
10489
10491 txsPriorityTooLow = -6,
10492
10494 txsRxActiveOnNonFdx = -7,
10495
10497 txsCannotSubscribeToInput = -8,
10498
10500 txsInvalidId = -9,
10501
10503 txsTxEndedWithFailure = -10,
10504
10506 txsBridgedButNotMultistream = -11,
10507
10509 txsAutoEndedDueToNonMultistreamBridge = -12,
10510
10512 txsReBeginWithoutPriorBegin = -13
10513 } TxStatus_t;
10514
10516 std::string id;
10517
10520
10523
10526
10529
10531 uint32_t txId;
10532
10534 {
10535 clear();
10536 }
10537
10538 void clear()
10539 {
10540 id.clear();
10541 status = txsUndefined;
10542 localPriority = 0;
10543 remotePriority = 0;
10544 nonFdxMsHangRemaining = 0;
10545 txId = 0;
10546 }
10547 };
10548
10549 static void to_json(nlohmann::json& j, const GroupTxDetail& p)
10550 {
10551 j = nlohmann::json{
10552 TOJSON_IMPL(id),
10553 TOJSON_IMPL(status),
10554 TOJSON_IMPL(localPriority),
10555 TOJSON_IMPL(txId)
10556 };
10557
10558 // Include remote priority if status is related to that
10559 if(p.status == GroupTxDetail::TxStatus_t::txsPriorityTooLow)
10560 {
10561 j["remotePriority"] = p.remotePriority;
10562 }
10563 else if(p.status == GroupTxDetail::TxStatus_t::txsRxActiveOnNonFdx)
10564 {
10565 j["nonFdxMsHangRemaining"] = p.nonFdxMsHangRemaining;
10566 }
10567 }
10568 static void from_json(const nlohmann::json& j, GroupTxDetail& p)
10569 {
10570 p.clear();
10571 getOptional<std::string>("id", p.id, j, EMPTY_STRING);
10572 getOptional<GroupTxDetail::TxStatus_t>("status", p.status, j, GroupTxDetail::TxStatus_t::txsUndefined);
10573 getOptional<int>("localPriority", p.localPriority, j, 0);
10574 getOptional<int>("remotePriority", p.remotePriority, j, 0);
10575 getOptional<long>("nonFdxMsHangRemaining", p.nonFdxMsHangRemaining, j, 0);
10576 getOptional<uint32_t>("txId", p.txId, j, 0);
10577 }
10578
10579 //-----------------------------------------------------------
10580 JSON_SERIALIZED_CLASS(GroupCreationDetail)
10588 {
10589 IMPLEMENT_JSON_SERIALIZATION()
10590 IMPLEMENT_WRAPPED_JSON_SERIALIZATION(GroupCreationDetail)
10591 IMPLEMENT_JSON_DOCUMENTATION(GroupCreationDetail)
10592
10593 public:
10595 typedef enum
10596 {
10598 csUndefined = 0,
10599
10601 csOk = 1,
10602
10604 csNoJson = -1,
10605
10607 csConflictingRpListAndCluster = -2,
10608
10610 csAlreadyExists = -3,
10611
10613 csInvalidConfiguration = -4,
10614
10616 csInvalidJson = -5,
10617
10619 csCryptoFailure = -6,
10620
10622 csAudioInputFailure = -7,
10623
10625 csAudioOutputFailure = -8,
10626
10628 csUnsupportedAudioEncoder = -9,
10629
10631 csNoLicense = -10,
10632
10634 csInvalidTransport = -11,
10635
10637 csAudioInputDeviceNotFound = -12,
10638
10640 csAudioOutputDeviceNotFound = -13
10641 } CreationStatus_t;
10642
10644 std::string id;
10645
10648
10650 {
10651 clear();
10652 }
10653
10654 void clear()
10655 {
10656 id.clear();
10657 status = csUndefined;
10658 }
10659 };
10660
10661 static void to_json(nlohmann::json& j, const GroupCreationDetail& p)
10662 {
10663 j = nlohmann::json{
10664 TOJSON_IMPL(id),
10665 TOJSON_IMPL(status)
10666 };
10667 }
10668 static void from_json(const nlohmann::json& j, GroupCreationDetail& p)
10669 {
10670 p.clear();
10671 getOptional<std::string>("id", p.id, j, EMPTY_STRING);
10672 getOptional<GroupCreationDetail::CreationStatus_t>("status", p.status, j, GroupCreationDetail::CreationStatus_t::csUndefined);
10673 }
10674
10675
10676 //-----------------------------------------------------------
10677 JSON_SERIALIZED_CLASS(GroupReconfigurationDetail)
10685 {
10686 IMPLEMENT_JSON_SERIALIZATION()
10687 IMPLEMENT_WRAPPED_JSON_SERIALIZATION(GroupReconfigurationDetail)
10688 IMPLEMENT_JSON_DOCUMENTATION(GroupReconfigurationDetail)
10689
10690 public:
10692 typedef enum
10693 {
10695 rsUndefined = 0,
10696
10698 rsOk = 1,
10699
10701 rsNoJson = -1,
10702
10704 rsInvalidConfiguration = -2,
10705
10707 rsInvalidJson = -3,
10708
10710 rsAudioInputFailure = -4,
10711
10713 rsAudioOutputFailure = -5,
10714
10716 rsDoesNotExist = -6,
10717
10719 rsAudioInputInUse = -7,
10720
10722 rsAudioDisabledForGroup = -8,
10723
10725 rsGroupIsNotAudio = -9
10726 } ReconfigurationStatus_t;
10727
10729 std::string id;
10730
10733
10735 {
10736 clear();
10737 }
10738
10739 void clear()
10740 {
10741 id.clear();
10742 status = rsUndefined;
10743 }
10744 };
10745
10746 static void to_json(nlohmann::json& j, const GroupReconfigurationDetail& p)
10747 {
10748 j = nlohmann::json{
10749 TOJSON_IMPL(id),
10750 TOJSON_IMPL(status)
10751 };
10752 }
10753 static void from_json(const nlohmann::json& j, GroupReconfigurationDetail& p)
10754 {
10755 p.clear();
10756 getOptional<std::string>("id", p.id, j, EMPTY_STRING);
10757 getOptional<GroupReconfigurationDetail::ReconfigurationStatus_t>("status", p.status, j, GroupReconfigurationDetail::ReconfigurationStatus_t::rsUndefined);
10758 }
10759
10760
10761 //-----------------------------------------------------------
10762 JSON_SERIALIZED_CLASS(GroupHealthReport)
10770 {
10771 IMPLEMENT_JSON_SERIALIZATION()
10772 IMPLEMENT_WRAPPED_JSON_SERIALIZATION(GroupHealthReport)
10773 IMPLEMENT_JSON_DOCUMENTATION(GroupHealthReport)
10774
10775 public:
10776 std::string id;
10777 uint64_t lastErrorTs;
10778 uint64_t decryptionErrors;
10779 uint64_t encryptionErrors;
10780 uint64_t unsupportDecoderErrors;
10781 uint64_t decoderFailures;
10782 uint64_t decoderStartFailures;
10783 uint64_t inboundRtpPacketAllocationFailures;
10784 uint64_t inboundRtpPacketLoadFailures;
10785 uint64_t latePacketsDiscarded;
10786 uint64_t jitterBufferInsertionFailures;
10787 uint64_t presenceDeserializationFailures;
10788 uint64_t notRtpErrors;
10789 uint64_t generalErrors;
10790 uint64_t inboundRtpProcessorAllocationFailures;
10791
10793 {
10794 clear();
10795 }
10796
10797 void clear()
10798 {
10799 id.clear();
10800 lastErrorTs = 0;
10801 decryptionErrors = 0;
10802 encryptionErrors = 0;
10803 unsupportDecoderErrors = 0;
10804 decoderFailures = 0;
10805 decoderStartFailures = 0;
10806 inboundRtpPacketAllocationFailures = 0;
10807 inboundRtpPacketLoadFailures = 0;
10808 latePacketsDiscarded = 0;
10809 jitterBufferInsertionFailures = 0;
10810 presenceDeserializationFailures = 0;
10811 notRtpErrors = 0;
10812 generalErrors = 0;
10813 inboundRtpProcessorAllocationFailures = 0;
10814 }
10815 };
10816
10817 static void to_json(nlohmann::json& j, const GroupHealthReport& p)
10818 {
10819 j = nlohmann::json{
10820 TOJSON_IMPL(id),
10821 TOJSON_IMPL(lastErrorTs),
10822 TOJSON_IMPL(decryptionErrors),
10823 TOJSON_IMPL(encryptionErrors),
10824 TOJSON_IMPL(unsupportDecoderErrors),
10825 TOJSON_IMPL(decoderFailures),
10826 TOJSON_IMPL(decoderStartFailures),
10827 TOJSON_IMPL(inboundRtpPacketAllocationFailures),
10828 TOJSON_IMPL(inboundRtpPacketLoadFailures),
10829 TOJSON_IMPL(latePacketsDiscarded),
10830 TOJSON_IMPL(jitterBufferInsertionFailures),
10831 TOJSON_IMPL(presenceDeserializationFailures),
10832 TOJSON_IMPL(notRtpErrors),
10833 TOJSON_IMPL(generalErrors),
10834 TOJSON_IMPL(inboundRtpProcessorAllocationFailures)
10835 };
10836 }
10837 static void from_json(const nlohmann::json& j, GroupHealthReport& p)
10838 {
10839 p.clear();
10840 getOptional<std::string>("id", p.id, j, EMPTY_STRING);
10841 getOptional<uint64_t>("lastErrorTs", p.lastErrorTs, j, 0);
10842 getOptional<uint64_t>("decryptionErrors", p.decryptionErrors, j, 0);
10843 getOptional<uint64_t>("encryptionErrors", p.encryptionErrors, j, 0);
10844 getOptional<uint64_t>("unsupportDecoderErrors", p.unsupportDecoderErrors, j, 0);
10845 getOptional<uint64_t>("decoderFailures", p.decoderFailures, j, 0);
10846 getOptional<uint64_t>("decoderStartFailures", p.decoderStartFailures, j, 0);
10847 getOptional<uint64_t>("inboundRtpPacketAllocationFailures", p.inboundRtpPacketAllocationFailures, j, 0);
10848 getOptional<uint64_t>("inboundRtpPacketLoadFailures", p.inboundRtpPacketLoadFailures, j, 0);
10849 getOptional<uint64_t>("latePacketsDiscarded", p.latePacketsDiscarded, j, 0);
10850 getOptional<uint64_t>("jitterBufferInsertionFailures", p.jitterBufferInsertionFailures, j, 0);
10851 getOptional<uint64_t>("presenceDeserializationFailures", p.presenceDeserializationFailures, j, 0);
10852 getOptional<uint64_t>("notRtpErrors", p.notRtpErrors, j, 0);
10853 getOptional<uint64_t>("generalErrors", p.generalErrors, j, 0);
10854 getOptional<uint64_t>("inboundRtpProcessorAllocationFailures", p.inboundRtpProcessorAllocationFailures, j, 0);
10855 }
10856
10857 //-----------------------------------------------------------
10858 JSON_SERIALIZED_CLASS(InboundProcessorStats)
10866 {
10867 IMPLEMENT_JSON_SERIALIZATION()
10868 IMPLEMENT_WRAPPED_JSON_SERIALIZATION(InboundProcessorStats)
10869 IMPLEMENT_JSON_DOCUMENTATION(InboundProcessorStats)
10870
10871 public:
10872 uint32_t ssrc;
10873 double jitter;
10874 uint64_t minRtpSamplesInQueue;
10875 uint64_t maxRtpSamplesInQueue;
10876 uint64_t totalSamplesTrimmed;
10877 uint64_t underruns;
10878 uint64_t overruns;
10879 uint64_t samplesInQueue;
10880 uint64_t totalPacketsReceived;
10881 uint64_t totalPacketsLost;
10882 uint64_t totalPacketsDiscarded;
10883
10885 {
10886 clear();
10887 }
10888
10889 void clear()
10890 {
10891 ssrc = 0;
10892 jitter = 0.0;
10893 minRtpSamplesInQueue = 0;
10894 maxRtpSamplesInQueue = 0;
10895 totalSamplesTrimmed = 0;
10896 underruns = 0;
10897 overruns = 0;
10898 samplesInQueue = 0;
10899 totalPacketsReceived = 0;
10900 totalPacketsLost = 0;
10901 totalPacketsDiscarded = 0;
10902 }
10903 };
10904
10905 static void to_json(nlohmann::json& j, const InboundProcessorStats& p)
10906 {
10907 j = nlohmann::json{
10908 TOJSON_IMPL(ssrc),
10909 TOJSON_IMPL(jitter),
10910 TOJSON_IMPL(minRtpSamplesInQueue),
10911 TOJSON_IMPL(maxRtpSamplesInQueue),
10912 TOJSON_IMPL(totalSamplesTrimmed),
10913 TOJSON_IMPL(underruns),
10914 TOJSON_IMPL(overruns),
10915 TOJSON_IMPL(samplesInQueue),
10916 TOJSON_IMPL(totalPacketsReceived),
10917 TOJSON_IMPL(totalPacketsLost),
10918 TOJSON_IMPL(totalPacketsDiscarded)
10919 };
10920 }
10921 static void from_json(const nlohmann::json& j, InboundProcessorStats& p)
10922 {
10923 p.clear();
10924 getOptional<uint32_t>("ssrc", p.ssrc, j, 0);
10925 getOptional<double>("jitter", p.jitter, j, 0.0);
10926 getOptional<uint64_t>("minRtpSamplesInQueue", p.minRtpSamplesInQueue, j, 0);
10927 getOptional<uint64_t>("maxRtpSamplesInQueue", p.maxRtpSamplesInQueue, j, 0);
10928 getOptional<uint64_t>("totalSamplesTrimmed", p.totalSamplesTrimmed, j, 0);
10929 getOptional<uint64_t>("underruns", p.underruns, j, 0);
10930 getOptional<uint64_t>("overruns", p.overruns, j, 0);
10931 getOptional<uint64_t>("samplesInQueue", p.samplesInQueue, j, 0);
10932 getOptional<uint64_t>("totalPacketsReceived", p.totalPacketsReceived, j, 0);
10933 getOptional<uint64_t>("totalPacketsLost", p.totalPacketsLost, j, 0);
10934 getOptional<uint64_t>("totalPacketsDiscarded", p.totalPacketsDiscarded, j, 0);
10935 }
10936
10937 //-----------------------------------------------------------
10938 JSON_SERIALIZED_CLASS(TrafficCounter)
10946 {
10947 IMPLEMENT_JSON_SERIALIZATION()
10948 IMPLEMENT_WRAPPED_JSON_SERIALIZATION(TrafficCounter)
10949 IMPLEMENT_JSON_DOCUMENTATION(TrafficCounter)
10950
10951 public:
10952 uint64_t packets;
10953 uint64_t bytes;
10954 uint64_t errors;
10955
10957 {
10958 clear();
10959 }
10960
10961 void clear()
10962 {
10963 packets = 0;
10964 bytes = 0;
10965 errors = 0;
10966 }
10967 };
10968
10969 static void to_json(nlohmann::json& j, const TrafficCounter& p)
10970 {
10971 j = nlohmann::json{
10972 TOJSON_IMPL(packets),
10973 TOJSON_IMPL(bytes),
10974 TOJSON_IMPL(errors)
10975 };
10976 }
10977 static void from_json(const nlohmann::json& j, TrafficCounter& p)
10978 {
10979 p.clear();
10980 getOptional<uint64_t>("packets", p.packets, j, 0);
10981 getOptional<uint64_t>("bytes", p.bytes, j, 0);
10982 getOptional<uint64_t>("errors", p.errors, j, 0);
10983 }
10984
10985 //-----------------------------------------------------------
10986 JSON_SERIALIZED_CLASS(GroupStats)
10994 {
10995 IMPLEMENT_JSON_SERIALIZATION()
10996 IMPLEMENT_WRAPPED_JSON_SERIALIZATION(GroupStats)
10997 IMPLEMENT_JSON_DOCUMENTATION(GroupStats)
10998
10999 public:
11000 std::string id;
11001 //std::vector<InboundProcessorStats> rtpInbounds;
11002 TrafficCounter rxTraffic;
11003 TrafficCounter txTraffic;
11004
11005 GroupStats()
11006 {
11007 clear();
11008 }
11009
11010 void clear()
11011 {
11012 id.clear();
11013 //rtpInbounds.clear();
11014 rxTraffic.clear();
11015 txTraffic.clear();
11016 }
11017 };
11018
11019 static void to_json(nlohmann::json& j, const GroupStats& p)
11020 {
11021 j = nlohmann::json{
11022 TOJSON_IMPL(id),
11023 //TOJSON_IMPL(rtpInbounds),
11024 TOJSON_IMPL(rxTraffic),
11025 TOJSON_IMPL(txTraffic)
11026 };
11027 }
11028 static void from_json(const nlohmann::json& j, GroupStats& p)
11029 {
11030 p.clear();
11031 getOptional<std::string>("id", p.id, j, EMPTY_STRING);
11032 //getOptional<std::vector<InboundProcessorStats>>("rtpInbounds", p.rtpInbounds, j);
11033 getOptional<TrafficCounter>("rxTraffic", p.rxTraffic, j);
11034 getOptional<TrafficCounter>("txTraffic", p.txTraffic, j);
11035 }
11036
11037 //-----------------------------------------------------------
11038 JSON_SERIALIZED_CLASS(RallypointConnectionDetail)
11046 {
11047 IMPLEMENT_JSON_SERIALIZATION()
11048 IMPLEMENT_WRAPPED_JSON_SERIALIZATION(RallypointConnectionDetail)
11049 IMPLEMENT_JSON_DOCUMENTATION(RallypointConnectionDetail)
11050
11051 public:
11053 std::string internalId;
11054
11056 std::string host;
11057
11059 int port;
11060
11063
11066
11068 {
11069 clear();
11070 }
11071
11072 void clear()
11073 {
11074 internalId.clear();
11075 host.clear();
11076 port = 0;
11077 msToNextConnectionAttempt = 0;
11078 serverProcessingMs = -1.0f;
11079 }
11080 };
11081
11082 static void to_json(nlohmann::json& j, const RallypointConnectionDetail& p)
11083 {
11084 j = nlohmann::json{
11085 TOJSON_IMPL(internalId),
11086 TOJSON_IMPL(host),
11087 TOJSON_IMPL(port)
11088 };
11089
11090 if(p.msToNextConnectionAttempt > 0)
11091 {
11092 j["msToNextConnectionAttempt"] = p.msToNextConnectionAttempt;
11093 }
11094
11095 if(p.serverProcessingMs >= 0.0)
11096 {
11097 j["serverProcessingMs"] = p.serverProcessingMs;
11098 }
11099 }
11100 static void from_json(const nlohmann::json& j, RallypointConnectionDetail& p)
11101 {
11102 p.clear();
11103 getOptional<std::string>("internalId", p.internalId, j, EMPTY_STRING);
11104 getOptional<std::string>("host", p.host, j, EMPTY_STRING);
11105 getOptional<int>("port", p.port, j, 0);
11106 getOptional<uint64_t>("msToNextConnectionAttempt", p.msToNextConnectionAttempt, j, 0);
11107 getOptional<float>("serverProcessingMs", p.serverProcessingMs, j, -1.0);
11108 }
11109
11110 //-----------------------------------------------------------
11111 JSON_SERIALIZED_CLASS(TranslationSession)
11122 {
11123 IMPLEMENT_JSON_SERIALIZATION()
11124 IMPLEMENT_JSON_DOCUMENTATION(TranslationSession)
11125
11126 public:
11128 std::string id;
11129
11131 std::string name;
11132
11134 std::vector<std::string> groups;
11135
11138
11140 {
11141 clear();
11142 }
11143
11144 void clear()
11145 {
11146 id.clear();
11147 name.clear();
11148 groups.clear();
11149 enabled = true;
11150 }
11151 };
11152
11153 static void to_json(nlohmann::json& j, const TranslationSession& p)
11154 {
11155 j = nlohmann::json{
11156 TOJSON_IMPL(id),
11157 TOJSON_IMPL(name),
11158 TOJSON_IMPL(groups),
11159 TOJSON_IMPL(enabled)
11160 };
11161 }
11162 static void from_json(const nlohmann::json& j, TranslationSession& p)
11163 {
11164 p.clear();
11165 FROMJSON_IMPL(id, std::string, EMPTY_STRING);
11166 FROMJSON_IMPL(name, std::string, EMPTY_STRING);
11167 getOptional<std::vector<std::string>>("groups", p.groups, j);
11168 FROMJSON_IMPL(enabled, bool, true);
11169 }
11170
11171 //-----------------------------------------------------------
11172 JSON_SERIALIZED_CLASS(TranslationConfiguration)
11183 {
11184 IMPLEMENT_JSON_SERIALIZATION()
11185 IMPLEMENT_JSON_DOCUMENTATION(TranslationConfiguration)
11186
11187 public:
11189 std::vector<TranslationSession> sessions;
11190
11192 std::vector<Group> groups;
11193
11195 {
11196 clear();
11197 }
11198
11199 void clear()
11200 {
11201 sessions.clear();
11202 groups.clear();
11203 }
11204 };
11205
11206 static void to_json(nlohmann::json& j, const TranslationConfiguration& p)
11207 {
11208 j = nlohmann::json{
11209 TOJSON_IMPL(sessions),
11210 TOJSON_IMPL(groups)
11211 };
11212 }
11213 static void from_json(const nlohmann::json& j, TranslationConfiguration& p)
11214 {
11215 p.clear();
11216 getOptional<std::vector<TranslationSession>>("sessions", p.sessions, j);
11217 getOptional<std::vector<Group>>("groups", p.groups, j);
11218 }
11219
11220 //-----------------------------------------------------------
11221 JSON_SERIALIZED_CLASS(LingoServerStatusReportConfiguration)
11232 {
11233 IMPLEMENT_JSON_SERIALIZATION()
11234 IMPLEMENT_JSON_DOCUMENTATION(LingoServerStatusReportConfiguration)
11235
11236 public:
11238 std::string fileName;
11239
11242
11245
11247 std::string runCmd;
11248
11251
11254
11257
11259 {
11260 clear();
11261 }
11262
11263 void clear()
11264 {
11265 fileName.clear();
11266 intervalSecs = 60;
11267 enabled = false;
11268 includeGroupDetail = false;
11269 includeSessionDetail = false;
11270 includeSessionGroupDetail = false;
11271 runCmd.clear();
11272 }
11273 };
11274
11275 static void to_json(nlohmann::json& j, const LingoServerStatusReportConfiguration& p)
11276 {
11277 j = nlohmann::json{
11278 TOJSON_IMPL(fileName),
11279 TOJSON_IMPL(intervalSecs),
11280 TOJSON_IMPL(enabled),
11281 TOJSON_IMPL(includeGroupDetail),
11282 TOJSON_IMPL(includeSessionDetail),
11283 TOJSON_IMPL(includeSessionGroupDetail),
11284 TOJSON_IMPL(runCmd)
11285 };
11286 }
11287 static void from_json(const nlohmann::json& j, LingoServerStatusReportConfiguration& p)
11288 {
11289 p.clear();
11290 getOptional<std::string>("fileName", p.fileName, j);
11291 getOptional<int>("intervalSecs", p.intervalSecs, j, 60);
11292 getOptional<bool>("enabled", p.enabled, j, false);
11293 getOptional<std::string>("runCmd", p.runCmd, j);
11294 getOptional<bool>("includeGroupDetail", p.includeGroupDetail, j, false);
11295 getOptional<bool>("includeSessionDetail", p.includeSessionDetail, j, false);
11296 getOptional<bool>("includeSessionGroupDetail", p.includeSessionGroupDetail, j, false);
11297 }
11298
11299 //-----------------------------------------------------------
11300 JSON_SERIALIZED_CLASS(LingoServerInternals)
11313 {
11314 IMPLEMENT_JSON_SERIALIZATION()
11315 IMPLEMENT_JSON_DOCUMENTATION(LingoServerInternals)
11316
11317 public:
11320
11323
11326
11328 {
11329 clear();
11330 }
11331
11332 void clear()
11333 {
11334 watchdog.clear();
11335 tuning.clear();
11336 housekeeperIntervalMs = 1000;
11337 }
11338 };
11339
11340 static void to_json(nlohmann::json& j, const LingoServerInternals& p)
11341 {
11342 j = nlohmann::json{
11343 TOJSON_IMPL(watchdog),
11344 TOJSON_IMPL(housekeeperIntervalMs),
11345 TOJSON_IMPL(tuning)
11346 };
11347 }
11348 static void from_json(const nlohmann::json& j, LingoServerInternals& p)
11349 {
11350 p.clear();
11351 getOptional<WatchdogSettings>("watchdog", p.watchdog, j);
11352 getOptional<int>("housekeeperIntervalMs", p.housekeeperIntervalMs, j, 1000);
11353 getOptional<TuningSettings>("tuning", p.tuning, j);
11354 }
11355
11356 //-----------------------------------------------------------
11357 JSON_SERIALIZED_CLASS(LingoServerConfiguration)
11367 {
11368 IMPLEMENT_JSON_SERIALIZATION()
11369 IMPLEMENT_JSON_DOCUMENTATION(LingoServerConfiguration)
11370
11371 public:
11373 std::string id;
11374
11377
11380
11383
11386
11389
11392
11395
11398
11401
11404
11407
11410
11413
11416
11418 {
11419 clear();
11420 }
11421
11422 void clear()
11423 {
11424 id.clear();
11425 serviceConfigurationFileCheckSecs = 60;
11426 lingoConfigurationFileName.clear();
11427 lingoConfigurationFileCommand.clear();
11428 lingoConfigurationFileCheckSecs = 60;
11429 statusReport.clear();
11430 externalHealthCheckResponder.clear();
11431 internals.clear();
11432 certStoreFileName.clear();
11433 certStorePasswordHex.clear();
11434 enginePolicy.clear();
11435 configurationCheckSignalName = "rts.22f4ec3.${id}";
11436 fipsCrypto.clear();
11437 proxy.clear();
11438 nsm.clear();
11439 }
11440 };
11441
11442 static void to_json(nlohmann::json& j, const LingoServerConfiguration& p)
11443 {
11444 j = nlohmann::json{
11445 TOJSON_IMPL(id),
11446 TOJSON_IMPL(serviceConfigurationFileCheckSecs),
11447 TOJSON_IMPL(lingoConfigurationFileName),
11448 TOJSON_IMPL(lingoConfigurationFileCommand),
11449 TOJSON_IMPL(lingoConfigurationFileCheckSecs),
11450 TOJSON_IMPL(statusReport),
11451 TOJSON_IMPL(externalHealthCheckResponder),
11452 TOJSON_IMPL(internals),
11453 TOJSON_IMPL(certStoreFileName),
11454 TOJSON_IMPL(certStorePasswordHex),
11455 TOJSON_IMPL(enginePolicy),
11456 TOJSON_IMPL(configurationCheckSignalName),
11457 TOJSON_IMPL(fipsCrypto),
11458 TOJSON_IMPL(proxy),
11459 TOJSON_IMPL(nsm)
11460 };
11461 }
11462 static void from_json(const nlohmann::json& j, LingoServerConfiguration& p)
11463 {
11464 p.clear();
11465 getOptional<std::string>("id", p.id, j);
11466 getOptional<int>("serviceConfigurationFileCheckSecs", p.serviceConfigurationFileCheckSecs, j, 60);
11467 getOptional<std::string>("lingoConfigurationFileName", p.lingoConfigurationFileName, j);
11468 getOptional<std::string>("lingoConfigurationFileCommand", p.lingoConfigurationFileCommand, j);
11469 getOptional<int>("lingoConfigurationFileCheckSecs", p.lingoConfigurationFileCheckSecs, j, 60);
11470 getOptional<LingoServerStatusReportConfiguration>("statusReport", p.statusReport, j);
11471 getOptional<ExternalHealthCheckResponder>("externalHealthCheckResponder", p.externalHealthCheckResponder, j);
11472 getOptional<LingoServerInternals>("internals", p.internals, j);
11473 getOptional<std::string>("certStoreFileName", p.certStoreFileName, j);
11474 getOptional<std::string>("certStorePasswordHex", p.certStorePasswordHex, j);
11475 j.at("enginePolicy").get_to(p.enginePolicy);
11476 getOptional<std::string>("configurationCheckSignalName", p.configurationCheckSignalName, j, "rts.22f4ec3.${id}");
11477 getOptional<FipsCryptoSettings>("fipsCrypo", p.fipsCrypto, j);
11478 getOptional<NetworkAddress>("proxy", p.proxy, j);
11479 getOptional<NsmConfiguration>("nsm", p.nsm, j);
11480 }
11481
11482
11483 //-----------------------------------------------------------
11484 JSON_SERIALIZED_CLASS(VoiceToVoiceSession)
11495 {
11496 IMPLEMENT_JSON_SERIALIZATION()
11497 IMPLEMENT_JSON_DOCUMENTATION(VoiceToVoiceSession)
11498
11499 public:
11501 std::string id;
11502
11504 std::string name;
11505
11507 std::vector<std::string> groups;
11508
11511
11513 {
11514 clear();
11515 }
11516
11517 void clear()
11518 {
11519 id.clear();
11520 name.clear();
11521 groups.clear();
11522 enabled = true;
11523 }
11524 };
11525
11526 static void to_json(nlohmann::json& j, const VoiceToVoiceSession& p)
11527 {
11528 j = nlohmann::json{
11529 TOJSON_IMPL(id),
11530 TOJSON_IMPL(name),
11531 TOJSON_IMPL(groups),
11532 TOJSON_IMPL(enabled)
11533 };
11534 }
11535 static void from_json(const nlohmann::json& j, VoiceToVoiceSession& p)
11536 {
11537 p.clear();
11538 FROMJSON_IMPL(id, std::string, EMPTY_STRING);
11539 FROMJSON_IMPL(name, std::string, EMPTY_STRING);
11540 getOptional<std::vector<std::string>>("groups", p.groups, j);
11541 FROMJSON_IMPL(enabled, bool, true);
11542 }
11543
11544 //-----------------------------------------------------------
11545 JSON_SERIALIZED_CLASS(LingoConfiguration)
11556 {
11557 IMPLEMENT_JSON_SERIALIZATION()
11558 IMPLEMENT_JSON_DOCUMENTATION(LingoConfiguration)
11559
11560 public:
11562 std::vector<VoiceToVoiceSession> voiceToVoiceSessions;
11563
11565 std::vector<Group> groups;
11566
11568 {
11569 clear();
11570 }
11571
11572 void clear()
11573 {
11574 voiceToVoiceSessions.clear();
11575 groups.clear();
11576 }
11577 };
11578
11579 static void to_json(nlohmann::json& j, const LingoConfiguration& p)
11580 {
11581 j = nlohmann::json{
11582 TOJSON_IMPL(voiceToVoiceSessions),
11583 TOJSON_IMPL(groups)
11584 };
11585 }
11586 static void from_json(const nlohmann::json& j, LingoConfiguration& p)
11587 {
11588 p.clear();
11589 getOptional<std::vector<VoiceToVoiceSession>>("voiceToVoiceSessions", p.voiceToVoiceSessions, j);
11590 getOptional<std::vector<Group>>("groups", p.groups, j);
11591 }
11592
11593 //-----------------------------------------------------------
11594 JSON_SERIALIZED_CLASS(BridgingConfiguration)
11605 {
11606 IMPLEMENT_JSON_SERIALIZATION()
11607 IMPLEMENT_JSON_DOCUMENTATION(BridgingConfiguration)
11608
11609 public:
11611 std::vector<Bridge> bridges;
11612
11614 std::vector<Group> groups;
11615
11617 {
11618 clear();
11619 }
11620
11621 void clear()
11622 {
11623 bridges.clear();
11624 groups.clear();
11625 }
11626 };
11627
11628 static void to_json(nlohmann::json& j, const BridgingConfiguration& p)
11629 {
11630 j = nlohmann::json{
11631 TOJSON_IMPL(bridges),
11632 TOJSON_IMPL(groups)
11633 };
11634 }
11635 static void from_json(const nlohmann::json& j, BridgingConfiguration& p)
11636 {
11637 p.clear();
11638 getOptional<std::vector<Bridge>>("bridges", p.bridges, j);
11639 getOptional<std::vector<Group>>("groups", p.groups, j);
11640 }
11641
11642 //-----------------------------------------------------------
11643 JSON_SERIALIZED_CLASS(BridgingServerStatusReportConfiguration)
11654 {
11655 IMPLEMENT_JSON_SERIALIZATION()
11656 IMPLEMENT_JSON_DOCUMENTATION(BridgingServerStatusReportConfiguration)
11657
11658 public:
11660 std::string fileName;
11661
11664
11667
11669 std::string runCmd;
11670
11673
11676
11679
11681 {
11682 clear();
11683 }
11684
11685 void clear()
11686 {
11687 fileName.clear();
11688 intervalSecs = 60;
11689 enabled = false;
11690 includeGroupDetail = false;
11691 includeBridgeDetail = false;
11692 includeBridgeGroupDetail = false;
11693 runCmd.clear();
11694 }
11695 };
11696
11697 static void to_json(nlohmann::json& j, const BridgingServerStatusReportConfiguration& p)
11698 {
11699 j = nlohmann::json{
11700 TOJSON_IMPL(fileName),
11701 TOJSON_IMPL(intervalSecs),
11702 TOJSON_IMPL(enabled),
11703 TOJSON_IMPL(includeGroupDetail),
11704 TOJSON_IMPL(includeBridgeDetail),
11705 TOJSON_IMPL(includeBridgeGroupDetail),
11706 TOJSON_IMPL(runCmd)
11707 };
11708 }
11709 static void from_json(const nlohmann::json& j, BridgingServerStatusReportConfiguration& p)
11710 {
11711 p.clear();
11712 getOptional<std::string>("fileName", p.fileName, j);
11713 getOptional<int>("intervalSecs", p.intervalSecs, j, 60);
11714 getOptional<bool>("enabled", p.enabled, j, false);
11715 getOptional<std::string>("runCmd", p.runCmd, j);
11716 getOptional<bool>("includeGroupDetail", p.includeGroupDetail, j, false);
11717 getOptional<bool>("includeBridgeDetail", p.includeBridgeDetail, j, false);
11718 getOptional<bool>("includeBridgeGroupDetail", p.includeBridgeGroupDetail, j, false);
11719 }
11720
11721 //-----------------------------------------------------------
11722 JSON_SERIALIZED_CLASS(BridgingServerInternals)
11735 {
11736 IMPLEMENT_JSON_SERIALIZATION()
11737 IMPLEMENT_JSON_DOCUMENTATION(BridgingServerInternals)
11738
11739 public:
11742
11745
11748
11750 {
11751 clear();
11752 }
11753
11754 void clear()
11755 {
11756 watchdog.clear();
11757 tuning.clear();
11758 housekeeperIntervalMs = 1000;
11759 }
11760 };
11761
11762 static void to_json(nlohmann::json& j, const BridgingServerInternals& p)
11763 {
11764 j = nlohmann::json{
11765 TOJSON_IMPL(watchdog),
11766 TOJSON_IMPL(housekeeperIntervalMs),
11767 TOJSON_IMPL(tuning)
11768 };
11769 }
11770 static void from_json(const nlohmann::json& j, BridgingServerInternals& p)
11771 {
11772 p.clear();
11773 getOptional<WatchdogSettings>("watchdog", p.watchdog, j);
11774 getOptional<int>("housekeeperIntervalMs", p.housekeeperIntervalMs, j, 1000);
11775 getOptional<TuningSettings>("tuning", p.tuning, j);
11776 }
11777
11778 //-----------------------------------------------------------
11779 JSON_SERIALIZED_CLASS(BridgingServerConfiguration)
11789 {
11790 IMPLEMENT_JSON_SERIALIZATION()
11791 IMPLEMENT_JSON_DOCUMENTATION(BridgingServerConfiguration)
11792
11793 public:
11800 typedef enum
11801 {
11803 omRaw = 0,
11804
11807 omMultistream = 1,
11808
11811 omMixedStream = 2,
11812
11814 omADictatedByGroup = 3,
11815 } OpMode_t;
11816
11818 std::string id;
11819
11822
11825
11828
11831
11834
11837
11840
11843
11846
11849
11852
11855
11858
11861
11863 {
11864 clear();
11865 }
11866
11867 void clear()
11868 {
11869 id.clear();
11870 mode = omRaw;
11871 serviceConfigurationFileCheckSecs = 60;
11872 bridgingConfigurationFileName.clear();
11873 bridgingConfigurationFileCommand.clear();
11874 bridgingConfigurationFileCheckSecs = 60;
11875 statusReport.clear();
11876 externalHealthCheckResponder.clear();
11877 internals.clear();
11878 certStoreFileName.clear();
11879 certStorePasswordHex.clear();
11880 enginePolicy.clear();
11881 configurationCheckSignalName = "rts.6cc0651.${id}";
11882 fipsCrypto.clear();
11883 nsm.clear();
11884 }
11885 };
11886
11887 static void to_json(nlohmann::json& j, const BridgingServerConfiguration& p)
11888 {
11889 j = nlohmann::json{
11890 TOJSON_IMPL(id),
11891 TOJSON_IMPL(mode),
11892 TOJSON_IMPL(serviceConfigurationFileCheckSecs),
11893 TOJSON_IMPL(bridgingConfigurationFileName),
11894 TOJSON_IMPL(bridgingConfigurationFileCommand),
11895 TOJSON_IMPL(bridgingConfigurationFileCheckSecs),
11896 TOJSON_IMPL(statusReport),
11897 TOJSON_IMPL(externalHealthCheckResponder),
11898 TOJSON_IMPL(internals),
11899 TOJSON_IMPL(certStoreFileName),
11900 TOJSON_IMPL(certStorePasswordHex),
11901 TOJSON_IMPL(enginePolicy),
11902 TOJSON_IMPL(configurationCheckSignalName),
11903 TOJSON_IMPL(fipsCrypto),
11904 TOJSON_IMPL(nsm)
11905 };
11906 }
11907 static void from_json(const nlohmann::json& j, BridgingServerConfiguration& p)
11908 {
11909 p.clear();
11910 getOptional<std::string>("id", p.id, j);
11911 getOptional<BridgingServerConfiguration::OpMode_t>("mode", p.mode, j, BridgingServerConfiguration::OpMode_t::omRaw);
11912 getOptional<int>("serviceConfigurationFileCheckSecs", p.serviceConfigurationFileCheckSecs, j, 60);
11913 getOptional<std::string>("bridgingConfigurationFileName", p.bridgingConfigurationFileName, j);
11914 getOptional<std::string>("bridgingConfigurationFileCommand", p.bridgingConfigurationFileCommand, j);
11915 getOptional<int>("bridgingConfigurationFileCheckSecs", p.bridgingConfigurationFileCheckSecs, j, 60);
11916 getOptional<BridgingServerStatusReportConfiguration>("statusReport", p.statusReport, j);
11917 getOptional<ExternalHealthCheckResponder>("externalHealthCheckResponder", p.externalHealthCheckResponder, j);
11918 getOptional<BridgingServerInternals>("internals", p.internals, j);
11919 getOptional<std::string>("certStoreFileName", p.certStoreFileName, j);
11920 getOptional<std::string>("certStorePasswordHex", p.certStorePasswordHex, j);
11921 j.at("enginePolicy").get_to(p.enginePolicy);
11922 getOptional<std::string>("configurationCheckSignalName", p.configurationCheckSignalName, j, "rts.6cc0651.${id}");
11923 getOptional<FipsCryptoSettings>("fipsCrypto", p.fipsCrypto, j);
11924 getOptional<NsmConfiguration>("nsm", p.nsm, j);
11925 }
11926
11927
11928 //-----------------------------------------------------------
11929 JSON_SERIALIZED_CLASS(EarGroupsConfiguration)
11940 {
11941 IMPLEMENT_JSON_SERIALIZATION()
11942 IMPLEMENT_JSON_DOCUMENTATION(EarGroupsConfiguration)
11943
11944 public:
11946 std::vector<Group> groups;
11947
11949 {
11950 clear();
11951 }
11952
11953 void clear()
11954 {
11955 groups.clear();
11956 }
11957 };
11958
11959 static void to_json(nlohmann::json& j, const EarGroupsConfiguration& p)
11960 {
11961 j = nlohmann::json{
11962 TOJSON_IMPL(groups)
11963 };
11964 }
11965 static void from_json(const nlohmann::json& j, EarGroupsConfiguration& p)
11966 {
11967 p.clear();
11968 getOptional<std::vector<Group>>("groups", p.groups, j);
11969 }
11970
11971 //-----------------------------------------------------------
11972 JSON_SERIALIZED_CLASS(EarServerStatusReportConfiguration)
11983 {
11984 IMPLEMENT_JSON_SERIALIZATION()
11985 IMPLEMENT_JSON_DOCUMENTATION(EarServerStatusReportConfiguration)
11986
11987 public:
11989 std::string fileName;
11990
11993
11996
11998 std::string runCmd;
11999
12002
12004 {
12005 clear();
12006 }
12007
12008 void clear()
12009 {
12010 fileName.clear();
12011 intervalSecs = 60;
12012 enabled = false;
12013 includeGroupDetail = false;
12014 runCmd.clear();
12015 }
12016 };
12017
12018 static void to_json(nlohmann::json& j, const EarServerStatusReportConfiguration& p)
12019 {
12020 j = nlohmann::json{
12021 TOJSON_IMPL(fileName),
12022 TOJSON_IMPL(intervalSecs),
12023 TOJSON_IMPL(enabled),
12024 TOJSON_IMPL(includeGroupDetail),
12025 TOJSON_IMPL(runCmd)
12026 };
12027 }
12028 static void from_json(const nlohmann::json& j, EarServerStatusReportConfiguration& p)
12029 {
12030 p.clear();
12031 getOptional<std::string>("fileName", p.fileName, j);
12032 getOptional<int>("intervalSecs", p.intervalSecs, j, 60);
12033 getOptional<bool>("enabled", p.enabled, j, false);
12034 getOptional<std::string>("runCmd", p.runCmd, j);
12035 getOptional<bool>("includeGroupDetail", p.includeGroupDetail, j, false);
12036 }
12037
12038 //-----------------------------------------------------------
12039 JSON_SERIALIZED_CLASS(EarServerInternals)
12052 {
12053 IMPLEMENT_JSON_SERIALIZATION()
12054 IMPLEMENT_JSON_DOCUMENTATION(EarServerInternals)
12055
12056 public:
12059
12062
12065
12067 {
12068 clear();
12069 }
12070
12071 void clear()
12072 {
12073 watchdog.clear();
12074 tuning.clear();
12075 housekeeperIntervalMs = 1000;
12076 }
12077 };
12078
12079 static void to_json(nlohmann::json& j, const EarServerInternals& p)
12080 {
12081 j = nlohmann::json{
12082 TOJSON_IMPL(watchdog),
12083 TOJSON_IMPL(housekeeperIntervalMs),
12084 TOJSON_IMPL(tuning)
12085 };
12086 }
12087 static void from_json(const nlohmann::json& j, EarServerInternals& p)
12088 {
12089 p.clear();
12090 getOptional<WatchdogSettings>("watchdog", p.watchdog, j);
12091 getOptional<int>("housekeeperIntervalMs", p.housekeeperIntervalMs, j, 1000);
12092 getOptional<TuningSettings>("tuning", p.tuning, j);
12093 }
12094
12095 //-----------------------------------------------------------
12096 JSON_SERIALIZED_CLASS(EarServerConfiguration)
12106 {
12107 IMPLEMENT_JSON_SERIALIZATION()
12108 IMPLEMENT_JSON_DOCUMENTATION(EarServerConfiguration)
12109
12110 public:
12111
12113 std::string id;
12114
12117
12120
12123
12126
12129
12132
12135
12138
12141
12144
12147
12150
12153
12155 {
12156 clear();
12157 }
12158
12159 void clear()
12160 {
12161 id.clear();
12162 serviceConfigurationFileCheckSecs = 60;
12163 groupsConfigurationFileName.clear();
12164 groupsConfigurationFileCommand.clear();
12165 groupsConfigurationFileCheckSecs = 60;
12166 statusReport.clear();
12167 externalHealthCheckResponder.clear();
12168 internals.clear();
12169 certStoreFileName.clear();
12170 certStorePasswordHex.clear();
12171 enginePolicy.clear();
12172 configurationCheckSignalName = "rts.9a164fa.${id}";
12173 fipsCrypto.clear();
12174 nsm.clear();
12175 }
12176 };
12177
12178 static void to_json(nlohmann::json& j, const EarServerConfiguration& p)
12179 {
12180 j = nlohmann::json{
12181 TOJSON_IMPL(id),
12182 TOJSON_IMPL(serviceConfigurationFileCheckSecs),
12183 TOJSON_IMPL(groupsConfigurationFileName),
12184 TOJSON_IMPL(groupsConfigurationFileCommand),
12185 TOJSON_IMPL(groupsConfigurationFileCheckSecs),
12186 TOJSON_IMPL(statusReport),
12187 TOJSON_IMPL(externalHealthCheckResponder),
12188 TOJSON_IMPL(internals),
12189 TOJSON_IMPL(certStoreFileName),
12190 TOJSON_IMPL(certStorePasswordHex),
12191 TOJSON_IMPL(enginePolicy),
12192 TOJSON_IMPL(configurationCheckSignalName),
12193 TOJSON_IMPL(fipsCrypto),
12194 TOJSON_IMPL(nsm)
12195 };
12196 }
12197 static void from_json(const nlohmann::json& j, EarServerConfiguration& p)
12198 {
12199 p.clear();
12200 getOptional<std::string>("id", p.id, j);
12201 getOptional<int>("serviceConfigurationFileCheckSecs", p.serviceConfigurationFileCheckSecs, j, 60);
12202 getOptional<std::string>("groupsConfigurationFileName", p.groupsConfigurationFileName, j);
12203 getOptional<std::string>("groupsConfigurationFileCommand", p.groupsConfigurationFileCommand, j);
12204 getOptional<int>("groupsConfigurationFileCheckSecs", p.groupsConfigurationFileCheckSecs, j, 60);
12205 getOptional<EarServerStatusReportConfiguration>("statusReport", p.statusReport, j);
12206 getOptional<ExternalHealthCheckResponder>("externalHealthCheckResponder", p.externalHealthCheckResponder, j);
12207 getOptional<EarServerInternals>("internals", p.internals, j);
12208 getOptional<std::string>("certStoreFileName", p.certStoreFileName, j);
12209 getOptional<std::string>("certStorePasswordHex", p.certStorePasswordHex, j);
12210 j.at("enginePolicy").get_to(p.enginePolicy);
12211 getOptional<std::string>("configurationCheckSignalName", p.configurationCheckSignalName, j, "rts.9a164fa.${id}");
12212 getOptional<FipsCryptoSettings>("fipsCrypto", p.fipsCrypto, j);
12213 getOptional<NsmConfiguration>("nsm", p.nsm, j);
12214 }
12215
12216//-----------------------------------------------------------
12217 JSON_SERIALIZED_CLASS(EngageSemGroupsConfiguration)
12228 {
12229 IMPLEMENT_JSON_SERIALIZATION()
12230 IMPLEMENT_JSON_DOCUMENTATION(EngageSemGroupsConfiguration)
12231
12232 public:
12234 std::vector<Group> groups;
12235
12237 {
12238 clear();
12239 }
12240
12241 void clear()
12242 {
12243 groups.clear();
12244 }
12245 };
12246
12247 static void to_json(nlohmann::json& j, const EngageSemGroupsConfiguration& p)
12248 {
12249 j = nlohmann::json{
12250 TOJSON_IMPL(groups)
12251 };
12252 }
12253 static void from_json(const nlohmann::json& j, EngageSemGroupsConfiguration& p)
12254 {
12255 p.clear();
12256 getOptional<std::vector<Group>>("groups", p.groups, j);
12257 }
12258
12259 //-----------------------------------------------------------
12260 JSON_SERIALIZED_CLASS(EngageSemServerStatusReportConfiguration)
12271 {
12272 IMPLEMENT_JSON_SERIALIZATION()
12273 IMPLEMENT_JSON_DOCUMENTATION(EngageSemServerStatusReportConfiguration)
12274
12275 public:
12277 std::string fileName;
12278
12281
12284
12286 std::string runCmd;
12287
12290
12292 {
12293 clear();
12294 }
12295
12296 void clear()
12297 {
12298 fileName.clear();
12299 intervalSecs = 60;
12300 enabled = false;
12301 includeGroupDetail = false;
12302 runCmd.clear();
12303 }
12304 };
12305
12306 static void to_json(nlohmann::json& j, const EngageSemServerStatusReportConfiguration& p)
12307 {
12308 j = nlohmann::json{
12309 TOJSON_IMPL(fileName),
12310 TOJSON_IMPL(intervalSecs),
12311 TOJSON_IMPL(enabled),
12312 TOJSON_IMPL(includeGroupDetail),
12313 TOJSON_IMPL(runCmd)
12314 };
12315 }
12316 static void from_json(const nlohmann::json& j, EngageSemServerStatusReportConfiguration& p)
12317 {
12318 p.clear();
12319 getOptional<std::string>("fileName", p.fileName, j);
12320 getOptional<int>("intervalSecs", p.intervalSecs, j, 60);
12321 getOptional<bool>("enabled", p.enabled, j, false);
12322 getOptional<std::string>("runCmd", p.runCmd, j);
12323 getOptional<bool>("includeGroupDetail", p.includeGroupDetail, j, false);
12324 }
12325
12326 //-----------------------------------------------------------
12327 JSON_SERIALIZED_CLASS(EngageSemServerInternals)
12340 {
12341 IMPLEMENT_JSON_SERIALIZATION()
12342 IMPLEMENT_JSON_DOCUMENTATION(EngageSemServerInternals)
12343
12344 public:
12347
12350
12353
12355 {
12356 clear();
12357 }
12358
12359 void clear()
12360 {
12361 watchdog.clear();
12362 tuning.clear();
12363 housekeeperIntervalMs = 1000;
12364 }
12365 };
12366
12367 static void to_json(nlohmann::json& j, const EngageSemServerInternals& p)
12368 {
12369 j = nlohmann::json{
12370 TOJSON_IMPL(watchdog),
12371 TOJSON_IMPL(housekeeperIntervalMs),
12372 TOJSON_IMPL(tuning)
12373 };
12374 }
12375 static void from_json(const nlohmann::json& j, EngageSemServerInternals& p)
12376 {
12377 p.clear();
12378 getOptional<WatchdogSettings>("watchdog", p.watchdog, j);
12379 getOptional<int>("housekeeperIntervalMs", p.housekeeperIntervalMs, j, 1000);
12380 getOptional<TuningSettings>("tuning", p.tuning, j);
12381 }
12382
12383 //-----------------------------------------------------------
12384 JSON_SERIALIZED_CLASS(EngageSemServerConfiguration)
12394 {
12395 IMPLEMENT_JSON_SERIALIZATION()
12396 IMPLEMENT_JSON_DOCUMENTATION(EngageSemServerConfiguration)
12397
12398 public:
12399
12401 std::string id;
12402
12405
12408
12411
12414
12417
12420
12423
12426
12429
12432
12435
12438
12441
12442 int maxQueueLen;
12443 int minQueuingMs;
12444 int maxQueuingMs;
12445 int minPriority;
12446 int maxPriority;
12447
12449 {
12450 clear();
12451 }
12452
12453 void clear()
12454 {
12455 id.clear();
12456 serviceConfigurationFileCheckSecs = 60;
12457 groupsConfigurationFileName.clear();
12458 groupsConfigurationFileCommand.clear();
12459 groupsConfigurationFileCheckSecs = 60;
12460 statusReport.clear();
12461 externalHealthCheckResponder.clear();
12462 internals.clear();
12463 certStoreFileName.clear();
12464 certStorePasswordHex.clear();
12465 enginePolicy.clear();
12466 configurationCheckSignalName = "rts.9a164fa.${id}";
12467 fipsCrypto.clear();
12468 nsm.clear();
12469
12470 maxQueueLen = 64;
12471 minQueuingMs = 0;
12472 maxQueuingMs = 15000;
12473 minPriority = 0;
12474 maxPriority = 255;
12475 }
12476 };
12477
12478 static void to_json(nlohmann::json& j, const EngageSemServerConfiguration& p)
12479 {
12480 j = nlohmann::json{
12481 TOJSON_IMPL(id),
12482 TOJSON_IMPL(serviceConfigurationFileCheckSecs),
12483 TOJSON_IMPL(groupsConfigurationFileName),
12484 TOJSON_IMPL(groupsConfigurationFileCommand),
12485 TOJSON_IMPL(groupsConfigurationFileCheckSecs),
12486 TOJSON_IMPL(statusReport),
12487 TOJSON_IMPL(externalHealthCheckResponder),
12488 TOJSON_IMPL(internals),
12489 TOJSON_IMPL(certStoreFileName),
12490 TOJSON_IMPL(certStorePasswordHex),
12491 TOJSON_IMPL(enginePolicy),
12492 TOJSON_IMPL(configurationCheckSignalName),
12493 TOJSON_IMPL(fipsCrypto),
12494 TOJSON_IMPL(nsm),
12495 TOJSON_IMPL(maxQueueLen),
12496 TOJSON_IMPL(minQueuingMs),
12497 TOJSON_IMPL(maxQueuingMs),
12498 TOJSON_IMPL(minPriority),
12499 TOJSON_IMPL(maxPriority)
12500 };
12501 }
12502 static void from_json(const nlohmann::json& j, EngageSemServerConfiguration& p)
12503 {
12504 p.clear();
12505 getOptional<std::string>("id", p.id, j);
12506 getOptional<int>("serviceConfigurationFileCheckSecs", p.serviceConfigurationFileCheckSecs, j, 60);
12507 getOptional<std::string>("groupsConfigurationFileName", p.groupsConfigurationFileName, j);
12508 getOptional<std::string>("groupsConfigurationFileCommand", p.groupsConfigurationFileCommand, j);
12509 getOptional<int>("groupsConfigurationFileCheckSecs", p.groupsConfigurationFileCheckSecs, j, 60);
12510 getOptional<EngageSemServerStatusReportConfiguration>("statusReport", p.statusReport, j);
12511 getOptional<ExternalHealthCheckResponder>("externalHealthCheckResponder", p.externalHealthCheckResponder, j);
12512 getOptional<EngageSemServerInternals>("internals", p.internals, j);
12513 getOptional<std::string>("certStoreFileName", p.certStoreFileName, j);
12514 getOptional<std::string>("certStorePasswordHex", p.certStorePasswordHex, j);
12515 j.at("enginePolicy").get_to(p.enginePolicy);
12516 getOptional<std::string>("configurationCheckSignalName", p.configurationCheckSignalName, j, "rts.9a164fa.${id}");
12517 getOptional<FipsCryptoSettings>("fipsCrypto", p.fipsCrypto, j);
12518 getOptional<NsmConfiguration>("nsm", p.nsm, j);
12519 getOptional<int>("maxQueueLen", p.maxQueueLen, j, 64);
12520 getOptional<int>("minQueuingMs", p.minQueuingMs, j, 0);
12521 getOptional<int>("maxQueuingMs", p.maxQueuingMs, j, 15000);
12522 getOptional<int>("minPriority", p.minPriority, j, 0);
12523 getOptional<int>("maxPriority", p.maxPriority, j, 255);
12524 }
12525
12526 //-----------------------------------------------------------
12527 JSON_SERIALIZED_CLASS(EngateGroup)
12537 class EngateGroup : public Group
12538 {
12539 IMPLEMENT_JSON_SERIALIZATION()
12540 IMPLEMENT_JSON_DOCUMENTATION(EngateGroup)
12541
12542 public:
12543 bool useVad;
12544 uint32_t inputHangMs;
12545 uint32_t inputActivationPowerThreshold;
12546 uint32_t inputDeactivationPowerThreshold;
12547
12548 EngateGroup()
12549 {
12550 clear();
12551 }
12552
12553 void clear()
12554 {
12555 Group::clear();
12556 useVad = false;
12557 inputHangMs = 750;
12558 inputActivationPowerThreshold = 700;
12559 inputDeactivationPowerThreshold = 125;
12560 }
12561 };
12562
12563 static void to_json(nlohmann::json& j, const EngateGroup& p)
12564 {
12565 nlohmann::json g;
12566 to_json(g, static_cast<const Group&>(p));
12567
12568 j = nlohmann::json{
12569 TOJSON_IMPL(useVad),
12570 TOJSON_IMPL(inputHangMs),
12571 TOJSON_IMPL(inputActivationPowerThreshold),
12572 TOJSON_IMPL(inputDeactivationPowerThreshold)
12573 };
12574 }
12575 static void from_json(const nlohmann::json& j, EngateGroup& p)
12576 {
12577 p.clear();
12578 from_json(j, static_cast<Group&>(p));
12579 getOptional<uint32_t>("inputHangMs", p.inputHangMs, j, 750);
12580 getOptional<uint32_t>("inputActivationPowerThreshold", p.inputActivationPowerThreshold, j, 700);
12581 getOptional<uint32_t>("inputDeactivationPowerThreshold", p.inputDeactivationPowerThreshold, j, 125);
12582 }
12583
12584 //-----------------------------------------------------------
12585 JSON_SERIALIZED_CLASS(EngateGroupsConfiguration)
12596 {
12597 IMPLEMENT_JSON_SERIALIZATION()
12598 IMPLEMENT_JSON_DOCUMENTATION(EngateGroupsConfiguration)
12599
12600 public:
12602 std::vector<EngateGroup> groups;
12603
12605 {
12606 clear();
12607 }
12608
12609 void clear()
12610 {
12611 groups.clear();
12612 }
12613 };
12614
12615 static void to_json(nlohmann::json& j, const EngateGroupsConfiguration& p)
12616 {
12617 j = nlohmann::json{
12618 TOJSON_IMPL(groups)
12619 };
12620 }
12621 static void from_json(const nlohmann::json& j, EngateGroupsConfiguration& p)
12622 {
12623 p.clear();
12624 getOptional<std::vector<EngateGroup>>("groups", p.groups, j);
12625 }
12626
12627 //-----------------------------------------------------------
12628 JSON_SERIALIZED_CLASS(EngateServerStatusReportConfiguration)
12639 {
12640 IMPLEMENT_JSON_SERIALIZATION()
12641 IMPLEMENT_JSON_DOCUMENTATION(EngateServerStatusReportConfiguration)
12642
12643 public:
12645 std::string fileName;
12646
12649
12652
12654 std::string runCmd;
12655
12658
12660 {
12661 clear();
12662 }
12663
12664 void clear()
12665 {
12666 fileName.clear();
12667 intervalSecs = 60;
12668 enabled = false;
12669 includeGroupDetail = false;
12670 runCmd.clear();
12671 }
12672 };
12673
12674 static void to_json(nlohmann::json& j, const EngateServerStatusReportConfiguration& p)
12675 {
12676 j = nlohmann::json{
12677 TOJSON_IMPL(fileName),
12678 TOJSON_IMPL(intervalSecs),
12679 TOJSON_IMPL(enabled),
12680 TOJSON_IMPL(includeGroupDetail),
12681 TOJSON_IMPL(runCmd)
12682 };
12683 }
12684 static void from_json(const nlohmann::json& j, EngateServerStatusReportConfiguration& p)
12685 {
12686 p.clear();
12687 getOptional<std::string>("fileName", p.fileName, j);
12688 getOptional<int>("intervalSecs", p.intervalSecs, j, 60);
12689 getOptional<bool>("enabled", p.enabled, j, false);
12690 getOptional<std::string>("runCmd", p.runCmd, j);
12691 getOptional<bool>("includeGroupDetail", p.includeGroupDetail, j, false);
12692 }
12693
12694 //-----------------------------------------------------------
12695 JSON_SERIALIZED_CLASS(EngateServerInternals)
12708 {
12709 IMPLEMENT_JSON_SERIALIZATION()
12710 IMPLEMENT_JSON_DOCUMENTATION(EngateServerInternals)
12711
12712 public:
12715
12718
12721
12723 {
12724 clear();
12725 }
12726
12727 void clear()
12728 {
12729 watchdog.clear();
12730 tuning.clear();
12731 housekeeperIntervalMs = 1000;
12732 }
12733 };
12734
12735 static void to_json(nlohmann::json& j, const EngateServerInternals& p)
12736 {
12737 j = nlohmann::json{
12738 TOJSON_IMPL(watchdog),
12739 TOJSON_IMPL(housekeeperIntervalMs),
12740 TOJSON_IMPL(tuning)
12741 };
12742 }
12743 static void from_json(const nlohmann::json& j, EngateServerInternals& p)
12744 {
12745 p.clear();
12746 getOptional<WatchdogSettings>("watchdog", p.watchdog, j);
12747 getOptional<int>("housekeeperIntervalMs", p.housekeeperIntervalMs, j, 1000);
12748 getOptional<TuningSettings>("tuning", p.tuning, j);
12749 }
12750
12751 //-----------------------------------------------------------
12752 JSON_SERIALIZED_CLASS(EngateServerConfiguration)
12762 {
12763 IMPLEMENT_JSON_SERIALIZATION()
12764 IMPLEMENT_JSON_DOCUMENTATION(EngateServerConfiguration)
12765
12766 public:
12767
12769 std::string id;
12770
12773
12776
12779
12782
12785
12788
12791
12794
12797
12800
12803
12806
12809
12811 {
12812 clear();
12813 }
12814
12815 void clear()
12816 {
12817 id.clear();
12818 serviceConfigurationFileCheckSecs = 60;
12819 groupsConfigurationFileName.clear();
12820 groupsConfigurationFileCommand.clear();
12821 groupsConfigurationFileCheckSecs = 60;
12822 statusReport.clear();
12823 externalHealthCheckResponder.clear();
12824 internals.clear();
12825 certStoreFileName.clear();
12826 certStorePasswordHex.clear();
12827 enginePolicy.clear();
12828 configurationCheckSignalName = "rts.9a164fa.${id}";
12829 fipsCrypto.clear();
12830 nsm.clear();
12831 }
12832 };
12833
12834 static void to_json(nlohmann::json& j, const EngateServerConfiguration& p)
12835 {
12836 j = nlohmann::json{
12837 TOJSON_IMPL(id),
12838 TOJSON_IMPL(serviceConfigurationFileCheckSecs),
12839 TOJSON_IMPL(groupsConfigurationFileName),
12840 TOJSON_IMPL(groupsConfigurationFileCommand),
12841 TOJSON_IMPL(groupsConfigurationFileCheckSecs),
12842 TOJSON_IMPL(statusReport),
12843 TOJSON_IMPL(externalHealthCheckResponder),
12844 TOJSON_IMPL(internals),
12845 TOJSON_IMPL(certStoreFileName),
12846 TOJSON_IMPL(certStorePasswordHex),
12847 TOJSON_IMPL(enginePolicy),
12848 TOJSON_IMPL(configurationCheckSignalName),
12849 TOJSON_IMPL(fipsCrypto),
12850 TOJSON_IMPL(nsm)
12851 };
12852 }
12853 static void from_json(const nlohmann::json& j, EngateServerConfiguration& p)
12854 {
12855 p.clear();
12856 getOptional<std::string>("id", p.id, j);
12857 getOptional<int>("serviceConfigurationFileCheckSecs", p.serviceConfigurationFileCheckSecs, j, 60);
12858 getOptional<std::string>("groupsConfigurationFileName", p.groupsConfigurationFileName, j);
12859 getOptional<std::string>("groupsConfigurationFileCommand", p.groupsConfigurationFileCommand, j);
12860 getOptional<int>("groupsConfigurationFileCheckSecs", p.groupsConfigurationFileCheckSecs, j, 60);
12861 getOptional<EngateServerStatusReportConfiguration>("statusReport", p.statusReport, j);
12862 getOptional<ExternalHealthCheckResponder>("externalHealthCheckResponder", p.externalHealthCheckResponder, j);
12863 getOptional<EngateServerInternals>("internals", p.internals, j);
12864 getOptional<std::string>("certStoreFileName", p.certStoreFileName, j);
12865 getOptional<std::string>("certStorePasswordHex", p.certStorePasswordHex, j);
12866 j.at("enginePolicy").get_to(p.enginePolicy);
12867 getOptional<std::string>("configurationCheckSignalName", p.configurationCheckSignalName, j, "rts.9a164fa.${id}");
12868 getOptional<FipsCryptoSettings>("fipsCrypto", p.fipsCrypto, j);
12869 getOptional<NsmConfiguration>("nsm", p.nsm, j);
12870 }
12871
12872 //-----------------------------------------------------------
12873 static inline void dumpExampleConfigurations(const char *path)
12874 {
12875 WatchdogSettings::document();
12876 FileRecordingRequest::document();
12877 Feature::document();
12878 Featureset::document();
12879 Agc::document();
12880 RtpPayloadTypeTranslation::document();
12881 NetworkInterfaceDevice::document();
12882 ListOfNetworkInterfaceDevice::document();
12883 RtpHeader::document();
12884 BlobInfo::document();
12885 TxAudioUri::document();
12886 AdvancedTxParams::document();
12887 Identity::document();
12888 Location::document();
12889 Power::document();
12890 Connectivity::document();
12891 PresenceDescriptorGroupItem::document();
12892 PresenceDescriptor::document();
12893 NetworkTxOptions::document();
12894 TcpNetworkTxOptions::document();
12895 NetworkAddress::document();
12896 NetworkAddressRxTx::document();
12897 NetworkAddressRestrictionList::document();
12898 StringRestrictionList::document();
12899 Rallypoint::document();
12900 RallypointCluster::document();
12901 NetworkDeviceDescriptor::document();
12902 TxAudio::document();
12903 AudioDeviceDescriptor::document();
12904 ListOfAudioDeviceDescriptor::document();
12905 Audio::document();
12906 TalkerInformation::document();
12907 GroupTalkers::document();
12908 Presence::document();
12909 Advertising::document();
12910 GroupPriorityTranslation::document();
12911 GroupTimeline::document();
12912 GroupAppTransport::document();
12913 RtpProfile::document();
12914 Group::document();
12915 Mission::document();
12916 LicenseDescriptor::document();
12917 EngineNetworkingRpUdpStreaming::document();
12918 EnginePolicyNetworking::document();
12919 Aec::document();
12920 Vad::document();
12921 Bridge::document();
12922 AndroidAudio::document();
12923 EnginePolicyAudio::document();
12924 SecurityCertificate::document();
12925 EnginePolicySecurity::document();
12926 EnginePolicyLogging::document();
12927 EnginePolicyDatabase::document();
12928 NamedAudioDevice::document();
12929 EnginePolicyNamedAudioDevices::document();
12930 Licensing::document();
12931 DiscoveryMagellan::document();
12932 DiscoverySsdp::document();
12933 DiscoverySap::document();
12934 DiscoveryCistech::document();
12935 DiscoveryTrellisware::document();
12936 DiscoveryConfiguration::document();
12937 EnginePolicyInternals::document();
12938 EnginePolicyTimelines::document();
12939 RtpMapEntry::document();
12940 ExternalModule::document();
12941 ExternalCodecDescriptor::document();
12942 EnginePolicy::document();
12943 TalkgroupAsset::document();
12944 EngageDiscoveredGroup::document();
12945 RallypointPeer::document();
12946 RallypointServerLimits::document();
12947 RallypointServerStatusReportConfiguration::document();
12948 RallypointServerLinkGraph::document();
12949 ExternalHealthCheckResponder::document();
12950 Tls::document();
12951 PeeringConfiguration::document();
12952 IgmpSnooping::document();
12953 RallypointReflector::document();
12954 RallypointUdpStreaming::document();
12955 RallypointServer::document();
12956 PlatformDiscoveredService::document();
12957 TimelineQueryParameters::document();
12958 CertStoreCertificate::document();
12959 CertStore::document();
12960 CertStoreCertificateElement::document();
12961 CertStoreDescriptor::document();
12962 CertificateDescriptor::document();
12963 BridgeCreationDetail::document();
12964 GroupConnectionDetail::document();
12965 GroupTxDetail::document();
12966 GroupCreationDetail::document();
12967 GroupReconfigurationDetail::document();
12968 GroupHealthReport::document();
12969 InboundProcessorStats::document();
12970 TrafficCounter::document();
12971 GroupStats::document();
12972 RallypointConnectionDetail::document();
12973 BridgingConfiguration::document();
12974 BridgingServerStatusReportConfiguration::document();
12975 BridgingServerInternals::document();
12976 BridgingServerConfiguration::document();
12977 EarGroupsConfiguration::document();
12978 EarServerStatusReportConfiguration::document();
12979 EarServerInternals::document();
12980 EarServerConfiguration::document();
12981 RangerPackets::document();
12982 TransportImpairment::document();
12983
12984 EngageSemGroupsConfiguration::document();
12985 EngageSemServerStatusReportConfiguration::document();
12986 EngageSemServerInternals::document();
12987 EngageSemServerConfiguration::document();
12988 }
12989}
12990
12991#ifndef WIN32
12992 #pragma GCC diagnostic pop
12993#endif
12994
12995#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.
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.
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).
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 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...
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.
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
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...
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.
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.
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....
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...