23 #ifndef RDMNET_CPP_CONTROLLER_H_
24 #define RDMNET_CPP_CONTROLLER_H_
29 #include "etcpal/common.h"
34 #include "rdm/cpp/uid.h"
35 #include "rdm/cpp/message.h"
134 ETCPAL_UNUSED_ARG(controller_handle);
135 ETCPAL_UNUSED_ARG(scope_handle);
136 ETCPAL_UNUSED_ARG(list);
162 ETCPAL_UNUSED_ARG(controller_handle);
163 ETCPAL_UNUSED_ARG(cmd);
214 uint32_t new_software_version_id,
215 const char* new_manufacturer_label,
216 const char* new_device_model_description,
217 const char* new_software_version_label,
218 const char* new_device_label);
220 uint32_t new_software_version_id,
239 uint8_t* rdm_response_buf =
nullptr);
250 const char* new_scope_id_str,
254 const Scope& new_scope_config,
259 const DestinationAddr& destination,
262 const uint8_t* data =
nullptr,
263 uint8_t data_len = 0);
265 const DestinationAddr& destination,
267 const uint8_t* data =
nullptr,
268 uint8_t data_len = 0);
270 const DestinationAddr& destination,
272 const uint8_t* data =
nullptr,
273 uint8_t data_len = 0);
280 const SavedRdmCommand& received_cmd,
281 const uint8_t* response_data =
nullptr,
282 size_t response_data_len = 0);
284 const SavedRdmCommand& received_cmd,
285 rdm_nack_reason_t nack_reason);
289 const uint8_t* data =
nullptr,
290 size_t data_len = 0);
293 const uint8_t* response_data =
nullptr,
294 uint8_t response_data_len = 0);
308 RdmData my_rdm_data_;
310 RdmCommandHandler* rdm_cmd_handler_{
nullptr};
311 NotifyHandler* notify_{
nullptr};
326 static_cast<Controller::NotifyHandler*
>(context)->HandleConnectedToBroker(controller_handle, scope_handle, *info);
337 static_cast<Controller::NotifyHandler*
>(context)->HandleBrokerConnectFailed(controller_handle, scope_handle, *info);
348 static_cast<Controller::NotifyHandler*
>(context)->HandleDisconnectedFromBroker(controller_handle, scope_handle,
353 extern "C" inline void ControllerLibCbClientListUpdate(
rdmnet_controller_t controller_handle,
361 static_cast<Controller::NotifyHandler*
>(context)->HandleClientListUpdate(controller_handle, scope_handle,
366 extern "C" inline void ControllerLibCbRdmResponseReceived(
rdmnet_controller_t controller_handle,
373 static_cast<Controller::NotifyHandler*
>(context)->HandleRdmResponse(controller_handle, scope_handle, *resp);
377 extern "C" inline void ControllerLibCbStatusReceived(
rdmnet_controller_t controller_handle,
382 if (status && context)
384 static_cast<Controller::NotifyHandler*
>(context)->HandleRptStatus(controller_handle, scope_handle, *status);
388 extern "C" inline void ControllerLibCbResponderIdsReceived(
rdmnet_controller_t controller_handle,
395 static_cast<Controller::NotifyHandler*
>(context)->HandleResponderIdsReceived(controller_handle, scope_handle,
400 extern "C" inline void ControllerLibCbRdmCommandReceived(
rdmnet_controller_t controller_handle,
408 *response =
static_cast<Controller::RdmCommandHandler*
>(context)
409 ->HandleRdmCommand(controller_handle, scope_handle, *cmd)
414 extern "C" inline void ControllerLibCbLlrpRdmCommandReceived(
rdmnet_controller_t controller_handle,
422 static_cast<Controller::RdmCommandHandler*
>(context)->HandleLlrpRdmCommand(controller_handle, *cmd).get();
441 : cid(new_cid), uid(rdm::Uid::DynamicUidRequest(manufacturer_id))
448 return (!cid.IsNull() && (uid.IsStatic() || uid.IsDynamicUidRequest()));
453 uint32_t new_software_version_id,
454 const char* new_manufacturer_label,
455 const char* new_device_model_description,
456 const char* new_software_version_label,
457 const char* new_device_label)
458 : model_id(new_model_id)
459 , software_version_id(new_software_version_id)
460 , manufacturer_label(new_manufacturer_label)
461 , device_model_description(new_device_model_description)
462 , software_version_label(new_software_version_label)
463 , device_label(new_device_label)
469 uint32_t new_software_version_id,
474 : model_id(new_model_id)
475 , software_version_id(new_software_version_id)
476 , manufacturer_label(new_manufacturer_label)
477 , device_model_description(new_device_model_description)
478 , software_version_label(new_software_version_label)
479 , device_label(new_device_label)
486 return ((!manufacturer_label.empty()) && (!device_model_description.empty()) && (!software_version_label.empty()) &&
487 (!device_label.empty()));
515 internal::ControllerLibCbConnected,
516 internal::ControllerLibCbConnectFailed,
517 internal::ControllerLibCbDisconnected,
518 internal::ControllerLibCbClientListUpdate,
519 internal::ControllerLibCbRdmResponseReceived,
520 internal::ControllerLibCbStatusReceived,
521 internal::ControllerLibCbResponderIdsReceived,
525 nullptr,
nullptr,
nullptr,
nullptr
572 uint8_t* rdm_response_buf)
578 rdm_cmd_handler_ = &rdm_handler;
584 internal::ControllerLibCbConnected,
585 internal::ControllerLibCbConnectFailed,
586 internal::ControllerLibCbDisconnected,
587 internal::ControllerLibCbClientListUpdate,
588 internal::ControllerLibCbRdmResponseReceived,
589 internal::ControllerLibCbStatusReceived,
590 internal::ControllerLibCbResponderIdsReceived,
594 internal::ControllerLibCbRdmCommandReceived,
595 internal::ControllerLibCbLlrpRdmCommandReceived,
666 return AddScope(
id.c_str(), static_broker_addr);
694 return AddScope(E133_DEFAULT_SCOPE, static_broker_addr);
726 const char* new_scope_id_str,
748 const Scope& new_scope_config,
794 param_id, data, data_len, &seq_num);
914 const uint8_t* response_data,
915 size_t response_data_len)
932 rdm_nack_reason_t nack_reason)
950 uint16_t raw_nack_reason)
953 static_cast<rdm_nack_reason_t
>(raw_nack_reason));
986 const uint8_t* response_data,
987 uint8_t response_data_len)
1019 static_cast<rdm_nack_reason_t
>(raw_nack_reason));
1032 return my_rdm_data_;
1045 return rdm_cmd_handler_;
1054 std::string scope_id(E133_SCOPE_STRING_PADDED_LENGTH, 0);
1059 return Scope(scope_id, static_broker_addr);
1068 ETCPAL_UNUSED_ARG(new_data);
T back_inserter(T... args)
constexpr const EtcPalSockAddr & get() const noexcept
constexpr const EtcPalUuid & get() const noexcept
Information about a failed connection to a broker delivered to an RDMnet callback function.
Definition: client.h:219
Information about a successful connection to a broker delivered to an RDMnet callback function.
Definition: client.h:149
Information about a disconnect event from a broker delivered to an RDMnet callback function.
Definition: client.h:337
A base class for a class that receives notification callbacks from a controller.
Definition: controller.h:71
virtual void HandleBrokerConnectFailed(Handle controller_handle, ScopeHandle scope_handle, const ClientConnectFailedInfo &info)=0
A connection attempt failed between a controller and a broker.
virtual void HandleRdmResponse(Handle controller_handle, ScopeHandle scope_handle, const RdmResponse &resp)=0
An RDM response has been received.
virtual void HandleClientListUpdate(Handle controller_handle, ScopeHandle scope_handle, client_list_action_t list_action, const RptClientList &list)=0
A client list update has been received from a broker.
virtual void HandleRptStatus(Handle controller_handle, ScopeHandle scope_handle, const RptStatus &status)=0
An RPT status message has been received in response to a previously-sent RDM command.
virtual void HandleConnectedToBroker(Handle controller_handle, ScopeHandle scope_handle, const ClientConnectedInfo &info)=0
A controller has successfully connected to a broker.
virtual void HandleDisconnectedFromBroker(Handle controller_handle, ScopeHandle scope_handle, const ClientDisconnectedInfo &info)=0
A controller which was previously connected to a broker has disconnected.
virtual void HandleResponderIdsReceived(Handle controller_handle, ScopeHandle scope_handle, const DynamicUidAssignmentList &list)
A set of previously-requested mappings of dynamic UIDs to responder IDs has been received.
Definition: controller.h:130
A base class for a class that receives RDM commands addressed to a controller.
Definition: controller.h:145
virtual RdmResponseAction HandleRdmCommand(Handle controller_handle, ScopeHandle scope_handle, const RdmCommand &cmd)=0
An RDM command has been received addressed to a controller.
virtual RdmResponseAction HandleLlrpRdmCommand(Handle controller_handle, const llrp::RdmCommand &cmd)
An RDM command has been received over LLRP, addressed to a controller.
Definition: controller.h:160
An instance of RDMnet controller functionality.
Definition: controller.h:59
etcpal::Error SendRdmAck(ScopeHandle scope_handle, const SavedRdmCommand &received_cmd, const uint8_t *response_data=nullptr, size_t response_data_len=0)
Send an acknowledge (ACK) response to an RDM command received by a controller.
Definition: controller.h:912
void Shutdown(rdmnet_disconnect_reason_t disconnect_reason=kRdmnetDisconnectShutdown)
Shut down this controller and deallocate resources.
Definition: controller.h:624
etcpal::Expected< uint32_t > SendGetCommand(ScopeHandle scope_handle, const DestinationAddr &destination, uint16_t param_id, const uint8_t *data=nullptr, uint8_t data_len=0)
Send an RDM GET command from a controller on a scope.
Definition: controller.h:812
etcpal::Error Startup(NotifyHandler ¬ify_handler, const Settings &settings, const RdmData &rdm_data)
Allocate resources and start up this controller with the given configuration.
Definition: controller.h:501
etcpal::Error ChangeSearchDomain(const char *new_search_domain, rdmnet_disconnect_reason_t disconnect_reason)
Change the controller's DNS search domain.
Definition: controller.h:767
etcpal::Error SendRdmUpdate(ScopeHandle scope_handle, uint16_t param_id, const uint8_t *data=nullptr, size_t data_len=0)
Send an asynchronous RDM GET response to update the value of a local parameter.
Definition: controller.h:967
etcpal::Error SendLlrpNack(const llrp::SavedRdmCommand &received_cmd, rdm_nack_reason_t nack_reason)
Send a negative acknowledge (NACK) response to an LLRP RDM command received by a controller.
Definition: controller.h:1001
etcpal::Error RequestClientList(ScopeHandle scope_handle)
Request a client list from a broker.
Definition: controller.h:861
etcpal::Error SendRdmNack(ScopeHandle scope_handle, const SavedRdmCommand &received_cmd, rdm_nack_reason_t nack_reason)
Send a negative acknowledge (NACK) response to an RDM command received by a controller.
Definition: controller.h:930
Handle handle() const
Retrieve the handle of a controller instance.
Definition: controller.h:1023
rdmnet_controller_t Handle
A handle type used by the RDMnet library to identify controller instances.
Definition: controller.h:62
Controller & operator=(Controller &&other)=default
Move a controller instance.
etcpal::Expected< ScopeHandle > AddDefaultScope(const etcpal::SockAddr &static_broker_addr=etcpal::SockAddr{})
Shortcut to add the default RDMnet scope to a controller instance.
Definition: controller.h:692
etcpal::Expected< ScopeHandle > AddScope(const char *id, const etcpal::SockAddr &static_broker_addr=etcpal::SockAddr{})
Add a new scope to this controller instance.
Definition: controller.h:641
etcpal::Error RemoveScope(ScopeHandle scope_handle, rdmnet_disconnect_reason_t disconnect_reason)
Remove a previously-added scope from this controller instance.
Definition: controller.h:705
etcpal::Expected< uint32_t > SendSetCommand(ScopeHandle scope_handle, const DestinationAddr &destination, uint16_t param_id, const uint8_t *data=nullptr, uint8_t data_len=0)
Send an RDM SET command from a controller on a scope.
Definition: controller.h:838
const RdmData & rdm_data() const
Retrieve the RDM data that this controller was configured with on startup.
Definition: controller.h:1030
void UpdateRdmData(const RdmData &new_data)
Update the data used to identify this controller to other controllers.
Definition: controller.h:1065
Controller::NotifyHandler * notify_handler() const
Retrieve the Controller::NotifyHandler reference that this controller was configured with.
Definition: controller.h:1036
etcpal::Error SendLlrpAck(const llrp::SavedRdmCommand &received_cmd, const uint8_t *response_data=nullptr, uint8_t response_data_len=0)
Send an acknowledge (ACK) response to an LLRP RDM command received by a controller.
Definition: controller.h:985
etcpal::Error RequestResponderIds(ScopeHandle scope_handle, const rdm::Uid *uids, size_t num_uids)
Request mappings from dynamic UIDs to Responder IDs (RIDs).
Definition: controller.h:876
etcpal::Error ChangeScope(ScopeHandle scope_handle, const char *new_scope_id_str, rdmnet_disconnect_reason_t disconnect_reason, const etcpal::SockAddr &new_static_broker_addr=etcpal::SockAddr{})
Change the configuration of a scope on a controller.
Definition: controller.h:725
Controller(Controller &&other)=default
Move a controller instance.
etcpal::Expected< Scope > scope(ScopeHandle scope_handle) const
Retrieve the scope configuration associated with a given scope handle.
Definition: controller.h:1052
static constexpr Handle kInvalidHandle
An invalid Handle value.
Definition: controller.h:64
Controller::RdmCommandHandler * rdm_command_handler() const
Retrieve the Controller::RdmCommandHandler reference that this controller was configured with.
Definition: controller.h:1043
etcpal::Expected< uint32_t > SendRdmCommand(ScopeHandle scope_handle, const DestinationAddr &destination, rdmnet_command_class_t command_class, uint16_t param_id, const uint8_t *data=nullptr, uint8_t data_len=0)
Send an RDM command from a controller on a scope.
Definition: controller.h:785
A destination address for an RDM command in RDMnet's RPT protocol.
Definition: client.h:70
constexpr const RdmnetDestinationAddr & get() const noexcept
Get a const reference to the underlying C type.
Definition: client.h:130
A list of mappings from dynamic UIDs to responder IDs received from an RDMnet broker.
Definition: dynamic_uid.h:98
An RDM command received over RDMnet and delivered to an RDMnet callback function.
Definition: rdm_command.h:43
A class representing a synchronous action to take in response to a received RDM command.
Definition: common.h:106
static RdmResponseAction SendNack(rdm_nack_reason_t nack_reason)
Send an RDM NACK with a reason code.
Definition: common.h:131
An RDM response received over RDMnet and delivered to an RDMnet callback function.
Definition: rdm_response.h:47
A list of RPT client entries.
Definition: rpt_client.h:88
An RPT status message received over RDMnet and delivered to an RDMnet callback function.
Definition: rpt_status.h:42
An RDM command received over RDMnet by a local component and saved for a later response.
Definition: rdm_command.h:87
ETCPAL_CONSTEXPR_14 RdmnetSavedRdmCommand & get() noexcept
Get a mutable reference to the underlying C type.
Definition: rdm_command.h:374
An RDMnet scope configuration.
Definition: client.h:460
const etcpal::SockAddr & static_broker_addr() const noexcept
The static broker address associated with this scope.
Definition: client.h:515
const std::string & id_string() const noexcept
The ID string of this scope.
Definition: client.h:506
An RDM command received over LLRP and delivered to an RDMnet callback function.
Definition: llrp_rdm_command.h:46
An RDM command received over LLRP by a local component and saved for a later response.
Definition: llrp_rdm_command.h:91
ETCPAL_CONSTEXPR_14 LlrpSavedRdmCommand & get() noexcept
Get a mutable reference to the underlying C type.
Definition: llrp_rdm_command.h:391
Definitions for the RDMnet Controller API.
C++ wrapper for RDMnet client API definitions.
C++ wrapper for the RDMnet init/deinit functions.
RDMnet C++ message type definitions.
rdmnet_disconnect_reason_t
Disconnect reason defines for the BrokerDisconnectMsg.
Definition: common.h:85
rdmnet_command_class_t
An RDM command class, for RDMnet purposes.
Definition: common.h:350
client_list_action_t
How to apply the client entries to the existing client list in a client_list_update_received callback...
Definition: client.h:50
int rdmnet_client_scope_t
A handle to a scope that an RDMnet client participates in.
Definition: client.h:41
@ kRdmnetDisconnectShutdown
The remote component is shutting down.
Definition: common.h:87
etcpal_error_t rdmnet_controller_change_scope(rdmnet_controller_t controller_handle, rdmnet_client_scope_t scope_handle, const RdmnetScopeConfig *new_scope_config, rdmnet_disconnect_reason_t disconnect_reason)
Change the configuration of a scope on a controller.
Definition: controller.c:412
etcpal_error_t rdmnet_controller_create(const RdmnetControllerConfig *config, rdmnet_controller_t *handle)
Create a new instance of RDMnet controller functionality.
Definition: controller.c:249
etcpal_error_t rdmnet_controller_send_llrp_ack(rdmnet_controller_t controller_handle, const LlrpSavedRdmCommand *received_cmd, const uint8_t *response_data, uint8_t response_data_len)
Send an LLRP RDM ACK response from a controller.
Definition: controller.c:788
etcpal_error_t rdmnet_controller_send_rdm_ack(rdmnet_controller_t controller_handle, rdmnet_client_scope_t scope_handle, const RdmnetSavedRdmCommand *received_cmd, const uint8_t *response_data, size_t response_data_len)
Send an RDM ACK response from a controller on a scope.
Definition: controller.c:690
etcpal_error_t rdmnet_controller_send_rdm_update(rdmnet_controller_t controller_handle, rdmnet_client_scope_t scope_handle, uint16_t subdevice, uint16_t param_id, const uint8_t *data, size_t data_len)
Send an asynchronous RDM GET response to update the value of a local parameter.
Definition: controller.c:758
etcpal_error_t rdmnet_controller_add_scope(rdmnet_controller_t controller_handle, const RdmnetScopeConfig *scope_config, rdmnet_client_scope_t *scope_handle)
Add a new scope to a controller instance.
Definition: controller.c:321
etcpal_error_t rdmnet_controller_destroy(rdmnet_controller_t controller_handle, rdmnet_disconnect_reason_t reason)
Destroy a controller instance.
Definition: controller.c:287
etcpal_error_t rdmnet_controller_send_set_command(rdmnet_controller_t controller_handle, rdmnet_client_scope_t scope_handle, const RdmnetDestinationAddr *destination, uint16_t param_id, const uint8_t *data, uint8_t data_len, uint32_t *seq_num)
Send an RDM SET command from a controller on a scope.
Definition: controller.c:653
etcpal_error_t rdmnet_controller_request_client_list(rdmnet_controller_t controller_handle, rdmnet_client_scope_t scope_handle)
Request a client list from a broker.
Definition: controller.c:503
#define RDMNET_CONTROLLER_INVALID
An invalid RDMnet controller handle value.
Definition: controller.h:56
etcpal_error_t rdmnet_controller_send_get_command(rdmnet_controller_t controller_handle, rdmnet_client_scope_t scope_handle, const RdmnetDestinationAddr *destination, uint16_t param_id, const uint8_t *data, uint8_t data_len, uint32_t *seq_num)
Send an RDM GET command from a controller on a scope.
Definition: controller.c:612
etcpal_error_t rdmnet_controller_request_responder_ids(rdmnet_controller_t controller_handle, rdmnet_client_scope_t scope_handle, const RdmUid *uids, size_t num_uids)
Request a set of responder IDs corresponding with dynamic responder UIDs from a broker.
Definition: controller.c:532
etcpal_error_t rdmnet_controller_change_search_domain(rdmnet_controller_t controller_handle, const char *new_search_domain, rdmnet_disconnect_reason_t disconnect_reason)
Change the controller's DNS search domain.
Definition: controller.c:475
etcpal_error_t rdmnet_controller_get_scope(rdmnet_controller_t controller_handle, rdmnet_client_scope_t scope_handle, char *scope_str_buf, EtcPalSockAddr *static_broker_addr)
Retrieve the scope configuration of a previously-added scope.
Definition: controller.c:444
etcpal_error_t rdmnet_controller_send_rdm_command(rdmnet_controller_t controller_handle, rdmnet_client_scope_t scope_handle, const RdmnetDestinationAddr *destination, rdmnet_command_class_t command_class, uint16_t param_id, const uint8_t *data, uint8_t data_len, uint32_t *seq_num)
Send an RDM command from a controller on a scope.
Definition: controller.c:570
etcpal_error_t rdmnet_controller_send_rdm_nack(rdmnet_controller_t controller_handle, rdmnet_client_scope_t scope_handle, const RdmnetSavedRdmCommand *received_cmd, rdm_nack_reason_t nack_reason)
Send an RDM NACK response from a controller on a scope.
Definition: controller.c:723
etcpal_error_t rdmnet_controller_remove_scope(rdmnet_controller_t controller_handle, rdmnet_client_scope_t scope_handle, rdmnet_disconnect_reason_t reason)
Remove a previously-added scope from a controller instance.
Definition: controller.c:381
etcpal_error_t rdmnet_controller_send_llrp_nack(rdmnet_controller_t controller_handle, const LlrpSavedRdmCommand *received_cmd, rdm_nack_reason_t nack_reason)
Send an LLRP RDM NACK response from a controller.
Definition: controller.c:815
#define RDMNET_CONTROLLER_RDM_DATA_DEFAULT_INIT
A default-value initializer for an RdmnetControllerRdmData struct.
Definition: controller.h:259
int rdmnet_controller_t
A handle to an RDMnet controller.
Definition: controller.h:54
rdmnet_client_scope_t ScopeHandle
A handle to a scope that an RDMnet client participates in.
Definition: client.h:447
A namespace which contains all C++ language definitions in the RDMnet library.
Definition: broker.h:45
An RDM command received from a remote LLRP Manager.
Definition: message.h:439
Information provided by the library about an unsuccessful RDMnet client connection.
Definition: client.h:164
Information provided by the library about a successful RDMnet client connection.
Definition: client.h:151
Information provided by the library about an RDMnet client connection that disconnected after a succe...
Definition: client.h:196
A set of information that defines the startup parameters of an RDMnet Controller.
Definition: controller.h:266
size_t num_llrp_netints
(optional) The size of the llrp_netints array.
Definition: controller.h:315
const RdmnetMcastNetintId * llrp_netints
(optional) A set of network interfaces to use for the LLRP target associated with this controller.
Definition: controller.h:313
A list of mappings from dynamic UIDs to responder IDs received from an RDMnet broker.
Definition: message.h:245
An RDMnet RDM command received by this component.
Definition: message.h:53
An RDMnet RDM response received by a local component.
Definition: message.h:90
A structure that represents a list of RPT Client Entries.
Definition: message.h:398
An RDMnet RPT status message received by a local component.
Definition: message.h:193
A set of configuration information for a single scope in which an RDMnet client is participating.
Definition: client.h:224
This structure should not be manipulated directly - use the macros to access it:
Definition: common.h:214
A set of initial identifying RDM data to use for a controller.
Definition: controller.h:194
bool IsValid() const
Whether this data is valid (all string members are non-empty).
Definition: controller.h:484
uint16_t product_category
A number representing the product's primary function.
Definition: controller.h:203
uint16_t model_id
A number representing the product model which implements the controller.
Definition: controller.h:197
bool device_label_settable
Whether the library should allow device_label to be changed remotely.
Definition: controller.h:209
std::string device_model_description
The name of the product model which implements the controller.
Definition: controller.h:206
uint32_t software_version_id
A number representing the version of the controller software.
Definition: controller.h:200
std::string manufacturer_label
The manufacturer name of the controller.
Definition: controller.h:205
std::string device_label
A user-settable name for this controller instance.
Definition: controller.h:208
std::string software_version_label
The software version of the controller as a string.
Definition: controller.h:207
RdmData()=default
Create an empty, invalid structure by default - must be filled in before passing to Controller::Start...
A set of configuration settings that a controller needs to initialize.
Definition: controller.h:171
std::vector< RdmnetMcastNetintId > llrp_netints
(optional) A set of network interfaces to use for the LLRP target associated with this controller.
Definition: controller.h:181
bool create_llrp_target
(optional) Whether to create an LLRP target associated with this controller.
Definition: controller.h:177
etcpal::Uuid cid
The controller's Component Identifier (CID).
Definition: controller.h:172
rdm::Uid uid
The controller's RDM UID. For a dynamic UID, use rdm::Uid::DynamicUidRequest().
Definition: controller.h:173
bool IsValid() const
Determine whether a controller Settings instance contains valid data for RDMnet operation.
Definition: controller.h:446
Settings()=default
Create an empty, invalid data structure by default.
std::string search_domain
(optional) The controller's search domain for discovering brokers.
Definition: controller.h:174