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 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
 
@@ -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 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;
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
- satPaq.clear();
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(satPaq),
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<GroupSatPaq>("satPaq", p.satPaq, j);
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 port;
5184
+ int port;
5115
5185
 
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;
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
- NetworkTxOptions::TxPriority_t priority;
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 ttl;
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
- nic.clear();
5134
- keepAliveIntervalSecs = 10;
5135
- priority = NetworkTxOptions::priVoice;
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(keepAliveIntervalSecs),
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>("keepAliveIntervalSecs", p.keepAliveIntervalSecs, j, 10);
5162
- getOptional<NetworkTxOptions::TxPriority_t>("priority", p.priority, j, NetworkTxOptions::priVoice);
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 defaultNic;
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 multicastRejoinSecs;
5254
+ int multicastRejoinSecs;
5187
5255
 
5188
5256
  /** @brief [Optional, Default: 60000] Milliseconds between sending Rallypoint round-trip test requests */
5189
- int rallypointRtTestIntervalMs;
5257
+ int rallypointRtTestIntervalMs;
5190
5258
 
5191
5259
  /** @brief [Optional, Default: false] If true, logs RTP jitter buffer statistics periodically */
5192
- bool logRtpJitterBufferStats;
5260
+ bool logRtpJitterBufferStats;
5193
5261
 
5194
5262
  /** @brief [Optional, Default: false] Overrides/cancels group-level multicast failover if set to true */
5195
- bool preventMulticastFailover;
5263
+ bool preventMulticastFailover;
5196
5264
 
5197
5265
  /** @brief [Optional] Configuration for UDP streaming */
5198
- EngineNetworkingRpUdpStreaming rpUdpStreaming;
5266
+ EngineNetworkingRpUdpStreaming rpUdpStreaming;
5199
5267
 
5200
5268
  /** @brief [Optional] Configuration for RTP profile */
5201
- RtpProfile 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
- etUnknown,
7977
+ ctUnknown = 0,
7791
7978
 
7792
- /** @brief Shared-key encryption */
7793
- etSharedKey
7794
- } EnvelopeType_t;
7979
+ /** @brief Shared-key, AES256 full IV */
7980
+ ctSharedKeyAes256FullIv = 1,
7795
7981
 
7796
- /** @brief Specifies the streaming mode type (see @ref EnvelopeType_t). */
7797
- EnvelopeType_t envelopeType;
7982
+ /** @brief Shared-key, AES256 indexed IV */
7983
+ ctSharedKeyAes256IdxIv = 2,
7798
7984
 
7799
- /** @brief Network address for listening */
7800
- NetworkAddress listen;
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
- envelopeType = etUnknown;
7813
- listen.clear();
7814
- external.clear();
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(envelopeType),
7822
- TOJSON_IMPL(listen),
7823
- TOJSON_IMPL(external)
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
- j.at("envelopeType").get_to(p.envelopeType);
7830
- j.at("listen").get_to(p.listen);
7831
- j.at("external").get_to(p.external);
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
- GroupSatPaq::document();
11004
- GroupLynQPro::document();
11248
+ GroupAppTransport::document();
11005
11249
  RtpProfile::document();
11006
11250
  Group::document();
11007
11251
  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
  *
@@ -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 engageGetCertificateDescriptorFromPem(const char * _Nonnull pem);
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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "engage-engine",
3
- "version": "1.238.90780004",
3
+ "version": "1.240.90800005",
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"