engage-engine 1.249.90890017 → 1.251.90910019

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
@@ -1201,6 +1201,20 @@ NAN_METHOD(getRiffDescriptor)
1201
1201
  }
1202
1202
 
1203
1203
 
1204
+ //--------------------------------------------------------
1205
+ NAN_METHOD(beginGroupPcmPowerTracking)
1206
+ {
1207
+ NANRETI(engageBeginGroupPcmPowerTracking(STRVAL(0)));
1208
+ }
1209
+
1210
+
1211
+ //--------------------------------------------------------
1212
+ NAN_METHOD(endGroupPcmPowerTracking)
1213
+ {
1214
+ NANRETI(engageEndGroupPcmPowerTracking(STRVAL(0)));
1215
+ }
1216
+
1217
+
1204
1218
  //--------------------------------------------------------
1205
1219
  NAN_MODULE_INIT(Init)
1206
1220
  {
@@ -1279,7 +1293,10 @@ NAN_MODULE_INIT(Init)
1279
1293
  ENGAGE_BINDING(getDeviceId);
1280
1294
 
1281
1295
  ENGAGE_BINDING(verifyRiff);
1282
- ENGAGE_BINDING(getRiffDescriptor);
1296
+ ENGAGE_BINDING(getRiffDescriptor);
1297
+
1298
+ ENGAGE_BINDING(beginGroupPcmPowerTracking);
1299
+ ENGAGE_BINDING(endGroupPcmPowerTracking);
1283
1300
  }
1284
1301
 
1285
1302
  NODE_MODULE(engage, Init)
@@ -449,6 +449,52 @@ namespace AppConfigurationObjects
449
449
  }
450
450
  }
451
451
 
452
+ //-----------------------------------------------------------
453
+ JSON_SERIALIZED_CLASS(KvPair)
454
+ /**
455
+ * @brief Holds a key/value pair
456
+ *
457
+ * Helper C++ class to serialize and de-serialize KvPair JSON
458
+ *
459
+ */
460
+ class KvPair : public ConfigurationObjectBase
461
+ {
462
+ IMPLEMENT_JSON_SERIALIZATION()
463
+ IMPLEMENT_JSON_DOCUMENTATION(KvPair)
464
+
465
+ public:
466
+ /** @brief Key */
467
+ std::string key;
468
+
469
+ /** @brief Value */
470
+ std::string value;
471
+
472
+ KvPair()
473
+ {
474
+ clear();
475
+ }
476
+
477
+ void clear()
478
+ {
479
+ key.clear();
480
+ value.clear();
481
+ }
482
+ };
483
+
484
+ static void to_json(nlohmann::json& j, const KvPair& p)
485
+ {
486
+ j = nlohmann::json{
487
+ TOJSON_IMPL(key),
488
+ TOJSON_IMPL(value)
489
+ };
490
+ }
491
+ static void from_json(const nlohmann::json& j, KvPair& p)
492
+ {
493
+ p.clear();
494
+ getOptional<std::string>("key", p.key, j, EMPTY_STRING);
495
+ getOptional<std::string>("tags", p.value, j, EMPTY_STRING);
496
+ }
497
+
452
498
  //-----------------------------------------------------------
453
499
  JSON_SERIALIZED_CLASS(TuningSettings)
454
500
  class TuningSettings : public ConfigurationObjectBase
@@ -2781,9 +2827,9 @@ namespace AppConfigurationObjects
2781
2827
  certificateKey.clear();
2782
2828
  caCertificates.clear();
2783
2829
  verifyPeer = false;
2784
- transactionTimeoutMs = 5000;
2830
+ transactionTimeoutMs = 0;
2785
2831
  disableMessageSigning = false;
2786
- connectionTimeoutSecs = 5;
2832
+ connectionTimeoutSecs = 0;
2787
2833
  tcpTxOptions.clear();
2788
2834
  }
2789
2835
 
@@ -2877,9 +2923,9 @@ namespace AppConfigurationObjects
2877
2923
  getOptional<bool>("verifyPeer", p.verifyPeer, j, true);
2878
2924
  getOptional<bool>("allowSelfSignedCertificate", p.allowSelfSignedCertificate, j, false);
2879
2925
  getOptional<std::vector<std::string>>("caCertificates", p.caCertificates, j);
2880
- getOptional<int>("transactionTimeoutMs", p.transactionTimeoutMs, j, 5000);
2926
+ getOptional<int>("transactionTimeoutMs", p.transactionTimeoutMs, j, 0);
2881
2927
  getOptional<bool>("disableMessageSigning", p.disableMessageSigning, j, false);
2882
- getOptional<int>("connectionTimeoutSecs", p.connectionTimeoutSecs, j, 5);
2928
+ getOptional<int>("connectionTimeoutSecs", p.connectionTimeoutSecs, j, 0);
2883
2929
  getOptional<TcpNetworkTxOptions>("tcpTxOptions", p.tcpTxOptions, j);
2884
2930
  }
2885
2931
 
@@ -2927,6 +2973,9 @@ namespace AppConfigurationObjects
2927
2973
  /** @brief [Optional, Default: 0] Default connection timeout in seconds to any RP in the cluster */
2928
2974
  int connectionTimeoutSecs;
2929
2975
 
2976
+ /** @brief [Optional, Default: 0] Default transaction time in milliseconds to any RP in the cluster */
2977
+ int transactionTimeoutMs;
2978
+
2930
2979
  RallypointCluster()
2931
2980
  {
2932
2981
  clear();
@@ -2937,7 +2986,8 @@ namespace AppConfigurationObjects
2937
2986
  connectionStrategy = csRoundRobin;
2938
2987
  rallypoints.clear();
2939
2988
  rolloverSecs = 10;
2940
- connectionTimeoutSecs = 5;
2989
+ connectionTimeoutSecs = 0;
2990
+ transactionTimeoutMs = 0;
2941
2991
  }
2942
2992
  };
2943
2993
 
@@ -2947,7 +2997,8 @@ namespace AppConfigurationObjects
2947
2997
  TOJSON_IMPL(connectionStrategy),
2948
2998
  TOJSON_IMPL(rallypoints),
2949
2999
  TOJSON_IMPL(rolloverSecs),
2950
- TOJSON_IMPL(connectionTimeoutSecs)
3000
+ TOJSON_IMPL(connectionTimeoutSecs),
3001
+ TOJSON_IMPL(transactionTimeoutMs)
2951
3002
  };
2952
3003
  }
2953
3004
  static void from_json(const nlohmann::json& j, RallypointCluster& p)
@@ -2956,7 +3007,8 @@ namespace AppConfigurationObjects
2956
3007
  getOptional<RallypointCluster::ConnectionStrategy_t>("connectionStrategy", p.connectionStrategy, RallypointCluster::ConnectionStrategy_t::csRoundRobin);
2957
3008
  getOptional<std::vector<Rallypoint>>("rallypoints", p.rallypoints, j);
2958
3009
  getOptional<int>("rolloverSecs", p.rolloverSecs, j, 10);
2959
- getOptional<int>("connectionTimeoutSecs", p.connectionTimeoutSecs, j, 5);
3010
+ getOptional<int>("connectionTimeoutSecs", p.connectionTimeoutSecs, j, 0);
3011
+ getOptional<int>("transactionTimeoutMs", p.connectionTimeoutSecs, j, 0);
2960
3012
  }
2961
3013
 
2962
3014
 
@@ -6850,6 +6902,9 @@ namespace AppConfigurationObjects
6850
6902
  /** @brief [Optional, Default: 5] Connection timeout in seconds to RP */
6851
6903
  int rpConnectionTimeoutSecs;
6852
6904
 
6905
+ /** @brief [Optional, Default: 5] Transaction timeout with RP */
6906
+ int rpTransactionTimeoutMs;
6907
+
6853
6908
  /** @brief [Optional, Default: 10] The number of seconds after which "sticky" transmission IDs expire. */
6854
6909
  int stickyTidHangSecs;
6855
6910
 
@@ -6875,7 +6930,8 @@ namespace AppConfigurationObjects
6875
6930
  rpClusterStrategy = RallypointCluster::ConnectionStrategy_t::csRoundRobin;
6876
6931
  rpClusterRolloverSecs = 10;
6877
6932
  rtpExpirationCheckIntervalMs = 250;
6878
- rpConnectionTimeoutSecs = 5;
6933
+ rpConnectionTimeoutSecs = 0;
6934
+ rpTransactionTimeoutMs = 0;
6879
6935
  stickyTidHangSecs = 10;
6880
6936
  uriStreamingIntervalMs = 60;
6881
6937
  delayedMicrophoneClosureSecs = 15;
@@ -6896,6 +6952,7 @@ namespace AppConfigurationObjects
6896
6952
  TOJSON_IMPL(rpClusterRolloverSecs),
6897
6953
  TOJSON_IMPL(rtpExpirationCheckIntervalMs),
6898
6954
  TOJSON_IMPL(rpConnectionTimeoutSecs),
6955
+ TOJSON_IMPL(rpTransactionTimeoutMs),
6899
6956
  TOJSON_IMPL(stickyTidHangSecs),
6900
6957
  TOJSON_IMPL(uriStreamingIntervalMs),
6901
6958
  TOJSON_IMPL(delayedMicrophoneClosureSecs),
@@ -6914,7 +6971,8 @@ namespace AppConfigurationObjects
6914
6971
  getOptional<RallypointCluster::ConnectionStrategy_t>("rpClusterStrategy", p.rpClusterStrategy, j, RallypointCluster::ConnectionStrategy_t::csRoundRobin);
6915
6972
  getOptional<int>("rpClusterRolloverSecs", p.rpClusterRolloverSecs, j, 10);
6916
6973
  getOptional<int>("rtpExpirationCheckIntervalMs", p.rtpExpirationCheckIntervalMs, j, 250);
6917
- getOptional<int>("rpConnectionTimeoutSecs", p.rpConnectionTimeoutSecs, j, 5);
6974
+ getOptional<int>("rpConnectionTimeoutSecs", p.rpConnectionTimeoutSecs, j, 0);
6975
+ getOptional<int>("rpTransactionTimeoutMs", p.rpTransactionTimeoutMs, j, 0);
6918
6976
  getOptional<int>("stickyTidHangSecs", p.stickyTidHangSecs, j, 10);
6919
6977
  getOptional<int>("uriStreamingIntervalMs", p.uriStreamingIntervalMs, j, 60);
6920
6978
  getOptional<int>("delayedMicrophoneClosureSecs", p.delayedMicrophoneClosureSecs, j, 15);
@@ -7565,6 +7623,18 @@ namespace AppConfigurationObjects
7565
7623
  IMPLEMENT_JSON_DOCUMENTATION(RallypointPeer)
7566
7624
 
7567
7625
  public:
7626
+ typedef enum
7627
+ {
7628
+ /** @brief Use the RP's configuration */
7629
+ olpUseRpConfiguration = 0,
7630
+
7631
+ /** @brief Mark as a domain leaf */
7632
+ olpIsMeshLeaf = 1,
7633
+
7634
+ /** @brief Do not mark as a domain leaf */
7635
+ olpNotMeshLeaf = 2
7636
+ } OutboundLeafPolicy_t;
7637
+
7568
7638
  /** @brief Internal ID. */
7569
7639
  std::string id;
7570
7640
 
@@ -7583,6 +7653,8 @@ namespace AppConfigurationObjects
7583
7653
  /** @brief Internal enablement setting. */
7584
7654
  bool forceIsMeshLeaf;
7585
7655
 
7656
+ OutboundLeafPolicy_t outboundLeafPolicy;
7657
+
7586
7658
  RallypointPeer()
7587
7659
  {
7588
7660
  clear();
@@ -7596,6 +7668,7 @@ namespace AppConfigurationObjects
7596
7668
  certificate.clear();
7597
7669
  connectionTimeoutSecs = 0;
7598
7670
  forceIsMeshLeaf = false;
7671
+ outboundLeafPolicy = OutboundLeafPolicy_t::olpUseRpConfiguration;
7599
7672
  }
7600
7673
  };
7601
7674
 
@@ -7607,7 +7680,8 @@ namespace AppConfigurationObjects
7607
7680
  TOJSON_IMPL(host),
7608
7681
  TOJSON_IMPL(certificate),
7609
7682
  TOJSON_IMPL(connectionTimeoutSecs),
7610
- TOJSON_IMPL(forceIsMeshLeaf)
7683
+ TOJSON_IMPL(forceIsMeshLeaf),
7684
+ TOJSON_IMPL(outboundLeafPolicy)
7611
7685
  };
7612
7686
  }
7613
7687
  static void from_json(const nlohmann::json& j, RallypointPeer& p)
@@ -7619,6 +7693,7 @@ namespace AppConfigurationObjects
7619
7693
  getOptional<SecurityCertificate>("certificate", p.certificate, j);
7620
7694
  getOptional<int>("connectionTimeoutSecs", p.connectionTimeoutSecs, j, 0);
7621
7695
  getOptional<bool>("forceIsMeshLeaf", p.forceIsMeshLeaf, j, false);
7696
+ getOptional<RallypointPeer::OutboundLeafPolicy_t>("outboundLeafPolicy", p.outboundLeafPolicy, j, RallypointPeer::OutboundLeafPolicy_t::olpUseRpConfiguration);
7622
7697
  }
7623
7698
 
7624
7699
  //-----------------------------------------------------------
@@ -8031,10 +8106,10 @@ namespace AppConfigurationObjects
8031
8106
 
8032
8107
  public:
8033
8108
 
8034
- /** @brief An identifier useful for organizations that track different mesh configurations by ID */
8109
+ /** @brief An identifier useful for organizations that track different domain configurations by ID */
8035
8110
  std::string id;
8036
8111
 
8037
- /** @brief TODO: A version number for the mesh configuration. Change this whenever you update your configuration */
8112
+ /** @brief TODO: A version number for the domain configuration. Change this whenever you update your configuration */
8038
8113
  int version;
8039
8114
 
8040
8115
  /** @brief Comments */
@@ -8459,6 +8534,9 @@ namespace AppConfigurationObjects
8459
8534
  /** @brief Certificate to be used for WebSockets */
8460
8535
  SecurityCertificate certificate;
8461
8536
 
8537
+ /** @brief [Default: false] Indicates whether the client is required to present a certificate */
8538
+ bool requireClientCertificate;
8539
+
8462
8540
  RallypointWebsocketSettings()
8463
8541
  {
8464
8542
  clear();
@@ -8469,6 +8547,7 @@ namespace AppConfigurationObjects
8469
8547
  enabled = false;
8470
8548
  listenPort = 8443;
8471
8549
  certificate.clear();
8550
+ requireClientCertificate = false;
8472
8551
  }
8473
8552
  };
8474
8553
 
@@ -8477,7 +8556,8 @@ namespace AppConfigurationObjects
8477
8556
  j = nlohmann::json{
8478
8557
  TOJSON_IMPL(enabled),
8479
8558
  TOJSON_IMPL(listenPort),
8480
- TOJSON_IMPL(certificate)
8559
+ TOJSON_IMPL(certificate),
8560
+ TOJSON_IMPL(requireClientCertificate)
8481
8561
  };
8482
8562
  }
8483
8563
  static void from_json(const nlohmann::json& j, RallypointWebsocketSettings& p)
@@ -8486,6 +8566,7 @@ namespace AppConfigurationObjects
8486
8566
  getOptional<bool>("enabled", p.enabled, j, false);
8487
8567
  getOptional<int>("listenPort", p.listenPort, j, 8443);
8488
8568
  getOptional<SecurityCertificate>("certificate", p.certificate, j);
8569
+ getOptional<bool>("requireClientCertificate", p.requireClientCertificate, j, false);
8489
8570
  }
8490
8571
 
8491
8572
 
@@ -8694,7 +8775,7 @@ namespace AppConfigurationObjects
8694
8775
  /** @brief Internal - not serialized. */
8695
8776
  PeeringConfiguration peeringConfiguration; // NOTE: This is NOT serialized
8696
8777
 
8697
- /** @brief Indicates whether this Rallypoint is part of a core mesh or hangs off the periphery as a leaf node. */
8778
+ /** @brief Indicates whether this Rallypoint is part of a core domain or hangs off the periphery as a leaf node. */
8698
8779
  bool isMeshLeaf;
8699
8780
 
8700
8781
  /** @brief Set to true to forgo DSA signing of messages. Doing so is is a security risk but can be useful on CPU-constrained systems on already-secure environments. */
@@ -8748,7 +8829,7 @@ namespace AppConfigurationObjects
8748
8829
  /** @brief [Optional, Default 0] Sets the queue's normal task bias */
8749
8830
  uint32_t normalTaskQueueBias;
8750
8831
 
8751
- /** @brief If enabled, causes a mesh leaf to reverse-subscribe to a core node upon the core subscribing and a reflector having been setup */
8832
+ /** @brief If enabled, causes a domain leaf to reverse-subscribe to a core node upon the core subscribing and a reflector having been setup */
8752
8833
  bool enableLeafReflectionReverseSubscription;
8753
8834
 
8754
8835
  /** @brief If true, turns off loop detection. */
@@ -8784,11 +8865,17 @@ namespace AppConfigurationObjects
8784
8865
  /** @brief Details for capture of transmitted packets */
8785
8866
  PacketCapturer txCapture;
8786
8867
 
8787
- /** @brief [Optional] This Rallypoint's mesh name */
8788
- std::string meshName;
8868
+ /** @brief [Optional] This Rallypoint's domain name */
8869
+ std::string domainName;
8870
+
8871
+ /** @brief [Optional] List of domains that explicitly MAY connect to this RP */
8872
+ std::vector<std::string> allowedDomains;
8873
+
8874
+ /** @brief [Optional] List of domains that explictly MAY NOT connect to this RP */
8875
+ std::vector<std::string> blockedDomains;
8789
8876
 
8790
- /** @brief [Optional] List of additional meshes that can be reached via this RP */
8791
- std::vector<std::string> extraMeshes;
8877
+ /** @brief [Optional] List of additional domains that can be reached via this RP */
8878
+ std::vector<std::string> extraDomains;
8792
8879
 
8793
8880
  /** @brief [Optional] Low-level tuning */
8794
8881
  TuningSettings tuning;
@@ -8850,11 +8937,13 @@ namespace AppConfigurationObjects
8850
8937
  advertising.clear();
8851
8938
  extendedGroupRestrictions.clear();
8852
8939
  groupRestrictionAccessPolicyType = GroupRestrictionAccessPolicyType_t::graptPermissive;
8853
- ipFamily = IpFamilyType_t::ifIpUnspec;
8940
+ ipFamily = IpFamilyType_t::ifIp4;
8854
8941
  rxCapture.clear();
8855
8942
  txCapture.clear();
8856
- meshName.clear();
8857
- extraMeshes.clear();
8943
+ domainName.clear();
8944
+ allowedDomains.clear();
8945
+ blockedDomains.clear();
8946
+ extraDomains.clear();
8858
8947
  tuning.clear();
8859
8948
  }
8860
8949
  };
@@ -8915,8 +9004,10 @@ namespace AppConfigurationObjects
8915
9004
  TOJSON_IMPL(ipFamily),
8916
9005
  TOJSON_IMPL(rxCapture),
8917
9006
  TOJSON_IMPL(txCapture),
8918
- TOJSON_IMPL(meshName),
8919
- TOJSON_IMPL(extraMeshes),
9007
+ TOJSON_IMPL(domainName),
9008
+ TOJSON_IMPL(allowedDomains),
9009
+ TOJSON_IMPL(blockedDomains),
9010
+ TOJSON_IMPL(extraDomains),
8920
9011
  TOJSON_IMPL(tuning)
8921
9012
  };
8922
9013
  }
@@ -8973,11 +9064,13 @@ namespace AppConfigurationObjects
8973
9064
  getOptional<RallypointAdvertisingSettings>("advertising", p.advertising, j);
8974
9065
  getOptional<std::vector<RallypointExtendedGroupRestriction>>("extendedGroupRestrictions", p.extendedGroupRestrictions, j);
8975
9066
  getOptional<GroupRestrictionAccessPolicyType_t>("groupRestrictionAccessPolicyType", p.groupRestrictionAccessPolicyType, j, GroupRestrictionAccessPolicyType_t::graptPermissive);
8976
- getOptional<IpFamilyType_t>("ipFamily", p.ipFamily, j, IpFamilyType_t::ifIpUnspec);
9067
+ getOptional<IpFamilyType_t>("ipFamily", p.ipFamily, j, IpFamilyType_t::ifIp4);
8977
9068
  getOptional<PacketCapturer>("rxCapture", p.rxCapture, j);
8978
9069
  getOptional<PacketCapturer>("txCapture", p.txCapture, j);
8979
- getOptional<std::string>("meshName", p.meshName, j);
8980
- getOptional<std::vector<std::string>>("extraMeshes", p.extraMeshes, j);
9070
+ getOptional<std::string>("domainName", p.domainName, j);
9071
+ getOptional<std::vector<std::string>>("allowedDomains", p.allowedDomains, j);
9072
+ getOptional<std::vector<std::string>>("blockedDomains", p.blockedDomains, j);
9073
+ getOptional<std::vector<std::string>>("extraDomains", p.extraDomains, j);
8981
9074
  getOptional<TuningSettings>("tuning", p.tuning, j);
8982
9075
  }
8983
9076
 
@@ -9265,6 +9358,9 @@ namespace AppConfigurationObjects
9265
9358
  /** @brief Array of certificates in this store */
9266
9359
  std::vector<CertStoreCertificate> certificates;
9267
9360
 
9361
+ /** @brief [Optional] Array of KV pairs */
9362
+ std::vector<KvPair> kvp;
9363
+
9268
9364
  CertStore()
9269
9365
  {
9270
9366
  clear();
@@ -9274,6 +9370,7 @@ namespace AppConfigurationObjects
9274
9370
  {
9275
9371
  id.clear();
9276
9372
  certificates.clear();
9373
+ kvp.clear();
9277
9374
  }
9278
9375
  };
9279
9376
 
@@ -9281,7 +9378,8 @@ namespace AppConfigurationObjects
9281
9378
  {
9282
9379
  j = nlohmann::json{
9283
9380
  TOJSON_IMPL(id),
9284
- TOJSON_IMPL(certificates)
9381
+ TOJSON_IMPL(certificates),
9382
+ TOJSON_IMPL(kvp)
9285
9383
  };
9286
9384
  }
9287
9385
  static void from_json(const nlohmann::json& j, CertStore& p)
@@ -9289,6 +9387,7 @@ namespace AppConfigurationObjects
9289
9387
  p.clear();
9290
9388
  getOptional<std::string>("id", p.id, j, EMPTY_STRING);
9291
9389
  getOptional<std::vector<CertStoreCertificate>>("certificates", p.certificates, j);
9390
+ getOptional<std::vector<KvPair>>("kvp", p.kvp, j);
9292
9391
  }
9293
9392
 
9294
9393
  //-----------------------------------------------------------
@@ -9381,6 +9480,9 @@ namespace AppConfigurationObjects
9381
9480
  /** @brief Array of certificate elements. */
9382
9481
  std::vector<CertStoreCertificateElement> certificates;
9383
9482
 
9483
+ /** @brief Array of kv pairs. */
9484
+ std::vector<KvPair> kvp;
9485
+
9384
9486
  CertStoreDescriptor()
9385
9487
  {
9386
9488
  clear();
@@ -9393,6 +9495,7 @@ namespace AppConfigurationObjects
9393
9495
  version = 0;
9394
9496
  flags = 0;
9395
9497
  certificates.clear();
9498
+ kvp.clear();
9396
9499
  }
9397
9500
  };
9398
9501
 
@@ -9403,7 +9506,8 @@ namespace AppConfigurationObjects
9403
9506
  TOJSON_IMPL(fileName),
9404
9507
  TOJSON_IMPL(version),
9405
9508
  TOJSON_IMPL(flags),
9406
- TOJSON_IMPL(certificates)
9509
+ TOJSON_IMPL(certificates),
9510
+ TOJSON_IMPL(kvp)
9407
9511
  };
9408
9512
  }
9409
9513
  static void from_json(const nlohmann::json& j, CertStoreDescriptor& p)
@@ -9414,6 +9518,7 @@ namespace AppConfigurationObjects
9414
9518
  getOptional<int>("version", p.version, j, 0);
9415
9519
  getOptional<int>("flags", p.flags, j, 0);
9416
9520
  getOptional<std::vector<CertStoreCertificateElement>>("certificates", p.certificates, j);
9521
+ getOptional<std::vector<KvPair>>("kvp", p.kvp, j);
9417
9522
  }
9418
9523
 
9419
9524
  //-----------------------------------------------------------
@@ -11870,6 +11975,352 @@ namespace AppConfigurationObjects
11870
11975
  getOptional<int>("maxPriority", p.maxPriority, j, 255);
11871
11976
  }
11872
11977
 
11978
+ //-----------------------------------------------------------
11979
+ JSON_SERIALIZED_CLASS(EngateGroup)
11980
+ /**
11981
+ * @brief Engate configuration
11982
+ *
11983
+ * Helper C++ class to serialize and de-serialize EngateGroup JSON
11984
+ *
11985
+ * Example: @include[doc] examples/EngateGroup.json
11986
+ *
11987
+ * @see TODO: ConfigurationObjects::EngateGroupsConfiguration
11988
+ */
11989
+ class EngateGroup : public Group
11990
+ {
11991
+ IMPLEMENT_JSON_SERIALIZATION()
11992
+ IMPLEMENT_JSON_DOCUMENTATION(EngateGroup)
11993
+
11994
+ public:
11995
+ bool useVad;
11996
+ uint32_t inputHangMs;
11997
+ uint32_t inputActivationPowerThreshold;
11998
+ uint32_t inputDeactivationPowerThreshold;
11999
+
12000
+ EngateGroup()
12001
+ {
12002
+ clear();
12003
+ }
12004
+
12005
+ void clear()
12006
+ {
12007
+ Group::clear();
12008
+ useVad = false;
12009
+ inputHangMs = 750;
12010
+ inputActivationPowerThreshold = 700;
12011
+ inputDeactivationPowerThreshold = 125;
12012
+ }
12013
+ };
12014
+
12015
+ static void to_json(nlohmann::json& j, const EngateGroup& p)
12016
+ {
12017
+ nlohmann::json g;
12018
+ to_json(g, static_cast<const Group&>(p));
12019
+
12020
+ j = nlohmann::json{
12021
+ TOJSON_IMPL(useVad),
12022
+ TOJSON_IMPL(inputHangMs),
12023
+ TOJSON_IMPL(inputActivationPowerThreshold),
12024
+ TOJSON_IMPL(inputDeactivationPowerThreshold)
12025
+ };
12026
+ }
12027
+ static void from_json(const nlohmann::json& j, EngateGroup& p)
12028
+ {
12029
+ p.clear();
12030
+ from_json(j, static_cast<Group&>(p));
12031
+ getOptional<uint32_t>("inputHangMs", p.inputHangMs, j, 750);
12032
+ getOptional<uint32_t>("inputActivationPowerThreshold", p.inputActivationPowerThreshold, j, 700);
12033
+ getOptional<uint32_t>("inputDeactivationPowerThreshold", p.inputDeactivationPowerThreshold, j, 125);
12034
+ }
12035
+
12036
+ //-----------------------------------------------------------
12037
+ JSON_SERIALIZED_CLASS(EngateGroupsConfiguration)
12038
+ /**
12039
+ * @brief Engate configuration
12040
+ *
12041
+ * Helper C++ class to serialize and de-serialize EngateGroupsConfiguration JSON
12042
+ *
12043
+ * Example: @include[doc] examples/EngateGroupsConfiguration.json
12044
+ *
12045
+ * @see TODO: ConfigurationObjects::EngateGroupsConfiguration
12046
+ */
12047
+ class EngateGroupsConfiguration : public ConfigurationObjectBase
12048
+ {
12049
+ IMPLEMENT_JSON_SERIALIZATION()
12050
+ IMPLEMENT_JSON_DOCUMENTATION(EngateGroupsConfiguration)
12051
+
12052
+ public:
12053
+ /** @brief Array of groups in the configuration */
12054
+ std::vector<EngateGroup> groups;
12055
+
12056
+ EngateGroupsConfiguration()
12057
+ {
12058
+ clear();
12059
+ }
12060
+
12061
+ void clear()
12062
+ {
12063
+ groups.clear();
12064
+ }
12065
+ };
12066
+
12067
+ static void to_json(nlohmann::json& j, const EngateGroupsConfiguration& p)
12068
+ {
12069
+ j = nlohmann::json{
12070
+ TOJSON_IMPL(groups)
12071
+ };
12072
+ }
12073
+ static void from_json(const nlohmann::json& j, EngateGroupsConfiguration& p)
12074
+ {
12075
+ p.clear();
12076
+ getOptional<std::vector<EngateGroup>>("groups", p.groups, j);
12077
+ }
12078
+
12079
+ //-----------------------------------------------------------
12080
+ JSON_SERIALIZED_CLASS(EngateServerStatusReportConfiguration)
12081
+ /**
12082
+ * @brief TODO: Configuration for the engate server status report file
12083
+ *
12084
+ * Helper C++ class to serialize and de-serialize EngateServerStatusReportConfiguration JSON
12085
+ *
12086
+ * Example: @include[doc] examples/EngateServerStatusReportConfiguration.json
12087
+ *
12088
+ * @see RallypointServer
12089
+ */
12090
+ class EngateServerStatusReportConfiguration : public ConfigurationObjectBase
12091
+ {
12092
+ IMPLEMENT_JSON_SERIALIZATION()
12093
+ IMPLEMENT_JSON_DOCUMENTATION(EngateServerStatusReportConfiguration)
12094
+
12095
+ public:
12096
+ /** File name to use for the status report. */
12097
+ std::string fileName;
12098
+
12099
+ /** [Optional, Default: 30] The interval at which to write out the status report to file. */
12100
+ int intervalSecs;
12101
+
12102
+ /** [Optional, Default: false] Indicates if status reporting is enabled. */
12103
+ bool enabled;
12104
+
12105
+ /** [Optional, Default: null] Command to be executed every time the status report is produced. */
12106
+ std::string runCmd;
12107
+
12108
+ /** [Optional, Default: false] Indicates whether to include details of each group. */
12109
+ bool includeGroupDetail;
12110
+
12111
+ EngateServerStatusReportConfiguration()
12112
+ {
12113
+ clear();
12114
+ }
12115
+
12116
+ void clear()
12117
+ {
12118
+ fileName.clear();
12119
+ intervalSecs = 60;
12120
+ enabled = false;
12121
+ includeGroupDetail = false;
12122
+ runCmd.clear();
12123
+ }
12124
+ };
12125
+
12126
+ static void to_json(nlohmann::json& j, const EngateServerStatusReportConfiguration& p)
12127
+ {
12128
+ j = nlohmann::json{
12129
+ TOJSON_IMPL(fileName),
12130
+ TOJSON_IMPL(intervalSecs),
12131
+ TOJSON_IMPL(enabled),
12132
+ TOJSON_IMPL(includeGroupDetail),
12133
+ TOJSON_IMPL(runCmd)
12134
+ };
12135
+ }
12136
+ static void from_json(const nlohmann::json& j, EngateServerStatusReportConfiguration& p)
12137
+ {
12138
+ p.clear();
12139
+ getOptional<std::string>("fileName", p.fileName, j);
12140
+ getOptional<int>("intervalSecs", p.intervalSecs, j, 60);
12141
+ getOptional<bool>("enabled", p.enabled, j, false);
12142
+ getOptional<std::string>("runCmd", p.runCmd, j);
12143
+ getOptional<bool>("includeGroupDetail", p.includeGroupDetail, j, false);
12144
+ }
12145
+
12146
+ //-----------------------------------------------------------
12147
+ JSON_SERIALIZED_CLASS(EngateServerInternals)
12148
+ /**
12149
+ * @brief Internal engate server settings
12150
+ *
12151
+ * These settings are used to configure internal parameters.
12152
+ *
12153
+ * Helper C++ class to serialize and de-serialize EngateServerInternals JSON
12154
+ *
12155
+ * Example: @include[doc] examples/EngateServerInternals.json
12156
+ *
12157
+ * @see engageInitialize, ConfigurationObjects::EngateServerConfiguration
12158
+ */
12159
+ class EngateServerInternals : public ConfigurationObjectBase
12160
+ {
12161
+ IMPLEMENT_JSON_SERIALIZATION()
12162
+ IMPLEMENT_JSON_DOCUMENTATION(EngateServerInternals)
12163
+
12164
+ public:
12165
+ /** @brief [Optional] Settings for the EAR's watchdog. */
12166
+ WatchdogSettings watchdog;
12167
+
12168
+ /** @brief [Optional, Default: 1000] Interval at which to run the housekeeper thread. */
12169
+ int housekeeperIntervalMs;
12170
+
12171
+ /** @brief [Optional] Low-level tuning */
12172
+ TuningSettings tuning;
12173
+
12174
+ EngateServerInternals()
12175
+ {
12176
+ clear();
12177
+ }
12178
+
12179
+ void clear()
12180
+ {
12181
+ watchdog.clear();
12182
+ tuning.clear();
12183
+ housekeeperIntervalMs = 1000;
12184
+ }
12185
+ };
12186
+
12187
+ static void to_json(nlohmann::json& j, const EngateServerInternals& p)
12188
+ {
12189
+ j = nlohmann::json{
12190
+ TOJSON_IMPL(watchdog),
12191
+ TOJSON_IMPL(housekeeperIntervalMs),
12192
+ TOJSON_IMPL(tuning)
12193
+ };
12194
+ }
12195
+ static void from_json(const nlohmann::json& j, EngateServerInternals& p)
12196
+ {
12197
+ p.clear();
12198
+ getOptional<WatchdogSettings>("watchdog", p.watchdog, j);
12199
+ getOptional<int>("housekeeperIntervalMs", p.housekeeperIntervalMs, j, 1000);
12200
+ getOptional<TuningSettings>("tuning", p.tuning, j);
12201
+ }
12202
+
12203
+ //-----------------------------------------------------------
12204
+ JSON_SERIALIZED_CLASS(EngateServerConfiguration)
12205
+ /**
12206
+ * @brief Configuration for the engate server
12207
+ *
12208
+ * Helper C++ class to serialize and de-serialize EngateServerConfiguration JSON
12209
+ *
12210
+ * Example: @include[doc] examples/EngateServerConfiguration.json
12211
+ *
12212
+ */
12213
+ class EngateServerConfiguration : public ConfigurationObjectBase
12214
+ {
12215
+ IMPLEMENT_JSON_SERIALIZATION()
12216
+ IMPLEMENT_JSON_DOCUMENTATION(EngateServerConfiguration)
12217
+
12218
+ public:
12219
+
12220
+ /** @brief A unqiue identifier for the EAR server */
12221
+ std::string id;
12222
+
12223
+ /** @brief Number of seconds between checks to see if the service configuration has been updated. Default is 60.*/
12224
+ int serviceConfigurationFileCheckSecs;
12225
+
12226
+ /** @brief Name of a file containing the ear configuration. */
12227
+ std::string groupsConfigurationFileName;
12228
+
12229
+ /** @brief Command-line to execute that returns a configuration */
12230
+ std::string groupsConfigurationFileCommand;
12231
+
12232
+ /** @brief Number of seconds between checks to see if the configuration has been updated. Default is 60.*/
12233
+ int groupsConfigurationFileCheckSecs;
12234
+
12235
+ /** @brief Details for producing a status report. @see EngateServerStatusReportConfiguration */
12236
+ EngateServerStatusReportConfiguration statusReport;
12237
+
12238
+ /** @brief Details concerning the server's interaction with an external health-checker such as a load-balancer. @see ExternalHealthCheckResponder */
12239
+ ExternalHealthCheckResponder externalHealthCheckResponder;
12240
+
12241
+ /** @brief Internal settings */
12242
+ EngateServerInternals internals;
12243
+
12244
+ /** @brief Path to the certificate store */
12245
+ std::string certStoreFileName;
12246
+
12247
+ /** @brief Hex password for the certificate store (if any) */
12248
+ std::string certStorePasswordHex;
12249
+
12250
+ /** @brief The policy to be used for the underlying Engage Engine */
12251
+ EnginePolicy enginePolicy;
12252
+
12253
+ /** @brief Name to use for signalling a configuration check */
12254
+ std::string configurationCheckSignalName;
12255
+
12256
+ /** @brief [Optional] Settings for the FIPS crypto. */
12257
+ FipsCryptoSettings fipsCrypto;
12258
+
12259
+ /** @brief [Optional] Settings for NSM. */
12260
+ NsmConfiguration nsm;
12261
+
12262
+ EngateServerConfiguration()
12263
+ {
12264
+ clear();
12265
+ }
12266
+
12267
+ void clear()
12268
+ {
12269
+ id.clear();
12270
+ serviceConfigurationFileCheckSecs = 60;
12271
+ groupsConfigurationFileName.clear();
12272
+ groupsConfigurationFileCommand.clear();
12273
+ groupsConfigurationFileCheckSecs = 60;
12274
+ statusReport.clear();
12275
+ externalHealthCheckResponder.clear();
12276
+ internals.clear();
12277
+ certStoreFileName.clear();
12278
+ certStorePasswordHex.clear();
12279
+ enginePolicy.clear();
12280
+ configurationCheckSignalName = "rts.9a164fa.${id}";
12281
+ fipsCrypto.clear();
12282
+ nsm.clear();
12283
+ }
12284
+ };
12285
+
12286
+ static void to_json(nlohmann::json& j, const EngateServerConfiguration& p)
12287
+ {
12288
+ j = nlohmann::json{
12289
+ TOJSON_IMPL(id),
12290
+ TOJSON_IMPL(serviceConfigurationFileCheckSecs),
12291
+ TOJSON_IMPL(groupsConfigurationFileName),
12292
+ TOJSON_IMPL(groupsConfigurationFileCommand),
12293
+ TOJSON_IMPL(groupsConfigurationFileCheckSecs),
12294
+ TOJSON_IMPL(statusReport),
12295
+ TOJSON_IMPL(externalHealthCheckResponder),
12296
+ TOJSON_IMPL(internals),
12297
+ TOJSON_IMPL(certStoreFileName),
12298
+ TOJSON_IMPL(certStorePasswordHex),
12299
+ TOJSON_IMPL(enginePolicy),
12300
+ TOJSON_IMPL(configurationCheckSignalName),
12301
+ TOJSON_IMPL(fipsCrypto),
12302
+ TOJSON_IMPL(nsm)
12303
+ };
12304
+ }
12305
+ static void from_json(const nlohmann::json& j, EngateServerConfiguration& p)
12306
+ {
12307
+ p.clear();
12308
+ getOptional<std::string>("id", p.id, j);
12309
+ getOptional<int>("serviceConfigurationFileCheckSecs", p.serviceConfigurationFileCheckSecs, j, 60);
12310
+ getOptional<std::string>("groupsConfigurationFileName", p.groupsConfigurationFileName, j);
12311
+ getOptional<std::string>("groupsConfigurationFileCommand", p.groupsConfigurationFileCommand, j);
12312
+ getOptional<int>("groupsConfigurationFileCheckSecs", p.groupsConfigurationFileCheckSecs, j, 60);
12313
+ getOptional<EngateServerStatusReportConfiguration>("statusReport", p.statusReport, j);
12314
+ getOptional<ExternalHealthCheckResponder>("externalHealthCheckResponder", p.externalHealthCheckResponder, j);
12315
+ getOptional<EngateServerInternals>("internals", p.internals, j);
12316
+ getOptional<std::string>("certStoreFileName", p.certStoreFileName, j);
12317
+ getOptional<std::string>("certStorePasswordHex", p.certStorePasswordHex, j);
12318
+ j.at("enginePolicy").get_to(p.enginePolicy);
12319
+ getOptional<std::string>("configurationCheckSignalName", p.configurationCheckSignalName, j, "rts.9a164fa.${id}");
12320
+ getOptional<FipsCryptoSettings>("fipsCrypto", p.fipsCrypto, j);
12321
+ getOptional<NsmConfiguration>("nsm", p.nsm, j);
12322
+ }
12323
+
11873
12324
  //-----------------------------------------------------------
11874
12325
  static inline void dumpExampleConfigurations(const char *path)
11875
12326
  {
@@ -292,6 +292,12 @@ typedef struct _EngageEvents_t
292
292
 
293
293
  /** @brief Fired whenever the previously-registered high-resolution timer interval ticks. 'tickType' is 1, 2, or 3 for pre-tick, tick, and post-tick respectively */
294
294
  // void (* _Nullable PFN_ENGAGE_ON_HIGH_RESOLUTION_TIMER_TICK)(uint32_t tickType, uint32_t ticksSoFarLow, uint32_t ticksSoFarHigh, const char * _Nullable eventExtraJson);
295
+
296
+ /** @brief Fired on a group-by-group pcm power report */
297
+ void (* _Nullable PFN_ENGAGE_ENGINE_GROUP_BY_GROUP_PCM_POWER_LEVEL_REPORT)(const char * _Nullable eventExtraJson);
298
+
299
+ /** @brief Fired on an audio device event */
300
+ void (* _Nullable PFN_ENGAGE_ENGINE_AUDIO_DEVICE_EVENT)(const char * _Nullable eventExtraJson);
295
301
  } EngageEvents_t;
296
302
  /** @} */
297
303
 
@@ -1781,6 +1787,22 @@ ENGAGE_API int engageRegisterForHighResolutionTimerNative(uint32_t durationMs, P
1781
1787
  ENGAGE_API int engageUnregisterFromHighResolutionTimerNative(void);
1782
1788
  #endif
1783
1789
 
1790
+ /**
1791
+ * @brief [ASYNC] Begins tracking of input and output PCM power for the group
1792
+ *
1793
+ * @param id The ID of the group on which to start pcm power tracking
1794
+ * @return ENGAGE_RESULT_OK if the submission request was successful
1795
+ */
1796
+ ENGAGE_API int engageBeginGroupPcmPowerTracking(const char * _Nonnull id);
1797
+
1798
+ /**
1799
+ * @brief [ASYNC] End tracking of input and output PCM power for the group
1800
+ *
1801
+ * @param id The ID of the group on which to end pcm power tracking
1802
+ * @return ENGAGE_RESULT_OK if the submission request was successful
1803
+ */
1804
+ ENGAGE_API int engageEndGroupPcmPowerTracking(const char * _Nonnull id);
1805
+
1784
1806
  #endif
1785
1807
 
1786
1808
  #ifdef __cplusplus
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.249.90890017",
3
+ "version": "1.251.90910019",
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"