engage-engine 1.238.90780004 → 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 +415 -171
- package/include/EngageConstants.h +2 -0
- 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
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
|
|
|
@@ -4597,14 +4657,8 @@ namespace AppConfigurationObjects
|
|
|
4597
4657
|
/** @brief [Optional] Alias to use for inbound streams that do not have an alias component */
|
|
4598
4658
|
std::string anonymousAlias;
|
|
4599
4659
|
|
|
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;
|
|
4660
|
+
/** @brief [Optional] Settings necessary if the group is transported via an application-supplied custom transport */
|
|
4661
|
+
GroupAppTransport appTransport;
|
|
4608
4662
|
|
|
4609
4663
|
/** @brief [Optional, Default: false] Allows for processing of looped back packets - primarily meant for debugging */
|
|
4610
4664
|
bool allowLoopback;
|
|
@@ -4645,6 +4699,15 @@ namespace AppConfigurationObjects
|
|
|
4645
4699
|
/** @brief Details for capture of transmitted packets */
|
|
4646
4700
|
PacketCapturer txCapture;
|
|
4647
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
|
+
|
|
4648
4711
|
Group()
|
|
4649
4712
|
{
|
|
4650
4713
|
clear();
|
|
@@ -4697,9 +4760,7 @@ namespace AppConfigurationObjects
|
|
|
4697
4760
|
anonymousAlias.clear();
|
|
4698
4761
|
lbCrypto = false;
|
|
4699
4762
|
|
|
4700
|
-
|
|
4701
|
-
lynqPro.clear();
|
|
4702
|
-
transportName.clear();
|
|
4763
|
+
appTransport.clear();
|
|
4703
4764
|
allowLoopback = false;
|
|
4704
4765
|
|
|
4705
4766
|
rtpProfile.clear();
|
|
@@ -4721,6 +4782,10 @@ namespace AppConfigurationObjects
|
|
|
4721
4782
|
|
|
4722
4783
|
rxCapture.clear();
|
|
4723
4784
|
txCapture.clear();
|
|
4785
|
+
|
|
4786
|
+
blobRtpPayloadType = 66;
|
|
4787
|
+
inboundAliasGenerationPolicy = iagpAnonymousAlias;
|
|
4788
|
+
gateIn.clear();
|
|
4724
4789
|
}
|
|
4725
4790
|
};
|
|
4726
4791
|
|
|
@@ -4763,9 +4828,7 @@ namespace AppConfigurationObjects
|
|
|
4763
4828
|
TOJSON_IMPL(stickyTidHangSecs),
|
|
4764
4829
|
TOJSON_IMPL(anonymousAlias),
|
|
4765
4830
|
TOJSON_IMPL(lbCrypto),
|
|
4766
|
-
TOJSON_IMPL(
|
|
4767
|
-
TOJSON_IMPL(lynqPro),
|
|
4768
|
-
TOJSON_IMPL(transportName),
|
|
4831
|
+
TOJSON_IMPL(appTransport),
|
|
4769
4832
|
TOJSON_IMPL(allowLoopback),
|
|
4770
4833
|
TOJSON_IMPL(rangerPackets),
|
|
4771
4834
|
|
|
@@ -4782,7 +4845,13 @@ namespace AppConfigurationObjects
|
|
|
4782
4845
|
TOJSON_IMPL(synVoice),
|
|
4783
4846
|
|
|
4784
4847
|
TOJSON_IMPL(rxCapture),
|
|
4785
|
-
TOJSON_IMPL(txCapture)
|
|
4848
|
+
TOJSON_IMPL(txCapture),
|
|
4849
|
+
|
|
4850
|
+
TOJSON_IMPL(blobRtpPayloadType),
|
|
4851
|
+
|
|
4852
|
+
TOJSON_IMPL(inboundAliasGenerationPolicy),
|
|
4853
|
+
|
|
4854
|
+
TOJSON_IMPL(gateIn)
|
|
4786
4855
|
};
|
|
4787
4856
|
|
|
4788
4857
|
TOJSON_BASE_IMPL();
|
|
@@ -4846,9 +4915,7 @@ namespace AppConfigurationObjects
|
|
|
4846
4915
|
getOptional<int>("stickyTidHangSecs", p.stickyTidHangSecs, j, 10);
|
|
4847
4916
|
getOptional<std::string>("anonymousAlias", p.anonymousAlias, j);
|
|
4848
4917
|
getOptional<bool>("lbCrypto", p.lbCrypto, j, false);
|
|
4849
|
-
getOptional<
|
|
4850
|
-
getOptional<GroupLynQPro>("lynqPro", p.lynqPro, j);
|
|
4851
|
-
getOptional<std::string>("transportName", p.transportName, j);
|
|
4918
|
+
getOptional<GroupAppTransport>("appTransport", p.appTransport, j);
|
|
4852
4919
|
getOptional<bool>("allowLoopback", p.allowLoopback, j, false);
|
|
4853
4920
|
getOptionalWithIndicator<RtpProfile>("rtpProfile", p.rtpProfile, j, &p._wasDeserialized_rtpProfile);
|
|
4854
4921
|
getOptional<RangerPackets>("rangerPackets", p.rangerPackets, j);
|
|
@@ -4863,6 +4930,12 @@ namespace AppConfigurationObjects
|
|
|
4863
4930
|
getOptional<PacketCapturer>("rxCapture", p.rxCapture, j);
|
|
4864
4931
|
getOptional<PacketCapturer>("txCapture", p.txCapture, j);
|
|
4865
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
|
+
|
|
4866
4939
|
FROMJSON_BASE_IMPL();
|
|
4867
4940
|
}
|
|
4868
4941
|
|
|
@@ -5107,20 +5180,17 @@ namespace AppConfigurationObjects
|
|
|
5107
5180
|
/** @brief [Optional, false] Enables UDP streaming if the RP supports it */
|
|
5108
5181
|
bool enabled;
|
|
5109
5182
|
|
|
5110
|
-
/** @brief [Optional, EnginePolicyNetworking::defaultNic] Name of NIC to bind to - uses Engine defaultNic if empty */
|
|
5111
|
-
std::string nic;
|
|
5112
|
-
|
|
5113
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.*/
|
|
5114
|
-
int
|
|
5184
|
+
int port;
|
|
5115
5185
|
|
|
5116
|
-
/** @brief Optional, Default:
|
|
5117
|
-
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;
|
|
5118
5188
|
|
|
5119
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. */
|
|
5120
|
-
|
|
5190
|
+
TxPriority_t priority;
|
|
5121
5191
|
|
|
5122
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. */
|
|
5123
|
-
int
|
|
5193
|
+
int ttl;
|
|
5124
5194
|
|
|
5125
5195
|
EngineNetworkingRpUdpStreaming()
|
|
5126
5196
|
{
|
|
@@ -5130,9 +5200,9 @@ namespace AppConfigurationObjects
|
|
|
5130
5200
|
void clear()
|
|
5131
5201
|
{
|
|
5132
5202
|
enabled = false;
|
|
5133
|
-
|
|
5134
|
-
|
|
5135
|
-
priority =
|
|
5203
|
+
port = 0;
|
|
5204
|
+
keepaliveIntervalSecs = 15;
|
|
5205
|
+
priority = TxPriority_t::priVoice;
|
|
5136
5206
|
ttl = 64;
|
|
5137
5207
|
}
|
|
5138
5208
|
|
|
@@ -5145,9 +5215,8 @@ namespace AppConfigurationObjects
|
|
|
5145
5215
|
{
|
|
5146
5216
|
j = nlohmann::json{
|
|
5147
5217
|
TOJSON_IMPL(enabled),
|
|
5148
|
-
TOJSON_IMPL(nic),
|
|
5149
5218
|
TOJSON_IMPL(port),
|
|
5150
|
-
TOJSON_IMPL(
|
|
5219
|
+
TOJSON_IMPL(keepaliveIntervalSecs),
|
|
5151
5220
|
TOJSON_IMPL(priority),
|
|
5152
5221
|
TOJSON_IMPL(ttl)
|
|
5153
5222
|
};
|
|
@@ -5156,10 +5225,9 @@ namespace AppConfigurationObjects
|
|
|
5156
5225
|
{
|
|
5157
5226
|
p.clear();
|
|
5158
5227
|
getOptional<bool>("enabled", p.enabled, j, false);
|
|
5159
|
-
getOptional<std::string>("nic", p.nic, j, EMPTY_STRING);
|
|
5160
5228
|
getOptional<int>("port", p.port, j, 0);
|
|
5161
|
-
getOptional<int>("
|
|
5162
|
-
getOptional<
|
|
5229
|
+
getOptional<int>("keepaliveIntervalSecs", p.keepaliveIntervalSecs, j, 15);
|
|
5230
|
+
getOptional<TxPriority_t>("priority", p.priority, j, TxPriority_t::priVoice);
|
|
5163
5231
|
getOptional<int>("ttl", p.ttl, j, 64);
|
|
5164
5232
|
}
|
|
5165
5233
|
|
|
@@ -5180,25 +5248,28 @@ namespace AppConfigurationObjects
|
|
|
5180
5248
|
|
|
5181
5249
|
public:
|
|
5182
5250
|
/** @brief The default network interface card the Engage Engine should bind to. */
|
|
5183
|
-
std::string
|
|
5251
|
+
std::string defaultNic;
|
|
5184
5252
|
|
|
5185
5253
|
/** @brief [Optional, Default: 8] Number of seconds elapsed between RX of multicast packets before an IGMP rejoin is made */
|
|
5186
|
-
int
|
|
5254
|
+
int multicastRejoinSecs;
|
|
5187
5255
|
|
|
5188
5256
|
/** @brief [Optional, Default: 60000] Milliseconds between sending Rallypoint round-trip test requests */
|
|
5189
|
-
int
|
|
5257
|
+
int rallypointRtTestIntervalMs;
|
|
5190
5258
|
|
|
5191
5259
|
/** @brief [Optional, Default: false] If true, logs RTP jitter buffer statistics periodically */
|
|
5192
|
-
bool
|
|
5260
|
+
bool logRtpJitterBufferStats;
|
|
5193
5261
|
|
|
5194
5262
|
/** @brief [Optional, Default: false] Overrides/cancels group-level multicast failover if set to true */
|
|
5195
|
-
bool
|
|
5263
|
+
bool preventMulticastFailover;
|
|
5196
5264
|
|
|
5197
5265
|
/** @brief [Optional] Configuration for UDP streaming */
|
|
5198
|
-
EngineNetworkingRpUdpStreaming
|
|
5266
|
+
EngineNetworkingRpUdpStreaming rpUdpStreaming;
|
|
5199
5267
|
|
|
5200
5268
|
/** @brief [Optional] Configuration for RTP profile */
|
|
5201
|
-
RtpProfile
|
|
5269
|
+
RtpProfile rtpProfile;
|
|
5270
|
+
|
|
5271
|
+
/** @brief [Optional, Default 64] Address resolution policy */
|
|
5272
|
+
AddressResolutionPolicy_t addressResolutionPolicy;
|
|
5202
5273
|
|
|
5203
5274
|
EnginePolicyNetworking()
|
|
5204
5275
|
{
|
|
@@ -5212,6 +5283,7 @@ namespace AppConfigurationObjects
|
|
|
5212
5283
|
rallypointRtTestIntervalMs = 60000;
|
|
5213
5284
|
logRtpJitterBufferStats = false;
|
|
5214
5285
|
preventMulticastFailover = false;
|
|
5286
|
+
addressResolutionPolicy = AddressResolutionPolicy_t::arpIpv6ThenIpv4;
|
|
5215
5287
|
|
|
5216
5288
|
rpUdpStreaming.clear();
|
|
5217
5289
|
rtpProfile.clear();
|
|
@@ -5229,7 +5301,8 @@ namespace AppConfigurationObjects
|
|
|
5229
5301
|
TOJSON_IMPL(preventMulticastFailover),
|
|
5230
5302
|
|
|
5231
5303
|
TOJSON_IMPL(rpUdpStreaming),
|
|
5232
|
-
TOJSON_IMPL(rtpProfile)
|
|
5304
|
+
TOJSON_IMPL(rtpProfile),
|
|
5305
|
+
TOJSON_IMPL(addressResolutionPolicy)
|
|
5233
5306
|
};
|
|
5234
5307
|
}
|
|
5235
5308
|
static void from_json(const nlohmann::json& j, EnginePolicyNetworking& p)
|
|
@@ -5243,6 +5316,7 @@ namespace AppConfigurationObjects
|
|
|
5243
5316
|
|
|
5244
5317
|
getOptional<EngineNetworkingRpUdpStreaming>("rpUdpStreaming", p.rpUdpStreaming, j);
|
|
5245
5318
|
getOptional<RtpProfile>("rtpProfile", p.rtpProfile, j);
|
|
5319
|
+
getOptional<AddressResolutionPolicy_t>("addressResolutionPolicy", p.addressResolutionPolicy, j, AddressResolutionPolicy_t::arpIpv6ThenIpv4);
|
|
5246
5320
|
}
|
|
5247
5321
|
|
|
5248
5322
|
//-----------------------------------------------------------
|
|
@@ -5595,6 +5669,9 @@ namespace AppConfigurationObjects
|
|
|
5595
5669
|
/** @brief [Optional, Default: true] Enables audio processing */
|
|
5596
5670
|
bool enabled;
|
|
5597
5671
|
|
|
5672
|
+
/** @brief [Optional, Default: true] Enables local machine hardware audio */
|
|
5673
|
+
bool hardwareEnabled;
|
|
5674
|
+
|
|
5598
5675
|
/** @brief [Optional, Default: 16000] Internal sampling rate - 8000 or 16000 */
|
|
5599
5676
|
int internalRate;
|
|
5600
5677
|
|
|
@@ -5633,6 +5710,7 @@ namespace AppConfigurationObjects
|
|
|
5633
5710
|
void clear()
|
|
5634
5711
|
{
|
|
5635
5712
|
enabled = true;
|
|
5713
|
+
hardwareEnabled = true;
|
|
5636
5714
|
internalRate = 16000;
|
|
5637
5715
|
internalChannels = 2;
|
|
5638
5716
|
muteTxOnTx = false;
|
|
@@ -5650,6 +5728,7 @@ namespace AppConfigurationObjects
|
|
|
5650
5728
|
{
|
|
5651
5729
|
j = nlohmann::json{
|
|
5652
5730
|
TOJSON_IMPL(enabled),
|
|
5731
|
+
TOJSON_IMPL(hardwareEnabled),
|
|
5653
5732
|
TOJSON_IMPL(internalRate),
|
|
5654
5733
|
TOJSON_IMPL(internalChannels),
|
|
5655
5734
|
TOJSON_IMPL(muteTxOnTx),
|
|
@@ -5666,6 +5745,7 @@ namespace AppConfigurationObjects
|
|
|
5666
5745
|
{
|
|
5667
5746
|
p.clear();
|
|
5668
5747
|
getOptional<bool>("enabled", p.enabled, j, true);
|
|
5748
|
+
getOptional<bool>("hardwareEnabled", p.hardwareEnabled, j, true);
|
|
5669
5749
|
FROMJSON_IMPL(internalRate, int, 16000);
|
|
5670
5750
|
FROMJSON_IMPL(internalChannels, int, 2);
|
|
5671
5751
|
|
|
@@ -5917,6 +5997,61 @@ namespace AppConfigurationObjects
|
|
|
5917
5997
|
FROMJSON_IMPL(reclaimSpace, bool, false);
|
|
5918
5998
|
}
|
|
5919
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
|
+
|
|
5920
6055
|
//-----------------------------------------------------------
|
|
5921
6056
|
JSON_SERIALIZED_CLASS(NamedAudioDevice)
|
|
5922
6057
|
class NamedAudioDevice : public ConfigurationObjectBase
|
|
@@ -7159,6 +7294,9 @@ namespace AppConfigurationObjects
|
|
|
7159
7294
|
/** @brief [Optional, Default: 0 - OS platform default] Connection timeout in seconds to the peer */
|
|
7160
7295
|
int connectionTimeoutSecs;
|
|
7161
7296
|
|
|
7297
|
+
/** @brief Internal enablement setting. */
|
|
7298
|
+
bool forceIsMeshLeaf;
|
|
7299
|
+
|
|
7162
7300
|
RallypointPeer()
|
|
7163
7301
|
{
|
|
7164
7302
|
clear();
|
|
@@ -7171,6 +7309,7 @@ namespace AppConfigurationObjects
|
|
|
7171
7309
|
host.clear();
|
|
7172
7310
|
certificate.clear();
|
|
7173
7311
|
connectionTimeoutSecs = 0;
|
|
7312
|
+
forceIsMeshLeaf = false;
|
|
7174
7313
|
}
|
|
7175
7314
|
};
|
|
7176
7315
|
|
|
@@ -7181,7 +7320,8 @@ namespace AppConfigurationObjects
|
|
|
7181
7320
|
TOJSON_IMPL(enabled),
|
|
7182
7321
|
TOJSON_IMPL(host),
|
|
7183
7322
|
TOJSON_IMPL(certificate),
|
|
7184
|
-
TOJSON_IMPL(connectionTimeoutSecs)
|
|
7323
|
+
TOJSON_IMPL(connectionTimeoutSecs),
|
|
7324
|
+
TOJSON_IMPL(forceIsMeshLeaf)
|
|
7185
7325
|
};
|
|
7186
7326
|
}
|
|
7187
7327
|
static void from_json(const nlohmann::json& j, RallypointPeer& p)
|
|
@@ -7192,6 +7332,7 @@ namespace AppConfigurationObjects
|
|
|
7192
7332
|
getOptional<NetworkAddress>("host", p.host, j);
|
|
7193
7333
|
getOptional<SecurityCertificate>("certificate", p.certificate, j);
|
|
7194
7334
|
getOptional<int>("connectionTimeoutSecs", p.connectionTimeoutSecs, j, 0);
|
|
7335
|
+
getOptional<bool>("forceIsMeshLeaf", p.forceIsMeshLeaf, j, false);
|
|
7195
7336
|
}
|
|
7196
7337
|
|
|
7197
7338
|
//-----------------------------------------------------------
|
|
@@ -7769,6 +7910,52 @@ namespace AppConfigurationObjects
|
|
|
7769
7910
|
}
|
|
7770
7911
|
|
|
7771
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
|
+
|
|
7772
7959
|
//-----------------------------------------------------------
|
|
7773
7960
|
JSON_SERIALIZED_CLASS(RallypointUdpStreaming)
|
|
7774
7961
|
/**
|
|
@@ -7787,20 +7974,45 @@ namespace AppConfigurationObjects
|
|
|
7787
7974
|
typedef enum
|
|
7788
7975
|
{
|
|
7789
7976
|
/** @brief Unknown */
|
|
7790
|
-
|
|
7977
|
+
ctUnknown = 0,
|
|
7791
7978
|
|
|
7792
|
-
/** @brief Shared-key
|
|
7793
|
-
|
|
7794
|
-
} EnvelopeType_t;
|
|
7979
|
+
/** @brief Shared-key, AES256 full IV */
|
|
7980
|
+
ctSharedKeyAes256FullIv = 1,
|
|
7795
7981
|
|
|
7796
|
-
|
|
7797
|
-
|
|
7982
|
+
/** @brief Shared-key, AES256 indexed IV */
|
|
7983
|
+
ctSharedKeyAes256IdxIv = 2,
|
|
7798
7984
|
|
|
7799
|
-
|
|
7800
|
-
|
|
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;
|
|
7801
8015
|
|
|
7802
|
-
/** @brief Network address for external entities to transmit to */
|
|
7803
|
-
NetworkAddress external;
|
|
7804
8016
|
|
|
7805
8017
|
RallypointUdpStreaming()
|
|
7806
8018
|
{
|
|
@@ -7809,27 +8021,42 @@ namespace AppConfigurationObjects
|
|
|
7809
8021
|
|
|
7810
8022
|
void clear()
|
|
7811
8023
|
{
|
|
7812
|
-
|
|
7813
|
-
|
|
7814
|
-
|
|
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;
|
|
7815
8032
|
}
|
|
7816
8033
|
};
|
|
7817
8034
|
|
|
7818
8035
|
static void to_json(nlohmann::json& j, const RallypointUdpStreaming& p)
|
|
7819
8036
|
{
|
|
7820
8037
|
j = nlohmann::json{
|
|
7821
|
-
TOJSON_IMPL(
|
|
7822
|
-
TOJSON_IMPL(
|
|
7823
|
-
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)
|
|
7824
8046
|
};
|
|
7825
8047
|
}
|
|
7826
8048
|
static void from_json(const nlohmann::json& j, RallypointUdpStreaming& p)
|
|
7827
8049
|
{
|
|
7828
8050
|
p.clear();
|
|
7829
|
-
|
|
7830
|
-
|
|
7831
|
-
|
|
7832
|
-
|
|
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
|
+
}
|
|
7833
8060
|
|
|
7834
8061
|
//-----------------------------------------------------------
|
|
7835
8062
|
JSON_SERIALIZED_CLASS(RallypointRpRtTimingBehavior)
|
|
@@ -8104,7 +8331,7 @@ namespace AppConfigurationObjects
|
|
|
8104
8331
|
IMPLEMENT_JSON_SERIALIZATION()
|
|
8105
8332
|
IMPLEMENT_JSON_DOCUMENTATION(RallypointServer)
|
|
8106
8333
|
|
|
8107
|
-
public:
|
|
8334
|
+
public:
|
|
8108
8335
|
/** @brief [Optional] Settings for the FIPS crypto. */
|
|
8109
8336
|
FipsCryptoSettings fipsCrypto;
|
|
8110
8337
|
|
|
@@ -8117,6 +8344,9 @@ namespace AppConfigurationObjects
|
|
|
8117
8344
|
/** @brief TCP port to listen on. Default is 7443. */
|
|
8118
8345
|
int listenPort;
|
|
8119
8346
|
|
|
8347
|
+
/** @brief [Optional, Default IpFamilyType_t::ifIp4] Address familiy to be used for listening */
|
|
8348
|
+
IpFamilyType_t ipFamily;
|
|
8349
|
+
|
|
8120
8350
|
/** @brief Name of the NIC to bind to for listening for incoming TCP connections. */
|
|
8121
8351
|
std::string interfaceName;
|
|
8122
8352
|
|
|
@@ -8312,6 +8542,7 @@ namespace AppConfigurationObjects
|
|
|
8312
8542
|
advertising.clear();
|
|
8313
8543
|
extendedGroupRestrictions.clear();
|
|
8314
8544
|
groupRestrictionAccessPolicyType = GroupRestrictionAccessPolicyType_t::graptPermissive;
|
|
8545
|
+
ipFamily = IpFamilyType_t::ifIpUnspec;
|
|
8315
8546
|
}
|
|
8316
8547
|
};
|
|
8317
8548
|
|
|
@@ -8367,7 +8598,8 @@ namespace AppConfigurationObjects
|
|
|
8367
8598
|
TOJSON_IMPL(nsm),
|
|
8368
8599
|
TOJSON_IMPL(advertising),
|
|
8369
8600
|
TOJSON_IMPL(extendedGroupRestrictions),
|
|
8370
|
-
TOJSON_IMPL(groupRestrictionAccessPolicyType)
|
|
8601
|
+
TOJSON_IMPL(groupRestrictionAccessPolicyType),
|
|
8602
|
+
TOJSON_IMPL(ipFamily)
|
|
8371
8603
|
};
|
|
8372
8604
|
}
|
|
8373
8605
|
static void from_json(const nlohmann::json& j, RallypointServer& p)
|
|
@@ -8423,6 +8655,7 @@ namespace AppConfigurationObjects
|
|
|
8423
8655
|
getOptional<RallypointAdvertisingSettings>("advertising", p.advertising, j);
|
|
8424
8656
|
getOptional<std::vector<RallypointExtendedGroupRestriction>>("extendedGroupRestrictions", p.extendedGroupRestrictions, j);
|
|
8425
8657
|
getOptional<GroupRestrictionAccessPolicyType_t>("groupRestrictionAccessPolicyType", p.groupRestrictionAccessPolicyType, j, GroupRestrictionAccessPolicyType_t::graptPermissive);
|
|
8658
|
+
getOptional<IpFamilyType_t>("ipFamily", p.ipFamily, j, IpFamilyType_t::ifIpUnspec);
|
|
8426
8659
|
}
|
|
8427
8660
|
|
|
8428
8661
|
//-----------------------------------------------------------
|
|
@@ -8948,6 +9181,12 @@ namespace AppConfigurationObjects
|
|
|
8948
9181
|
/** @brief Array of subject elements */
|
|
8949
9182
|
std::vector<CertificateSubjectElement> subjectElements;
|
|
8950
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
|
+
|
|
8951
9190
|
CertificateDescriptor()
|
|
8952
9191
|
{
|
|
8953
9192
|
clear();
|
|
@@ -8964,6 +9203,8 @@ namespace AppConfigurationObjects
|
|
|
8964
9203
|
serial.clear();
|
|
8965
9204
|
fingerprint.clear();
|
|
8966
9205
|
subjectElements.clear();
|
|
9206
|
+
certificatePem.clear();
|
|
9207
|
+
publicKeyPem.clear();
|
|
8967
9208
|
}
|
|
8968
9209
|
};
|
|
8969
9210
|
|
|
@@ -8978,7 +9219,9 @@ namespace AppConfigurationObjects
|
|
|
8978
9219
|
TOJSON_IMPL(notAfter),
|
|
8979
9220
|
TOJSON_IMPL(serial),
|
|
8980
9221
|
TOJSON_IMPL(fingerprint),
|
|
8981
|
-
TOJSON_IMPL(subjectElements)
|
|
9222
|
+
TOJSON_IMPL(subjectElements),
|
|
9223
|
+
TOJSON_IMPL(certificatePem),
|
|
9224
|
+
TOJSON_IMPL(publicKeyPem)
|
|
8982
9225
|
};
|
|
8983
9226
|
}
|
|
8984
9227
|
static void from_json(const nlohmann::json& j, CertificateDescriptor& p)
|
|
@@ -8992,6 +9235,8 @@ namespace AppConfigurationObjects
|
|
|
8992
9235
|
getOptional<std::string>("notAfter", p.notAfter, j, EMPTY_STRING);
|
|
8993
9236
|
getOptional<std::string>("serial", p.serial, j, EMPTY_STRING);
|
|
8994
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);
|
|
8995
9240
|
getOptional<std::vector<CertificateSubjectElement>>("subjectElements", p.subjectElements, j);
|
|
8996
9241
|
}
|
|
8997
9242
|
|
|
@@ -11000,8 +11245,7 @@ namespace AppConfigurationObjects
|
|
|
11000
11245
|
Advertising::document();
|
|
11001
11246
|
GroupPriorityTranslation::document();
|
|
11002
11247
|
GroupTimeline::document();
|
|
11003
|
-
|
|
11004
|
-
GroupLynQPro::document();
|
|
11248
|
+
GroupAppTransport::document();
|
|
11005
11249
|
RtpProfile::document();
|
|
11006
11250
|
Group::document();
|
|
11007
11251
|
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
|
*
|
|
@@ -1373,7 +1387,18 @@ ENGAGE_API const char * _Nonnull engageGetCertStoreCertificatePem(const char * _
|
|
|
1373
1387
|
* @param pem The PEM for which the descriptor is desired.
|
|
1374
1388
|
* @return JSON
|
|
1375
1389
|
*/
|
|
1376
|
-
ENGAGE_API const char * _Nonnull
|
|
1390
|
+
ENGAGE_API const char * _Nonnull engageGetCertificateDescriptorsFromPem(const char * _Nonnull pem);
|
|
1391
|
+
|
|
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);
|
|
1377
1402
|
|
|
1378
1403
|
|
|
1379
1404
|
/**
|
|
@@ -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