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 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<NetworkTxOptions::TxPriority_t>("priority", p.priority, j, NetworkTxOptions::priVoice);
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<NetworkTxOptions::TxPriority_t>("priority", p.priority, j, NetworkTxOptions::priVoice);
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(GroupSatPaq)
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 LynQ Pro transport functionality for Group.
4098
+ * @brief Configuration for the optional custom transport functionality for Group.
4043
4099
  *
4044
- * Helper C++ class to serialize and de-serialize GroupLynQPro JSON
4100
+ * Helper C++ class to serialize and de-serialize GroupAppTransport JSON
4045
4101
  *
4046
- * Example: @include[doc] examples/GroupLynQPro.json
4102
+ * Example: @include[doc] examples/GroupAppTransport.json
4047
4103
  *
4048
4104
  * @see ConfigurationObjects::Group
4049
4105
  */
4050
- class GroupLynQPro : public ConfigurationObjectBase
4106
+ class GroupAppTransport : public ConfigurationObjectBase
4051
4107
  {
4052
4108
  IMPLEMENT_JSON_SERIALIZATION()
4053
- IMPLEMENT_JSON_DOCUMENTATION(GroupLynQPro)
4109
+ IMPLEMENT_JSON_DOCUMENTATION(GroupAppTransport)
4054
4110
 
4055
4111
  public:
4056
- /** @brief [Optional, Default: false] Enables SatPaq feature. */
4112
+ /** @brief [Optional, Default: false] Enables custom feature. */
4057
4113
  bool enabled;
4058
4114
 
4059
- /** @brief The sender ID. */
4060
- uint16_t senderId;
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
- GroupLynQPro()
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
- senderId = 0;
4074
- talkgroupId = 0;
4126
+ id.clear();
4075
4127
  }
4076
4128
  };
4077
4129
 
4078
- static void to_json(nlohmann::json& j, const GroupLynQPro& p)
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(senderId),
4083
- TOJSON_IMPL(talkgroupId)
4134
+ TOJSON_IMPL(id)
4084
4135
  };
4085
4136
  }
4086
- static void from_json(const nlohmann::json& j, GroupLynQPro& p)
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<uint16_t>("senderId", p.senderId, j, 0);
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 the SatPaq protocol */
4601
- GroupSatPaq satPaq;
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
- satPaq.clear();
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(satPaq),
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<GroupSatPaq>("satPaq", p.satPaq, j);
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 port;
5177
+ int port;
5115
5178
 
5116
- /** @brief Optional, Default: 10] Seconds interval at which to send UDP keepalives to Rallypoints. This is important for NAT "hole-punching". */
5117
- int keepAliveIntervalSecs;
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
- NetworkTxOptions::TxPriority_t priority;
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 ttl;
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
- nic.clear();
5134
- keepAliveIntervalSecs = 10;
5135
- priority = NetworkTxOptions::priVoice;
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(keepAliveIntervalSecs),
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>("keepAliveIntervalSecs", p.keepAliveIntervalSecs, j, 10);
5162
- getOptional<NetworkTxOptions::TxPriority_t>("priority", p.priority, j, NetworkTxOptions::priVoice);
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 defaultNic;
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 multicastRejoinSecs;
5247
+ int multicastRejoinSecs;
5187
5248
 
5188
5249
  /** @brief [Optional, Default: 60000] Milliseconds between sending Rallypoint round-trip test requests */
5189
- int rallypointRtTestIntervalMs;
5250
+ int rallypointRtTestIntervalMs;
5190
5251
 
5191
5252
  /** @brief [Optional, Default: false] If true, logs RTP jitter buffer statistics periodically */
5192
- bool logRtpJitterBufferStats;
5253
+ bool logRtpJitterBufferStats;
5193
5254
 
5194
5255
  /** @brief [Optional, Default: false] Overrides/cancels group-level multicast failover if set to true */
5195
- bool preventMulticastFailover;
5256
+ bool preventMulticastFailover;
5196
5257
 
5197
5258
  /** @brief [Optional] Configuration for UDP streaming */
5198
- EngineNetworkingRpUdpStreaming rpUdpStreaming;
5259
+ EngineNetworkingRpUdpStreaming rpUdpStreaming;
5199
5260
 
5200
5261
  /** @brief [Optional] Configuration for RTP profile */
5201
- RtpProfile 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
- etUnknown,
7970
+ ctUnknown = 0,
7791
7971
 
7792
- /** @brief Shared-key encryption */
7793
- etSharedKey
7794
- } EnvelopeType_t;
7972
+ /** @brief Shared-key, AES256 full IV */
7973
+ ctSharedKeyAes256FullIv = 1,
7795
7974
 
7796
- /** @brief Specifies the streaming mode type (see @ref EnvelopeType_t). */
7797
- EnvelopeType_t envelopeType;
7975
+ /** @brief Shared-key, AES256 indexed IV */
7976
+ ctSharedKeyAes256IdxIv = 2,
7798
7977
 
7799
- /** @brief Network address for listening */
7800
- NetworkAddress listen;
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
- envelopeType = etUnknown;
7813
- listen.clear();
7814
- external.clear();
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(envelopeType),
7822
- TOJSON_IMPL(listen),
7823
- TOJSON_IMPL(external)
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
- j.at("envelopeType").get_to(p.envelopeType);
7830
- j.at("listen").get_to(p.listen);
7831
- j.at("external").get_to(p.external);
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
- GroupSatPaq::document();
11004
- GroupLynQPro::document();
11241
+ GroupAppTransport::document();
11005
11242
  RtpProfile::document();
11006
11243
  Group::document();
11007
11244
  Mission::document();
@@ -23,6 +23,8 @@
23
23
  #include <netinet/in.h>
24
24
  #endif
25
25
 
26
+ static const size_t ENGAGE_MAX_CRYPTO_PASSWORD_BYTES = 256;
27
+
26
28
  static const int ENGAGE_INVALID_IP_ADDRESS_FAMILY = -1;
27
29
 
28
30
  static const size_t ENGAGE_MAX_RTP_OUTPUT_QUEUE_PACKETS = 100;
@@ -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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "engage-engine",
3
- "version": "1.238.90780004",
3
+ "version": "1.241.90810006",
4
4
  "description": "Use Engage to communicate with everyone, everywhere, from any device",
5
5
  "scripts": {
6
6
  "test": "echo \"Error: no test specified\" && exit 1"