engage-engine 1.238.90780004 → 1.241.90810006
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 +415 -178
- package/include/EngageConstants.h +2 -0
- package/include/EngageInterface.h +45 -0
- 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
package/engage.cpp
CHANGED
|
@@ -752,6 +752,12 @@ NAN_METHOD(leaveGroup)
|
|
|
752
752
|
NANRETI(engageLeaveGroup(STRVAL(0)));
|
|
753
753
|
}
|
|
754
754
|
|
|
755
|
+
//--------------------------------------------------------
|
|
756
|
+
NAN_METHOD(setGroupRules)
|
|
757
|
+
{
|
|
758
|
+
NANRETI(engageSetGroupRules(STRVAL(0), STRVAL(1)));
|
|
759
|
+
}
|
|
760
|
+
|
|
755
761
|
//--------------------------------------------------------
|
|
756
762
|
NAN_METHOD(beginGroupTx)
|
|
757
763
|
{
|
|
@@ -1040,6 +1046,19 @@ NAN_METHOD(getCertStoreCertificatePem)
|
|
|
1040
1046
|
NANRETS(rc);
|
|
1041
1047
|
}
|
|
1042
1048
|
|
|
1049
|
+
//--------------------------------------------------------
|
|
1050
|
+
NAN_METHOD(getArrayOfCertificateDescriptorsFromPem)
|
|
1051
|
+
{
|
|
1052
|
+
const char *rc = engageGetArrayOfCertificateDescriptorsFromPem(STRVAL(0));
|
|
1053
|
+
|
|
1054
|
+
if(rc == nullptr)
|
|
1055
|
+
{
|
|
1056
|
+
rc = "";
|
|
1057
|
+
}
|
|
1058
|
+
|
|
1059
|
+
NANRETS(rc);
|
|
1060
|
+
}
|
|
1061
|
+
|
|
1043
1062
|
//--------------------------------------------------------
|
|
1044
1063
|
NAN_METHOD(getCertificateDescriptorFromPem)
|
|
1045
1064
|
{
|
|
@@ -1202,6 +1221,7 @@ NAN_MODULE_INIT(Init)
|
|
|
1202
1221
|
ENGAGE_BINDING(deleteGroup);
|
|
1203
1222
|
ENGAGE_BINDING(joinGroup);
|
|
1204
1223
|
ENGAGE_BINDING(leaveGroup);
|
|
1224
|
+
ENGAGE_BINDING(setGroupRules);
|
|
1205
1225
|
|
|
1206
1226
|
ENGAGE_BINDING(beginGroupTx);
|
|
1207
1227
|
ENGAGE_BINDING(beginGroupTxAdvanced);
|
|
@@ -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
|
/**
|
|
@@ -2901,6 +2935,79 @@ namespace AppConfigurationObjects
|
|
|
2901
2935
|
getOptional("extra", p.extra, j);
|
|
2902
2936
|
}
|
|
2903
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
|
+
|
|
2904
3011
|
//-----------------------------------------------------------
|
|
2905
3012
|
JSON_SERIALIZED_CLASS(TxAudio)
|
|
2906
3013
|
/**
|
|
@@ -3077,6 +3184,9 @@ namespace AppConfigurationObjects
|
|
|
3077
3184
|
ctMelpe2400 = 52
|
|
3078
3185
|
} TxCodec_t;
|
|
3079
3186
|
|
|
3187
|
+
/** @brief [Optional, Default: true] Audio transmission is enabled */
|
|
3188
|
+
bool enabled;
|
|
3189
|
+
|
|
3080
3190
|
/** @brief [Optional, Default: @ref ctOpus8000] Specifies the Codec Type to use for the transmission. See @ref TxCodec_t for all codec types */
|
|
3081
3191
|
TxCodec_t encoder;
|
|
3082
3192
|
|
|
@@ -3147,6 +3257,7 @@ namespace AppConfigurationObjects
|
|
|
3147
3257
|
|
|
3148
3258
|
void clear()
|
|
3149
3259
|
{
|
|
3260
|
+
enabled = true;
|
|
3150
3261
|
encoder = TxAudio::TxCodec_t::ctUnknown;
|
|
3151
3262
|
encoderName.clear();
|
|
3152
3263
|
framingMs = 60;
|
|
@@ -3169,6 +3280,7 @@ namespace AppConfigurationObjects
|
|
|
3169
3280
|
static void to_json(nlohmann::json& j, const TxAudio& p)
|
|
3170
3281
|
{
|
|
3171
3282
|
j = nlohmann::json{
|
|
3283
|
+
TOJSON_IMPL(enabled),
|
|
3172
3284
|
TOJSON_IMPL(encoder),
|
|
3173
3285
|
TOJSON_IMPL(encoderName),
|
|
3174
3286
|
TOJSON_IMPL(framingMs),
|
|
@@ -3191,6 +3303,7 @@ namespace AppConfigurationObjects
|
|
|
3191
3303
|
static void from_json(const nlohmann::json& j, TxAudio& p)
|
|
3192
3304
|
{
|
|
3193
3305
|
p.clear();
|
|
3306
|
+
getOptional<bool>("enabled", p.enabled, j, true);
|
|
3194
3307
|
getOptional<TxAudio::TxCodec_t>("encoder", p.encoder, j, TxAudio::TxCodec_t::ctOpus8000);
|
|
3195
3308
|
getOptional<std::string>("encoderName", p.encoderName, j, EMPTY_STRING);
|
|
3196
3309
|
getOptional("framingMs", p.framingMs, j, 60);
|
|
@@ -3205,7 +3318,7 @@ namespace AppConfigurationObjects
|
|
|
3205
3318
|
getOptional("resetRtpOnTx", p.resetRtpOnTx, j, true);
|
|
3206
3319
|
getOptional("enableSmoothing", p.enableSmoothing, j, true);
|
|
3207
3320
|
getOptional("dtx", p.dtx, j, false);
|
|
3208
|
-
getOptional("smoothedHangTimeMs", p.smoothedHangTimeMs, j, 0);
|
|
3321
|
+
getOptional("smoothedHangTimeMs", p.smoothedHangTimeMs, j, 0);
|
|
3209
3322
|
|
|
3210
3323
|
// internalKey is not serialized
|
|
3211
3324
|
}
|
|
@@ -3980,89 +4093,29 @@ namespace AppConfigurationObjects
|
|
|
3980
4093
|
|
|
3981
4094
|
|
|
3982
4095
|
//-----------------------------------------------------------
|
|
3983
|
-
JSON_SERIALIZED_CLASS(
|
|
3984
|
-
/**
|
|
3985
|
-
* @brief Configuration for the optional SatPaq transport functionality for Group.
|
|
3986
|
-
*
|
|
3987
|
-
* Helper C++ class to serialize and de-serialize GroupSatPaq JSON
|
|
3988
|
-
*
|
|
3989
|
-
* Example: @include[doc] examples/GroupSatPaq.json
|
|
3990
|
-
*
|
|
3991
|
-
* @see ConfigurationObjects::Group
|
|
3992
|
-
*/
|
|
3993
|
-
class GroupSatPaq : public ConfigurationObjectBase
|
|
3994
|
-
{
|
|
3995
|
-
IMPLEMENT_JSON_SERIALIZATION()
|
|
3996
|
-
IMPLEMENT_JSON_DOCUMENTATION(GroupSatPaq)
|
|
3997
|
-
|
|
3998
|
-
public:
|
|
3999
|
-
/** @brief [Optional, Default: false] Enables SatPaq feature. */
|
|
4000
|
-
bool enabled;
|
|
4001
|
-
|
|
4002
|
-
/** @brief The sender ID. */
|
|
4003
|
-
uint16_t senderId;
|
|
4004
|
-
|
|
4005
|
-
/** @brief The talkgroup ID. */
|
|
4006
|
-
uint8_t talkgroupId;
|
|
4007
|
-
|
|
4008
|
-
GroupSatPaq()
|
|
4009
|
-
{
|
|
4010
|
-
clear();
|
|
4011
|
-
}
|
|
4012
|
-
|
|
4013
|
-
void clear()
|
|
4014
|
-
{
|
|
4015
|
-
enabled = false;
|
|
4016
|
-
senderId = 0;
|
|
4017
|
-
talkgroupId = 0;
|
|
4018
|
-
}
|
|
4019
|
-
};
|
|
4020
|
-
|
|
4021
|
-
static void to_json(nlohmann::json& j, const GroupSatPaq& p)
|
|
4022
|
-
{
|
|
4023
|
-
j = nlohmann::json{
|
|
4024
|
-
TOJSON_IMPL(enabled),
|
|
4025
|
-
TOJSON_IMPL(senderId),
|
|
4026
|
-
TOJSON_IMPL(talkgroupId)
|
|
4027
|
-
};
|
|
4028
|
-
}
|
|
4029
|
-
static void from_json(const nlohmann::json& j, GroupSatPaq& p)
|
|
4030
|
-
{
|
|
4031
|
-
p.clear();
|
|
4032
|
-
getOptional<bool>("enabled", p.enabled, j, false);
|
|
4033
|
-
getOptional<uint16_t>("senderId", p.senderId, j, 0);
|
|
4034
|
-
getOptional<uint8_t>("talkgroupId", p.talkgroupId, j, 0);
|
|
4035
|
-
}
|
|
4036
|
-
|
|
4037
|
-
|
|
4038
|
-
|
|
4039
|
-
//-----------------------------------------------------------
|
|
4040
|
-
JSON_SERIALIZED_CLASS(GroupLynQPro)
|
|
4096
|
+
JSON_SERIALIZED_CLASS(GroupAppTransport)
|
|
4041
4097
|
/**
|
|
4042
|
-
* @brief Configuration for the optional
|
|
4098
|
+
* @brief Configuration for the optional custom transport functionality for Group.
|
|
4043
4099
|
*
|
|
4044
|
-
* Helper C++ class to serialize and de-serialize
|
|
4100
|
+
* Helper C++ class to serialize and de-serialize GroupAppTransport JSON
|
|
4045
4101
|
*
|
|
4046
|
-
* Example: @include[doc] examples/
|
|
4102
|
+
* Example: @include[doc] examples/GroupAppTransport.json
|
|
4047
4103
|
*
|
|
4048
4104
|
* @see ConfigurationObjects::Group
|
|
4049
4105
|
*/
|
|
4050
|
-
class
|
|
4106
|
+
class GroupAppTransport : public ConfigurationObjectBase
|
|
4051
4107
|
{
|
|
4052
4108
|
IMPLEMENT_JSON_SERIALIZATION()
|
|
4053
|
-
IMPLEMENT_JSON_DOCUMENTATION(
|
|
4109
|
+
IMPLEMENT_JSON_DOCUMENTATION(GroupAppTransport)
|
|
4054
4110
|
|
|
4055
4111
|
public:
|
|
4056
|
-
/** @brief [Optional, Default: false] Enables
|
|
4112
|
+
/** @brief [Optional, Default: false] Enables custom feature. */
|
|
4057
4113
|
bool enabled;
|
|
4058
4114
|
|
|
4059
|
-
/** @brief The
|
|
4060
|
-
|
|
4061
|
-
|
|
4062
|
-
/** @brief The talkgroup ID. */
|
|
4063
|
-
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;
|
|
4064
4117
|
|
|
4065
|
-
|
|
4118
|
+
GroupAppTransport()
|
|
4066
4119
|
{
|
|
4067
4120
|
clear();
|
|
4068
4121
|
}
|
|
@@ -4070,25 +4123,22 @@ namespace AppConfigurationObjects
|
|
|
4070
4123
|
void clear()
|
|
4071
4124
|
{
|
|
4072
4125
|
enabled = false;
|
|
4073
|
-
|
|
4074
|
-
talkgroupId = 0;
|
|
4126
|
+
id.clear();
|
|
4075
4127
|
}
|
|
4076
4128
|
};
|
|
4077
4129
|
|
|
4078
|
-
static void to_json(nlohmann::json& j, const
|
|
4130
|
+
static void to_json(nlohmann::json& j, const GroupAppTransport& p)
|
|
4079
4131
|
{
|
|
4080
4132
|
j = nlohmann::json{
|
|
4081
4133
|
TOJSON_IMPL(enabled),
|
|
4082
|
-
TOJSON_IMPL(
|
|
4083
|
-
TOJSON_IMPL(talkgroupId)
|
|
4134
|
+
TOJSON_IMPL(id)
|
|
4084
4135
|
};
|
|
4085
4136
|
}
|
|
4086
|
-
static void from_json(const nlohmann::json& j,
|
|
4137
|
+
static void from_json(const nlohmann::json& j, GroupAppTransport& p)
|
|
4087
4138
|
{
|
|
4088
4139
|
p.clear();
|
|
4089
4140
|
getOptional<bool>("enabled", p.enabled, j, false);
|
|
4090
|
-
getOptional<
|
|
4091
|
-
getOptional<uint8_t>("talkgroupId", p.talkgroupId, j, 0);
|
|
4141
|
+
getOptional<std::string>("id", p.id, j);
|
|
4092
4142
|
}
|
|
4093
4143
|
|
|
4094
4144
|
//-----------------------------------------------------------
|
|
@@ -4486,6 +4536,16 @@ namespace AppConfigurationObjects
|
|
|
4486
4536
|
bomLanguageTranslation = 3
|
|
4487
4537
|
} BridgingOpMode_t;
|
|
4488
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
|
+
|
|
4489
4549
|
/** @brief Specifies the group type (see @ref Type_t). */
|
|
4490
4550
|
Type_t type;
|
|
4491
4551
|
|
|
@@ -4570,9 +4630,6 @@ namespace AppConfigurationObjects
|
|
|
4570
4630
|
/** @brief [Optional, Default: 10] Specifies the number fo seconds to wait after Rallypoint connection failure to switch to multicast operation. */
|
|
4571
4631
|
int multicastFailoverSecs;
|
|
4572
4632
|
|
|
4573
|
-
/** @brief [Optional, Default: false] Set this to true to have event notifications fire when human speech is detected in incoming audio streams. */
|
|
4574
|
-
bool enableRxVad;
|
|
4575
|
-
|
|
4576
4633
|
/** @brief The network address for receiving RTCP presencing packets */
|
|
4577
4634
|
NetworkAddress rtcpPresenceRx;
|
|
4578
4635
|
|
|
@@ -4597,14 +4654,8 @@ namespace AppConfigurationObjects
|
|
|
4597
4654
|
/** @brief [Optional] Alias to use for inbound streams that do not have an alias component */
|
|
4598
4655
|
std::string anonymousAlias;
|
|
4599
4656
|
|
|
4600
|
-
/** @brief [Optional] Settings necessary if the group is transported via
|
|
4601
|
-
|
|
4602
|
-
|
|
4603
|
-
/** @brief [Optional] Settings necessary if the group is transported via the LynQPro protocol */
|
|
4604
|
-
GroupLynQPro lynqPro;
|
|
4605
|
-
|
|
4606
|
-
/** @brief [Optional] The name of the registered transport to use */
|
|
4607
|
-
std::string transportName;
|
|
4657
|
+
/** @brief [Optional] Settings necessary if the group is transported via an application-supplied custom transport */
|
|
4658
|
+
GroupAppTransport appTransport;
|
|
4608
4659
|
|
|
4609
4660
|
/** @brief [Optional, Default: false] Allows for processing of looped back packets - primarily meant for debugging */
|
|
4610
4661
|
bool allowLoopback;
|
|
@@ -4645,6 +4696,15 @@ namespace AppConfigurationObjects
|
|
|
4645
4696
|
/** @brief Details for capture of transmitted packets */
|
|
4646
4697
|
PacketCapturer txCapture;
|
|
4647
4698
|
|
|
4699
|
+
/** @brief [Optional, Default: 66] The RTP payload type to be used for blobs sent over RTP (see BlobInfo) */
|
|
4700
|
+
uint16_t blobRtpPayloadType;
|
|
4701
|
+
|
|
4702
|
+
/** @brief [Optional, Default: iagpAnonymousAlias] */
|
|
4703
|
+
InboundAliasGenerationPolicy_t inboundAliasGenerationPolicy;
|
|
4704
|
+
|
|
4705
|
+
/** @brief [Optional] Inbound gating of audio - only audio allowed through by the gate will be processed */
|
|
4706
|
+
AudioGate gateIn;
|
|
4707
|
+
|
|
4648
4708
|
Group()
|
|
4649
4709
|
{
|
|
4650
4710
|
clear();
|
|
@@ -4684,8 +4744,6 @@ namespace AppConfigurationObjects
|
|
|
4684
4744
|
|
|
4685
4745
|
rtcpPresenceRx.clear();
|
|
4686
4746
|
|
|
4687
|
-
enableRxVad = false;
|
|
4688
|
-
|
|
4689
4747
|
presenceGroupAffinities.clear();
|
|
4690
4748
|
disablePacketEvents = false;
|
|
4691
4749
|
|
|
@@ -4697,9 +4755,7 @@ namespace AppConfigurationObjects
|
|
|
4697
4755
|
anonymousAlias.clear();
|
|
4698
4756
|
lbCrypto = false;
|
|
4699
4757
|
|
|
4700
|
-
|
|
4701
|
-
lynqPro.clear();
|
|
4702
|
-
transportName.clear();
|
|
4758
|
+
appTransport.clear();
|
|
4703
4759
|
allowLoopback = false;
|
|
4704
4760
|
|
|
4705
4761
|
rtpProfile.clear();
|
|
@@ -4721,6 +4777,10 @@ namespace AppConfigurationObjects
|
|
|
4721
4777
|
|
|
4722
4778
|
rxCapture.clear();
|
|
4723
4779
|
txCapture.clear();
|
|
4780
|
+
|
|
4781
|
+
blobRtpPayloadType = 66;
|
|
4782
|
+
inboundAliasGenerationPolicy = iagpAnonymousAlias;
|
|
4783
|
+
gateIn.clear();
|
|
4724
4784
|
}
|
|
4725
4785
|
};
|
|
4726
4786
|
|
|
@@ -4754,7 +4814,6 @@ namespace AppConfigurationObjects
|
|
|
4754
4814
|
TOJSON_IMPL(enableMulticastFailover),
|
|
4755
4815
|
TOJSON_IMPL(multicastFailoverSecs),
|
|
4756
4816
|
TOJSON_IMPL(rtcpPresenceRx),
|
|
4757
|
-
TOJSON_IMPL(enableRxVad),
|
|
4758
4817
|
TOJSON_IMPL(presenceGroupAffinities),
|
|
4759
4818
|
TOJSON_IMPL(disablePacketEvents),
|
|
4760
4819
|
TOJSON_IMPL(rfc4733RtpPayloadId),
|
|
@@ -4763,9 +4822,7 @@ namespace AppConfigurationObjects
|
|
|
4763
4822
|
TOJSON_IMPL(stickyTidHangSecs),
|
|
4764
4823
|
TOJSON_IMPL(anonymousAlias),
|
|
4765
4824
|
TOJSON_IMPL(lbCrypto),
|
|
4766
|
-
TOJSON_IMPL(
|
|
4767
|
-
TOJSON_IMPL(lynqPro),
|
|
4768
|
-
TOJSON_IMPL(transportName),
|
|
4825
|
+
TOJSON_IMPL(appTransport),
|
|
4769
4826
|
TOJSON_IMPL(allowLoopback),
|
|
4770
4827
|
TOJSON_IMPL(rangerPackets),
|
|
4771
4828
|
|
|
@@ -4782,7 +4839,13 @@ namespace AppConfigurationObjects
|
|
|
4782
4839
|
TOJSON_IMPL(synVoice),
|
|
4783
4840
|
|
|
4784
4841
|
TOJSON_IMPL(rxCapture),
|
|
4785
|
-
TOJSON_IMPL(txCapture)
|
|
4842
|
+
TOJSON_IMPL(txCapture),
|
|
4843
|
+
|
|
4844
|
+
TOJSON_IMPL(blobRtpPayloadType),
|
|
4845
|
+
|
|
4846
|
+
TOJSON_IMPL(inboundAliasGenerationPolicy),
|
|
4847
|
+
|
|
4848
|
+
TOJSON_IMPL(gateIn)
|
|
4786
4849
|
};
|
|
4787
4850
|
|
|
4788
4851
|
TOJSON_BASE_IMPL();
|
|
@@ -4837,7 +4900,6 @@ namespace AppConfigurationObjects
|
|
|
4837
4900
|
getOptional<bool>("enableMulticastFailover", p.enableMulticastFailover, j, false);
|
|
4838
4901
|
getOptional<int>("multicastFailoverSecs", p.multicastFailoverSecs, j, 10);
|
|
4839
4902
|
getOptional<NetworkAddress>("rtcpPresenceRx", p.rtcpPresenceRx, j);
|
|
4840
|
-
getOptional<bool>("enableRxVad", p.enableRxVad, j, false);
|
|
4841
4903
|
getOptional<std::vector<std::string>>("presenceGroupAffinities", p.presenceGroupAffinities, j);
|
|
4842
4904
|
getOptional<bool>("disablePacketEvents", p.disablePacketEvents, j, false);
|
|
4843
4905
|
getOptional<int>("rfc4733RtpPayloadId", p.rfc4733RtpPayloadId, j, 0);
|
|
@@ -4846,9 +4908,7 @@ namespace AppConfigurationObjects
|
|
|
4846
4908
|
getOptional<int>("stickyTidHangSecs", p.stickyTidHangSecs, j, 10);
|
|
4847
4909
|
getOptional<std::string>("anonymousAlias", p.anonymousAlias, j);
|
|
4848
4910
|
getOptional<bool>("lbCrypto", p.lbCrypto, j, false);
|
|
4849
|
-
getOptional<
|
|
4850
|
-
getOptional<GroupLynQPro>("lynqPro", p.lynqPro, j);
|
|
4851
|
-
getOptional<std::string>("transportName", p.transportName, j);
|
|
4911
|
+
getOptional<GroupAppTransport>("appTransport", p.appTransport, j);
|
|
4852
4912
|
getOptional<bool>("allowLoopback", p.allowLoopback, j, false);
|
|
4853
4913
|
getOptionalWithIndicator<RtpProfile>("rtpProfile", p.rtpProfile, j, &p._wasDeserialized_rtpProfile);
|
|
4854
4914
|
getOptional<RangerPackets>("rangerPackets", p.rangerPackets, j);
|
|
@@ -4863,6 +4923,12 @@ namespace AppConfigurationObjects
|
|
|
4863
4923
|
getOptional<PacketCapturer>("rxCapture", p.rxCapture, j);
|
|
4864
4924
|
getOptional<PacketCapturer>("txCapture", p.txCapture, j);
|
|
4865
4925
|
|
|
4926
|
+
getOptional<uint16_t>("blobRtpPayloadType", p.blobRtpPayloadType, j, 66);
|
|
4927
|
+
|
|
4928
|
+
getOptional<Group::InboundAliasGenerationPolicy_t>("inboundAliasGenerationPolicy", p.inboundAliasGenerationPolicy, j, Group::InboundAliasGenerationPolicy_t::iagpAnonymousAlias);
|
|
4929
|
+
|
|
4930
|
+
getOptional<AudioGate>("gateIn", p.gateIn, j);
|
|
4931
|
+
|
|
4866
4932
|
FROMJSON_BASE_IMPL();
|
|
4867
4933
|
}
|
|
4868
4934
|
|
|
@@ -5107,20 +5173,17 @@ namespace AppConfigurationObjects
|
|
|
5107
5173
|
/** @brief [Optional, false] Enables UDP streaming if the RP supports it */
|
|
5108
5174
|
bool enabled;
|
|
5109
5175
|
|
|
5110
|
-
/** @brief [Optional, EnginePolicyNetworking::defaultNic] Name of NIC to bind to - uses Engine defaultNic if empty */
|
|
5111
|
-
std::string nic;
|
|
5112
|
-
|
|
5113
5176
|
/** @brief [Optional, 0] The port to be used for Rallypoint UDP streaming. A value of 0 will result in an ephemeral port being assigned.*/
|
|
5114
|
-
int
|
|
5177
|
+
int port;
|
|
5115
5178
|
|
|
5116
|
-
/** @brief Optional, Default:
|
|
5117
|
-
int
|
|
5179
|
+
/** @brief Optional, Default: 15] Seconds interval at which to send UDP keepalives to Rallypoints. This is important for NAT "hole-punching". */
|
|
5180
|
+
int keepaliveIntervalSecs;
|
|
5118
5181
|
|
|
5119
5182
|
/** @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. */
|
|
5120
|
-
|
|
5183
|
+
TxPriority_t priority;
|
|
5121
5184
|
|
|
5122
5185
|
/** @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. */
|
|
5123
|
-
int
|
|
5186
|
+
int ttl;
|
|
5124
5187
|
|
|
5125
5188
|
EngineNetworkingRpUdpStreaming()
|
|
5126
5189
|
{
|
|
@@ -5130,9 +5193,9 @@ namespace AppConfigurationObjects
|
|
|
5130
5193
|
void clear()
|
|
5131
5194
|
{
|
|
5132
5195
|
enabled = false;
|
|
5133
|
-
|
|
5134
|
-
|
|
5135
|
-
priority =
|
|
5196
|
+
port = 0;
|
|
5197
|
+
keepaliveIntervalSecs = 15;
|
|
5198
|
+
priority = TxPriority_t::priVoice;
|
|
5136
5199
|
ttl = 64;
|
|
5137
5200
|
}
|
|
5138
5201
|
|
|
@@ -5145,9 +5208,8 @@ namespace AppConfigurationObjects
|
|
|
5145
5208
|
{
|
|
5146
5209
|
j = nlohmann::json{
|
|
5147
5210
|
TOJSON_IMPL(enabled),
|
|
5148
|
-
TOJSON_IMPL(nic),
|
|
5149
5211
|
TOJSON_IMPL(port),
|
|
5150
|
-
TOJSON_IMPL(
|
|
5212
|
+
TOJSON_IMPL(keepaliveIntervalSecs),
|
|
5151
5213
|
TOJSON_IMPL(priority),
|
|
5152
5214
|
TOJSON_IMPL(ttl)
|
|
5153
5215
|
};
|
|
@@ -5156,10 +5218,9 @@ namespace AppConfigurationObjects
|
|
|
5156
5218
|
{
|
|
5157
5219
|
p.clear();
|
|
5158
5220
|
getOptional<bool>("enabled", p.enabled, j, false);
|
|
5159
|
-
getOptional<std::string>("nic", p.nic, j, EMPTY_STRING);
|
|
5160
5221
|
getOptional<int>("port", p.port, j, 0);
|
|
5161
|
-
getOptional<int>("
|
|
5162
|
-
getOptional<
|
|
5222
|
+
getOptional<int>("keepaliveIntervalSecs", p.keepaliveIntervalSecs, j, 15);
|
|
5223
|
+
getOptional<TxPriority_t>("priority", p.priority, j, TxPriority_t::priVoice);
|
|
5163
5224
|
getOptional<int>("ttl", p.ttl, j, 64);
|
|
5164
5225
|
}
|
|
5165
5226
|
|
|
@@ -5180,25 +5241,28 @@ namespace AppConfigurationObjects
|
|
|
5180
5241
|
|
|
5181
5242
|
public:
|
|
5182
5243
|
/** @brief The default network interface card the Engage Engine should bind to. */
|
|
5183
|
-
std::string
|
|
5244
|
+
std::string defaultNic;
|
|
5184
5245
|
|
|
5185
5246
|
/** @brief [Optional, Default: 8] Number of seconds elapsed between RX of multicast packets before an IGMP rejoin is made */
|
|
5186
|
-
int
|
|
5247
|
+
int multicastRejoinSecs;
|
|
5187
5248
|
|
|
5188
5249
|
/** @brief [Optional, Default: 60000] Milliseconds between sending Rallypoint round-trip test requests */
|
|
5189
|
-
int
|
|
5250
|
+
int rallypointRtTestIntervalMs;
|
|
5190
5251
|
|
|
5191
5252
|
/** @brief [Optional, Default: false] If true, logs RTP jitter buffer statistics periodically */
|
|
5192
|
-
bool
|
|
5253
|
+
bool logRtpJitterBufferStats;
|
|
5193
5254
|
|
|
5194
5255
|
/** @brief [Optional, Default: false] Overrides/cancels group-level multicast failover if set to true */
|
|
5195
|
-
bool
|
|
5256
|
+
bool preventMulticastFailover;
|
|
5196
5257
|
|
|
5197
5258
|
/** @brief [Optional] Configuration for UDP streaming */
|
|
5198
|
-
EngineNetworkingRpUdpStreaming
|
|
5259
|
+
EngineNetworkingRpUdpStreaming rpUdpStreaming;
|
|
5199
5260
|
|
|
5200
5261
|
/** @brief [Optional] Configuration for RTP profile */
|
|
5201
|
-
RtpProfile
|
|
5262
|
+
RtpProfile rtpProfile;
|
|
5263
|
+
|
|
5264
|
+
/** @brief [Optional, Default 64] Address resolution policy */
|
|
5265
|
+
AddressResolutionPolicy_t addressResolutionPolicy;
|
|
5202
5266
|
|
|
5203
5267
|
EnginePolicyNetworking()
|
|
5204
5268
|
{
|
|
@@ -5212,6 +5276,7 @@ namespace AppConfigurationObjects
|
|
|
5212
5276
|
rallypointRtTestIntervalMs = 60000;
|
|
5213
5277
|
logRtpJitterBufferStats = false;
|
|
5214
5278
|
preventMulticastFailover = false;
|
|
5279
|
+
addressResolutionPolicy = AddressResolutionPolicy_t::arpIpv6ThenIpv4;
|
|
5215
5280
|
|
|
5216
5281
|
rpUdpStreaming.clear();
|
|
5217
5282
|
rtpProfile.clear();
|
|
@@ -5229,7 +5294,8 @@ namespace AppConfigurationObjects
|
|
|
5229
5294
|
TOJSON_IMPL(preventMulticastFailover),
|
|
5230
5295
|
|
|
5231
5296
|
TOJSON_IMPL(rpUdpStreaming),
|
|
5232
|
-
TOJSON_IMPL(rtpProfile)
|
|
5297
|
+
TOJSON_IMPL(rtpProfile),
|
|
5298
|
+
TOJSON_IMPL(addressResolutionPolicy)
|
|
5233
5299
|
};
|
|
5234
5300
|
}
|
|
5235
5301
|
static void from_json(const nlohmann::json& j, EnginePolicyNetworking& p)
|
|
@@ -5243,6 +5309,7 @@ namespace AppConfigurationObjects
|
|
|
5243
5309
|
|
|
5244
5310
|
getOptional<EngineNetworkingRpUdpStreaming>("rpUdpStreaming", p.rpUdpStreaming, j);
|
|
5245
5311
|
getOptional<RtpProfile>("rtpProfile", p.rtpProfile, j);
|
|
5312
|
+
getOptional<AddressResolutionPolicy_t>("addressResolutionPolicy", p.addressResolutionPolicy, j, AddressResolutionPolicy_t::arpIpv6ThenIpv4);
|
|
5246
5313
|
}
|
|
5247
5314
|
|
|
5248
5315
|
//-----------------------------------------------------------
|
|
@@ -5595,6 +5662,9 @@ namespace AppConfigurationObjects
|
|
|
5595
5662
|
/** @brief [Optional, Default: true] Enables audio processing */
|
|
5596
5663
|
bool enabled;
|
|
5597
5664
|
|
|
5665
|
+
/** @brief [Optional, Default: true] Enables local machine hardware audio */
|
|
5666
|
+
bool hardwareEnabled;
|
|
5667
|
+
|
|
5598
5668
|
/** @brief [Optional, Default: 16000] Internal sampling rate - 8000 or 16000 */
|
|
5599
5669
|
int internalRate;
|
|
5600
5670
|
|
|
@@ -5633,6 +5703,7 @@ namespace AppConfigurationObjects
|
|
|
5633
5703
|
void clear()
|
|
5634
5704
|
{
|
|
5635
5705
|
enabled = true;
|
|
5706
|
+
hardwareEnabled = true;
|
|
5636
5707
|
internalRate = 16000;
|
|
5637
5708
|
internalChannels = 2;
|
|
5638
5709
|
muteTxOnTx = false;
|
|
@@ -5650,6 +5721,7 @@ namespace AppConfigurationObjects
|
|
|
5650
5721
|
{
|
|
5651
5722
|
j = nlohmann::json{
|
|
5652
5723
|
TOJSON_IMPL(enabled),
|
|
5724
|
+
TOJSON_IMPL(hardwareEnabled),
|
|
5653
5725
|
TOJSON_IMPL(internalRate),
|
|
5654
5726
|
TOJSON_IMPL(internalChannels),
|
|
5655
5727
|
TOJSON_IMPL(muteTxOnTx),
|
|
@@ -5666,6 +5738,7 @@ namespace AppConfigurationObjects
|
|
|
5666
5738
|
{
|
|
5667
5739
|
p.clear();
|
|
5668
5740
|
getOptional<bool>("enabled", p.enabled, j, true);
|
|
5741
|
+
getOptional<bool>("hardwareEnabled", p.hardwareEnabled, j, true);
|
|
5669
5742
|
FROMJSON_IMPL(internalRate, int, 16000);
|
|
5670
5743
|
FROMJSON_IMPL(internalChannels, int, 2);
|
|
5671
5744
|
|
|
@@ -5917,6 +5990,61 @@ namespace AppConfigurationObjects
|
|
|
5917
5990
|
FROMJSON_IMPL(reclaimSpace, bool, false);
|
|
5918
5991
|
}
|
|
5919
5992
|
|
|
5993
|
+
|
|
5994
|
+
//-----------------------------------------------------------
|
|
5995
|
+
JSON_SERIALIZED_CLASS(SecureSignature)
|
|
5996
|
+
/**
|
|
5997
|
+
* @brief Configuration for a secure signature.
|
|
5998
|
+
*
|
|
5999
|
+
* Helper C++ class to serialize and de-serialize SecureSignature JSON
|
|
6000
|
+
*
|
|
6001
|
+
* Example: @include[doc] examples/SecureSignature.json
|
|
6002
|
+
*/
|
|
6003
|
+
class SecureSignature : public ConfigurationObjectBase
|
|
6004
|
+
{
|
|
6005
|
+
IMPLEMENT_JSON_SERIALIZATION()
|
|
6006
|
+
IMPLEMENT_JSON_DOCUMENTATION(SecureSignature)
|
|
6007
|
+
|
|
6008
|
+
public:
|
|
6009
|
+
|
|
6010
|
+
/** @brief Contains the PEM-formatted text of the certificate */
|
|
6011
|
+
std::string certificate;
|
|
6012
|
+
|
|
6013
|
+
// /** @brief Contains the PEM-formatted text of the certificate's public key */
|
|
6014
|
+
//std::string publicKey;
|
|
6015
|
+
|
|
6016
|
+
/** @brief Contains the signature */
|
|
6017
|
+
std::string signature;
|
|
6018
|
+
|
|
6019
|
+
SecureSignature()
|
|
6020
|
+
{
|
|
6021
|
+
clear();
|
|
6022
|
+
}
|
|
6023
|
+
|
|
6024
|
+
void clear()
|
|
6025
|
+
{
|
|
6026
|
+
certificate.clear();
|
|
6027
|
+
//publicKey.clear();
|
|
6028
|
+
signature.clear();
|
|
6029
|
+
}
|
|
6030
|
+
};
|
|
6031
|
+
|
|
6032
|
+
static void to_json(nlohmann::json& j, const SecureSignature& p)
|
|
6033
|
+
{
|
|
6034
|
+
j = nlohmann::json{
|
|
6035
|
+
TOJSON_IMPL(certificate),
|
|
6036
|
+
//TOJSON_IMPL(publicKey),
|
|
6037
|
+
TOJSON_IMPL(signature)
|
|
6038
|
+
};
|
|
6039
|
+
}
|
|
6040
|
+
static void from_json(const nlohmann::json& j, SecureSignature& p)
|
|
6041
|
+
{
|
|
6042
|
+
p.clear();
|
|
6043
|
+
FROMJSON_IMPL(certificate, std::string, EMPTY_STRING);
|
|
6044
|
+
//FROMJSON_IMPL(publicKey, std::string, EMPTY_STRING);
|
|
6045
|
+
FROMJSON_IMPL(signature, std::string, EMPTY_STRING);
|
|
6046
|
+
}
|
|
6047
|
+
|
|
5920
6048
|
//-----------------------------------------------------------
|
|
5921
6049
|
JSON_SERIALIZED_CLASS(NamedAudioDevice)
|
|
5922
6050
|
class NamedAudioDevice : public ConfigurationObjectBase
|
|
@@ -7159,6 +7287,9 @@ namespace AppConfigurationObjects
|
|
|
7159
7287
|
/** @brief [Optional, Default: 0 - OS platform default] Connection timeout in seconds to the peer */
|
|
7160
7288
|
int connectionTimeoutSecs;
|
|
7161
7289
|
|
|
7290
|
+
/** @brief Internal enablement setting. */
|
|
7291
|
+
bool forceIsMeshLeaf;
|
|
7292
|
+
|
|
7162
7293
|
RallypointPeer()
|
|
7163
7294
|
{
|
|
7164
7295
|
clear();
|
|
@@ -7171,6 +7302,7 @@ namespace AppConfigurationObjects
|
|
|
7171
7302
|
host.clear();
|
|
7172
7303
|
certificate.clear();
|
|
7173
7304
|
connectionTimeoutSecs = 0;
|
|
7305
|
+
forceIsMeshLeaf = false;
|
|
7174
7306
|
}
|
|
7175
7307
|
};
|
|
7176
7308
|
|
|
@@ -7181,7 +7313,8 @@ namespace AppConfigurationObjects
|
|
|
7181
7313
|
TOJSON_IMPL(enabled),
|
|
7182
7314
|
TOJSON_IMPL(host),
|
|
7183
7315
|
TOJSON_IMPL(certificate),
|
|
7184
|
-
TOJSON_IMPL(connectionTimeoutSecs)
|
|
7316
|
+
TOJSON_IMPL(connectionTimeoutSecs),
|
|
7317
|
+
TOJSON_IMPL(forceIsMeshLeaf)
|
|
7185
7318
|
};
|
|
7186
7319
|
}
|
|
7187
7320
|
static void from_json(const nlohmann::json& j, RallypointPeer& p)
|
|
@@ -7192,6 +7325,7 @@ namespace AppConfigurationObjects
|
|
|
7192
7325
|
getOptional<NetworkAddress>("host", p.host, j);
|
|
7193
7326
|
getOptional<SecurityCertificate>("certificate", p.certificate, j);
|
|
7194
7327
|
getOptional<int>("connectionTimeoutSecs", p.connectionTimeoutSecs, j, 0);
|
|
7328
|
+
getOptional<bool>("forceIsMeshLeaf", p.forceIsMeshLeaf, j, false);
|
|
7195
7329
|
}
|
|
7196
7330
|
|
|
7197
7331
|
//-----------------------------------------------------------
|
|
@@ -7769,6 +7903,52 @@ namespace AppConfigurationObjects
|
|
|
7769
7903
|
}
|
|
7770
7904
|
|
|
7771
7905
|
|
|
7906
|
+
//-----------------------------------------------------------
|
|
7907
|
+
JSON_SERIALIZED_CLASS(RallypointUdpStreamingIpvX)
|
|
7908
|
+
/**
|
|
7909
|
+
* @brief Streaming configuration for RP clients
|
|
7910
|
+
*
|
|
7911
|
+
* Example: @include[doc] examples/RallypointUdpStreamingIpvX.json
|
|
7912
|
+
*
|
|
7913
|
+
*/
|
|
7914
|
+
class RallypointUdpStreamingIpvX : public ConfigurationObjectBase
|
|
7915
|
+
{
|
|
7916
|
+
IMPLEMENT_JSON_SERIALIZATION()
|
|
7917
|
+
IMPLEMENT_JSON_DOCUMENTATION(RallypointUdpStreamingIpvX)
|
|
7918
|
+
|
|
7919
|
+
public:
|
|
7920
|
+
/** @brief [Optional, Default true] If true, enables UDP streaming for vX. */
|
|
7921
|
+
bool enabled;
|
|
7922
|
+
|
|
7923
|
+
/** @brief Network address for external entities to transmit to. Defaults to the address of the local interface and port 7444 */
|
|
7924
|
+
NetworkAddress external;
|
|
7925
|
+
|
|
7926
|
+
RallypointUdpStreamingIpvX()
|
|
7927
|
+
{
|
|
7928
|
+
clear();
|
|
7929
|
+
}
|
|
7930
|
+
|
|
7931
|
+
void clear()
|
|
7932
|
+
{
|
|
7933
|
+
enabled = true;
|
|
7934
|
+
external.clear();
|
|
7935
|
+
}
|
|
7936
|
+
};
|
|
7937
|
+
|
|
7938
|
+
static void to_json(nlohmann::json& j, const RallypointUdpStreamingIpvX& p)
|
|
7939
|
+
{
|
|
7940
|
+
j = nlohmann::json{
|
|
7941
|
+
TOJSON_IMPL(enabled),
|
|
7942
|
+
TOJSON_IMPL(external)
|
|
7943
|
+
};
|
|
7944
|
+
}
|
|
7945
|
+
static void from_json(const nlohmann::json& j, RallypointUdpStreamingIpvX& p)
|
|
7946
|
+
{
|
|
7947
|
+
p.clear();
|
|
7948
|
+
getOptional<bool>("enabled", p.enabled, j, true);
|
|
7949
|
+
getOptional<NetworkAddress>("external", p.external, j);
|
|
7950
|
+
}
|
|
7951
|
+
|
|
7772
7952
|
//-----------------------------------------------------------
|
|
7773
7953
|
JSON_SERIALIZED_CLASS(RallypointUdpStreaming)
|
|
7774
7954
|
/**
|
|
@@ -7787,20 +7967,45 @@ namespace AppConfigurationObjects
|
|
|
7787
7967
|
typedef enum
|
|
7788
7968
|
{
|
|
7789
7969
|
/** @brief Unknown */
|
|
7790
|
-
|
|
7970
|
+
ctUnknown = 0,
|
|
7791
7971
|
|
|
7792
|
-
/** @brief Shared-key
|
|
7793
|
-
|
|
7794
|
-
} EnvelopeType_t;
|
|
7972
|
+
/** @brief Shared-key, AES256 full IV */
|
|
7973
|
+
ctSharedKeyAes256FullIv = 1,
|
|
7795
7974
|
|
|
7796
|
-
|
|
7797
|
-
|
|
7975
|
+
/** @brief Shared-key, AES256 indexed IV */
|
|
7976
|
+
ctSharedKeyAes256IdxIv = 2,
|
|
7798
7977
|
|
|
7799
|
-
|
|
7800
|
-
|
|
7978
|
+
/** @brief Shared-key, ChaCha20 full IV */
|
|
7979
|
+
ctSharedKeyChaCha20FullIv = 3,
|
|
7980
|
+
|
|
7981
|
+
/** @brief Shared-key, ChaCha20 indexed IV */
|
|
7982
|
+
ctSharedKeyChaCha20IdxIv = 4
|
|
7983
|
+
} CryptoType_t;
|
|
7984
|
+
|
|
7985
|
+
/** @brief [Optional, Default true] If true, enables UDP streaming unless turned off on a per-family basis. */
|
|
7986
|
+
bool enabled;
|
|
7987
|
+
|
|
7988
|
+
/** @brief [Optional, Default ctSharedKeyAes256FullIv] The crypto method to be used */
|
|
7989
|
+
CryptoType_t cryptoType;
|
|
7990
|
+
|
|
7991
|
+
/** @brief UDP port to listen on. Default is 7444. */
|
|
7992
|
+
int listenPort;
|
|
7993
|
+
|
|
7994
|
+
/** @brief IPv4 */
|
|
7995
|
+
RallypointUdpStreamingIpvX ipv4;
|
|
7996
|
+
|
|
7997
|
+
/** @brief IPv6 */
|
|
7998
|
+
RallypointUdpStreamingIpvX ipv6;
|
|
7999
|
+
|
|
8000
|
+
/** @brief [Optional, Default: 15] Interval (seconds) at which to send UDP keepalives */
|
|
8001
|
+
int keepaliveIntervalSecs;
|
|
8002
|
+
|
|
8003
|
+
/** @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. */
|
|
8004
|
+
TxPriority_t priority;
|
|
8005
|
+
|
|
8006
|
+
/** @brief [Optional, Default: 64] Time to live or hop limit. */
|
|
8007
|
+
int ttl;
|
|
7801
8008
|
|
|
7802
|
-
/** @brief Network address for external entities to transmit to */
|
|
7803
|
-
NetworkAddress external;
|
|
7804
8009
|
|
|
7805
8010
|
RallypointUdpStreaming()
|
|
7806
8011
|
{
|
|
@@ -7809,27 +8014,42 @@ namespace AppConfigurationObjects
|
|
|
7809
8014
|
|
|
7810
8015
|
void clear()
|
|
7811
8016
|
{
|
|
7812
|
-
|
|
7813
|
-
|
|
7814
|
-
|
|
8017
|
+
enabled = true;
|
|
8018
|
+
cryptoType = CryptoType_t::ctSharedKeyAes256FullIv;
|
|
8019
|
+
listenPort = 7444;
|
|
8020
|
+
ipv4.clear();
|
|
8021
|
+
ipv6.clear();
|
|
8022
|
+
keepaliveIntervalSecs = 15;
|
|
8023
|
+
priority = TxPriority_t::priVoice;
|
|
8024
|
+
ttl = 64;
|
|
7815
8025
|
}
|
|
7816
8026
|
};
|
|
7817
8027
|
|
|
7818
8028
|
static void to_json(nlohmann::json& j, const RallypointUdpStreaming& p)
|
|
7819
8029
|
{
|
|
7820
8030
|
j = nlohmann::json{
|
|
7821
|
-
TOJSON_IMPL(
|
|
7822
|
-
TOJSON_IMPL(
|
|
7823
|
-
TOJSON_IMPL(
|
|
8031
|
+
TOJSON_IMPL(enabled),
|
|
8032
|
+
TOJSON_IMPL(cryptoType),
|
|
8033
|
+
TOJSON_IMPL(listenPort),
|
|
8034
|
+
TOJSON_IMPL(keepaliveIntervalSecs),
|
|
8035
|
+
TOJSON_IMPL(ipv4),
|
|
8036
|
+
TOJSON_IMPL(ipv6),
|
|
8037
|
+
TOJSON_IMPL(priority),
|
|
8038
|
+
TOJSON_IMPL(ttl)
|
|
7824
8039
|
};
|
|
7825
8040
|
}
|
|
7826
8041
|
static void from_json(const nlohmann::json& j, RallypointUdpStreaming& p)
|
|
7827
8042
|
{
|
|
7828
8043
|
p.clear();
|
|
7829
|
-
|
|
7830
|
-
|
|
7831
|
-
|
|
7832
|
-
|
|
8044
|
+
getOptional<bool>("enabled", p.enabled, j, true);
|
|
8045
|
+
getOptional<RallypointUdpStreaming::CryptoType_t>("cryptoType", p.cryptoType, j, RallypointUdpStreaming::CryptoType_t::ctSharedKeyAes256FullIv);
|
|
8046
|
+
getOptional<int>("listenPort", p.listenPort, j, 7444);
|
|
8047
|
+
getOptional<int>("keepaliveIntervalSecs", p.keepaliveIntervalSecs, j, 15);
|
|
8048
|
+
getOptional<RallypointUdpStreamingIpvX>("ipv4", p.ipv4, j);
|
|
8049
|
+
getOptional<RallypointUdpStreamingIpvX>("ipv6", p.ipv6, j);
|
|
8050
|
+
getOptional<TxPriority_t>("priority", p.priority, j, TxPriority_t::priVoice);
|
|
8051
|
+
getOptional<int>("ttl", p.ttl, j, 64);
|
|
8052
|
+
}
|
|
7833
8053
|
|
|
7834
8054
|
//-----------------------------------------------------------
|
|
7835
8055
|
JSON_SERIALIZED_CLASS(RallypointRpRtTimingBehavior)
|
|
@@ -8104,7 +8324,7 @@ namespace AppConfigurationObjects
|
|
|
8104
8324
|
IMPLEMENT_JSON_SERIALIZATION()
|
|
8105
8325
|
IMPLEMENT_JSON_DOCUMENTATION(RallypointServer)
|
|
8106
8326
|
|
|
8107
|
-
public:
|
|
8327
|
+
public:
|
|
8108
8328
|
/** @brief [Optional] Settings for the FIPS crypto. */
|
|
8109
8329
|
FipsCryptoSettings fipsCrypto;
|
|
8110
8330
|
|
|
@@ -8117,6 +8337,9 @@ namespace AppConfigurationObjects
|
|
|
8117
8337
|
/** @brief TCP port to listen on. Default is 7443. */
|
|
8118
8338
|
int listenPort;
|
|
8119
8339
|
|
|
8340
|
+
/** @brief [Optional, Default IpFamilyType_t::ifIp4] Address familiy to be used for listening */
|
|
8341
|
+
IpFamilyType_t ipFamily;
|
|
8342
|
+
|
|
8120
8343
|
/** @brief Name of the NIC to bind to for listening for incoming TCP connections. */
|
|
8121
8344
|
std::string interfaceName;
|
|
8122
8345
|
|
|
@@ -8312,6 +8535,7 @@ namespace AppConfigurationObjects
|
|
|
8312
8535
|
advertising.clear();
|
|
8313
8536
|
extendedGroupRestrictions.clear();
|
|
8314
8537
|
groupRestrictionAccessPolicyType = GroupRestrictionAccessPolicyType_t::graptPermissive;
|
|
8538
|
+
ipFamily = IpFamilyType_t::ifIpUnspec;
|
|
8315
8539
|
}
|
|
8316
8540
|
};
|
|
8317
8541
|
|
|
@@ -8367,7 +8591,8 @@ namespace AppConfigurationObjects
|
|
|
8367
8591
|
TOJSON_IMPL(nsm),
|
|
8368
8592
|
TOJSON_IMPL(advertising),
|
|
8369
8593
|
TOJSON_IMPL(extendedGroupRestrictions),
|
|
8370
|
-
TOJSON_IMPL(groupRestrictionAccessPolicyType)
|
|
8594
|
+
TOJSON_IMPL(groupRestrictionAccessPolicyType),
|
|
8595
|
+
TOJSON_IMPL(ipFamily)
|
|
8371
8596
|
};
|
|
8372
8597
|
}
|
|
8373
8598
|
static void from_json(const nlohmann::json& j, RallypointServer& p)
|
|
@@ -8423,6 +8648,7 @@ namespace AppConfigurationObjects
|
|
|
8423
8648
|
getOptional<RallypointAdvertisingSettings>("advertising", p.advertising, j);
|
|
8424
8649
|
getOptional<std::vector<RallypointExtendedGroupRestriction>>("extendedGroupRestrictions", p.extendedGroupRestrictions, j);
|
|
8425
8650
|
getOptional<GroupRestrictionAccessPolicyType_t>("groupRestrictionAccessPolicyType", p.groupRestrictionAccessPolicyType, j, GroupRestrictionAccessPolicyType_t::graptPermissive);
|
|
8651
|
+
getOptional<IpFamilyType_t>("ipFamily", p.ipFamily, j, IpFamilyType_t::ifIpUnspec);
|
|
8426
8652
|
}
|
|
8427
8653
|
|
|
8428
8654
|
//-----------------------------------------------------------
|
|
@@ -8948,6 +9174,12 @@ namespace AppConfigurationObjects
|
|
|
8948
9174
|
/** @brief Array of subject elements */
|
|
8949
9175
|
std::vector<CertificateSubjectElement> subjectElements;
|
|
8950
9176
|
|
|
9177
|
+
/** @brief PEM version of the certificate */
|
|
9178
|
+
std::string certificatePem;
|
|
9179
|
+
|
|
9180
|
+
/** @brief PEM version of the public key */
|
|
9181
|
+
std::string publicKeyPem;
|
|
9182
|
+
|
|
8951
9183
|
CertificateDescriptor()
|
|
8952
9184
|
{
|
|
8953
9185
|
clear();
|
|
@@ -8964,6 +9196,8 @@ namespace AppConfigurationObjects
|
|
|
8964
9196
|
serial.clear();
|
|
8965
9197
|
fingerprint.clear();
|
|
8966
9198
|
subjectElements.clear();
|
|
9199
|
+
certificatePem.clear();
|
|
9200
|
+
publicKeyPem.clear();
|
|
8967
9201
|
}
|
|
8968
9202
|
};
|
|
8969
9203
|
|
|
@@ -8978,7 +9212,9 @@ namespace AppConfigurationObjects
|
|
|
8978
9212
|
TOJSON_IMPL(notAfter),
|
|
8979
9213
|
TOJSON_IMPL(serial),
|
|
8980
9214
|
TOJSON_IMPL(fingerprint),
|
|
8981
|
-
TOJSON_IMPL(subjectElements)
|
|
9215
|
+
TOJSON_IMPL(subjectElements),
|
|
9216
|
+
TOJSON_IMPL(certificatePem),
|
|
9217
|
+
TOJSON_IMPL(publicKeyPem)
|
|
8982
9218
|
};
|
|
8983
9219
|
}
|
|
8984
9220
|
static void from_json(const nlohmann::json& j, CertificateDescriptor& p)
|
|
@@ -8992,6 +9228,8 @@ namespace AppConfigurationObjects
|
|
|
8992
9228
|
getOptional<std::string>("notAfter", p.notAfter, j, EMPTY_STRING);
|
|
8993
9229
|
getOptional<std::string>("serial", p.serial, j, EMPTY_STRING);
|
|
8994
9230
|
getOptional<std::string>("fingerprint", p.fingerprint, j, EMPTY_STRING);
|
|
9231
|
+
getOptional<std::string>("certificatePem", p.certificatePem, j, EMPTY_STRING);
|
|
9232
|
+
getOptional<std::string>("publicKeyPem", p.publicKeyPem, j, EMPTY_STRING);
|
|
8995
9233
|
getOptional<std::vector<CertificateSubjectElement>>("subjectElements", p.subjectElements, j);
|
|
8996
9234
|
}
|
|
8997
9235
|
|
|
@@ -11000,8 +11238,7 @@ namespace AppConfigurationObjects
|
|
|
11000
11238
|
Advertising::document();
|
|
11001
11239
|
GroupPriorityTranslation::document();
|
|
11002
11240
|
GroupTimeline::document();
|
|
11003
|
-
|
|
11004
|
-
GroupLynQPro::document();
|
|
11241
|
+
GroupAppTransport::document();
|
|
11005
11242
|
RtpProfile::document();
|
|
11006
11243
|
Group::document();
|
|
11007
11244
|
Mission::document();
|
|
@@ -754,6 +754,20 @@ ENGAGE_API int engageUnmuteGroupTx(const char * _Nonnull id);
|
|
|
754
754
|
ENGAGE_API int engageSetGroupRxVolume(const char * _Nonnull id, int left, int right);
|
|
755
755
|
|
|
756
756
|
|
|
757
|
+
/**
|
|
758
|
+
* @brief [ASYNC] Sets the audio play-out volume of the group
|
|
759
|
+
*
|
|
760
|
+
* This API applies rules to the group.
|
|
761
|
+
*
|
|
762
|
+
* No events are generated by this API call.
|
|
763
|
+
*
|
|
764
|
+
* @param id The ID of the group
|
|
765
|
+
* @param jsonParams A JSON object of type @ref ConfigurationObjects::GroupRules
|
|
766
|
+
* @return ENGAGE_RESULT_OK if the submission request was successful
|
|
767
|
+
*/
|
|
768
|
+
ENGAGE_API int engageSetGroupRules(const char * _Nonnull id, const char * _Nonnull jsonParams);
|
|
769
|
+
|
|
770
|
+
|
|
757
771
|
/**
|
|
758
772
|
* @brief [ASYNC] Updates the application-defined elements of a presence descriptor
|
|
759
773
|
*
|
|
@@ -1376,6 +1390,17 @@ ENGAGE_API const char * _Nonnull engageGetCertStoreCertificatePem(const char * _
|
|
|
1376
1390
|
ENGAGE_API const char * _Nonnull engageGetCertificateDescriptorFromPem(const char * _Nonnull pem);
|
|
1377
1391
|
|
|
1378
1392
|
|
|
1393
|
+
/**
|
|
1394
|
+
* @brief [SYNC] Returns a JSON array, with each element being an object describing the certificate PEM.
|
|
1395
|
+
*
|
|
1396
|
+
* No events are generated by this API call.
|
|
1397
|
+
*
|
|
1398
|
+
* @param pem The PEM for which the descriptor is desired.
|
|
1399
|
+
* @return JSON
|
|
1400
|
+
*/
|
|
1401
|
+
ENGAGE_API const char * _Nonnull engageGetArrayOfCertificateDescriptorsFromPem(const char * _Nonnull pem);
|
|
1402
|
+
|
|
1403
|
+
|
|
1379
1404
|
/**
|
|
1380
1405
|
* @brief [SYNC] Adds/updates an element (certificate and optionally private key) from another certificate store.
|
|
1381
1406
|
*
|
|
@@ -1654,6 +1679,26 @@ ENGAGE_API int engageVerifyRiff(const char * _Nonnull fn);
|
|
|
1654
1679
|
|
|
1655
1680
|
ENGAGE_API const char * _Nonnull engageGetRiffDescriptor(const char * _Nonnull fn);
|
|
1656
1681
|
|
|
1682
|
+
|
|
1683
|
+
/**
|
|
1684
|
+
* @brief [SYNC] Generates a signature for a block using a certificate & its private key
|
|
1685
|
+
*
|
|
1686
|
+
* No events are generated by this API call.
|
|
1687
|
+
*
|
|
1688
|
+
* @return SecureSignature JSON as a string
|
|
1689
|
+
*/
|
|
1690
|
+
ENGAGE_API const char * _Nonnull engageGenerateSignature(const uint8_t * _Nonnull block, size_t size, const char * _Nonnull securityCertificateJson);
|
|
1691
|
+
|
|
1692
|
+
|
|
1693
|
+
/**
|
|
1694
|
+
* @brief [SYNC] Verifies a signature for a block using a certificate
|
|
1695
|
+
*
|
|
1696
|
+
* No events are generated by this API call.
|
|
1697
|
+
*
|
|
1698
|
+
* @return JSON
|
|
1699
|
+
*/
|
|
1700
|
+
ENGAGE_API int engageVerifySignature(const uint8_t * _Nonnull block, size_t size, const char * _Nonnull secureSignatureJson);
|
|
1701
|
+
|
|
1657
1702
|
// TODO: Engage compression/decompression functions not available at this time
|
|
1658
1703
|
#if 0
|
|
1659
1704
|
/**
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/package.json
CHANGED