RDMnet  HEAD (unstable)
Implementation of ANSI E1.33 (RDMnet)
View other versions:
discovery.h
Go to the documentation of this file.
1 /******************************************************************************
2  * Copyright 2020 ETC Inc.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  ******************************************************************************
16  * This file is a part of RDMnet. For more information, go to:
17  * https://github.com/ETCLabs/RDMnet
18  *****************************************************************************/
19 
28 #ifndef RDMNET_DISCOVERY_H_
29 #define RDMNET_DISCOVERY_H_
30 
31 #include <stddef.h>
32 #include <stdint.h>
33 #include <string.h>
34 #include "etcpal/error.h"
35 #include "etcpal/uuid.h"
36 #include "etcpal/socket.h"
37 #include "rdmnet/common.h"
38 #include "rdmnet/defs.h"
39 
61 #ifdef __cplusplus
62 extern "C" {
63 #endif
64 
71 typedef struct RdmnetDnsTxtRecordItem
72 {
73  const char* key;
74  const uint8_t* value;
75  uint8_t value_len;
77 
79 typedef struct RdmnetBrokerRegisterRef* rdmnet_registered_broker_t;
81 #define RDMNET_REGISTERED_BROKER_INVALID NULL
82 
84 typedef struct RdmnetBrokerDiscInfo
85 {
89  RdmUid uid;
99  const char* service_instance_name;
101  uint16_t port;
105  const unsigned int* listen_addr_netints;
109  const char* scope;
111  const char* model;
113  const char* manufacturer;
114 
120 
134  const char* assigned_service_instance_name,
135  void* context);
136 
144  int platform_error,
145  void* context);
146 
154  const RdmnetBrokerDiscInfo* broker_info,
155  void* context);
156 
165  const char* scope,
166  const char* service_instance_name,
167  void* context);
168 
175 {
180  void* context;
182 
185 {
186  /************************************************************************************************
187  * Required Values
188  ***********************************************************************************************/
189 
193  RdmUid uid;
204  uint16_t port;
209  const unsigned int* netints;
211  size_t num_netints;
213  const char* scope;
215  const char* model;
217  const char* manufacturer;
218 
223 
227 
237 #define RDMNET_BROKER_REGISTER_CONFIG_DEFAULT_INIT \
238  { \
239  {{0}}, {0}, NULL, 0, NULL, 0, NULL, NULL, NULL, NULL, 0, { NULL, NULL, NULL, NULL, NULL } \
240  }
241 
243 typedef struct RdmnetScopeMonitorRef* rdmnet_scope_monitor_t;
245 #define RDMNET_SCOPE_MONITOR_INVALID NULL
246 
259  const RdmnetBrokerDiscInfo* broker_info,
260  void* context);
261 
269  const RdmnetBrokerDiscInfo* updated_broker_info,
270  void* context);
271 
280  const char* scope,
281  const char* service_instance_name,
282  void* context);
283 
290 {
294  void* context;
296 
299 {
300  /************************************************************************************************
301  * Required Values
302  ***********************************************************************************************/
303 
305  const char* scope;
308 
309  /************************************************************************************************
310  * Optional Values
311  ***********************************************************************************************/
312 
314  const char* domain;
316 
326 #define RDMNET_SCOPE_MONITOR_CONFIG_DEFAULT_INIT \
327  { \
328  E133_DEFAULT_SCOPE, {NULL, NULL, NULL}, NULL \
329  }
330 
333  RdmnetDiscBrokerRegisteredCallback broker_registered,
334  RdmnetDiscBrokerRegisterFailedCallback broker_register_failed,
335  RdmnetDiscOtherBrokerFoundCallback other_broker_found,
336  RdmnetDiscOtherBrokerLostCallback other_broker_lost,
337  void* context);
338 
341  RdmnetDiscBrokerFoundCallback broker_found,
342  RdmnetDiscBrokerUpdatedCallback broker_udpated,
343  RdmnetDiscBrokerLostCallback broker_lost,
344  void* context);
345 
347  rdmnet_scope_monitor_t* handle,
348  int* platform_specific_error);
351 
355 
356 #ifdef __cplusplus
357 }
358 #endif
359 
364 #endif /* RDMNET_DISCOVERY_H_ */
Functions and definitions common to all RDMnet API modules.
etcpal_error_t
void(* RdmnetDiscBrokerRegisterFailedCallback)(rdmnet_registered_broker_t handle, int platform_error, void *context)
Broker registration has failed.
Definition: discovery.h:143
void(* RdmnetDiscOtherBrokerLostCallback)(rdmnet_registered_broker_t handle, const char *scope, const char *service_instance_name, void *context)
A broker which was previously detected on the same scope as a registered broker has been lost.
Definition: discovery.h:164
struct RdmnetBrokerDiscInfo RdmnetBrokerDiscInfo
void rdmnet_scope_monitor_config_init(RdmnetScopeMonitorConfig *config)
Initialize an RdmnetScopeMonitorConfig with default values for the optional config options.
Definition: common.c:171
struct RdmnetDiscBrokerCallbacks RdmnetDiscBrokerCallbacks
etcpal_error_t rdmnet_disc_start_monitoring(const RdmnetScopeMonitorConfig *config, rdmnet_scope_monitor_t *handle, int *platform_specific_error)
Begin monitoring an RDMnet scope for brokers.
Definition: common.c:221
void rdmnet_broker_register_config_set_callbacks(RdmnetBrokerRegisterConfig *config, RdmnetDiscBrokerRegisteredCallback broker_registered, RdmnetDiscBrokerRegisterFailedCallback broker_register_failed, RdmnetDiscOtherBrokerFoundCallback other_broker_found, RdmnetDiscOtherBrokerLostCallback other_broker_lost, void *context)
Set the callbacks in an RDMnet broker register configuration structure.
Definition: common.c:139
void(* RdmnetDiscBrokerLostCallback)(rdmnet_scope_monitor_t handle, const char *scope, const char *service_instance_name, void *context)
A previously-discovered RDMnet broker has been lost on a monitored scope.
Definition: discovery.h:279
etcpal_error_t rdmnet_disc_register_broker(const RdmnetBrokerRegisterConfig *config, rdmnet_registered_broker_t *handle)
Register an RDMnet broker on a scope.
Definition: common.c:333
void rdmnet_disc_stop_monitoring(rdmnet_scope_monitor_t handle)
Stop monitoring an RDMnet scope for brokers.
Definition: common.c:277
void(* RdmnetDiscOtherBrokerFoundCallback)(rdmnet_registered_broker_t handle, const RdmnetBrokerDiscInfo *broker_info, void *context)
Another broker has been found on the scope on which this broker is registered.
Definition: discovery.h:153
void rdmnet_scope_monitor_config_set_callbacks(RdmnetScopeMonitorConfig *config, RdmnetDiscBrokerFoundCallback broker_found, RdmnetDiscBrokerUpdatedCallback broker_udpated, RdmnetDiscBrokerLostCallback broker_lost, void *context)
Set the callbacks in an RDMnet scope monitor configuration structure.
Definition: common.c:188
struct RdmnetScopeMonitorCallbacks RdmnetScopeMonitorCallbacks
void(* RdmnetDiscBrokerUpdatedCallback)(rdmnet_scope_monitor_t handle, const RdmnetBrokerDiscInfo *updated_broker_info, void *context)
Updated information has been received for a previously-discovered RDMnet broker.
Definition: discovery.h:268
void(* RdmnetDiscBrokerFoundCallback)(rdmnet_scope_monitor_t handle, const RdmnetBrokerDiscInfo *broker_info, void *context)
An RDMnet broker has been found on a monitored scope.
Definition: discovery.h:258
struct RdmnetScopeMonitorRef * rdmnet_scope_monitor_t
Definition: discovery.h:243
void(* RdmnetDiscBrokerRegisteredCallback)(rdmnet_registered_broker_t handle, const char *assigned_service_instance_name, void *context)
A broker has been registered successfully with the DNS-SD service.
Definition: discovery.h:133
struct RdmnetDnsTxtRecordItem RdmnetDnsTxtRecordItem
An extra key/value pair in a broker's DNS TXT record that does not have a standard RDMnet use.
void rdmnet_disc_unregister_broker(rdmnet_registered_broker_t handle)
Unegister an RDMnet broker on a scope.
Definition: common.c:392
struct RdmnetScopeMonitorConfig RdmnetScopeMonitorConfig
struct RdmnetBrokerRegisterRef * rdmnet_registered_broker_t
Definition: discovery.h:79
void rdmnet_disc_stop_monitoring_all(void)
Stop monitoring all RDMnet scopes for brokers.
Definition: common.c:296
struct RdmnetBrokerRegisterConfig RdmnetBrokerRegisterConfig
void rdmnet_broker_register_config_init(RdmnetBrokerRegisterConfig *config)
Initialize an RdmnetBrokerRegisterConfig with default values for the optional config options.
Definition: common.c:119
Definition: discovery.h:85
int e133_version
Definition: discovery.h:91
size_t num_additional_txt_items
Definition: discovery.h:118
const unsigned int * listen_addr_netints
Definition: discovery.h:105
EtcPalUuid cid
Definition: discovery.h:87
const RdmnetDnsTxtRecordItem * additional_txt_items
Definition: discovery.h:116
const char * manufacturer
Definition: discovery.h:113
uint16_t port
Definition: discovery.h:101
const char * scope
Definition: discovery.h:109
RdmUid uid
Definition: discovery.h:89
const EtcPalIpAddr * listen_addrs
Definition: discovery.h:103
const char * model
Definition: discovery.h:111
size_t num_listen_addrs
Definition: discovery.h:107
const char * service_instance_name
The broker's service instance name.
Definition: discovery.h:99
Definition: discovery.h:185
size_t num_additional_txt_items
Definition: discovery.h:222
EtcPalUuid cid
Definition: discovery.h:191
const RdmnetDnsTxtRecordItem * additional_txt_items
Definition: discovery.h:220
size_t num_netints
Definition: discovery.h:211
const char * manufacturer
Definition: discovery.h:217
uint16_t port
Definition: discovery.h:204
const unsigned int * netints
An array of network interface indexes on which the broker should respond to mDNS queries.
Definition: discovery.h:209
RdmnetDiscBrokerCallbacks callbacks
Definition: discovery.h:225
const char * scope
Definition: discovery.h:213
RdmUid uid
Definition: discovery.h:193
const char * model
Definition: discovery.h:215
const char * service_instance_name
The broker's requested service instance name.
Definition: discovery.h:202
Definition: discovery.h:175
RdmnetDiscOtherBrokerLostCallback other_broker_lost
Definition: discovery.h:179
RdmnetDiscBrokerRegisteredCallback broker_registered
Definition: discovery.h:176
RdmnetDiscBrokerRegisterFailedCallback broker_register_failed
Definition: discovery.h:177
void * context
Definition: discovery.h:180
RdmnetDiscOtherBrokerFoundCallback other_broker_found
Definition: discovery.h:178
An extra key/value pair in a broker's DNS TXT record that does not have a standard RDMnet use.
Definition: discovery.h:72
const uint8_t * value
Definition: discovery.h:74
const char * key
Definition: discovery.h:73
uint8_t value_len
Definition: discovery.h:75
Definition: discovery.h:290
RdmnetDiscBrokerLostCallback broker_lost
Definition: discovery.h:293
RdmnetDiscBrokerUpdatedCallback broker_updated
Definition: discovery.h:292
void * context
Definition: discovery.h:294
RdmnetDiscBrokerFoundCallback broker_found
Definition: discovery.h:291
Definition: discovery.h:299
const char * domain
Definition: discovery.h:314
const char * scope
Definition: discovery.h:305
RdmnetScopeMonitorCallbacks callbacks
Definition: discovery.h:307