engage-engine 1.251.90910020 → 1.251.90910021

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.
@@ -2751,6 +2751,21 @@ namespace AppConfigurationObjects
2751
2751
  IMPLEMENT_JSON_DOCUMENTATION(Rallypoint)
2752
2752
 
2753
2753
  public:
2754
+ /**
2755
+ * @brief RP protocol enum.
2756
+ *
2757
+ */
2758
+ typedef enum
2759
+ {
2760
+ /** @brief [Default] TLS over TCP*/
2761
+ rppTlsTcp = 0,
2762
+
2763
+ /** @brief WebSocket over TLS */
2764
+ rppTlsWs = 1,
2765
+
2766
+ /** @brief Invalid */
2767
+ rppInvalid = -1
2768
+ } RpProtocol_t;
2754
2769
 
2755
2770
  /**
2756
2771
  * @brief This is the host address for the Engine to connect to the RallyPoint service.
@@ -2823,6 +2838,13 @@ namespace AppConfigurationObjects
2823
2838
  std::string sni;
2824
2839
 
2825
2840
 
2841
+ /** @brief [Optional, Default: rppTlsTcp] Specifies the protocol to be used for the Rallypoint connection. See @ref RpProtocol_t for all protocol types */
2842
+ RpProtocol_t protocol;
2843
+
2844
+ /** @brief [Optional, Default: ""] Path to use for the RP connection (only used for WebSocket) */
2845
+ std::string path;
2846
+
2847
+
2826
2848
  Rallypoint()
2827
2849
  {
2828
2850
  clear();
@@ -2840,6 +2862,8 @@ namespace AppConfigurationObjects
2840
2862
  connectionTimeoutSecs = 0;
2841
2863
  tcpTxOptions.clear();
2842
2864
  sni.clear();
2865
+ protocol = rppTlsTcp;
2866
+ path.clear();
2843
2867
  }
2844
2868
 
2845
2869
  bool matches(const Rallypoint& other)
@@ -2849,6 +2873,16 @@ namespace AppConfigurationObjects
2849
2873
  return false;
2850
2874
  }
2851
2875
 
2876
+ if(protocol != other.protocol)
2877
+ {
2878
+ return false;
2879
+ }
2880
+
2881
+ if(path.compare(other.path) != 0)
2882
+ {
2883
+ return false;
2884
+ }
2885
+
2852
2886
  if(certificate.compare(other.certificate) != 0)
2853
2887
  {
2854
2888
  return false;
@@ -2932,7 +2966,9 @@ namespace AppConfigurationObjects
2932
2966
  TOJSON_IMPL(disableMessageSigning),
2933
2967
  TOJSON_IMPL(connectionTimeoutSecs),
2934
2968
  TOJSON_IMPL(tcpTxOptions),
2935
- TOJSON_IMPL(sni)
2969
+ TOJSON_IMPL(sni),
2970
+ TOJSON_IMPL(protocol),
2971
+ TOJSON_IMPL(path)
2936
2972
  };
2937
2973
  }
2938
2974
 
@@ -2950,6 +2986,8 @@ namespace AppConfigurationObjects
2950
2986
  getOptional<int>("connectionTimeoutSecs", p.connectionTimeoutSecs, j, 0);
2951
2987
  getOptional<TcpNetworkTxOptions>("tcpTxOptions", p.tcpTxOptions, j);
2952
2988
  getOptional<std::string>("sni", p.sni, j);
2989
+ getOptional<Rallypoint::RpProtocol_t>("protocol", p.protocol, j, Rallypoint::RpProtocol_t::rppTlsTcp);
2990
+ getOptional<std::string>("path", p.path, j);
2953
2991
  }
2954
2992
 
2955
2993
  //-----------------------------------------------------------
@@ -3535,6 +3573,164 @@ namespace AppConfigurationObjects
3535
3573
  // internalKey is not serialized
3536
3574
  }
3537
3575
 
3576
+ //-----------------------------------------------------------
3577
+ JSON_SERIALIZED_CLASS(AudioRegistryDevice)
3578
+ /**
3579
+ * @brief Describes an audio device that is available on the system
3580
+ *
3581
+ * Helper C++ class to serialize and de-serialize AudioRegistryDevice
3582
+ *
3583
+ * Example: @include[doc] examples/AudioRegistryDevice.json
3584
+ *
3585
+ * @see AudioRegistryDevice
3586
+ */
3587
+ class AudioRegistryDevice : public ConfigurationObjectBase
3588
+ {
3589
+ IMPLEMENT_JSON_SERIALIZATION()
3590
+ IMPLEMENT_JSON_DOCUMENTATION(AudioRegistryDevice)
3591
+
3592
+ public:
3593
+ /** @brief The string identifier used to identify the hardware. */
3594
+ std::string hardwareId;
3595
+
3596
+ /** @brief True if this is the default device */
3597
+ bool isDefault;
3598
+
3599
+ /** @brief Name of the device */
3600
+ std::string name;
3601
+
3602
+ /** @brief [Optional] Manufacturer */
3603
+ std::string manufacturer;
3604
+
3605
+ /** @brief [Optional] Model */
3606
+ std::string model;
3607
+
3608
+ /** @brief [Optional] Serial number */
3609
+ std::string serialNumber;
3610
+
3611
+
3612
+ /** @brief [Optional] Type */
3613
+ std::string type;
3614
+
3615
+ /** @brief [Optional] Extra */
3616
+ std::string extra;
3617
+
3618
+ AudioRegistryDevice()
3619
+ {
3620
+ clear();
3621
+ }
3622
+
3623
+ void clear()
3624
+ {
3625
+ hardwareId.clear();
3626
+ isDefault = false;
3627
+ name.clear();
3628
+ manufacturer.clear();
3629
+ model.clear();
3630
+ serialNumber.clear();
3631
+ type.clear();
3632
+ extra.clear();
3633
+ }
3634
+
3635
+ virtual std::string toString()
3636
+ {
3637
+ char buff[2048];
3638
+
3639
+ snprintf(buff, sizeof(buff), "hardwareId=%s, isDefault=%d, name=%s, manufacturer=%s, model=%s, serialNumber=%s, type=%s, extra=%s",
3640
+ hardwareId.c_str(),
3641
+ (int)isDefault,
3642
+ name.c_str(),
3643
+ manufacturer.c_str(),
3644
+ model.c_str(),
3645
+ serialNumber.c_str(),
3646
+ type.c_str(),
3647
+ extra.c_str());
3648
+
3649
+ return std::string(buff);
3650
+ }
3651
+ };
3652
+
3653
+ static void to_json(nlohmann::json& j, const AudioRegistryDevice& p)
3654
+ {
3655
+ j = nlohmann::json{
3656
+ TOJSON_IMPL(hardwareId),
3657
+ TOJSON_IMPL(isDefault),
3658
+ TOJSON_IMPL(name),
3659
+ TOJSON_IMPL(manufacturer),
3660
+ TOJSON_IMPL(model),
3661
+ TOJSON_IMPL(serialNumber),
3662
+ TOJSON_IMPL(type),
3663
+ TOJSON_IMPL(extra)
3664
+ };
3665
+ }
3666
+ static void from_json(const nlohmann::json& j, AudioRegistryDevice& p)
3667
+ {
3668
+ p.clear();
3669
+ getOptional<std::string>("hardwareId", p.hardwareId, j, EMPTY_STRING);
3670
+ getOptional<bool>("isDefault", p.isDefault, j, false);
3671
+ getOptional("name", p.name, j);
3672
+ getOptional("manufacturer", p.manufacturer, j);
3673
+ getOptional("model", p.model, j);
3674
+ getOptional("serialNumber", p.serialNumber, j);
3675
+ getOptional("type", p.type, j);
3676
+ getOptional("extra", p.extra, j);
3677
+ }
3678
+
3679
+
3680
+ //-----------------------------------------------------------
3681
+ JSON_SERIALIZED_CLASS(AudioRegistry)
3682
+ /**
3683
+ * @brief Describes an audio registry
3684
+ *
3685
+ * Helper C++ class to serialize and de-serialize AudioRegistry
3686
+ *
3687
+ * Example: @include[doc] examples/AudioRegistry.json
3688
+ *
3689
+ * @see AudioRegistry
3690
+ */
3691
+ class AudioRegistry : public ConfigurationObjectBase
3692
+ {
3693
+ IMPLEMENT_JSON_SERIALIZATION()
3694
+ IMPLEMENT_JSON_DOCUMENTATION(AudioRegistry)
3695
+
3696
+ public:
3697
+ /** @brief [Optional] List of input devices to use for the registry. */
3698
+ std::vector<AudioRegistryDevice> inputs;
3699
+
3700
+ /** @brief [Optional] List of output devices to use for the registry. */
3701
+ std::vector<AudioRegistryDevice> outputs;
3702
+
3703
+ AudioRegistry()
3704
+ {
3705
+ clear();
3706
+ }
3707
+
3708
+ void clear()
3709
+ {
3710
+ inputs.clear();
3711
+ outputs.clear();
3712
+ }
3713
+
3714
+ virtual std::string toString()
3715
+ {
3716
+ return std::string("");
3717
+ }
3718
+ };
3719
+
3720
+ static void to_json(nlohmann::json& j, const AudioRegistry& p)
3721
+ {
3722
+ j = nlohmann::json{
3723
+ TOJSON_IMPL(inputs),
3724
+ TOJSON_IMPL(outputs)
3725
+ };
3726
+ }
3727
+ static void from_json(const nlohmann::json& j, AudioRegistry& p)
3728
+ {
3729
+ p.clear();
3730
+ getOptional<std::vector<AudioRegistryDevice>>("inputs", p.inputs, j);
3731
+ getOptional<std::vector<AudioRegistryDevice>>("outputs", p.outputs, j);
3732
+ }
3733
+
3538
3734
  //-----------------------------------------------------------
3539
3735
  JSON_SERIALIZED_CLASS(AudioDeviceDescriptor)
3540
3736
  /**
@@ -3778,12 +3974,18 @@ namespace AppConfigurationObjects
3778
3974
  /** @brief [Optional, Default: first audio device] Id for the input audio device to use for this group. */
3779
3975
  int inputId;
3780
3976
 
3977
+ /** @brief [Optional] Hardware ID of the input audio device to use for this group. If empty, inputId is used. */
3978
+ std::string inputHardwareId;
3979
+
3781
3980
  /** @brief [Optional, Default: 0] The percentage at which to gain the input audio. */
3782
3981
  int inputGain;
3783
3982
 
3784
3983
  /** @brief [Optional, Default: first audio device] Id for the output audio device to use for this group. */
3785
3984
  int outputId;
3786
3985
 
3986
+ /** @brief [Optional] Hardware ID of the output audio device to use for this group. If empty, outputId is used. */
3987
+ std::string outputHardwareId;
3988
+
3787
3989
  /** @brief [Optional, Default: 0] The percentage at which to gain the output audio. */
3788
3990
  int outputGain;
3789
3991
 
@@ -3805,8 +4007,10 @@ namespace AppConfigurationObjects
3805
4007
  {
3806
4008
  enabled = true;
3807
4009
  inputId = 0;
4010
+ inputHardwareId.clear();
3808
4011
  inputGain = 0;
3809
4012
  outputId = 0;
4013
+ outputHardwareId.clear();
3810
4014
  outputGain = 0;
3811
4015
  outputLevelLeft = 100;
3812
4016
  outputLevelRight = 100;
@@ -3819,8 +4023,10 @@ namespace AppConfigurationObjects
3819
4023
  j = nlohmann::json{
3820
4024
  TOJSON_IMPL(enabled),
3821
4025
  TOJSON_IMPL(inputId),
4026
+ TOJSON_IMPL(inputHardwareId),
3822
4027
  TOJSON_IMPL(inputGain),
3823
4028
  TOJSON_IMPL(outputId),
4029
+ TOJSON_IMPL(outputHardwareId),
3824
4030
  TOJSON_IMPL(outputLevelLeft),
3825
4031
  TOJSON_IMPL(outputLevelRight),
3826
4032
  TOJSON_IMPL(outputMuted)
@@ -3831,8 +4037,10 @@ namespace AppConfigurationObjects
3831
4037
  p.clear();
3832
4038
  getOptional<bool>("enabled", p.enabled, j, true);
3833
4039
  getOptional<int>("inputId", p.inputId, j, 0);
4040
+ getOptional<std::string>("inputHardwareId", p.inputHardwareId, j, EMPTY_STRING);
3834
4041
  getOptional<int>("inputGain", p.inputGain, j, 0);
3835
4042
  getOptional<int>("outputId", p.outputId, j, 0);
4043
+ getOptional<std::string>("outputHardwareId", p.outputHardwareId, j, EMPTY_STRING);
3836
4044
  getOptional<int>("outputGain", p.outputGain, j, 0);
3837
4045
  getOptional<int>("outputLevelLeft", p.outputLevelLeft, j, 100);
3838
4046
  getOptional<int>("outputLevelRight", p.outputLevelRight, j, 100);
@@ -4764,11 +4972,14 @@ namespace AppConfigurationObjects
4764
4972
 
4765
4973
  /** @brief Audio payloads are transformed, headers are preserved, multiple parallel output streams are
4766
4974
  * possible/expected. The group must be gtAudio (type = 1).*/
4767
- bomMultistream = 1,
4975
+ bomMultistream = 1,
4768
4976
 
4769
4977
  /** @brief Audio payloads are mixed - output is anonymous (i.e. no metadata) if if the target group(s)
4770
4978
  * allow header extensions. The group must be gtAudio (type = 1)*/
4771
- bomMixedStream = 2,
4979
+ bomMixedStream = 2,
4980
+
4981
+ /** @brief No output will be made to the group regardless of type.*/
4982
+ bomNone = 3
4772
4983
  } BridgingOpMode_t;
4773
4984
 
4774
4985
  /** @brief [Optional] The output mode */
@@ -6018,6 +6229,9 @@ namespace AppConfigurationObjects
6018
6229
  /** @brief [Optional, Default: false] If true, input audio is written to a PCM file in the data directory */
6019
6230
  bool saveOutputPcm;
6020
6231
 
6232
+ /** @brief [Optional] If specified, this registry will be used to discover the input and output devices */
6233
+ AudioRegistry registry;
6234
+
6021
6235
 
6022
6236
  EnginePolicyAudio()
6023
6237
  {
@@ -6040,6 +6254,7 @@ namespace AppConfigurationObjects
6040
6254
  denoiseOutput = false;
6041
6255
  saveInputPcm = false;
6042
6256
  saveOutputPcm = false;
6257
+ registry.clear();
6043
6258
  }
6044
6259
  };
6045
6260
 
@@ -6059,7 +6274,8 @@ namespace AppConfigurationObjects
6059
6274
  TOJSON_IMPL(denoiseInput),
6060
6275
  TOJSON_IMPL(denoiseOutput),
6061
6276
  TOJSON_IMPL(saveInputPcm),
6062
- TOJSON_IMPL(saveOutputPcm)
6277
+ TOJSON_IMPL(saveOutputPcm),
6278
+ TOJSON_IMPL(registry)
6063
6279
  };
6064
6280
  }
6065
6281
  static void from_json(const nlohmann::json& j, EnginePolicyAudio& p)
@@ -6080,6 +6296,7 @@ namespace AppConfigurationObjects
6080
6296
  FROMJSON_IMPL(denoiseOutput, bool, false);
6081
6297
  FROMJSON_IMPL(saveInputPcm, bool, false);
6082
6298
  FROMJSON_IMPL(saveOutputPcm, bool, false);
6299
+ getOptional<AudioRegistry>("registry", p.registry, j);
6083
6300
  }
6084
6301
 
6085
6302
  //-----------------------------------------------------------
@@ -7742,6 +7959,12 @@ namespace AppConfigurationObjects
7742
7959
 
7743
7960
  OutboundLeafPolicy_t outboundLeafPolicy;
7744
7961
 
7962
+ /** @brief [Optional, Default: Rallypoint::RpProtocol_t::rppTlsTcp] Protocol to use for the peer */
7963
+ Rallypoint::RpProtocol_t protocol;
7964
+
7965
+ /** @brief [Optional, Default: ""] Path to use for the peer (only used for WebSocket) */
7966
+ std::string path;
7967
+
7745
7968
  RallypointPeer()
7746
7969
  {
7747
7970
  clear();
@@ -7756,6 +7979,8 @@ namespace AppConfigurationObjects
7756
7979
  connectionTimeoutSecs = 0;
7757
7980
  forceIsMeshLeaf = false;
7758
7981
  outboundLeafPolicy = OutboundLeafPolicy_t::olpUseRpConfiguration;
7982
+ protocol = Rallypoint::RpProtocol_t::rppTlsTcp;
7983
+ path.clear();
7759
7984
  }
7760
7985
  };
7761
7986
 
@@ -7768,7 +7993,9 @@ namespace AppConfigurationObjects
7768
7993
  TOJSON_IMPL(certificate),
7769
7994
  TOJSON_IMPL(connectionTimeoutSecs),
7770
7995
  TOJSON_IMPL(forceIsMeshLeaf),
7771
- TOJSON_IMPL(outboundLeafPolicy)
7996
+ TOJSON_IMPL(outboundLeafPolicy),
7997
+ TOJSON_IMPL(protocol),
7998
+ TOJSON_IMPL(path)
7772
7999
  };
7773
8000
  }
7774
8001
  static void from_json(const nlohmann::json& j, RallypointPeer& p)
@@ -7781,6 +8008,8 @@ namespace AppConfigurationObjects
7781
8008
  getOptional<int>("connectionTimeoutSecs", p.connectionTimeoutSecs, j, 0);
7782
8009
  getOptional<bool>("forceIsMeshLeaf", p.forceIsMeshLeaf, j, false);
7783
8010
  getOptional<RallypointPeer::OutboundLeafPolicy_t>("outboundLeafPolicy", p.outboundLeafPolicy, j, RallypointPeer::OutboundLeafPolicy_t::olpUseRpConfiguration);
8011
+ getOptional<Rallypoint::RpProtocol_t>("protocol", p.protocol, j, Rallypoint::RpProtocol_t::rppTlsTcp);
8012
+ getOptional<std::string>("path", p.path, j);
7784
8013
  }
7785
8014
 
7786
8015
  //-----------------------------------------------------------
@@ -8624,6 +8853,9 @@ namespace AppConfigurationObjects
8624
8853
  /** @brief [Default: false] Indicates whether the client is required to present a certificate */
8625
8854
  bool requireClientCertificate;
8626
8855
 
8856
+ /** @brief [Default: false] Indicates whether TLS is required */
8857
+ bool requireTls;
8858
+
8627
8859
  RallypointWebsocketSettings()
8628
8860
  {
8629
8861
  clear();
@@ -8635,6 +8867,7 @@ namespace AppConfigurationObjects
8635
8867
  listenPort = 8443;
8636
8868
  certificate.clear();
8637
8869
  requireClientCertificate = false;
8870
+ requireTls = true;
8638
8871
  }
8639
8872
  };
8640
8873
 
@@ -8644,7 +8877,8 @@ namespace AppConfigurationObjects
8644
8877
  TOJSON_IMPL(enabled),
8645
8878
  TOJSON_IMPL(listenPort),
8646
8879
  TOJSON_IMPL(certificate),
8647
- TOJSON_IMPL(requireClientCertificate)
8880
+ TOJSON_IMPL(requireClientCertificate),
8881
+ TOJSON_IMPL(requireTls)
8648
8882
  };
8649
8883
  }
8650
8884
  static void from_json(const nlohmann::json& j, RallypointWebsocketSettings& p)
@@ -8654,6 +8888,7 @@ namespace AppConfigurationObjects
8654
8888
  getOptional<int>("listenPort", p.listenPort, j, 8443);
8655
8889
  getOptional<SecurityCertificate>("certificate", p.certificate, j);
8656
8890
  getOptional<bool>("requireClientCertificate", p.requireClientCertificate, j, false);
8891
+ getOptional<bool>("requireTls", p.requireTls, j, true);
8657
8892
  }
8658
8893
 
8659
8894
 
@@ -10279,6 +10514,12 @@ namespace AppConfigurationObjects
10279
10514
 
10280
10515
  /** @brief The transport type is invalid */
10281
10516
  csInvalidTransport = -11,
10517
+
10518
+ /** @brief Audio input device not found in registry */
10519
+ csAudioInputDeviceNotFound = -12,
10520
+
10521
+ /** @brief Audio output device not found in registry */
10522
+ csAudioOutputDeviceNotFound = -13
10282
10523
  } CreationStatus_t;
10283
10524
 
10284
10525
  /** @brief ID of the group */
@@ -24,6 +24,7 @@
24
24
  #endif
25
25
 
26
26
  static const size_t ENGAGE_MAX_CRYPTO_PASSWORD_BYTES = 256;
27
+ static const uint64_t ENGAGE_ROOT_CA_CERTIFICATE_CACHE_EXPIRATION_MS = (60 * 1000);
27
28
 
28
29
  static const int ENGAGE_INVALID_IP_ADDRESS_FAMILY = -1;
29
30
 
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.251.90910020",
3
+ "version": "1.251.90910021",
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"