engage-engine 1.236.90760003 → 1.240.90800005
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/engage.cpp +20 -0
- package/include/ConfigurationObjects.h +622 -168
- package/include/EngageConstants.h +7 -2
- package/include/EngageInterface.h +46 -1
- package/lib/darwin.x64/libengage-shared.dylib +0 -0
- package/lib/darwin.x64/rts-fips.dylib +0 -0
- package/lib/linux.x64/libengage-shared.so +0 -0
- package/lib/linux.x64/rts-fips.so +0 -0
- package/lib/win32.ia32/engage-shared.dll +0 -0
- package/lib/win32.ia32/engage-shared.lib +0 -0
- package/lib/win32.ia32/rts-fips.dll +0 -0
- package/lib/win32.x64/engage-shared.dll +0 -0
- package/lib/win32.x64/engage-shared.lib +0 -0
- package/lib/win32.x64/rts-fips.dll +0 -0
- package/package.json +1 -1
|
@@ -1085,7 +1085,10 @@ namespace AppConfigurationObjects
|
|
|
1085
1085
|
bptAppBinary = 3,
|
|
1086
1086
|
|
|
1087
1087
|
/** @brief Biometrics payload. Used to send biometric series data. <a href="https://github.com/rallytac/pub/wiki/Engage-Human-Biometrics" target="_blank">See WIKI post for more info</a> */
|
|
1088
|
-
bptEngageBinaryHumanBiometrics = 4
|
|
1088
|
+
bptEngageBinaryHumanBiometrics = 4,
|
|
1089
|
+
|
|
1090
|
+
/** @brief The payload is MIME-encoded as per RFC 2045 */
|
|
1091
|
+
bptAppMimeMessage = 5
|
|
1089
1092
|
} PayloadType_t;
|
|
1090
1093
|
|
|
1091
1094
|
/** @brief [Optional, Default : 0] Size of the payload */
|
|
@@ -1863,6 +1866,46 @@ namespace AppConfigurationObjects
|
|
|
1863
1866
|
getOptional<Power>("power", p.power, j);
|
|
1864
1867
|
}
|
|
1865
1868
|
|
|
1869
|
+
/**
|
|
1870
|
+
* @brief Network Transmission Priority.
|
|
1871
|
+
*
|
|
1872
|
+
* Priority to set on the packets in order for the network to optimize routing of the packets
|
|
1873
|
+
*/
|
|
1874
|
+
typedef enum
|
|
1875
|
+
{
|
|
1876
|
+
/** @brief best effort */
|
|
1877
|
+
priBestEffort = 0,
|
|
1878
|
+
|
|
1879
|
+
/** @brief signaling */
|
|
1880
|
+
priSignaling = 1,
|
|
1881
|
+
|
|
1882
|
+
/** @brief video */
|
|
1883
|
+
priVideo = 2,
|
|
1884
|
+
|
|
1885
|
+
/** @brief voice */
|
|
1886
|
+
priVoice = 3
|
|
1887
|
+
} TxPriority_t;
|
|
1888
|
+
|
|
1889
|
+
/**
|
|
1890
|
+
* @brief Address family resolution policy
|
|
1891
|
+
*
|
|
1892
|
+
* Defines the policy on how to resolve/prefer IPv4 vs IPv6 names
|
|
1893
|
+
*/
|
|
1894
|
+
typedef enum
|
|
1895
|
+
{
|
|
1896
|
+
/** @brief IPv4 only */
|
|
1897
|
+
arpIpv4Only = 4,
|
|
1898
|
+
|
|
1899
|
+
/** @brief IPv6 only */
|
|
1900
|
+
arpIpv6Only = 6,
|
|
1901
|
+
|
|
1902
|
+
/** @brief IPv4 then IPv6 */
|
|
1903
|
+
arpIpv4ThenIpv6 = 46,
|
|
1904
|
+
|
|
1905
|
+
/** @brief IPv6 then IPv4 */
|
|
1906
|
+
arpIpv6ThenIpv4 = 64
|
|
1907
|
+
} AddressResolutionPolicy_t;
|
|
1908
|
+
|
|
1866
1909
|
//-----------------------------------------------------------
|
|
1867
1910
|
JSON_SERIALIZED_CLASS(NetworkTxOptions)
|
|
1868
1911
|
/**
|
|
@@ -1882,27 +1925,6 @@ namespace AppConfigurationObjects
|
|
|
1882
1925
|
IMPLEMENT_JSON_DOCUMENTATION(NetworkTxOptions)
|
|
1883
1926
|
|
|
1884
1927
|
public:
|
|
1885
|
-
|
|
1886
|
-
/**
|
|
1887
|
-
* @brief Network Transmission Priority.
|
|
1888
|
-
*
|
|
1889
|
-
* Priority to set on the packets in order for the network to optimize routing of the packets
|
|
1890
|
-
*/
|
|
1891
|
-
typedef enum
|
|
1892
|
-
{
|
|
1893
|
-
/** @brief best effort */
|
|
1894
|
-
priBestEffort = 0,
|
|
1895
|
-
|
|
1896
|
-
/** @brief signaling */
|
|
1897
|
-
priSignaling = 1,
|
|
1898
|
-
|
|
1899
|
-
/** @brief video */
|
|
1900
|
-
priVideo = 2,
|
|
1901
|
-
|
|
1902
|
-
/** @brief voice */
|
|
1903
|
-
priVoice = 3
|
|
1904
|
-
} TxPriority_t;
|
|
1905
|
-
|
|
1906
1928
|
/** @brief [Optional, Default: @ref priVoice] Transmission priority. This has meaning on some operating systems based on how their IP stack operates. It may or may not affect final packet marking. */
|
|
1907
1929
|
TxPriority_t priority;
|
|
1908
1930
|
|
|
@@ -1939,7 +1961,7 @@ namespace AppConfigurationObjects
|
|
|
1939
1961
|
static void from_json(const nlohmann::json& j, NetworkTxOptions& p)
|
|
1940
1962
|
{
|
|
1941
1963
|
p.clear();
|
|
1942
|
-
getOptional<
|
|
1964
|
+
getOptional<TxPriority_t>("priority", p.priority, j, TxPriority_t::priVoice);
|
|
1943
1965
|
getOptional<int>("ttl", p.ttl, j, 1);
|
|
1944
1966
|
}
|
|
1945
1967
|
|
|
@@ -1985,10 +2007,22 @@ namespace AppConfigurationObjects
|
|
|
1985
2007
|
static void from_json(const nlohmann::json& j, TcpNetworkTxOptions& p)
|
|
1986
2008
|
{
|
|
1987
2009
|
p.clear();
|
|
1988
|
-
getOptional<
|
|
2010
|
+
getOptional<TxPriority_t>("priority", p.priority, j, TxPriority_t::priVoice);
|
|
1989
2011
|
getOptional<int>("ttl", p.ttl, j, -1);
|
|
1990
2012
|
}
|
|
1991
2013
|
|
|
2014
|
+
typedef enum
|
|
2015
|
+
{
|
|
2016
|
+
/** @brief Unspecified */
|
|
2017
|
+
ifIpUnspec = 0,
|
|
2018
|
+
|
|
2019
|
+
/** @brief IPv4 */
|
|
2020
|
+
ifIp4 = 4,
|
|
2021
|
+
|
|
2022
|
+
/** @brief IPv6 */
|
|
2023
|
+
ifIp6 = 6
|
|
2024
|
+
} IpFamilyType_t;
|
|
2025
|
+
|
|
1992
2026
|
//-----------------------------------------------------------
|
|
1993
2027
|
JSON_SERIALIZED_CLASS(NetworkAddress)
|
|
1994
2028
|
/**
|
|
@@ -2105,6 +2139,22 @@ namespace AppConfigurationObjects
|
|
|
2105
2139
|
getOptional<NetworkAddress>("tx", p.tx, j);
|
|
2106
2140
|
}
|
|
2107
2141
|
|
|
2142
|
+
/** @brief Enum describing restriction types. */
|
|
2143
|
+
typedef enum
|
|
2144
|
+
{
|
|
2145
|
+
/** @brief Registration for groups is allowed by default */
|
|
2146
|
+
graptPermissive = 0,
|
|
2147
|
+
|
|
2148
|
+
/** @brief Registration for groups is NOT allowed by default - requires definitive access through something like a whitelist*/
|
|
2149
|
+
graptStrict = 1
|
|
2150
|
+
} GroupRestrictionAccessPolicyType_t;
|
|
2151
|
+
|
|
2152
|
+
static bool isValidGroupRestrictionAccessPolicyType(GroupRestrictionAccessPolicyType_t t)
|
|
2153
|
+
{
|
|
2154
|
+
return (t == GroupRestrictionAccessPolicyType_t::graptPermissive ||
|
|
2155
|
+
t == GroupRestrictionAccessPolicyType_t::graptStrict );
|
|
2156
|
+
}
|
|
2157
|
+
|
|
2108
2158
|
/** @brief Enum describing restriction types. */
|
|
2109
2159
|
typedef enum
|
|
2110
2160
|
{
|
|
@@ -2125,6 +2175,43 @@ namespace AppConfigurationObjects
|
|
|
2125
2175
|
t == RestrictionType_t::rtBlacklist );
|
|
2126
2176
|
}
|
|
2127
2177
|
|
|
2178
|
+
/** @brief Enum describing restriction element types. */
|
|
2179
|
+
typedef enum
|
|
2180
|
+
{
|
|
2181
|
+
/** @brief A literal group ID */
|
|
2182
|
+
retGroupId = 0,
|
|
2183
|
+
|
|
2184
|
+
/** @brief Elements are group ID regex patterns */
|
|
2185
|
+
retGroupIdPattern = 1,
|
|
2186
|
+
|
|
2187
|
+
/** @brief Elements are generic access tags regex patterns */
|
|
2188
|
+
retGenericAccessTagPattern = 2,
|
|
2189
|
+
|
|
2190
|
+
/** @brief Elements are X.509 certificate serial number regex patterns */
|
|
2191
|
+
retCertificateSerialNumberPattern = 3,
|
|
2192
|
+
|
|
2193
|
+
/** @brief Elements are X.509 certificate fingerprint regex patterns */
|
|
2194
|
+
retCertificateFingerprintPattern = 4,
|
|
2195
|
+
|
|
2196
|
+
/** @brief Elements are X.509 certificate subject regex patterns */
|
|
2197
|
+
retCertificateSubjectPattern = 5,
|
|
2198
|
+
|
|
2199
|
+
/** @brief Elements are X.509 certificate issuer regex patterns */
|
|
2200
|
+
retCertificateIssuerPattern = 6
|
|
2201
|
+
} RestrictionElementType_t;
|
|
2202
|
+
|
|
2203
|
+
static bool isValidRestrictionElementType(RestrictionElementType_t t)
|
|
2204
|
+
{
|
|
2205
|
+
return (t == RestrictionElementType_t::retGroupId ||
|
|
2206
|
+
t == RestrictionElementType_t::retGroupIdPattern ||
|
|
2207
|
+
t == RestrictionElementType_t::retGenericAccessTagPattern ||
|
|
2208
|
+
t == RestrictionElementType_t::retCertificateSerialNumberPattern ||
|
|
2209
|
+
t == RestrictionElementType_t::retCertificateFingerprintPattern ||
|
|
2210
|
+
t == RestrictionElementType_t::retCertificateSubjectPattern ||
|
|
2211
|
+
t == RestrictionElementType_t::retCertificateIssuerPattern);
|
|
2212
|
+
}
|
|
2213
|
+
|
|
2214
|
+
|
|
2128
2215
|
//-----------------------------------------------------------
|
|
2129
2216
|
JSON_SERIALIZED_CLASS(NetworkAddressRestrictionList)
|
|
2130
2217
|
/**
|
|
@@ -2196,12 +2283,16 @@ namespace AppConfigurationObjects
|
|
|
2196
2283
|
/** @brief Type indicating how the elements are to be treated **/
|
|
2197
2284
|
RestrictionType_t type;
|
|
2198
2285
|
|
|
2286
|
+
/** @brief Type indicating what kind of data each element contains **/
|
|
2287
|
+
RestrictionElementType_t elementsType;
|
|
2288
|
+
|
|
2199
2289
|
/** @brief List of elements */
|
|
2200
|
-
std::vector<std::string>
|
|
2290
|
+
std::vector<std::string> elements;
|
|
2201
2291
|
|
|
2202
2292
|
StringRestrictionList()
|
|
2203
2293
|
{
|
|
2204
2294
|
type = RestrictionType_t::rtUndefined;
|
|
2295
|
+
elementsType = RestrictionElementType_t::retGroupId;
|
|
2205
2296
|
clear();
|
|
2206
2297
|
}
|
|
2207
2298
|
|
|
@@ -2215,6 +2306,7 @@ namespace AppConfigurationObjects
|
|
|
2215
2306
|
{
|
|
2216
2307
|
j = nlohmann::json{
|
|
2217
2308
|
TOJSON_IMPL(type),
|
|
2309
|
+
TOJSON_IMPL(elementsType),
|
|
2218
2310
|
TOJSON_IMPL(elements)
|
|
2219
2311
|
};
|
|
2220
2312
|
}
|
|
@@ -2222,6 +2314,7 @@ namespace AppConfigurationObjects
|
|
|
2222
2314
|
{
|
|
2223
2315
|
p.clear();
|
|
2224
2316
|
getOptional<RestrictionType_t>("type", p.type, j, RestrictionType_t::rtUndefined);
|
|
2317
|
+
getOptional<RestrictionElementType_t>("elementsType", p.elementsType, j, RestrictionElementType_t::retGroupId);
|
|
2225
2318
|
getOptional<std::vector<std::string>>("elements", p.elements, j);
|
|
2226
2319
|
}
|
|
2227
2320
|
|
|
@@ -2842,6 +2935,79 @@ namespace AppConfigurationObjects
|
|
|
2842
2935
|
getOptional("extra", p.extra, j);
|
|
2843
2936
|
}
|
|
2844
2937
|
|
|
2938
|
+
//-----------------------------------------------------------
|
|
2939
|
+
JSON_SERIALIZED_CLASS(AudioGate)
|
|
2940
|
+
/**
|
|
2941
|
+
* @brief Description of an audio gate
|
|
2942
|
+
*
|
|
2943
|
+
* Helper C++ class to serialize and de-serialize AudioGate JSON.
|
|
2944
|
+
*
|
|
2945
|
+
* Example: @include[doc] examples/AudioGate.json
|
|
2946
|
+
*
|
|
2947
|
+
*/
|
|
2948
|
+
class AudioGate : public ConfigurationObjectBase
|
|
2949
|
+
{
|
|
2950
|
+
IMPLEMENT_JSON_SERIALIZATION()
|
|
2951
|
+
IMPLEMENT_JSON_DOCUMENTATION(AudioGate)
|
|
2952
|
+
|
|
2953
|
+
public:
|
|
2954
|
+
/** @brief [Optional. Default: false] Enables the audio gate if true */
|
|
2955
|
+
bool enabled;
|
|
2956
|
+
|
|
2957
|
+
/** @brief [Optional. Default: false] Use voice activity detection rather than audio energy */
|
|
2958
|
+
bool useVad;
|
|
2959
|
+
|
|
2960
|
+
/** @brief [Optional. Default: 1500] Hang timer in milliseconds */
|
|
2961
|
+
uint32_t hangMs;
|
|
2962
|
+
|
|
2963
|
+
/** @brief [Optional. Default: 25] Number of 10ms history samples to gather before calculating the noise floor - ignored if useVad is true */
|
|
2964
|
+
uint32_t windowMin;
|
|
2965
|
+
|
|
2966
|
+
/** @brief [Optional. Default: 125] Maximum number of 10ms history samples - ignored if useVad is true */
|
|
2967
|
+
uint32_t windowMax;
|
|
2968
|
+
|
|
2969
|
+
/** @brief [Optional. Default: 1.75] Coefficient by which to multiply the current history average to determine the floor - ignored if useVad is true */
|
|
2970
|
+
double coefficient;
|
|
2971
|
+
|
|
2972
|
+
|
|
2973
|
+
AudioGate()
|
|
2974
|
+
{
|
|
2975
|
+
clear();
|
|
2976
|
+
}
|
|
2977
|
+
|
|
2978
|
+
void clear()
|
|
2979
|
+
{
|
|
2980
|
+
enabled = false;
|
|
2981
|
+
useVad = false;
|
|
2982
|
+
hangMs = 1500;
|
|
2983
|
+
windowMin = 25;
|
|
2984
|
+
windowMax = 125;
|
|
2985
|
+
coefficient = 1.75;
|
|
2986
|
+
}
|
|
2987
|
+
};
|
|
2988
|
+
|
|
2989
|
+
static void to_json(nlohmann::json& j, const AudioGate& p)
|
|
2990
|
+
{
|
|
2991
|
+
j = nlohmann::json{
|
|
2992
|
+
TOJSON_IMPL(enabled),
|
|
2993
|
+
TOJSON_IMPL(useVad),
|
|
2994
|
+
TOJSON_IMPL(hangMs),
|
|
2995
|
+
TOJSON_IMPL(windowMin),
|
|
2996
|
+
TOJSON_IMPL(windowMax),
|
|
2997
|
+
TOJSON_IMPL(coefficient)
|
|
2998
|
+
};
|
|
2999
|
+
}
|
|
3000
|
+
static void from_json(const nlohmann::json& j, AudioGate& p)
|
|
3001
|
+
{
|
|
3002
|
+
p.clear();
|
|
3003
|
+
getOptional<bool>("enabled", p.enabled, j, false);
|
|
3004
|
+
getOptional<bool>("useVad", p.useVad, j, false);
|
|
3005
|
+
getOptional<uint32_t>("hangMs", p.hangMs, j, 1500);
|
|
3006
|
+
getOptional<uint32_t>("windowMin", p.windowMin, j, 25);
|
|
3007
|
+
getOptional<uint32_t>("windowMax", p.windowMax, j, 125);
|
|
3008
|
+
getOptional<double>("coefficient", p.coefficient, j, 1.75);
|
|
3009
|
+
}
|
|
3010
|
+
|
|
2845
3011
|
//-----------------------------------------------------------
|
|
2846
3012
|
JSON_SERIALIZED_CLASS(TxAudio)
|
|
2847
3013
|
/**
|
|
@@ -3018,6 +3184,9 @@ namespace AppConfigurationObjects
|
|
|
3018
3184
|
ctMelpe2400 = 52
|
|
3019
3185
|
} TxCodec_t;
|
|
3020
3186
|
|
|
3187
|
+
/** @brief [Optional, Default: true] Audio transmission is enabled */
|
|
3188
|
+
bool enabled;
|
|
3189
|
+
|
|
3021
3190
|
/** @brief [Optional, Default: @ref ctOpus8000] Specifies the Codec Type to use for the transmission. See @ref TxCodec_t for all codec types */
|
|
3022
3191
|
TxCodec_t encoder;
|
|
3023
3192
|
|
|
@@ -3088,6 +3257,7 @@ namespace AppConfigurationObjects
|
|
|
3088
3257
|
|
|
3089
3258
|
void clear()
|
|
3090
3259
|
{
|
|
3260
|
+
enabled = true;
|
|
3091
3261
|
encoder = TxAudio::TxCodec_t::ctUnknown;
|
|
3092
3262
|
encoderName.clear();
|
|
3093
3263
|
framingMs = 60;
|
|
@@ -3110,6 +3280,7 @@ namespace AppConfigurationObjects
|
|
|
3110
3280
|
static void to_json(nlohmann::json& j, const TxAudio& p)
|
|
3111
3281
|
{
|
|
3112
3282
|
j = nlohmann::json{
|
|
3283
|
+
TOJSON_IMPL(enabled),
|
|
3113
3284
|
TOJSON_IMPL(encoder),
|
|
3114
3285
|
TOJSON_IMPL(encoderName),
|
|
3115
3286
|
TOJSON_IMPL(framingMs),
|
|
@@ -3132,6 +3303,7 @@ namespace AppConfigurationObjects
|
|
|
3132
3303
|
static void from_json(const nlohmann::json& j, TxAudio& p)
|
|
3133
3304
|
{
|
|
3134
3305
|
p.clear();
|
|
3306
|
+
getOptional<bool>("enabled", p.enabled, j, true);
|
|
3135
3307
|
getOptional<TxAudio::TxCodec_t>("encoder", p.encoder, j, TxAudio::TxCodec_t::ctOpus8000);
|
|
3136
3308
|
getOptional<std::string>("encoderName", p.encoderName, j, EMPTY_STRING);
|
|
3137
3309
|
getOptional("framingMs", p.framingMs, j, 60);
|
|
@@ -3146,7 +3318,7 @@ namespace AppConfigurationObjects
|
|
|
3146
3318
|
getOptional("resetRtpOnTx", p.resetRtpOnTx, j, true);
|
|
3147
3319
|
getOptional("enableSmoothing", p.enableSmoothing, j, true);
|
|
3148
3320
|
getOptional("dtx", p.dtx, j, false);
|
|
3149
|
-
getOptional("smoothedHangTimeMs", p.smoothedHangTimeMs, j, 0);
|
|
3321
|
+
getOptional("smoothedHangTimeMs", p.smoothedHangTimeMs, j, 0);
|
|
3150
3322
|
|
|
3151
3323
|
// internalKey is not serialized
|
|
3152
3324
|
}
|
|
@@ -3879,93 +4051,71 @@ namespace AppConfigurationObjects
|
|
|
3879
4051
|
ENGAGE_IGNORE_COMPILER_UNUSED_WARNING static const char *GROUP_DISCONNECTED_REASON_SECURITY_CLASSIFICATION_LEVEL_TOO_HIGH = "SecurityClassificationLevelTooHigh";
|
|
3880
4052
|
/** @brief The Rallypoint has denied the registration for no specific reason **/
|
|
3881
4053
|
ENGAGE_IGNORE_COMPILER_UNUSED_WARNING static const char *GROUP_DISCONNECTED_REASON_GENERAL_DENIAL = "GeneralDenial";
|
|
3882
|
-
/** @} */
|
|
3883
4054
|
|
|
4055
|
+
/** @brief The Rallypoint denied the registration request because the far-end's certificate does not have an access tag for the group **/
|
|
4056
|
+
ENGAGE_IGNORE_COMPILER_UNUSED_WARNING static const char *GROUP_DISCONNECTED_REASON_NO_ACCESS_TAG = "NoAccessTag";
|
|
4057
|
+
/** @brief The Rallypoint denied the registration request because the far-end's certificate does not have an access tag for the group **/
|
|
4058
|
+
ENGAGE_IGNORE_COMPILER_UNUSED_WARNING static const char *GROUP_DISCONNECTED_REASON_EXCLUDED_ACCESS_TAG = "ExcludedAccessTag";
|
|
4059
|
+
/** @brief The Rallypoint denied the registration request because the far-end's certificate does not have an an approved serial number **/
|
|
4060
|
+
ENGAGE_IGNORE_COMPILER_UNUSED_WARNING static const char *GROUP_DISCONNECTED_REASON_NO_SERIAL = "NoSerial";
|
|
4061
|
+
/** @brief The Rallypoint denied the registration request because the far-end's certificate serial number has been excluded **/
|
|
4062
|
+
ENGAGE_IGNORE_COMPILER_UNUSED_WARNING static const char *GROUP_DISCONNECTED_REASON_EXCLUDED_SERIAL = "ExcludedSerial";
|
|
4063
|
+
/** @brief The Rallypoint denied the registration request because the far-end's certificate does not have an an approved fingerprint **/
|
|
4064
|
+
ENGAGE_IGNORE_COMPILER_UNUSED_WARNING static const char *GROUP_DISCONNECTED_REASON_NO_FINGERPRINT = "NoFingerprint";
|
|
4065
|
+
/** @brief The Rallypoint denied the registration request because the far-end's certificate fingerprint has been excluded **/
|
|
4066
|
+
ENGAGE_IGNORE_COMPILER_UNUSED_WARNING static const char *GROUP_DISCONNECTED_REASON_EXCLUDED_FINGERPRINT = "ExcludedFingerprint";
|
|
4067
|
+
/** @brief The Rallypoint denied the registration request because the far-end's certificate does not have an an approved subject **/
|
|
4068
|
+
ENGAGE_IGNORE_COMPILER_UNUSED_WARNING static const char *GROUP_DISCONNECTED_REASON_NO_SUBJECT = "NoSubject";
|
|
4069
|
+
/** @brief The Rallypoint denied the registration request because the far-end's certificate subject has been excluded **/
|
|
4070
|
+
ENGAGE_IGNORE_COMPILER_UNUSED_WARNING static const char *GROUP_DISCONNECTED_REASON_EXCLUDED_SUBJECT = "ExcludedSubject";
|
|
4071
|
+
/** @brief The Rallypoint denied the registration request because the far-end's certificate does not have an an approved issuer **/
|
|
4072
|
+
ENGAGE_IGNORE_COMPILER_UNUSED_WARNING static const char *GROUP_DISCONNECTED_REASON_NO_ISSUER = "NoIssuer";
|
|
4073
|
+
/** @brief The Rallypoint denied the registration request because the far-end's certificate issuer has been excluded **/
|
|
4074
|
+
ENGAGE_IGNORE_COMPILER_UNUSED_WARNING static const char *GROUP_DISCONNECTED_REASON_EXCLUDED_ISSUER = "ExcludedIssuer";
|
|
4075
|
+
/** @brief The Rallypoint denied the registration request because the far-end does not appear in any whitelist criteria **/
|
|
4076
|
+
ENGAGE_IGNORE_COMPILER_UNUSED_WARNING static const char *GROUP_DISCONNECTED_REASON_NOT_ON_WHITELIST = "NotOnWhitelist";
|
|
4077
|
+
/** @brief The Rallypoint denied the registration request because the far-end does appears in blackist criteria **/
|
|
4078
|
+
ENGAGE_IGNORE_COMPILER_UNUSED_WARNING static const char *GROUP_DISCONNECTED_REASON_ON_BLACKLIST = "OnBlacklist";
|
|
3884
4079
|
|
|
3885
|
-
|
|
3886
|
-
|
|
3887
|
-
/**
|
|
3888
|
-
* @brief Configuration for the optional SatPaq transport functionality for Group.
|
|
3889
|
-
*
|
|
3890
|
-
* Helper C++ class to serialize and de-serialize GroupSatPaq JSON
|
|
4080
|
+
/** @} */
|
|
4081
|
+
|
|
4082
|
+
/** @addtogroup OID IANA-type object identifiers
|
|
3891
4083
|
*
|
|
3892
|
-
*
|
|
4084
|
+
* Object Identifiers we commonly use
|
|
3893
4085
|
*
|
|
3894
|
-
*
|
|
4086
|
+
* @{
|
|
3895
4087
|
*/
|
|
3896
|
-
|
|
3897
|
-
|
|
3898
|
-
|
|
3899
|
-
|
|
3900
|
-
|
|
3901
|
-
public:
|
|
3902
|
-
/** @brief [Optional, Default: false] Enables SatPaq feature. */
|
|
3903
|
-
bool enabled;
|
|
3904
|
-
|
|
3905
|
-
/** @brief The sender ID. */
|
|
3906
|
-
uint16_t senderId;
|
|
3907
|
-
|
|
3908
|
-
/** @brief The talkgroup ID. */
|
|
3909
|
-
uint8_t talkgroupId;
|
|
3910
|
-
|
|
3911
|
-
GroupSatPaq()
|
|
3912
|
-
{
|
|
3913
|
-
clear();
|
|
3914
|
-
}
|
|
3915
|
-
|
|
3916
|
-
void clear()
|
|
3917
|
-
{
|
|
3918
|
-
enabled = false;
|
|
3919
|
-
senderId = 0;
|
|
3920
|
-
talkgroupId = 0;
|
|
3921
|
-
}
|
|
3922
|
-
};
|
|
3923
|
-
|
|
3924
|
-
static void to_json(nlohmann::json& j, const GroupSatPaq& p)
|
|
3925
|
-
{
|
|
3926
|
-
j = nlohmann::json{
|
|
3927
|
-
TOJSON_IMPL(enabled),
|
|
3928
|
-
TOJSON_IMPL(senderId),
|
|
3929
|
-
TOJSON_IMPL(talkgroupId)
|
|
3930
|
-
};
|
|
3931
|
-
}
|
|
3932
|
-
static void from_json(const nlohmann::json& j, GroupSatPaq& p)
|
|
3933
|
-
{
|
|
3934
|
-
p.clear();
|
|
3935
|
-
getOptional<bool>("enabled", p.enabled, j, false);
|
|
3936
|
-
getOptional<uint16_t>("senderId", p.senderId, j, 0);
|
|
3937
|
-
getOptional<uint8_t>("talkgroupId", p.talkgroupId, j, 0);
|
|
3938
|
-
}
|
|
3939
|
-
|
|
4088
|
+
/** @brief Rally Tactical Systems' PEN as assigned by IANA */
|
|
4089
|
+
ENGAGE_IGNORE_COMPILER_UNUSED_WARNING static const char *OID_RTS_PEM = "58217";
|
|
4090
|
+
/** @brief The link to the Rallypoint is down */
|
|
4091
|
+
ENGAGE_IGNORE_COMPILER_UNUSED_WARNING static const char *OID_RTS_CERT_SUBJ_ACCESS_TAGS = "1.3.6.1.4.1.58217.1";
|
|
4092
|
+
/** @} */
|
|
3940
4093
|
|
|
3941
4094
|
|
|
3942
4095
|
//-----------------------------------------------------------
|
|
3943
|
-
JSON_SERIALIZED_CLASS(
|
|
4096
|
+
JSON_SERIALIZED_CLASS(GroupAppTransport)
|
|
3944
4097
|
/**
|
|
3945
|
-
* @brief Configuration for the optional
|
|
4098
|
+
* @brief Configuration for the optional custom transport functionality for Group.
|
|
3946
4099
|
*
|
|
3947
|
-
* Helper C++ class to serialize and de-serialize
|
|
4100
|
+
* Helper C++ class to serialize and de-serialize GroupAppTransport JSON
|
|
3948
4101
|
*
|
|
3949
|
-
* Example: @include[doc] examples/
|
|
4102
|
+
* Example: @include[doc] examples/GroupAppTransport.json
|
|
3950
4103
|
*
|
|
3951
4104
|
* @see ConfigurationObjects::Group
|
|
3952
4105
|
*/
|
|
3953
|
-
class
|
|
4106
|
+
class GroupAppTransport : public ConfigurationObjectBase
|
|
3954
4107
|
{
|
|
3955
4108
|
IMPLEMENT_JSON_SERIALIZATION()
|
|
3956
|
-
IMPLEMENT_JSON_DOCUMENTATION(
|
|
4109
|
+
IMPLEMENT_JSON_DOCUMENTATION(GroupAppTransport)
|
|
3957
4110
|
|
|
3958
4111
|
public:
|
|
3959
|
-
/** @brief [Optional, Default: false] Enables
|
|
4112
|
+
/** @brief [Optional, Default: false] Enables custom feature. */
|
|
3960
4113
|
bool enabled;
|
|
3961
4114
|
|
|
3962
|
-
/** @brief The
|
|
3963
|
-
|
|
3964
|
-
|
|
3965
|
-
/** @brief The talkgroup ID. */
|
|
3966
|
-
uint8_t talkgroupId;
|
|
4115
|
+
/** @brief The id/name of the transport. This must match the id/name supplied when registering the app transport.*/
|
|
4116
|
+
std::string id;
|
|
3967
4117
|
|
|
3968
|
-
|
|
4118
|
+
GroupAppTransport()
|
|
3969
4119
|
{
|
|
3970
4120
|
clear();
|
|
3971
4121
|
}
|
|
@@ -3973,25 +4123,22 @@ namespace AppConfigurationObjects
|
|
|
3973
4123
|
void clear()
|
|
3974
4124
|
{
|
|
3975
4125
|
enabled = false;
|
|
3976
|
-
|
|
3977
|
-
talkgroupId = 0;
|
|
4126
|
+
id.clear();
|
|
3978
4127
|
}
|
|
3979
4128
|
};
|
|
3980
4129
|
|
|
3981
|
-
static void to_json(nlohmann::json& j, const
|
|
4130
|
+
static void to_json(nlohmann::json& j, const GroupAppTransport& p)
|
|
3982
4131
|
{
|
|
3983
4132
|
j = nlohmann::json{
|
|
3984
4133
|
TOJSON_IMPL(enabled),
|
|
3985
|
-
TOJSON_IMPL(
|
|
3986
|
-
TOJSON_IMPL(talkgroupId)
|
|
4134
|
+
TOJSON_IMPL(id)
|
|
3987
4135
|
};
|
|
3988
4136
|
}
|
|
3989
|
-
static void from_json(const nlohmann::json& j,
|
|
4137
|
+
static void from_json(const nlohmann::json& j, GroupAppTransport& p)
|
|
3990
4138
|
{
|
|
3991
4139
|
p.clear();
|
|
3992
4140
|
getOptional<bool>("enabled", p.enabled, j, false);
|
|
3993
|
-
getOptional<
|
|
3994
|
-
getOptional<uint8_t>("talkgroupId", p.talkgroupId, j, 0);
|
|
4141
|
+
getOptional<std::string>("id", p.id, j);
|
|
3995
4142
|
}
|
|
3996
4143
|
|
|
3997
4144
|
//-----------------------------------------------------------
|
|
@@ -4389,6 +4536,16 @@ namespace AppConfigurationObjects
|
|
|
4389
4536
|
bomLanguageTranslation = 3
|
|
4390
4537
|
} BridgingOpMode_t;
|
|
4391
4538
|
|
|
4539
|
+
/** @brief Enum describing the alias generation policy. */
|
|
4540
|
+
typedef enum
|
|
4541
|
+
{
|
|
4542
|
+
/** @brief Use the anonymousAlias if present */
|
|
4543
|
+
iagpAnonymousAlias = 0,
|
|
4544
|
+
|
|
4545
|
+
/** @brief Generate hex representation of SSRC. */
|
|
4546
|
+
iagpSsrcInHex = 1
|
|
4547
|
+
} InboundAliasGenerationPolicy_t;
|
|
4548
|
+
|
|
4392
4549
|
/** @brief Specifies the group type (see @ref Type_t). */
|
|
4393
4550
|
Type_t type;
|
|
4394
4551
|
|
|
@@ -4500,14 +4657,8 @@ namespace AppConfigurationObjects
|
|
|
4500
4657
|
/** @brief [Optional] Alias to use for inbound streams that do not have an alias component */
|
|
4501
4658
|
std::string anonymousAlias;
|
|
4502
4659
|
|
|
4503
|
-
/** @brief [Optional] Settings necessary if the group is transported via
|
|
4504
|
-
|
|
4505
|
-
|
|
4506
|
-
/** @brief [Optional] Settings necessary if the group is transported via the LynQPro protocol */
|
|
4507
|
-
GroupLynQPro lynqPro;
|
|
4508
|
-
|
|
4509
|
-
/** @brief [Optional] The name of the registered transport to use */
|
|
4510
|
-
std::string transportName;
|
|
4660
|
+
/** @brief [Optional] Settings necessary if the group is transported via an application-supplied custom transport */
|
|
4661
|
+
GroupAppTransport appTransport;
|
|
4511
4662
|
|
|
4512
4663
|
/** @brief [Optional, Default: false] Allows for processing of looped back packets - primarily meant for debugging */
|
|
4513
4664
|
bool allowLoopback;
|
|
@@ -4548,6 +4699,15 @@ namespace AppConfigurationObjects
|
|
|
4548
4699
|
/** @brief Details for capture of transmitted packets */
|
|
4549
4700
|
PacketCapturer txCapture;
|
|
4550
4701
|
|
|
4702
|
+
/** @brief [Optional, Default: 66] The RTP payload type to be used for blobs sent over RTP (see BlobInfo) */
|
|
4703
|
+
uint16_t blobRtpPayloadType;
|
|
4704
|
+
|
|
4705
|
+
/** @brief [Optional, Default: iagpAnonymousAlias] */
|
|
4706
|
+
InboundAliasGenerationPolicy_t inboundAliasGenerationPolicy;
|
|
4707
|
+
|
|
4708
|
+
/** @brief [Optional] Inbound gating of audio - only audio allowed through by the gate will be processed */
|
|
4709
|
+
AudioGate gateIn;
|
|
4710
|
+
|
|
4551
4711
|
Group()
|
|
4552
4712
|
{
|
|
4553
4713
|
clear();
|
|
@@ -4600,9 +4760,7 @@ namespace AppConfigurationObjects
|
|
|
4600
4760
|
anonymousAlias.clear();
|
|
4601
4761
|
lbCrypto = false;
|
|
4602
4762
|
|
|
4603
|
-
|
|
4604
|
-
lynqPro.clear();
|
|
4605
|
-
transportName.clear();
|
|
4763
|
+
appTransport.clear();
|
|
4606
4764
|
allowLoopback = false;
|
|
4607
4765
|
|
|
4608
4766
|
rtpProfile.clear();
|
|
@@ -4624,6 +4782,10 @@ namespace AppConfigurationObjects
|
|
|
4624
4782
|
|
|
4625
4783
|
rxCapture.clear();
|
|
4626
4784
|
txCapture.clear();
|
|
4785
|
+
|
|
4786
|
+
blobRtpPayloadType = 66;
|
|
4787
|
+
inboundAliasGenerationPolicy = iagpAnonymousAlias;
|
|
4788
|
+
gateIn.clear();
|
|
4627
4789
|
}
|
|
4628
4790
|
};
|
|
4629
4791
|
|
|
@@ -4666,9 +4828,7 @@ namespace AppConfigurationObjects
|
|
|
4666
4828
|
TOJSON_IMPL(stickyTidHangSecs),
|
|
4667
4829
|
TOJSON_IMPL(anonymousAlias),
|
|
4668
4830
|
TOJSON_IMPL(lbCrypto),
|
|
4669
|
-
TOJSON_IMPL(
|
|
4670
|
-
TOJSON_IMPL(lynqPro),
|
|
4671
|
-
TOJSON_IMPL(transportName),
|
|
4831
|
+
TOJSON_IMPL(appTransport),
|
|
4672
4832
|
TOJSON_IMPL(allowLoopback),
|
|
4673
4833
|
TOJSON_IMPL(rangerPackets),
|
|
4674
4834
|
|
|
@@ -4685,7 +4845,13 @@ namespace AppConfigurationObjects
|
|
|
4685
4845
|
TOJSON_IMPL(synVoice),
|
|
4686
4846
|
|
|
4687
4847
|
TOJSON_IMPL(rxCapture),
|
|
4688
|
-
TOJSON_IMPL(txCapture)
|
|
4848
|
+
TOJSON_IMPL(txCapture),
|
|
4849
|
+
|
|
4850
|
+
TOJSON_IMPL(blobRtpPayloadType),
|
|
4851
|
+
|
|
4852
|
+
TOJSON_IMPL(inboundAliasGenerationPolicy),
|
|
4853
|
+
|
|
4854
|
+
TOJSON_IMPL(gateIn)
|
|
4689
4855
|
};
|
|
4690
4856
|
|
|
4691
4857
|
TOJSON_BASE_IMPL();
|
|
@@ -4749,9 +4915,7 @@ namespace AppConfigurationObjects
|
|
|
4749
4915
|
getOptional<int>("stickyTidHangSecs", p.stickyTidHangSecs, j, 10);
|
|
4750
4916
|
getOptional<std::string>("anonymousAlias", p.anonymousAlias, j);
|
|
4751
4917
|
getOptional<bool>("lbCrypto", p.lbCrypto, j, false);
|
|
4752
|
-
getOptional<
|
|
4753
|
-
getOptional<GroupLynQPro>("lynqPro", p.lynqPro, j);
|
|
4754
|
-
getOptional<std::string>("transportName", p.transportName, j);
|
|
4918
|
+
getOptional<GroupAppTransport>("appTransport", p.appTransport, j);
|
|
4755
4919
|
getOptional<bool>("allowLoopback", p.allowLoopback, j, false);
|
|
4756
4920
|
getOptionalWithIndicator<RtpProfile>("rtpProfile", p.rtpProfile, j, &p._wasDeserialized_rtpProfile);
|
|
4757
4921
|
getOptional<RangerPackets>("rangerPackets", p.rangerPackets, j);
|
|
@@ -4766,6 +4930,12 @@ namespace AppConfigurationObjects
|
|
|
4766
4930
|
getOptional<PacketCapturer>("rxCapture", p.rxCapture, j);
|
|
4767
4931
|
getOptional<PacketCapturer>("txCapture", p.txCapture, j);
|
|
4768
4932
|
|
|
4933
|
+
getOptional<uint16_t>("blobRtpPayloadType", p.blobRtpPayloadType, j, 66);
|
|
4934
|
+
|
|
4935
|
+
getOptional<Group::InboundAliasGenerationPolicy_t>("inboundAliasGenerationPolicy", p.inboundAliasGenerationPolicy, j, Group::InboundAliasGenerationPolicy_t::iagpAnonymousAlias);
|
|
4936
|
+
|
|
4937
|
+
getOptional<AudioGate>("gateIn", p.gateIn, j);
|
|
4938
|
+
|
|
4769
4939
|
FROMJSON_BASE_IMPL();
|
|
4770
4940
|
}
|
|
4771
4941
|
|
|
@@ -5010,20 +5180,17 @@ namespace AppConfigurationObjects
|
|
|
5010
5180
|
/** @brief [Optional, false] Enables UDP streaming if the RP supports it */
|
|
5011
5181
|
bool enabled;
|
|
5012
5182
|
|
|
5013
|
-
/** @brief [Optional, EnginePolicyNetworking::defaultNic] Name of NIC to bind to - uses Engine defaultNic if empty */
|
|
5014
|
-
std::string nic;
|
|
5015
|
-
|
|
5016
5183
|
/** @brief [Optional, 0] The port to be used for Rallypoint UDP streaming. A value of 0 will result in an ephemeral port being assigned.*/
|
|
5017
|
-
int
|
|
5184
|
+
int port;
|
|
5018
5185
|
|
|
5019
|
-
/** @brief Optional, Default:
|
|
5020
|
-
int
|
|
5186
|
+
/** @brief Optional, Default: 15] Seconds interval at which to send UDP keepalives to Rallypoints. This is important for NAT "hole-punching". */
|
|
5187
|
+
int keepaliveIntervalSecs;
|
|
5021
5188
|
|
|
5022
5189
|
/** @brief [Optional, Default: @ref priVoice] Transmission priority. This has meaning on some operating systems based on how their IP stack operates. It may or may not affect final packet marking. */
|
|
5023
|
-
|
|
5190
|
+
TxPriority_t priority;
|
|
5024
5191
|
|
|
5025
5192
|
/** @brief [Optional, Default: 64] Time to live or hop limit is a mechanism that limits the lifespan or lifetime of data in a network. TTL prevents a data packet from circulating indefinitely. */
|
|
5026
|
-
int
|
|
5193
|
+
int ttl;
|
|
5027
5194
|
|
|
5028
5195
|
EngineNetworkingRpUdpStreaming()
|
|
5029
5196
|
{
|
|
@@ -5033,9 +5200,9 @@ namespace AppConfigurationObjects
|
|
|
5033
5200
|
void clear()
|
|
5034
5201
|
{
|
|
5035
5202
|
enabled = false;
|
|
5036
|
-
|
|
5037
|
-
|
|
5038
|
-
priority =
|
|
5203
|
+
port = 0;
|
|
5204
|
+
keepaliveIntervalSecs = 15;
|
|
5205
|
+
priority = TxPriority_t::priVoice;
|
|
5039
5206
|
ttl = 64;
|
|
5040
5207
|
}
|
|
5041
5208
|
|
|
@@ -5048,9 +5215,8 @@ namespace AppConfigurationObjects
|
|
|
5048
5215
|
{
|
|
5049
5216
|
j = nlohmann::json{
|
|
5050
5217
|
TOJSON_IMPL(enabled),
|
|
5051
|
-
TOJSON_IMPL(nic),
|
|
5052
5218
|
TOJSON_IMPL(port),
|
|
5053
|
-
TOJSON_IMPL(
|
|
5219
|
+
TOJSON_IMPL(keepaliveIntervalSecs),
|
|
5054
5220
|
TOJSON_IMPL(priority),
|
|
5055
5221
|
TOJSON_IMPL(ttl)
|
|
5056
5222
|
};
|
|
@@ -5059,10 +5225,9 @@ namespace AppConfigurationObjects
|
|
|
5059
5225
|
{
|
|
5060
5226
|
p.clear();
|
|
5061
5227
|
getOptional<bool>("enabled", p.enabled, j, false);
|
|
5062
|
-
getOptional<std::string>("nic", p.nic, j, EMPTY_STRING);
|
|
5063
5228
|
getOptional<int>("port", p.port, j, 0);
|
|
5064
|
-
getOptional<int>("
|
|
5065
|
-
getOptional<
|
|
5229
|
+
getOptional<int>("keepaliveIntervalSecs", p.keepaliveIntervalSecs, j, 15);
|
|
5230
|
+
getOptional<TxPriority_t>("priority", p.priority, j, TxPriority_t::priVoice);
|
|
5066
5231
|
getOptional<int>("ttl", p.ttl, j, 64);
|
|
5067
5232
|
}
|
|
5068
5233
|
|
|
@@ -5083,25 +5248,28 @@ namespace AppConfigurationObjects
|
|
|
5083
5248
|
|
|
5084
5249
|
public:
|
|
5085
5250
|
/** @brief The default network interface card the Engage Engine should bind to. */
|
|
5086
|
-
std::string
|
|
5251
|
+
std::string defaultNic;
|
|
5087
5252
|
|
|
5088
5253
|
/** @brief [Optional, Default: 8] Number of seconds elapsed between RX of multicast packets before an IGMP rejoin is made */
|
|
5089
|
-
int
|
|
5254
|
+
int multicastRejoinSecs;
|
|
5090
5255
|
|
|
5091
5256
|
/** @brief [Optional, Default: 60000] Milliseconds between sending Rallypoint round-trip test requests */
|
|
5092
|
-
int
|
|
5257
|
+
int rallypointRtTestIntervalMs;
|
|
5093
5258
|
|
|
5094
5259
|
/** @brief [Optional, Default: false] If true, logs RTP jitter buffer statistics periodically */
|
|
5095
|
-
bool
|
|
5260
|
+
bool logRtpJitterBufferStats;
|
|
5096
5261
|
|
|
5097
5262
|
/** @brief [Optional, Default: false] Overrides/cancels group-level multicast failover if set to true */
|
|
5098
|
-
bool
|
|
5263
|
+
bool preventMulticastFailover;
|
|
5099
5264
|
|
|
5100
5265
|
/** @brief [Optional] Configuration for UDP streaming */
|
|
5101
|
-
EngineNetworkingRpUdpStreaming
|
|
5266
|
+
EngineNetworkingRpUdpStreaming rpUdpStreaming;
|
|
5102
5267
|
|
|
5103
5268
|
/** @brief [Optional] Configuration for RTP profile */
|
|
5104
|
-
RtpProfile
|
|
5269
|
+
RtpProfile rtpProfile;
|
|
5270
|
+
|
|
5271
|
+
/** @brief [Optional, Default 64] Address resolution policy */
|
|
5272
|
+
AddressResolutionPolicy_t addressResolutionPolicy;
|
|
5105
5273
|
|
|
5106
5274
|
EnginePolicyNetworking()
|
|
5107
5275
|
{
|
|
@@ -5115,6 +5283,7 @@ namespace AppConfigurationObjects
|
|
|
5115
5283
|
rallypointRtTestIntervalMs = 60000;
|
|
5116
5284
|
logRtpJitterBufferStats = false;
|
|
5117
5285
|
preventMulticastFailover = false;
|
|
5286
|
+
addressResolutionPolicy = AddressResolutionPolicy_t::arpIpv6ThenIpv4;
|
|
5118
5287
|
|
|
5119
5288
|
rpUdpStreaming.clear();
|
|
5120
5289
|
rtpProfile.clear();
|
|
@@ -5132,7 +5301,8 @@ namespace AppConfigurationObjects
|
|
|
5132
5301
|
TOJSON_IMPL(preventMulticastFailover),
|
|
5133
5302
|
|
|
5134
5303
|
TOJSON_IMPL(rpUdpStreaming),
|
|
5135
|
-
TOJSON_IMPL(rtpProfile)
|
|
5304
|
+
TOJSON_IMPL(rtpProfile),
|
|
5305
|
+
TOJSON_IMPL(addressResolutionPolicy)
|
|
5136
5306
|
};
|
|
5137
5307
|
}
|
|
5138
5308
|
static void from_json(const nlohmann::json& j, EnginePolicyNetworking& p)
|
|
@@ -5146,6 +5316,7 @@ namespace AppConfigurationObjects
|
|
|
5146
5316
|
|
|
5147
5317
|
getOptional<EngineNetworkingRpUdpStreaming>("rpUdpStreaming", p.rpUdpStreaming, j);
|
|
5148
5318
|
getOptional<RtpProfile>("rtpProfile", p.rtpProfile, j);
|
|
5319
|
+
getOptional<AddressResolutionPolicy_t>("addressResolutionPolicy", p.addressResolutionPolicy, j, AddressResolutionPolicy_t::arpIpv6ThenIpv4);
|
|
5149
5320
|
}
|
|
5150
5321
|
|
|
5151
5322
|
//-----------------------------------------------------------
|
|
@@ -5498,6 +5669,9 @@ namespace AppConfigurationObjects
|
|
|
5498
5669
|
/** @brief [Optional, Default: true] Enables audio processing */
|
|
5499
5670
|
bool enabled;
|
|
5500
5671
|
|
|
5672
|
+
/** @brief [Optional, Default: true] Enables local machine hardware audio */
|
|
5673
|
+
bool hardwareEnabled;
|
|
5674
|
+
|
|
5501
5675
|
/** @brief [Optional, Default: 16000] Internal sampling rate - 8000 or 16000 */
|
|
5502
5676
|
int internalRate;
|
|
5503
5677
|
|
|
@@ -5536,6 +5710,7 @@ namespace AppConfigurationObjects
|
|
|
5536
5710
|
void clear()
|
|
5537
5711
|
{
|
|
5538
5712
|
enabled = true;
|
|
5713
|
+
hardwareEnabled = true;
|
|
5539
5714
|
internalRate = 16000;
|
|
5540
5715
|
internalChannels = 2;
|
|
5541
5716
|
muteTxOnTx = false;
|
|
@@ -5553,6 +5728,7 @@ namespace AppConfigurationObjects
|
|
|
5553
5728
|
{
|
|
5554
5729
|
j = nlohmann::json{
|
|
5555
5730
|
TOJSON_IMPL(enabled),
|
|
5731
|
+
TOJSON_IMPL(hardwareEnabled),
|
|
5556
5732
|
TOJSON_IMPL(internalRate),
|
|
5557
5733
|
TOJSON_IMPL(internalChannels),
|
|
5558
5734
|
TOJSON_IMPL(muteTxOnTx),
|
|
@@ -5569,6 +5745,7 @@ namespace AppConfigurationObjects
|
|
|
5569
5745
|
{
|
|
5570
5746
|
p.clear();
|
|
5571
5747
|
getOptional<bool>("enabled", p.enabled, j, true);
|
|
5748
|
+
getOptional<bool>("hardwareEnabled", p.hardwareEnabled, j, true);
|
|
5572
5749
|
FROMJSON_IMPL(internalRate, int, 16000);
|
|
5573
5750
|
FROMJSON_IMPL(internalChannels, int, 2);
|
|
5574
5751
|
|
|
@@ -5820,6 +5997,61 @@ namespace AppConfigurationObjects
|
|
|
5820
5997
|
FROMJSON_IMPL(reclaimSpace, bool, false);
|
|
5821
5998
|
}
|
|
5822
5999
|
|
|
6000
|
+
|
|
6001
|
+
//-----------------------------------------------------------
|
|
6002
|
+
JSON_SERIALIZED_CLASS(SecureSignature)
|
|
6003
|
+
/**
|
|
6004
|
+
* @brief Configuration for a secure signature.
|
|
6005
|
+
*
|
|
6006
|
+
* Helper C++ class to serialize and de-serialize SecureSignature JSON
|
|
6007
|
+
*
|
|
6008
|
+
* Example: @include[doc] examples/SecureSignature.json
|
|
6009
|
+
*/
|
|
6010
|
+
class SecureSignature : public ConfigurationObjectBase
|
|
6011
|
+
{
|
|
6012
|
+
IMPLEMENT_JSON_SERIALIZATION()
|
|
6013
|
+
IMPLEMENT_JSON_DOCUMENTATION(SecureSignature)
|
|
6014
|
+
|
|
6015
|
+
public:
|
|
6016
|
+
|
|
6017
|
+
/** @brief Contains the PEM-formatted text of the certificate */
|
|
6018
|
+
std::string certificate;
|
|
6019
|
+
|
|
6020
|
+
// /** @brief Contains the PEM-formatted text of the certificate's public key */
|
|
6021
|
+
//std::string publicKey;
|
|
6022
|
+
|
|
6023
|
+
/** @brief Contains the signature */
|
|
6024
|
+
std::string signature;
|
|
6025
|
+
|
|
6026
|
+
SecureSignature()
|
|
6027
|
+
{
|
|
6028
|
+
clear();
|
|
6029
|
+
}
|
|
6030
|
+
|
|
6031
|
+
void clear()
|
|
6032
|
+
{
|
|
6033
|
+
certificate.clear();
|
|
6034
|
+
//publicKey.clear();
|
|
6035
|
+
signature.clear();
|
|
6036
|
+
}
|
|
6037
|
+
};
|
|
6038
|
+
|
|
6039
|
+
static void to_json(nlohmann::json& j, const SecureSignature& p)
|
|
6040
|
+
{
|
|
6041
|
+
j = nlohmann::json{
|
|
6042
|
+
TOJSON_IMPL(certificate),
|
|
6043
|
+
//TOJSON_IMPL(publicKey),
|
|
6044
|
+
TOJSON_IMPL(signature)
|
|
6045
|
+
};
|
|
6046
|
+
}
|
|
6047
|
+
static void from_json(const nlohmann::json& j, SecureSignature& p)
|
|
6048
|
+
{
|
|
6049
|
+
p.clear();
|
|
6050
|
+
FROMJSON_IMPL(certificate, std::string, EMPTY_STRING);
|
|
6051
|
+
//FROMJSON_IMPL(publicKey, std::string, EMPTY_STRING);
|
|
6052
|
+
FROMJSON_IMPL(signature, std::string, EMPTY_STRING);
|
|
6053
|
+
}
|
|
6054
|
+
|
|
5823
6055
|
//-----------------------------------------------------------
|
|
5824
6056
|
JSON_SERIALIZED_CLASS(NamedAudioDevice)
|
|
5825
6057
|
class NamedAudioDevice : public ConfigurationObjectBase
|
|
@@ -7062,6 +7294,9 @@ namespace AppConfigurationObjects
|
|
|
7062
7294
|
/** @brief [Optional, Default: 0 - OS platform default] Connection timeout in seconds to the peer */
|
|
7063
7295
|
int connectionTimeoutSecs;
|
|
7064
7296
|
|
|
7297
|
+
/** @brief Internal enablement setting. */
|
|
7298
|
+
bool forceIsMeshLeaf;
|
|
7299
|
+
|
|
7065
7300
|
RallypointPeer()
|
|
7066
7301
|
{
|
|
7067
7302
|
clear();
|
|
@@ -7074,6 +7309,7 @@ namespace AppConfigurationObjects
|
|
|
7074
7309
|
host.clear();
|
|
7075
7310
|
certificate.clear();
|
|
7076
7311
|
connectionTimeoutSecs = 0;
|
|
7312
|
+
forceIsMeshLeaf = false;
|
|
7077
7313
|
}
|
|
7078
7314
|
};
|
|
7079
7315
|
|
|
@@ -7084,7 +7320,8 @@ namespace AppConfigurationObjects
|
|
|
7084
7320
|
TOJSON_IMPL(enabled),
|
|
7085
7321
|
TOJSON_IMPL(host),
|
|
7086
7322
|
TOJSON_IMPL(certificate),
|
|
7087
|
-
TOJSON_IMPL(connectionTimeoutSecs)
|
|
7323
|
+
TOJSON_IMPL(connectionTimeoutSecs),
|
|
7324
|
+
TOJSON_IMPL(forceIsMeshLeaf)
|
|
7088
7325
|
};
|
|
7089
7326
|
}
|
|
7090
7327
|
static void from_json(const nlohmann::json& j, RallypointPeer& p)
|
|
@@ -7095,6 +7332,7 @@ namespace AppConfigurationObjects
|
|
|
7095
7332
|
getOptional<NetworkAddress>("host", p.host, j);
|
|
7096
7333
|
getOptional<SecurityCertificate>("certificate", p.certificate, j);
|
|
7097
7334
|
getOptional<int>("connectionTimeoutSecs", p.connectionTimeoutSecs, j, 0);
|
|
7335
|
+
getOptional<bool>("forceIsMeshLeaf", p.forceIsMeshLeaf, j, false);
|
|
7098
7336
|
}
|
|
7099
7337
|
|
|
7100
7338
|
//-----------------------------------------------------------
|
|
@@ -7672,6 +7910,52 @@ namespace AppConfigurationObjects
|
|
|
7672
7910
|
}
|
|
7673
7911
|
|
|
7674
7912
|
|
|
7913
|
+
//-----------------------------------------------------------
|
|
7914
|
+
JSON_SERIALIZED_CLASS(RallypointUdpStreamingIpvX)
|
|
7915
|
+
/**
|
|
7916
|
+
* @brief Streaming configuration for RP clients
|
|
7917
|
+
*
|
|
7918
|
+
* Example: @include[doc] examples/RallypointUdpStreamingIpvX.json
|
|
7919
|
+
*
|
|
7920
|
+
*/
|
|
7921
|
+
class RallypointUdpStreamingIpvX : public ConfigurationObjectBase
|
|
7922
|
+
{
|
|
7923
|
+
IMPLEMENT_JSON_SERIALIZATION()
|
|
7924
|
+
IMPLEMENT_JSON_DOCUMENTATION(RallypointUdpStreamingIpvX)
|
|
7925
|
+
|
|
7926
|
+
public:
|
|
7927
|
+
/** @brief [Optional, Default true] If true, enables UDP streaming for vX. */
|
|
7928
|
+
bool enabled;
|
|
7929
|
+
|
|
7930
|
+
/** @brief Network address for external entities to transmit to. Defaults to the address of the local interface and port 7444 */
|
|
7931
|
+
NetworkAddress external;
|
|
7932
|
+
|
|
7933
|
+
RallypointUdpStreamingIpvX()
|
|
7934
|
+
{
|
|
7935
|
+
clear();
|
|
7936
|
+
}
|
|
7937
|
+
|
|
7938
|
+
void clear()
|
|
7939
|
+
{
|
|
7940
|
+
enabled = true;
|
|
7941
|
+
external.clear();
|
|
7942
|
+
}
|
|
7943
|
+
};
|
|
7944
|
+
|
|
7945
|
+
static void to_json(nlohmann::json& j, const RallypointUdpStreamingIpvX& p)
|
|
7946
|
+
{
|
|
7947
|
+
j = nlohmann::json{
|
|
7948
|
+
TOJSON_IMPL(enabled),
|
|
7949
|
+
TOJSON_IMPL(external)
|
|
7950
|
+
};
|
|
7951
|
+
}
|
|
7952
|
+
static void from_json(const nlohmann::json& j, RallypointUdpStreamingIpvX& p)
|
|
7953
|
+
{
|
|
7954
|
+
p.clear();
|
|
7955
|
+
getOptional<bool>("enabled", p.enabled, j, true);
|
|
7956
|
+
getOptional<NetworkAddress>("external", p.external, j);
|
|
7957
|
+
}
|
|
7958
|
+
|
|
7675
7959
|
//-----------------------------------------------------------
|
|
7676
7960
|
JSON_SERIALIZED_CLASS(RallypointUdpStreaming)
|
|
7677
7961
|
/**
|
|
@@ -7690,20 +7974,45 @@ namespace AppConfigurationObjects
|
|
|
7690
7974
|
typedef enum
|
|
7691
7975
|
{
|
|
7692
7976
|
/** @brief Unknown */
|
|
7693
|
-
|
|
7977
|
+
ctUnknown = 0,
|
|
7694
7978
|
|
|
7695
|
-
/** @brief Shared-key
|
|
7696
|
-
|
|
7697
|
-
} EnvelopeType_t;
|
|
7979
|
+
/** @brief Shared-key, AES256 full IV */
|
|
7980
|
+
ctSharedKeyAes256FullIv = 1,
|
|
7698
7981
|
|
|
7699
|
-
|
|
7700
|
-
|
|
7982
|
+
/** @brief Shared-key, AES256 indexed IV */
|
|
7983
|
+
ctSharedKeyAes256IdxIv = 2,
|
|
7701
7984
|
|
|
7702
|
-
|
|
7703
|
-
|
|
7985
|
+
/** @brief Shared-key, ChaCha20 full IV */
|
|
7986
|
+
ctSharedKeyChaCha20FullIv = 3,
|
|
7987
|
+
|
|
7988
|
+
/** @brief Shared-key, ChaCha20 indexed IV */
|
|
7989
|
+
ctSharedKeyChaCha20IdxIv = 4
|
|
7990
|
+
} CryptoType_t;
|
|
7991
|
+
|
|
7992
|
+
/** @brief [Optional, Default true] If true, enables UDP streaming unless turned off on a per-family basis. */
|
|
7993
|
+
bool enabled;
|
|
7994
|
+
|
|
7995
|
+
/** @brief [Optional, Default ctSharedKeyAes256FullIv] The crypto method to be used */
|
|
7996
|
+
CryptoType_t cryptoType;
|
|
7997
|
+
|
|
7998
|
+
/** @brief UDP port to listen on. Default is 7444. */
|
|
7999
|
+
int listenPort;
|
|
8000
|
+
|
|
8001
|
+
/** @brief IPv4 */
|
|
8002
|
+
RallypointUdpStreamingIpvX ipv4;
|
|
8003
|
+
|
|
8004
|
+
/** @brief IPv6 */
|
|
8005
|
+
RallypointUdpStreamingIpvX ipv6;
|
|
8006
|
+
|
|
8007
|
+
/** @brief [Optional, Default: 15] Interval (seconds) at which to send UDP keepalives */
|
|
8008
|
+
int keepaliveIntervalSecs;
|
|
8009
|
+
|
|
8010
|
+
/** @brief [Optional, Default: @ref priVoice] Transmission priority. This has meaning on some operating systems based on how their IP stack operates. It may or may not affect final packet marking. */
|
|
8011
|
+
TxPriority_t priority;
|
|
8012
|
+
|
|
8013
|
+
/** @brief [Optional, Default: 64] Time to live or hop limit. */
|
|
8014
|
+
int ttl;
|
|
7704
8015
|
|
|
7705
|
-
/** @brief Network address for external entities to transmit to */
|
|
7706
|
-
NetworkAddress external;
|
|
7707
8016
|
|
|
7708
8017
|
RallypointUdpStreaming()
|
|
7709
8018
|
{
|
|
@@ -7712,27 +8021,42 @@ namespace AppConfigurationObjects
|
|
|
7712
8021
|
|
|
7713
8022
|
void clear()
|
|
7714
8023
|
{
|
|
7715
|
-
|
|
7716
|
-
|
|
7717
|
-
|
|
8024
|
+
enabled = true;
|
|
8025
|
+
cryptoType = CryptoType_t::ctSharedKeyAes256FullIv;
|
|
8026
|
+
listenPort = 7444;
|
|
8027
|
+
ipv4.clear();
|
|
8028
|
+
ipv6.clear();
|
|
8029
|
+
keepaliveIntervalSecs = 15;
|
|
8030
|
+
priority = TxPriority_t::priVoice;
|
|
8031
|
+
ttl = 64;
|
|
7718
8032
|
}
|
|
7719
8033
|
};
|
|
7720
8034
|
|
|
7721
8035
|
static void to_json(nlohmann::json& j, const RallypointUdpStreaming& p)
|
|
7722
8036
|
{
|
|
7723
8037
|
j = nlohmann::json{
|
|
7724
|
-
TOJSON_IMPL(
|
|
7725
|
-
TOJSON_IMPL(
|
|
7726
|
-
TOJSON_IMPL(
|
|
8038
|
+
TOJSON_IMPL(enabled),
|
|
8039
|
+
TOJSON_IMPL(cryptoType),
|
|
8040
|
+
TOJSON_IMPL(listenPort),
|
|
8041
|
+
TOJSON_IMPL(keepaliveIntervalSecs),
|
|
8042
|
+
TOJSON_IMPL(ipv4),
|
|
8043
|
+
TOJSON_IMPL(ipv6),
|
|
8044
|
+
TOJSON_IMPL(priority),
|
|
8045
|
+
TOJSON_IMPL(ttl)
|
|
7727
8046
|
};
|
|
7728
8047
|
}
|
|
7729
8048
|
static void from_json(const nlohmann::json& j, RallypointUdpStreaming& p)
|
|
7730
8049
|
{
|
|
7731
8050
|
p.clear();
|
|
7732
|
-
|
|
7733
|
-
|
|
7734
|
-
|
|
7735
|
-
|
|
8051
|
+
getOptional<bool>("enabled", p.enabled, j, true);
|
|
8052
|
+
getOptional<RallypointUdpStreaming::CryptoType_t>("cryptoType", p.cryptoType, j, RallypointUdpStreaming::CryptoType_t::ctSharedKeyAes256FullIv);
|
|
8053
|
+
getOptional<int>("listenPort", p.listenPort, j, 7444);
|
|
8054
|
+
getOptional<int>("keepaliveIntervalSecs", p.keepaliveIntervalSecs, j, 15);
|
|
8055
|
+
getOptional<RallypointUdpStreamingIpvX>("ipv4", p.ipv4, j);
|
|
8056
|
+
getOptional<RallypointUdpStreamingIpvX>("ipv6", p.ipv6, j);
|
|
8057
|
+
getOptional<TxPriority_t>("priority", p.priority, j, TxPriority_t::priVoice);
|
|
8058
|
+
getOptional<int>("ttl", p.ttl, j, 64);
|
|
8059
|
+
}
|
|
7736
8060
|
|
|
7737
8061
|
//-----------------------------------------------------------
|
|
7738
8062
|
JSON_SERIALIZED_CLASS(RallypointRpRtTimingBehavior)
|
|
@@ -7944,6 +8268,54 @@ namespace AppConfigurationObjects
|
|
|
7944
8268
|
getOptional<std::vector<std::string>>("extraMeshes", p.extraMeshes, j);
|
|
7945
8269
|
}
|
|
7946
8270
|
|
|
8271
|
+
|
|
8272
|
+
//-----------------------------------------------------------
|
|
8273
|
+
JSON_SERIALIZED_CLASS(RallypointExtendedGroupRestriction)
|
|
8274
|
+
/**
|
|
8275
|
+
* @brief Defines settings for Rallypoint extended group restrictions
|
|
8276
|
+
*
|
|
8277
|
+
* Example: @include[doc] examples/RallypointExtendedGroupRestriction.json
|
|
8278
|
+
*
|
|
8279
|
+
*/
|
|
8280
|
+
class RallypointExtendedGroupRestriction : public ConfigurationObjectBase
|
|
8281
|
+
{
|
|
8282
|
+
IMPLEMENT_JSON_SERIALIZATION()
|
|
8283
|
+
IMPLEMENT_JSON_DOCUMENTATION(RallypointExtendedGroupRestriction)
|
|
8284
|
+
|
|
8285
|
+
public:
|
|
8286
|
+
/** @brief Group ID */
|
|
8287
|
+
std::string id;
|
|
8288
|
+
|
|
8289
|
+
/** @brief Restrictions */
|
|
8290
|
+
std::vector<StringRestrictionList> restrictions;
|
|
8291
|
+
|
|
8292
|
+
RallypointExtendedGroupRestriction()
|
|
8293
|
+
{
|
|
8294
|
+
clear();
|
|
8295
|
+
}
|
|
8296
|
+
|
|
8297
|
+
void clear()
|
|
8298
|
+
{
|
|
8299
|
+
id.clear();
|
|
8300
|
+
restrictions.clear();
|
|
8301
|
+
}
|
|
8302
|
+
};
|
|
8303
|
+
|
|
8304
|
+
static void to_json(nlohmann::json& j, const RallypointExtendedGroupRestriction& p)
|
|
8305
|
+
{
|
|
8306
|
+
j = nlohmann::json{
|
|
8307
|
+
TOJSON_IMPL(id),
|
|
8308
|
+
TOJSON_IMPL(restrictions)
|
|
8309
|
+
};
|
|
8310
|
+
}
|
|
8311
|
+
static void from_json(const nlohmann::json& j, RallypointExtendedGroupRestriction& p)
|
|
8312
|
+
{
|
|
8313
|
+
p.clear();
|
|
8314
|
+
getOptional<std::string>("id", p.id, j);
|
|
8315
|
+
getOptional<std::vector<StringRestrictionList>>("restrictions", p.restrictions, j);
|
|
8316
|
+
}
|
|
8317
|
+
|
|
8318
|
+
|
|
7947
8319
|
//-----------------------------------------------------------
|
|
7948
8320
|
JSON_SERIALIZED_CLASS(RallypointServer)
|
|
7949
8321
|
/**
|
|
@@ -7959,7 +8331,7 @@ namespace AppConfigurationObjects
|
|
|
7959
8331
|
IMPLEMENT_JSON_SERIALIZATION()
|
|
7960
8332
|
IMPLEMENT_JSON_DOCUMENTATION(RallypointServer)
|
|
7961
8333
|
|
|
7962
|
-
public:
|
|
8334
|
+
public:
|
|
7963
8335
|
/** @brief [Optional] Settings for the FIPS crypto. */
|
|
7964
8336
|
FipsCryptoSettings fipsCrypto;
|
|
7965
8337
|
|
|
@@ -7972,6 +8344,9 @@ namespace AppConfigurationObjects
|
|
|
7972
8344
|
/** @brief TCP port to listen on. Default is 7443. */
|
|
7973
8345
|
int listenPort;
|
|
7974
8346
|
|
|
8347
|
+
/** @brief [Optional, Default IpFamilyType_t::ifIp4] Address familiy to be used for listening */
|
|
8348
|
+
IpFamilyType_t ipFamily;
|
|
8349
|
+
|
|
7975
8350
|
/** @brief Name of the NIC to bind to for listening for incoming TCP connections. */
|
|
7976
8351
|
std::string interfaceName;
|
|
7977
8352
|
|
|
@@ -8056,6 +8431,12 @@ namespace AppConfigurationObjects
|
|
|
8056
8431
|
/** @brief Group IDs to be restricted (inclusive or exclusive) */
|
|
8057
8432
|
StringRestrictionList groupRestrictions;
|
|
8058
8433
|
|
|
8434
|
+
/** @brief The policy employed to allow group registration */
|
|
8435
|
+
GroupRestrictionAccessPolicyType_t groupRestrictionAccessPolicyType;
|
|
8436
|
+
|
|
8437
|
+
/** @brief Extended group restrictions */
|
|
8438
|
+
std::vector<RallypointExtendedGroupRestriction> extendedGroupRestrictions;
|
|
8439
|
+
|
|
8059
8440
|
/** @brief Name to use for signalling a configuration check */
|
|
8060
8441
|
std::string configurationCheckSignalName;
|
|
8061
8442
|
|
|
@@ -8159,6 +8540,9 @@ namespace AppConfigurationObjects
|
|
|
8159
8540
|
websocket.clear();
|
|
8160
8541
|
nsm.clear();
|
|
8161
8542
|
advertising.clear();
|
|
8543
|
+
extendedGroupRestrictions.clear();
|
|
8544
|
+
groupRestrictionAccessPolicyType = GroupRestrictionAccessPolicyType_t::graptPermissive;
|
|
8545
|
+
ipFamily = IpFamilyType_t::ifIpUnspec;
|
|
8162
8546
|
}
|
|
8163
8547
|
};
|
|
8164
8548
|
|
|
@@ -8212,7 +8596,10 @@ namespace AppConfigurationObjects
|
|
|
8212
8596
|
TOJSON_IMPL(peerRtBehaviors),
|
|
8213
8597
|
TOJSON_IMPL(websocket),
|
|
8214
8598
|
TOJSON_IMPL(nsm),
|
|
8215
|
-
TOJSON_IMPL(advertising)
|
|
8599
|
+
TOJSON_IMPL(advertising),
|
|
8600
|
+
TOJSON_IMPL(extendedGroupRestrictions),
|
|
8601
|
+
TOJSON_IMPL(groupRestrictionAccessPolicyType),
|
|
8602
|
+
TOJSON_IMPL(ipFamily)
|
|
8216
8603
|
};
|
|
8217
8604
|
}
|
|
8218
8605
|
static void from_json(const nlohmann::json& j, RallypointServer& p)
|
|
@@ -8266,6 +8653,9 @@ namespace AppConfigurationObjects
|
|
|
8266
8653
|
getOptional<RallypointWebsocketSettings>("websocket", p.websocket, j);
|
|
8267
8654
|
getOptional<NsmConfiguration>("nsm", p.nsm, j);
|
|
8268
8655
|
getOptional<RallypointAdvertisingSettings>("advertising", p.advertising, j);
|
|
8656
|
+
getOptional<std::vector<RallypointExtendedGroupRestriction>>("extendedGroupRestrictions", p.extendedGroupRestrictions, j);
|
|
8657
|
+
getOptional<GroupRestrictionAccessPolicyType_t>("groupRestrictionAccessPolicyType", p.groupRestrictionAccessPolicyType, j, GroupRestrictionAccessPolicyType_t::graptPermissive);
|
|
8658
|
+
getOptional<IpFamilyType_t>("ipFamily", p.ipFamily, j, IpFamilyType_t::ifIpUnspec);
|
|
8269
8659
|
}
|
|
8270
8660
|
|
|
8271
8661
|
//-----------------------------------------------------------
|
|
@@ -8703,6 +9093,53 @@ namespace AppConfigurationObjects
|
|
|
8703
9093
|
getOptional<std::vector<CertStoreCertificateElement>>("certificates", p.certificates, j);
|
|
8704
9094
|
}
|
|
8705
9095
|
|
|
9096
|
+
//-----------------------------------------------------------
|
|
9097
|
+
JSON_SERIALIZED_CLASS(CertificateSubjectElement)
|
|
9098
|
+
/**
|
|
9099
|
+
* @brief Description of a certificate subject element
|
|
9100
|
+
*
|
|
9101
|
+
* Helper C++ class to serialize and de-serialize CertificateSubjectElement JSON
|
|
9102
|
+
*
|
|
9103
|
+
*/
|
|
9104
|
+
class CertificateSubjectElement : public ConfigurationObjectBase
|
|
9105
|
+
{
|
|
9106
|
+
IMPLEMENT_JSON_SERIALIZATION()
|
|
9107
|
+
IMPLEMENT_JSON_DOCUMENTATION(CertificateSubjectElement)
|
|
9108
|
+
|
|
9109
|
+
public:
|
|
9110
|
+
/** @brief Name */
|
|
9111
|
+
std::string name;
|
|
9112
|
+
|
|
9113
|
+
/** @brief Value */
|
|
9114
|
+
std::string value;
|
|
9115
|
+
|
|
9116
|
+
CertificateSubjectElement()
|
|
9117
|
+
{
|
|
9118
|
+
clear();
|
|
9119
|
+
}
|
|
9120
|
+
|
|
9121
|
+
void clear()
|
|
9122
|
+
{
|
|
9123
|
+
name.clear();
|
|
9124
|
+
value.clear();
|
|
9125
|
+
}
|
|
9126
|
+
};
|
|
9127
|
+
|
|
9128
|
+
static void to_json(nlohmann::json& j, const CertificateSubjectElement& p)
|
|
9129
|
+
{
|
|
9130
|
+
j = nlohmann::json{
|
|
9131
|
+
TOJSON_IMPL(name),
|
|
9132
|
+
TOJSON_IMPL(value)
|
|
9133
|
+
};
|
|
9134
|
+
}
|
|
9135
|
+
static void from_json(const nlohmann::json& j, CertificateSubjectElement& p)
|
|
9136
|
+
{
|
|
9137
|
+
p.clear();
|
|
9138
|
+
getOptional<std::string>("name", p.name, j, EMPTY_STRING);
|
|
9139
|
+
getOptional<std::string>("value", p.value, j, EMPTY_STRING);
|
|
9140
|
+
}
|
|
9141
|
+
|
|
9142
|
+
|
|
8706
9143
|
//-----------------------------------------------------------
|
|
8707
9144
|
JSON_SERIALIZED_CLASS(CertificateDescriptor)
|
|
8708
9145
|
/**
|
|
@@ -8741,6 +9178,15 @@ namespace AppConfigurationObjects
|
|
|
8741
9178
|
/** @brief Fingerprint */
|
|
8742
9179
|
std::string fingerprint;
|
|
8743
9180
|
|
|
9181
|
+
/** @brief Array of subject elements */
|
|
9182
|
+
std::vector<CertificateSubjectElement> subjectElements;
|
|
9183
|
+
|
|
9184
|
+
/** @brief PEM version of the certificate */
|
|
9185
|
+
std::string certificatePem;
|
|
9186
|
+
|
|
9187
|
+
/** @brief PEM version of the public key */
|
|
9188
|
+
std::string publicKeyPem;
|
|
9189
|
+
|
|
8744
9190
|
CertificateDescriptor()
|
|
8745
9191
|
{
|
|
8746
9192
|
clear();
|
|
@@ -8756,6 +9202,9 @@ namespace AppConfigurationObjects
|
|
|
8756
9202
|
notAfter.clear();
|
|
8757
9203
|
serial.clear();
|
|
8758
9204
|
fingerprint.clear();
|
|
9205
|
+
subjectElements.clear();
|
|
9206
|
+
certificatePem.clear();
|
|
9207
|
+
publicKeyPem.clear();
|
|
8759
9208
|
}
|
|
8760
9209
|
};
|
|
8761
9210
|
|
|
@@ -8769,7 +9218,10 @@ namespace AppConfigurationObjects
|
|
|
8769
9218
|
TOJSON_IMPL(notBefore),
|
|
8770
9219
|
TOJSON_IMPL(notAfter),
|
|
8771
9220
|
TOJSON_IMPL(serial),
|
|
8772
|
-
TOJSON_IMPL(fingerprint)
|
|
9221
|
+
TOJSON_IMPL(fingerprint),
|
|
9222
|
+
TOJSON_IMPL(subjectElements),
|
|
9223
|
+
TOJSON_IMPL(certificatePem),
|
|
9224
|
+
TOJSON_IMPL(publicKeyPem)
|
|
8773
9225
|
};
|
|
8774
9226
|
}
|
|
8775
9227
|
static void from_json(const nlohmann::json& j, CertificateDescriptor& p)
|
|
@@ -8783,6 +9235,9 @@ namespace AppConfigurationObjects
|
|
|
8783
9235
|
getOptional<std::string>("notAfter", p.notAfter, j, EMPTY_STRING);
|
|
8784
9236
|
getOptional<std::string>("serial", p.serial, j, EMPTY_STRING);
|
|
8785
9237
|
getOptional<std::string>("fingerprint", p.fingerprint, j, EMPTY_STRING);
|
|
9238
|
+
getOptional<std::string>("certificatePem", p.certificatePem, j, EMPTY_STRING);
|
|
9239
|
+
getOptional<std::string>("publicKeyPem", p.publicKeyPem, j, EMPTY_STRING);
|
|
9240
|
+
getOptional<std::vector<CertificateSubjectElement>>("subjectElements", p.subjectElements, j);
|
|
8786
9241
|
}
|
|
8787
9242
|
|
|
8788
9243
|
|
|
@@ -10790,8 +11245,7 @@ namespace AppConfigurationObjects
|
|
|
10790
11245
|
Advertising::document();
|
|
10791
11246
|
GroupPriorityTranslation::document();
|
|
10792
11247
|
GroupTimeline::document();
|
|
10793
|
-
|
|
10794
|
-
GroupLynQPro::document();
|
|
11248
|
+
GroupAppTransport::document();
|
|
10795
11249
|
RtpProfile::document();
|
|
10796
11250
|
Group::document();
|
|
10797
11251
|
Mission::document();
|