| /* cti-services.h |
| * |
| * Copyright (c) 2020-2023 Apple Inc. All rights reserved. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| * |
| * This code adds border router support to 3rd party HomeKit Routers as part of Appleās commitment to the CHIP project. |
| * |
| * Concise Thread Interface for Thread Border router control. |
| */ |
| |
| #ifndef __CTI_SERVICES_H__ |
| #define __CTI_SERVICES_H__ |
| |
| #include <netinet/in.h> |
| #include <arpa/inet.h> |
| typedef void *run_context_t; |
| #include "srp.h" |
| |
| #if (defined(__GNUC__) && (__GNUC__ >= 4)) |
| #define DNS_SERVICES_EXPORT __attribute__((visibility("default"))) |
| #else |
| #define DNS_SERVICES_EXPORT |
| #endif |
| |
| #include "cti-common.h" |
| |
| typedef enum _offmesh_route_origin { |
| offmesh_route_origin_user, |
| offmesh_route_origin_ncp, |
| } offmesh_route_origin_t; |
| |
| typedef enum _offmesh_route_preference { |
| offmesh_route_preference_low = -1, |
| offmesh_route_preference_medium, |
| offmesh_route_preference_high, |
| } offmesh_route_preference_t; |
| |
| typedef struct _cti_service { |
| uint64_t enterprise_number; |
| uint16_t service_type; |
| uint16_t service_version; |
| uint16_t rloc16; |
| uint16_t service_id; |
| uint8_t *NONNULL service; |
| uint8_t *NONNULL server; |
| size_t service_length; |
| size_t server_length; |
| int ref_count; |
| int flags; // E.g., kCTIFlag_NCP |
| } cti_service_t; |
| |
| typedef struct _cti_service_vec { |
| size_t num; |
| int ref_count; |
| cti_service_t *NULLABLE *NONNULL services; |
| } cti_service_vec_t; |
| |
| typedef struct _cti_prefix { |
| struct in6_addr prefix; |
| int prefix_length; |
| int metric; |
| int flags; |
| int rloc; |
| bool stable; |
| bool ncp; |
| int ref_count; |
| } cti_prefix_t; |
| |
| // Bits in the prefix flags |
| #define kCTIPriorityShift 14 |
| #define kCTIPreferredShift 13 |
| #define kCTISLAACShift 12 |
| #define kCTIDHCPShift 11 |
| #define kCTIConfigureShift 10 |
| #define kCTIDefaultRouteShift 9 |
| #define kCTIOnMeshShift 8 |
| #define kCTIDNSShift 7 |
| #define kCTIDPShift 6 |
| |
| // Priority values |
| #define kCTIPriorityMedium 0 |
| #define kCTIPriorityHigh 1 |
| #define kCTIPriorityReserved 2 |
| #define kCTIPriorityLow 3 |
| |
| // Macros to fetch values from the prefix flags |
| #define CTI_PREFIX_FLAGS_PRIORITY(flags) (((flags) >> kCTIPriorityShift) & 3) |
| #define CTI_PREFIX_FLAGS_PREFERRED(flags) (((flags) >> kCTIPreferredShift) & 1) |
| #define CTI_PREFIX_FLAGS_SLAAC(flags) (((flags) >> kCTISLAACShift) & 1) |
| #define CTI_PREFIX_FLAGS_DHCP(flags) (((flags) >> kCTIDHCPShift) & 1) |
| #define CTI_PREFIX_FLAGS_CONFIGURE(flags) (((flags) >> kCTIConfigureShift) & 1) |
| #define CTI_PREFIX_FLAGS_DEFAULT_ROUTE(flags) (((flags) >> kCTIDefaultRouteShift) & 1) |
| #define CTI_PREFIX_FLAGS_ON_MESH(flags) (((flags) >> kCTIOnMeshShift) & 1) |
| #define CTI_PREFIX_FLAGS_DNS(flags) (((flags) >> kCTIDNSShift) & 1) |
| #define CTI_PREFIX_DLAGS_DP(flags) (((flags) >> kCTIDPShift) & 1) |
| |
| // Macros to set values in the prefix flags |
| #define CTI_PREFIX_FLAGS_PRIORITY_SET(flags, value) ((flags) = \ |
| (((flags) & ~(3 << kCTIPriorityShift)) | \ |
| (((value) & 3) << kCTIPriorityShift))) |
| #define CTI_PREFIX_FLAGS_PREFERRED_SET(flags, value) ((flags) = \ |
| (((flags) & ~(1 << kCTIPreferredShift)) | \ |
| (((value) & 1) << kCTIPreferredShift))) |
| #define CTI_PREFIX_FLAGS_SLAAC_SET(flags, value) ((flags) = \ |
| (((flags) & ~(1 << kCTISLAACShift)) | \ |
| (((value) & 1) << kCTISLAACShift))) |
| #define CTI_PREFIX_FLAGS_DHCP_SET(flags, value) ((flags) = \ |
| (((flags) & ~(1 << kCTIDHCPShift)) | \ |
| (((value) & 1) << kCTIDHCPShift))) |
| #define CTI_PREFIX_FLAGS_CONFIGURE_SET(flags, value) ((flags) = \ |
| (((flags) & ~(1 << kCTIConfigureShift)) | \ |
| (((value) & 1) << kCTIConfigureShift))) |
| #define CTI_PREFIX_FLAGS_DEFAULT_ROUTE_SET(flags, value) ((flags) = \ |
| (((flags) & ~(1 << kCTIDefaultRouteShift)) | \ |
| (((value) & 1) << kCTIDefaultRouteShift))) |
| #define CTI_PREFIX_FLAGS_ON_MESH_SET(flags, value) ((flags) = \ |
| (((flags) & ~(1 << kCTIOnMeshShift)) | \ |
| (((value) & 1) << kCTIOnMeshShift))) |
| #define CTI_PREFIX_FLAGS_DNS_SET(flags, value) ((flags) = \ |
| (((flags) & ~(1 << kCTIDNSShift)) | \ |
| (((value) & 1) << kCTIDNSShift))) |
| #define CTI_PREFIX_DLAGS_DP_SET(flags, value) ((flags) = \ |
| (((flags) & ~(1 << kCTIDPShift)) | \ |
| (((value) & 1) << kCTIDPShift))) |
| |
| typedef struct _cti_prefix_vec { |
| size_t num; |
| int ref_count; |
| cti_prefix_t *NULLABLE *NONNULL prefixes; |
| } cti_prefix_vec_t; |
| |
| typedef struct _cti_route { |
| struct in6_addr prefix; |
| int prefix_length; |
| offmesh_route_origin_t origin; |
| bool nat64; |
| bool stable; |
| offmesh_route_preference_t preference; |
| int rloc; |
| bool next_hop_is_host; |
| int ref_count; |
| } cti_route_t; |
| |
| typedef struct _cti_route_vec { |
| size_t num; |
| int ref_count; |
| cti_route_t *NULLABLE *NONNULL routes; |
| } cti_route_vec_t; |
| |
| typedef struct srp_server_state srp_server_t; |
| |
| /* cti_reply: |
| * |
| * A general reply mechanism to indicate success or failure for a cti call that doesn't |
| * return any data. |
| * |
| * cti_reply parameters: |
| * |
| * context: The context that was passed to the cti service call to which this is a callback. |
| * |
| * status: Will be kCTIStatus_NoError on success, otherwise will indicate the |
| * failure that occurred. |
| * |
| */ |
| |
| typedef void |
| (*cti_reply_t)(void *NULLABLE context, cti_status_t status); |
| |
| /* cti_string_property_reply: Callback for get calls that fetch a string property |
| * |
| * Called exactly once in response to a cti_get_tunnel_name() or cti_get_on_link_prefix() call, either with an error or |
| * with a string containing the response. |
| * |
| * cti_reply parameters: |
| * |
| * context: The context that was passed to the cti service call to which this is a callback. |
| * |
| * tunnel_name: If error is kCTIStatus_NoError, a string containing the name of the Thread |
| * interface. |
| * |
| * status: Will be kCTIStatus_NoError on success, otherwise will indicate the |
| * failure that occurred. |
| * |
| */ |
| |
| typedef void |
| (*cti_string_property_reply_t)(void *NULLABLE context, const char *NONNULL string, |
| cti_status_t status); |
| |
| /* cti_get_tunnel_name |
| * |
| * Get the name of the tunnel that wpantund is presenting as the Thread network interface. |
| * The tunnel name is passed to the reply callback if the request succeeds; otherwise an error |
| * is either returned immediately or returned to the callback. |
| * |
| * context: An anonymous pointer that will be passed along to the callback when |
| * an event occurs. |
| * |
| * callback: CallBack function for the client that indicates success or failure. |
| * |
| * client_queue: Queue the client wants to schedule the callback on |
| * |
| * return value: Returns kCTIStatus_NoError when no error otherwise returns an error code indicating the |
| * error that occurred. Note: A return value of kCTIStatus_NoError does not mean that the |
| * request succeeded, merely that it was successfully started. |
| * |
| */ |
| |
| #define cti_get_tunnel_name(server, context, callback, client_queue) \ |
| cti_get_tunnel_name_(server, context, callback, client_queue, __FILE__, __LINE__) |
| DNS_SERVICES_EXPORT cti_status_t |
| cti_get_tunnel_name_(srp_server_t *NULLABLE server, void *NULLABLE context, cti_string_property_reply_t NONNULL callback, |
| run_context_t NULLABLE client_queue, const char *NONNULL file, int line); |
| |
| /* cti_get_mesh_local_prefix |
| * |
| * Get the mesh_local IPv6 prefix that is in use on the Thread mesh. The prefix is passed to the reply callback if the |
| * request succeeds; otherwise an error is either returned immediately or returned to the callback. |
| * |
| * context: An anonymous pointer that will be passed along to the callback when |
| * an event occurs. |
| * |
| * callback: CallBack function for the client that indicates success or failure. |
| * |
| * client_queue: Queue the client wants to schedule the callback on |
| * |
| * return value: Returns kCTIStatus_NoError when no error otherwise returns an error code indicating the |
| * error that occurred. Note: A return value of kCTIStatus_NoError does not mean that the |
| * request succeeded, merely that it was successfully started. |
| * |
| */ |
| |
| #define cti_get_mesh_local_prefix(server, ref, context, callback, client_queue) \ |
| cti_get_mesh_local_prefix_(server, ref, context, callback, client_queue, __FILE__, __LINE__) |
| DNS_SERVICES_EXPORT cti_status_t |
| cti_get_mesh_local_prefix_(srp_server_t *NULLABLE server, cti_connection_t NULLABLE *NULLABLE ref, |
| void *NULLABLE context, cti_string_property_reply_t NONNULL callback, |
| run_context_t NULLABLE client_queue, const char *NONNULL file, int line); |
| |
| /* cti_get_mesh_local_address |
| * |
| * Get the mesh_local IPv6 address that is in use on this device on the Thread mesh. The address is passed to the reply |
| * callback if the request succeeds; otherwise an error is either returned immediately or returned to the callback. |
| * |
| * ref: A pointer to a reference to the connection is stored through ref if ref is not NULL. |
| * When events are no longer needed, call cti_discontinue_events() on the returned pointer. |
| * |
| * context: An anonymous pointer that will be passed along to the callback when |
| * an event occurs. |
| * |
| * callback: CallBack function for the client that indicates success or failure. |
| * |
| * client_queue: Queue the client wants to schedule the callback on |
| * |
| * return value: Returns kCTIStatus_NoError when no error otherwise returns an error code indicating the |
| * error that occurred. Note: A return value of kCTIStatus_NoError does not mean that the |
| * request succeeded, merely that it was successfully started. |
| * |
| */ |
| |
| #define cti_get_mesh_local_address(server, ref, context, callback, client_queue) \ |
| cti_get_mesh_local_address_(server, ref, context, callback, client_queue, __FILE__, __LINE__) |
| DNS_SERVICES_EXPORT cti_status_t |
| cti_get_mesh_local_address_(srp_server_t *NULLABLE server, cti_connection_t NULLABLE *NULLABLE ref, |
| void *NULLABLE context, cti_string_property_reply_t NONNULL callback, |
| run_context_t NULLABLE client_queue, const char *NONNULL file, int line); |
| |
| /* |
| * cti_service_vec_create |
| * |
| * creates a service array vector of specified length |
| * |
| * num_services: Number of service slots available in the service vector. |
| * |
| * return value: NULL, if the call failed; otherwise a service vector capable of containing the requested number of |
| * services. |
| */ |
| cti_service_vec_t *NULLABLE |
| cti_service_vec_create_(size_t num_services, const char *NONNULL file, int line); |
| #define cti_service_vec_create(num_services) cti_service_vec_create_(num_services, __FILE__, __LINE__) |
| |
| /* |
| * cti_service_vec_release |
| * |
| * decrements the reference count on the provided service vector and, if it reaches zero, finalizes the service vector, |
| * which calls cti_service_release on each service in the vector, potentially also finalizing them. |
| * |
| * num_services: Number of service slots available in the service vector. |
| * |
| * return value: NULL, if the call failed; otherwise a service vector capable of containing the requested number of |
| * services. |
| */ |
| |
| void |
| cti_service_vec_release_(cti_service_vec_t *NONNULL services, const char *NONNULL file, int line); |
| #define cti_service_vec_release(services) cti_service_vec_release_(services, __FILE__, __LINE__) |
| |
| /* |
| * cti_service_create |
| * |
| * Creates a service containing the specified information. service and server are retained, and will be |
| * freed using free() when the service object is finalized. Caller must not retain or free these values, and |
| * they must be allocated on the malloc heap. |
| * |
| * enterprise_number: The enterprise number for this service. |
| * |
| * service_type: The service type, from the service data. |
| * |
| * service_version: The service version, from the service data. |
| * |
| * server: Server information for this service, stored in network byte order. Format depends on service type. |
| * |
| * server_length: Length of server information in bytes. |
| * |
| * flags: Thread network status flags, e.g. NCP versue User |
| * |
| * return value: NULL, if the call failed; otherwise a service object containing the specified state. |
| */ |
| |
| cti_service_t *NULLABLE |
| cti_service_create_(uint64_t enterprise_number, uint16_t rloc16, uint16_t service_type, uint16_t service_version, |
| uint8_t *NONNULL service, size_t service_length, uint8_t *NONNULL server, size_t server_length, |
| uint16_t service_id, int flags, const char *NONNULL file, int line); |
| #define cti_service_create(enterprise_number, rloc16, service_type, service_version, service, service_length, \ |
| server, server_length, service_id, flags) \ |
| cti_service_create_(enterprise_number, rloc16, service_type, service_version, service, service_length, \ |
| server, server_length, service_id, flags, __FILE__, __LINE__) |
| |
| /* |
| * cti_service_vec_release |
| * |
| * decrements the reference count on the provided service vector and, if it reaches zero, finalizes the service vector, |
| * which calls cti_service_release on each service in the vector, potentially also finalizing them. |
| * |
| * services: The service vector to release |
| * |
| * return value: NULL, if the call failed; otherwise a service vector capable of containing the requested number of |
| * services. |
| */ |
| |
| void |
| cti_service_release_(cti_service_t *NONNULL service, const char *NONNULL file, int line); |
| #define cti_service_release(services) cti_service_release(service, __FILE__, __LINE__) |
| |
| /* cti_service_reply: Callback from cti_get_service_list() |
| * |
| * Called when an error occurs during processing of the cti_get_service_list call, or when data |
| * is available in response to the call. |
| * |
| * In the case of an error, the callback will not be called again, and the caller is responsible for |
| * releasing the connection state and restarting if needed. |
| * |
| * The callback will be called once immediately upon success, and once again each time the service list |
| * is updated. If the callback wishes to retain either the cti_service_vec_t or any of the elements |
| * of that vector, the appropriate retain function should be called; when the object is no longer needed, |
| * the corresponding release call must be called. |
| * |
| * cti_reply parameters: |
| * |
| * context: The context that was passed to the cti service call to which this is a callback. |
| * |
| * services: If status is kCTIStatus_NoError, a cti_service_vec_t containing the list of services |
| * provided in the update. |
| * |
| * status: Will be kCTIStatus_NoError if the service list request is successful, or |
| * will indicate the failure that occurred. |
| * |
| */ |
| |
| typedef void |
| (*cti_service_reply_t)(void *NULLABLE context, cti_service_vec_t *NULLABLE services, cti_status_t status); |
| |
| /* cti_get_service_list |
| * |
| * Requests wpantund to immediately send the current list of services published in the Thread network data. |
| * Whenever the service list is updated, the callback will be called again with the new information. A |
| * return value of kCTIStatus_NoError means that the caller can expect the reply callback to be called at least |
| * once. Any other error status means that the request could not be sent, and the callback will never be |
| * called. |
| * |
| * To discontinue receiving service add/remove callbacks, the calling program should call |
| * cti_connection_ref_deallocate on the conn_ref returned by a successful call to get_service_list(); |
| * |
| * ref: A pointer to a reference to the connection is stored through ref if ref is not NULL. |
| * When events are no longer needed, call cti_discontinue_events() on the returned pointer. |
| * |
| * context: An anonymous pointer that will be passed along to the callback when |
| * an event occurs. |
| * |
| * callback: CallBack function for the client that indicates success or failure. |
| * If the get_services call fails, response will be NULL and status |
| * will indicate what went wrong. No further callbacks can be expected |
| * after this. If the request succeeds, then the callback will be called |
| * once immediately with the current service list, and then again whenever |
| * the service list is updated. |
| * |
| * client_queue: Queue the client wants to schedule the callback on |
| * |
| * return value: Returns kCTIStatus_NoError when no error otherwise returns an error code indicating |
| * the error that occurred. Note: A return value of kCTIStatus_NoError does not mean |
| * that the request succeeded, merely that it was successfully started. |
| * |
| */ |
| |
| #define cti_get_service_list(server, ref, context, callback, client_queue) \ |
| cti_get_service_list_(server, ref, context, callback, client_queue, __FILE__, __LINE__) |
| DNS_SERVICES_EXPORT cti_status_t |
| cti_get_service_list_(srp_server_t *NULLABLE server, cti_connection_t NULLABLE *NULLABLE ref, void *NULLABLE context, |
| cti_service_reply_t NONNULL callback, run_context_t NULLABLE client_queue, const char *NONNULL file, int line); |
| |
| /* |
| * cti_service_vec_create |
| * |
| * creates a service array vector of specified length |
| * |
| * num_prefixes: Number of prefix slots available in the prefix vector. |
| * |
| * return value: NULL, if the call failed; otherwise a prefix vector capable of containing the requested number of |
| * prefixes. |
| */ |
| cti_prefix_vec_t *NULLABLE |
| cti_prefix_vec_create_(size_t num_prefixes, const char *NONNULL file, int line); |
| #define cti_prefix_vec_create(num_prefixes) cti_prefix_vec_create_(num_prefixes, __FILE__, __LINE__) |
| |
| /* |
| * cti_prefix_vec_release |
| * |
| * decrements the reference count on the provided prefix vector and, if it reaches zero, finalizes the prefix vector, |
| * which calls cti_prefix_release on each prefix in the vector, potentially also finalizing them. |
| * |
| * num_prefixes: Number of prefix slots available in the prefix vector. |
| * |
| * return value: NULL, if the call failed; otherwise a prefix vector capable of containing the requested number of |
| * prefixes. |
| */ |
| |
| void |
| cti_prefix_vec_release_(cti_prefix_vec_t *NONNULL prefixes, const char *NONNULL file, int line); |
| #define cti_prefix_vec_release(prefixes) cti_prefix_vec_release_(prefixes, __FILE__, __LINE__) |
| |
| /* |
| * cti_prefix_create |
| * |
| * Creates a prefix containing the specified information. prefix and server are retained, and will be |
| * freed using free() when the prefix object is finalized. Caller must not retain or free these values, and |
| * they must be allocated on the malloc heap. |
| * |
| * enterprise_number: The enterprise number for this prefix. |
| * |
| * prefix_type: The prefix type, from the prefix data. |
| * |
| * prefix_version: The prefix version, from the prefix data. |
| * |
| * server: Server information for this prefix, stored in network byte order. Format depends on prefix type. |
| * |
| * server_length: Length of server information in bytes. |
| * |
| * flags: Thread network status flags, e.g. NCP versue User |
| * |
| * return value: NULL, if the call failed; otherwise a prefix object containing the specified state. |
| */ |
| |
| cti_prefix_t *NULLABLE |
| cti_prefix_create_(struct in6_addr *NONNULL prefix, int prefix_length, int metric, int flags, int rloc, bool stable, bool ncp, |
| const char *NONNULL file, int line); |
| #define cti_prefix_create(prefix, prefix_length, metric, flags, rloc, stable, ncp) \ |
| cti_prefix_create_(prefix, prefix_length, metric, flags, rloc, stable, ncp, __FILE__, __LINE__) |
| |
| /* |
| * cti_prefix_vec_release |
| * |
| * decrements the reference count on the provided prefix vector and, if it reaches zero, finalizes the prefix vector, |
| * which calls cti_prefix_release on each prefix in the vector, potentially also finalizing them. |
| * |
| * prefixes: The prefix vector to release. |
| * |
| * return value: NULL, if the call failed; otherwise a prefix vector capable of containing the requested number of |
| * prefixes. |
| */ |
| |
| void |
| cti_prefix_release_(cti_prefix_t *NONNULL prefix, const char *NONNULL file, int line); |
| #define cti_prefix_release(prefixes) cti_prefix_release(prefix, __FILE__, __LINE__) |
| |
| /* cti_prefix_reply: Callback from cti_get_prefix_list() |
| * |
| * Called when an error occurs during processing of the cti_get_prefix_list call, or when a prefix |
| * is added or removed. |
| * |
| * In the case of an error, the callback will not be called again, and the caller is responsible for |
| * releasing the connection state and restarting if needed. |
| * |
| * The callback will be called once for each prefix present on the Thread network at the time |
| * get_prefix_list() is first called, and then again whenever a prefix is added or removed. |
| * |
| * cti_reply parameters: |
| * |
| * context: The context that was passed to the cti prefix call to which this is a callback. |
| * |
| * prefix_vec: If status is kCTIStatus_NoError, a vector containing all of the prefixes that were reported in |
| * this event. |
| * |
| * status: Will be kCTIStatus_NoError if the prefix list request is successful, or |
| * will indicate the failure that occurred. |
| * |
| */ |
| |
| typedef void |
| (*cti_prefix_reply_t)(void *NULLABLE context, cti_prefix_vec_t *NULLABLE prefixes, cti_status_t status); |
| |
| /* cti_get_prefix_list |
| * |
| * Requests wpantund to immediately send the current list of off-mesh prefixes configured in the Thread |
| * network data. Whenever the prefix list is updated, the callback will be called again with the new |
| * information. A return value of kCTIStatus_NoError means that the caller can expect the reply callback to be |
| * called at least once. Any other error means that the request could not be sent, and the callback will |
| * never be called. |
| * |
| * To discontinue receiving prefix add/remove callbacks, the calling program should call |
| * cti_connection_ref_deallocate on the conn_ref returned by a successful call to get_prefix_list(); |
| * |
| * ref: A pointer to a reference to the connection is stored through ref if ref is not NULL. |
| * When events are no longer needed, call cti_discontinue_events() on the returned pointer. |
| * |
| * context: An anonymous pointer that will be passed along to the callback when |
| * an event occurs. |
| * |
| * callback: CallBack function for the client that indicates success or failure. |
| * |
| * client_queue: Queue the client wants to schedule the callback on |
| * |
| * return value: Returns kCTIStatus_NoError when no error otherwise returns an error code indicating |
| * the error that occurred. Note: A return value of kCTIStatus_NoError does not mean |
| * that the request succeeded, merely that it was successfully started. |
| * |
| */ |
| |
| #define cti_get_prefix_list(server, ref, context, callback, client_queue) \ |
| cti_get_prefix_list_(server, ref, context, callback, client_queue, __FILE__, __LINE__) |
| DNS_SERVICES_EXPORT cti_status_t |
| cti_get_prefix_list_(srp_server_t *NULLABLE server, cti_connection_t NULLABLE *NULLABLE ref, void *NULLABLE context, |
| cti_prefix_reply_t NONNULL callback, run_context_t NULLABLE client_queue, const char *NONNULL file, int line); |
| |
| /* cti_state_reply: Callback from cti_get_state() |
| * |
| * Called when an error occurs during processing of the cti_get_state call, or when network state |
| * information is available. |
| * |
| * In the case of an error, the callback will not be called again, and the caller is responsible for |
| * releasing the connection state and restarting if needed. |
| * |
| * The callback will be called initially to report the network state, and subsequently whenever the |
| * network state changes. |
| * |
| * cti_reply parameters: |
| * |
| * context: The context that was passed to the cti state call to which this is a callback. |
| * |
| * state: The network state. |
| * |
| * status: Will be kCTIStatus_NoError if the prefix list request is successful, or |
| * will indicate the failure that occurred. |
| * |
| */ |
| |
| typedef void |
| (*cti_state_reply_t)(void *NULLABLE context, cti_network_state_t state, cti_status_t status); |
| |
| /* cti_get_state |
| * |
| * Requests wpantund to immediately send the current state of the thread network. Whenever the thread |
| * network state changes, the callback will be called again with the new state. A return value of |
| * kCTIStatus_NoError means that the caller can expect the reply callback to be called at least once. Any |
| * other error means that the request could not be sent, and the callback will never be called. |
| * |
| * To discontinue receiving state change callbacks, the calling program should call |
| * cti_connection_ref_deallocate on the conn_ref returned by a successful call to cti_get_state(); |
| * |
| * ref: A pointer to a reference to the connection is stored through ref if ref is not NULL. |
| * When events are no longer needed, call cti_discontinue_events() on the returned pointer. |
| * |
| * context: An anonymous pointer that will be passed along to the callback when |
| * an event occurs. |
| * |
| * callback: CallBack function for the client that indicates success or failure. |
| * |
| * client_queue: Queue the client wants to schedule the callback on |
| * |
| * return value: Returns kCTIStatus_NoError when no error otherwise returns an error code indicating |
| * the error that occurred. Note: A return value of kCTIStatus_NoError does not mean |
| * that the request succeeded, merely that it was successfully started. |
| */ |
| |
| #define cti_get_state(server, ref, context, callback, client_queue) \ |
| cti_get_state_(server, ref, context, callback, client_queue, __FILE__, __LINE__) |
| DNS_SERVICES_EXPORT cti_status_t |
| cti_get_state_(srp_server_t *NULLABLE server, cti_connection_t NULLABLE *NULLABLE ref, void *NULLABLE context, |
| cti_state_reply_t NONNULL callback, run_context_t NULLABLE client_queue, const char *NONNULL file, int line); |
| |
| /* cti_uint64_property_reply: Callback from cti_get_partition_id() or cti_get_xpanid() |
| * |
| * Called when an error occurs during processing of the cti_get_* call, or when a new value for the requested property |
| * is available. |
| * |
| * In the case of an error, the callback will not be called again, and the caller is responsible for |
| * releasing the connection and restarting if needed. |
| * |
| * The callback will be called initially to report the current value for the property, and subsequently whenever the |
| * property changes. |
| * |
| * cti_uint64_property_reply parameters: |
| * |
| * context: The context that was passed to the cti prefix call to which this is a callback. |
| * |
| * property_value The value of the property (only valid if status is kCTIStatus_NoError). |
| * |
| * status: Will be kCTIStatus_NoError if the partition ID request is successful, or will indicate the failure |
| * that occurred. |
| * |
| */ |
| |
| typedef void |
| (*cti_uint64_property_reply_t)(void *NULLABLE context, uint64_t property_value, cti_status_t status); |
| |
| /* cti_get_partition_id |
| * |
| * Requests wpantund to immediately send the current partition_id of the thread network. Whenever the thread |
| * network partition_id changes, the callback will be called again with the new partition_id. A return value of |
| * kCTIStatus_NoError means that the caller can expect the reply callback to be called at least once. Any |
| * other error means that the request could not be sent, and the callback will never be called. |
| * |
| * To discontinue receiving partition_id change callbacks, the calling program should call |
| * cti_connection_ref_deallocate on the conn_ref returned by a successful call to cti_get_partition_id(); |
| * |
| * ref: A pointer to a reference to the connection is stored through ref if ref is not NULL. |
| * When events are no longer needed, call cti_discontinue_events() on the returned pointer. |
| * |
| * context: An anonymous pointer that will be passed along to the callback when |
| * an event occurs. |
| * callback: CallBack function for the client that indicates success or failure. |
| * |
| * client_queue: Queue the client wants to schedule the callback on |
| * |
| * return value: Returns kCTIStatus_NoError when no error otherwise returns an error code indicating |
| * the error that occurred. Note: A return value of kCTIStatus_NoError does not mean |
| * that the request succeeded, merely that it was successfully started. |
| * |
| */ |
| |
| #define cti_get_partition_id(server, ref, context, callback, client_queue) \ |
| cti_get_partition_id_(server, ref, context, callback, client_queue, __FILE__, __LINE__) |
| DNS_SERVICES_EXPORT cti_status_t |
| cti_get_partition_id_(srp_server_t *NULLABLE server, cti_connection_t NULLABLE *NULLABLE ref, void *NULLABLE context, |
| cti_uint64_property_reply_t NONNULL callback, run_context_t NULLABLE client_queue, |
| const char *NONNULL file, int line); |
| |
| /* cti_get_extended_pan_id |
| * |
| * Requests wpantund to immediately send the current extended_pan_id of the thread network. Whenever the thread |
| * network extended_pan_id changes, the callback will be called again with the new extended_pan_id. A return value of |
| * kCTIStatus_NoError means that the caller can expect the reply callback to be called at least once. Any |
| * other error means that the request could not be sent, and the callback will never be called. |
| * |
| * To discontinue receiving extended_pan_id change callbacks, the calling program should call |
| * cti_connection_ref_deallocate on the conn_ref returned by a successful call to cti_get_extended_pan_id(); |
| * |
| * ref: A pointer to a reference to the connection is stored through ref if ref is not NULL. |
| * When events are no longer needed, call cti_discontinue_events() on the returned pointer. |
| * |
| * context: An anonymous pointer that will be passed along to the callback when |
| * an event occurs. |
| * callback: CallBack function for the client that indicates success or failure. |
| * |
| * client_queue: Queue the client wants to schedule the callback on |
| * |
| * return value: Returns kCTIStatus_NoError when no error otherwise returns an error code indicating |
| * the error that occurred. Note: A return value of kCTIStatus_NoError does not mean |
| * that the request succeeded, merely that it was successfully started. |
| * |
| */ |
| |
| #define cti_get_extended_pan_id(server, ref, context, callback, client_queue) \ |
| cti_get_extended_pan_id_(server, ref, context, callback, client_queue, __FILE__, __LINE__) |
| DNS_SERVICES_EXPORT cti_status_t |
| cti_get_extended_pan_id_(srp_server_t *NULLABLE server, cti_connection_t NULLABLE *NULLABLE ref, void *NULLABLE context, |
| cti_uint64_property_reply_t NONNULL callback, run_context_t NULLABLE client_queue, |
| const char *NONNULL file, int line); |
| |
| /* cti_network_node_type_reply: Callback from cti_get_network_node_type() |
| * |
| * Called when an error occurs during processing of the cti_get_network_node_type call, or when network partition ID |
| * information is available. |
| * |
| * In the case of an error, the callback will not be called again, and the caller is responsible for releasing the |
| * connection network_node_type and restarting if needed. |
| * |
| * The callback will be called initially to report the network partition ID, and subsequently whenever the network |
| * partition ID changes. |
| * |
| * cti_reply parameters: |
| * |
| * context: The context that was passed to the cti prefix call to which this is a callback. |
| * |
| * network_node_type: The network node type, kCTI_NetworkNodeType_Unknown if it is not known. |
| * |
| * status: Will be kCTIStatus_NoError if the partition ID request is successful, or will indicate the failure |
| * that occurred. |
| * |
| */ |
| |
| typedef void |
| (*cti_network_node_type_reply_t)(void *NULLABLE context, cti_network_node_type_t network_node_type, cti_status_t status); |
| |
| /* cti_get_network_node_type |
| * |
| * Requests wpantund to immediately send the current network_node_type of the thread network. Whenever the thread |
| * network network_node_type changes, the callback will be called again with the new network_node_type. A return value of |
| * kCTIStatus_NoError means that the caller can expect the reply callback to be called at least once. Any |
| * other error means that the request could not be sent, and the callback will never be called. |
| * |
| * To discontinue receiving network_node_type change callbacks, the calling program should call |
| * cti_connection_ref_deallocate on the conn_ref returned by a successful call to cti_get_network_node_type(); |
| * |
| * ref: A pointer to a reference to the connection is stored through ref if ref is not NULL. |
| * When events are no longer needed, call cti_discontinue_events() on the returned pointer. |
| * |
| * context: An anonymous pointer that will be passed along to the callback when |
| * an event occurs. |
| * callback: CallBack function for the client that indicates success or failure. |
| * |
| * client_queue: Queue the client wants to schedule the callback on |
| * |
| * return value: Returns kCTIStatus_NoError when no error otherwise returns an error code indicating |
| * the error that occurred. Note: A return value of kCTIStatus_NoError does not mean |
| * that the request succeeded, merely that it was successfully started. |
| * |
| */ |
| |
| #define cti_get_network_node_type(server, ref, context, callback, client_queue) \ |
| cti_get_network_node_type_(server, ref, context, callback, client_queue, __FILE__, __LINE__) |
| DNS_SERVICES_EXPORT cti_status_t |
| cti_get_network_node_type_(srp_server_t *NULLABLE server, cti_connection_t NULLABLE *NULLABLE ref, void *NULLABLE context, |
| cti_network_node_type_reply_t NONNULL callback, run_context_t NULLABLE client_queue, |
| const char *NONNULL file, int line); |
| |
| /* cti_add_service |
| * |
| * Requests wpantund to add the specified service to the thread network data. A return value of |
| * kCTIStatus_NoError means that the caller can expect the reply callback to be called with a success or fail |
| * status exactly one time. Any other error means that the request could not be sent, and the callback will |
| * never be called. |
| * |
| * context: An anonymous pointer that will be passed along to the callback when |
| * an event occurs. |
| * |
| * callback: CallBack function for the client that indicates success or failure. |
| * |
| * client_queue: Queue the client wants to schedule the callback on |
| * |
| * enterprise_number: Contains the enterprise number of the service. |
| * |
| * service_data: Typically four bytes, in network byte order, the first two bytes indicate |
| * the type of service within the enterprise' number space, and the second |
| * two bytes indicate the version number. |
| * |
| * service_data_len: The length of the service data in bytes. |
| * |
| * server_data: Typically four bytes, in network byte order, the first two bytes indicate |
| * the type of service within the enterprise' number space, and the second |
| * two bytes indicate the version number. |
| * |
| * server_data_len: The length of the service data in bytes. |
| * |
| * return value: Returns kCTIStatus_NoError when no error otherwise returns an error code indicating |
| * the error that occurred. Note: A return value of kCTIStatus_NoError does not mean |
| * that the request succeeded, merely that it was successfully started. |
| * |
| */ |
| |
| #define cti_add_service(server, context, callback, client_queue, \ |
| enterprise_number, service_data, service_data_length, server_data, server_data_length) \ |
| cti_add_service_(server, context, callback, client_queue, enterprise_number, \ |
| service_data, service_data_length, server_data, server_data_length, __FILE__, __LINE__) |
| DNS_SERVICES_EXPORT cti_status_t |
| cti_add_service_(srp_server_t *NULLABLE server, void *NULLABLE context, cti_reply_t NONNULL callback, |
| run_context_t NULLABLE client_queue, uint32_t enterprise_number, const uint8_t *NONNULL service_data, |
| size_t service_data_length, const uint8_t *NULLABLE server_data, size_t server_data_length, |
| const char *NONNULL file, int line); |
| |
| /* cti_remove_service |
| * |
| * Requests wpantund to remove the specified service from the thread network data. A return value of |
| * kCTIStatus_NoError means that the caller can expect the reply callback to be called with a success or fail |
| * status exactly one time. Any other error means that the request could not be sent, and the callback will |
| * never be called. |
| * |
| * context: An anonymous pointer that will be passed along to the callback when |
| * an event occurs. |
| * |
| * callback: callback function for the client that indicates success or failure. |
| * |
| * client_queue: Queue the client wants to schedule the callback on |
| * |
| * enterprise_number: Contains the enterprise number of the service. |
| * |
| * service_data: Typically four bytes, in network byte order, the first two bytes indicate |
| * the type of service within the enterprise' number space, and the second |
| * two bytes indicate the version number. |
| * |
| * service_data_len: The length of the service data in bytes. |
| * |
| * return value: Returns kCTIStatus_NoError when no error otherwise returns an error code indicating |
| * the error that occurred. Note: A return value of kCTIStatus_NoError does not mean |
| * that the request succeeded, merely that it was successfully started. |
| */ |
| |
| #define cti_remove_service(server, context, callback, client_queue, \ |
| enterprise_number, service_data, service_data_length) \ |
| cti_remove_service_(server, context, callback, client_queue, \ |
| enterprise_number, service_data, service_data_length, __FILE__, __LINE__) |
| DNS_SERVICES_EXPORT cti_status_t |
| cti_remove_service_(srp_server_t *NULLABLE server, void *NULLABLE context, cti_reply_t NONNULL callback, |
| run_context_t NULLABLE client_queue, uint32_t enterprise_number, const uint8_t *NONNULL service_data, |
| size_t service_data_length, const char *NONNULL file, int line); |
| |
| /* cti_add_prefix |
| * |
| * Requests wpantund to add the specified prefix to the set of off-mesh prefixes configured on the thread |
| * network. A return value of kCTIStatus_NoError means that the caller can expect the reply callback to be |
| * called with a success or fail status exactly one time. Any other error means that the request could not |
| * be sent, and the callback will never be called. |
| * |
| * context: An anonymous pointer that will be passed along to the callback when |
| * an event occurs. |
| * |
| * callback: CallBack function for the client that indicates success or failure. |
| * |
| * client_queue: Queue the client wants to schedule the callback on |
| * |
| * prefix: A pointer to a struct in6_addr. Must not be reatained by the callback. |
| * |
| * prefix_len: The length of the prefix in bits. |
| * |
| * return value: Returns kCTIStatus_NoError when no error otherwise returns an error code indicating |
| * the error that occurred. Note: A return value of kCTIStatus_NoError does not mean |
| * that the request succeeded, merely that it was successfully started. |
| * |
| */ |
| |
| #define cti_add_prefix(server, context, callback, client_queue, \ |
| prefix, prefix_length, on_mesh, preferred, slaac, stable, priority) \ |
| cti_add_prefix_(server, context, callback, client_queue, prefix, prefix_length, \ |
| on_mesh, preferred, slaac, stable, priority, __FILE__, __LINE__) |
| DNS_SERVICES_EXPORT cti_status_t |
| cti_add_prefix_(srp_server_t *NULLABLE server, void *NULLABLE context, cti_reply_t NONNULL callback, run_context_t NULLABLE client_queue, |
| struct in6_addr *NONNULL prefix, int prefix_length, bool on_mesh, bool preferred, bool slaac, |
| bool stable, int priority, const char *NONNULL file, int line); |
| |
| /* cti_remove_prefix |
| * |
| * Requests wpantund to remove the specified prefix from the set of off-mesh prefixes configured on the thread network. |
| * A return value of kCTIStatus_NoError means that the caller can expect the reply callback to be called with a success |
| * or fail status exactly one time. Any other error means that the request could not be sent, and the callback will |
| * never be called. |
| * |
| * context: An anonymous pointer that will be passed along to the callback when |
| * an event occurs. |
| * |
| * callback: CallBack function for the client that indicates success or failure. |
| * |
| * client_queue: Queue the client wants to schedule the callback on |
| * |
| * prefix: A pointer to a struct in6_addr. Must not be reatained by the callback. |
| * |
| * prefix_len: The length of the prefix in bits. |
| * |
| * return value: Returns kCTIStatus_NoError when no error otherwise returns an error code indicating |
| * the error that occurred. Note: A return value of kCTIStatus_NoError does not mean |
| * that the request succeeded, merely that it was successfully started. |
| * |
| */ |
| |
| #define cti_remove_prefix(server, context, callback, client_queue, prefix, prefix_length) \ |
| cti_remove_prefix_(server, context, callback, client_queue, prefix, prefix_length, __FILE__, __LINE__) |
| DNS_SERVICES_EXPORT cti_status_t |
| cti_remove_prefix_(srp_server_t *NULLABLE server, void *NULLABLE context, cti_reply_t NONNULL callback, |
| run_context_t NULLABLE client_queue, struct in6_addr *NONNULL prefix, int prefix_length, |
| const char *NONNULL file, int line); |
| |
| /* cti_add_route |
| * |
| * Requests wpantund to add the specified route on the thread network. |
| * A return value of kCTIStatus_NoError means that the caller can expect the reply callback to be |
| * called with a success or fail status exactly one time. Any other error means that the request could not |
| * be sent, and the callback will never be called. |
| * |
| * context: An anonymous pointer that will be passed along to the callback when |
| * an event occurs. |
| * |
| * callback: CallBack function for the client that indicates success or failure. |
| * |
| * client_queue: Queue the client wants to schedule the callback on |
| * |
| * prefix: A pointer to a struct in6_addr. |
| * |
| * prefix_len: The length of the prefix in bits. |
| * |
| * priority: Route priority (>0 for high, 0 for medium, <0 for low). |
| * |
| * domain_id: Domain id for the route (default is zero). |
| * |
| * stable: True if the route is part of stable network data. |
| * |
| * nat64: True if this is NAT64 prefix. |
| * |
| * return value: Returns kCTIStatus_NoError when no error otherwise returns an error code indicating |
| * the error that occurred. Note: A return value of kCTIStatus_NoError does not mean |
| * that the request succeeded, merely that it was successfully started. |
| * |
| */ |
| |
| #define cti_add_route(server, context, callback, client_queue, \ |
| prefix, prefix_length, priority, domain_id, stable, nat64) \ |
| cti_add_route_(server, context, callback, client_queue, prefix, prefix_length, \ |
| priority, domain_id, stable, nat64, __FILE__, __LINE__) |
| DNS_SERVICES_EXPORT cti_status_t |
| cti_add_route_(srp_server_t *NULLABLE server, void *NULLABLE context, cti_reply_t NONNULL callback, |
| run_context_t NULLABLE client_queue, struct in6_addr *NONNULL prefix, int prefix_length, |
| int priority, int domain_id, bool stable, bool nat64, const char *NONNULL file, int line); |
| |
| /* cti_remove_route |
| * |
| * Requests wpantund to remove the specified route on the thread network. |
| * A return value of kCTIStatus_NoError means that the caller can expect the reply callback to be called with a success |
| * or fail status exactly one time. Any other error means that the request could not be sent, and the callback will |
| * never be called. |
| * |
| * context: An anonymous pointer that will be passed along to the callback when |
| * an event occurs. |
| * |
| * callback: CallBack function for the client that indicates success or failure. |
| * |
| * client_queue: Queue the client wants to schedule the callback on |
| * |
| * prefix: A pointer to a struct in6_addr. |
| * |
| * prefix_len: The length of the prefix in bits. |
| * |
| * domain_id: Domain id for the route (default is zero). |
| * |
| * return value: Returns kCTIStatus_NoError when no error otherwise returns an error code indicating |
| * the error that occurred. Note: A return value of kCTIStatus_NoError does not mean |
| * that the request succeeded, merely that it was successfully started. |
| * |
| */ |
| |
| #define cti_remove_route(server, context, callback, client_queue, prefix, prefix_length, domain_id) \ |
| cti_remove_route_(server, context, callback, client_queue, prefix, prefix_length, domain_id, __FILE__, __LINE__) |
| DNS_SERVICES_EXPORT cti_status_t |
| cti_remove_route_(srp_server_t *NULLABLE server, void *NULLABLE context, cti_reply_t NONNULL callback, |
| run_context_t NULLABLE client_queue, struct in6_addr *NONNULL prefix, int prefix_length, |
| int domain_id, const char *NONNULL file, int line); |
| |
| /* |
| * cti_route_vec_create |
| * |
| * creates a route array vector of specified length |
| * |
| * num_routes: Number of route slots available in the route vector. |
| * |
| * return value: NULL, if the call failed; otherwise a prefix vector capable of containing the |
| * requested number of routes. |
| */ |
| cti_route_vec_t *NULLABLE |
| cti_route_vec_create_(size_t num_routes, const char *NONNULL file, int line); |
| #define cti_route_vec_create(num_routes) cti_route_vec_create_(num_routes, __FILE__, __LINE__) |
| |
| /* |
| * cti_route_vec_release |
| * |
| * decrements the reference count on the provided route vector and, if it reaches zero, finalizes the route vector, |
| * which calls cti_route_release on each route in the vector, potentially also finalizing them. |
| * |
| * num_routes: Number of route slots available in the route vector. |
| * |
| * return value: NULL, if the call failed; otherwise a route vector capable of containing the |
| * requested number of routes. |
| */ |
| |
| void |
| cti_route_vec_release_(cti_route_vec_t *NONNULL routes, const char *NONNULL file, int line); |
| #define cti_route_vec_release(routes) cti_route_vec_release_(routes, __FILE__, __LINE__) |
| |
| /* |
| * cti_route_create |
| * |
| * Creates a cti_route_t containing the specified information. The route is retained, and will be |
| * freed using free() when the route object is finalized. Caller must not retain or free these values, and |
| * they must be allocated on the malloc heap. |
| * |
| * prefix: A pointer to a struct in6_addr. |
| * |
| * prefix_len: The length of the prefix in bits. |
| * |
| * origin: User or ncp. |
| * |
| * nat64: True if this is NAT64 prefix. |
| * |
| * stable: True if the route is part of stable network data. |
| * |
| * preference: Route priority. |
| * |
| * rloc: Routing locator. |
| * |
| * next_hop_is_host: True if next hop is host. |
| * |
| * return value: NULL, if the call failed; otherwise a route object containing the specified state. |
| */ |
| |
| cti_route_t *NULLABLE |
| cti_route_create_(struct in6_addr *NONNULL prefix, int prefix_length, offmesh_route_origin_t origin, |
| bool nat64, bool stable, offmesh_route_preference_t preference, int rloc, |
| bool next_hop_is_host, const char *NONNULL file, int line); |
| #define cti_route_create(prefix, prefix_length, origin, nat64, stable, preference, rloc, next_hop_is_host) \ |
| cti_route_create_(prefix, prefix_length, origin, nat64, stable, preference, rloc, next_hop_is_host, __FILE__, __LINE__) |
| |
| /* |
| * cti_route_release |
| * |
| * Decrements the reference count on the provided route vector and, if it reaches zero, finalizes the route vector, |
| * which calls cti_route_release on each route in the vector, potentially also finalizing them. |
| * |
| * routes: The route vector to release. |
| * |
| * return value: NULL, if the call failed; otherwise a route vector capable of containing the requested number of |
| * routes. |
| */ |
| |
| void |
| cti_route_release_(cti_route_t *NONNULL route, const char *NONNULL file, int line); |
| #define cti_route_release(routes) cti_route_release(route, __FILE__, __LINE__) |
| |
| /* cti_offmesh_route_reply: Callback from cti_get_offmesh_route_list() |
| * |
| * Called when an error occurs during processing of the cti_get_offmesh_route_list call, or when a route |
| * is added or removed. |
| * |
| * In the case of an error, the callback will not be called again, and the caller is responsible for |
| * releasing the connection state and restarting if needed. |
| * |
| * The callback will be called once for each offmesh route present on the Thread network at the time |
| * cti_get_offmesh_prefix_list() is first called, and then again whenever a route is added or removed. |
| * |
| * cti_offmesh_route_reply parameters: |
| * |
| * context: The context that was passed to the cti_get_offmesh_route_list call to which this is a callback. |
| * |
| * route_vec: If status is kCTIStatus_NoError, a vector containing all of the routes that were reported in |
| * this event. |
| * |
| * status: Will be kCTIStatus_NoError if the offmesh route list request is successful, or |
| * will indicate the failure that occurred. |
| * |
| */ |
| |
| typedef void |
| (*cti_offmesh_route_reply_t)(void *NULLABLE context, cti_route_vec_t *NULLABLE routes, cti_status_t status); |
| |
| /* cti_get_offmesh_route_list |
| * |
| * Requests wpantund to immediately send the current list of off-mesh routes configured in the Thread |
| * network data. Whenever the route list is updated, the callback will be called again with the new |
| * information. A return value of kCTIStatus_NoError means that the caller can expect the reply callback to be |
| * called at least once. Any other error means that the request could not be sent, and the callback will |
| * never be called. |
| * |
| * ref: A pointer to a reference to the connection is stored through ref if ref is not NULL. |
| * When events are no longer needed, call cti_discontinue_events() on the returned pointer. |
| * |
| * context: An anonymous pointer that will be passed along to the callback when |
| * an event occurs. |
| * |
| * callback: CallBack function for the client that indicates success or failure. |
| * |
| * client_queue: Queue the client wants to schedule the callback on |
| * |
| * return value: Returns kCTIStatus_NoError when no error otherwise returns an error code indicating |
| * the error that occurred. Note: A return value of kCTIStatus_NoError does not mean |
| * that the request succeeded, merely that it was successfully started. |
| * |
| */ |
| |
| #define cti_get_offmesh_route_list(server, ref, context, callback, client_queue) \ |
| cti_get_offmesh_route_list_(server, ref, context, callback, client_queue, __FILE__, __LINE__) |
| DNS_SERVICES_EXPORT cti_status_t |
| cti_get_offmesh_route_list_(srp_server_t *NULLABLE server, cti_connection_t NULLABLE *NULLABLE ref, |
| void *NULLABLE context, cti_offmesh_route_reply_t NONNULL callback, |
| run_context_t NULLABLE client_queue, const char *NONNULL file, int line); |
| |
| /* cti_onmesh_prefix_reply: Callback from cti_get_onmesh_prefix_list() |
| * |
| * Called when an error occurs during processing of the cti_get_onmesh_prefix_list call, or when a route |
| * is added or removed. |
| * |
| * In the case of an error, the callback will not be called again, and the caller is responsible for |
| * releasing the connection state and restarting if needed. |
| * |
| * The callback will be called once for each offmesh route present on the Thread network at the time |
| * cti_get_offmesh_prefix_list() is first called, and then again whenever a route is added or removed. |
| * |
| * cti_onmesh_prefix_reply parameters: |
| * |
| * context: The context that was passed to the cti_get_onmesh_prefix_list call to which this is a callback. |
| * |
| * prefix_vec: If status is kCTIStatus_NoError, a vector containing all of the prefixes that were reported in |
| * this event. |
| * |
| * status: Will be kCTIStatus_NoError if the onmesh prefix list request is successful, or |
| * will indicate the failure that occurred. |
| * |
| */ |
| |
| typedef void |
| (*cti_onmesh_prefix_reply_t)(void *NULLABLE context, cti_prefix_vec_t *NULLABLE routes, cti_status_t status); |
| |
| /* cti_get_onmesh_prefix_list |
| * |
| * Requests wpantund to immediately send the current list of on-mesh prefixes configured in the Thread |
| * network data. Whenever the prefix list is updated, the callback will be called again with the new |
| * information. A return value of kCTIStatus_NoError means that the caller can expect the reply callback to be |
| * called at least once. Any other error means that the request could not be sent, and the callback will |
| * never be called. |
| * |
| * ref: A pointer to a reference to the connection is stored through ref if ref is not NULL. |
| * When events are no longer needed, call cti_discontinue_events() on the returned pointer. |
| * |
| * context: An anonymous pointer that will be passed along to the callback when |
| * an event occurs. |
| * |
| * callback: CallBack function for the client that indicates success or failure. |
| * |
| * client_queue: Queue the client wants to schedule the callback on |
| * |
| * return value: Returns kCTIStatus_NoError when no error otherwise returns an error code indicating |
| * the error that occurred. Note: A return value of kCTIStatus_NoError does not mean |
| * that the request succeeded, merely that it was successfully started. |
| * |
| */ |
| |
| #define cti_get_onmesh_prefix_list(server, ref, context, callback, client_queue) \ |
| cti_get_onmesh_prefix_list_(server, ref, context, callback, client_queue, __FILE__, __LINE__) |
| DNS_SERVICES_EXPORT cti_status_t |
| cti_get_onmesh_prefix_list_(srp_server_t *NULLABLE server, cti_connection_t NULLABLE *NULLABLE ref, |
| void *NULLABLE context, cti_onmesh_prefix_reply_t NONNULL callback, |
| run_context_t NULLABLE client_queue, const char *NONNULL file, int line); |
| |
| /* cti_rloc16_reply: Callback from cti_get_rloc16() |
| * |
| * Called when an error occurs during processing of the cti_get_rloc16 call, or when rloc16 |
| * is updated. |
| * |
| * In the case of an error, the callback will not be called again, and the caller is responsible for |
| * releasing the connection state and restarting if needed. |
| * |
| * The callback will be called initially to report the current value for the property, and subsequently |
| * whenever the property changes. |
| * |
| * cti_rloc16_reply parameters: |
| * |
| * context: The context that was passed to the cti call to which this is a callback. |
| * |
| * rloc16: The rloc16 value(only valid if status is kCTIStatus_NoError). |
| * |
| * status: Will be kCTIStatus_NoError if the rloc16 request is successful, or will indicate the failure |
| * that occurred. |
| * |
| */ |
| typedef void |
| (*cti_rloc16_reply_t)(void *NULLABLE context, uint16_t rloc16, cti_status_t status); |
| |
| /* cti_get_rloc16 |
| * |
| * Requests wpantund to immediately send the rloc16 of the local device. Whenever the RLOC16 |
| * changes, the callback will be called again with the new RLOC16. A return value of |
| * kCTIStatus_NoError means that the caller can expect the reply callback to be called at least once. Any |
| * other error means that the request could not be sent, and the callback will never be called. |
| * |
| * ref: A pointer to a reference to the connection is stored through ref if ref is not NULL. |
| * When events are no longer needed, call cti_discontinue_events() on the returned pointer. |
| * |
| * context: An anonymous pointer that will be passed along to the callback when |
| * an event occurs. |
| * callback: CallBack function for the client that indicates success or failure. |
| * |
| * client_queue: Queue the client wants to schedule the callback on |
| * |
| * return value: Returns kCTIStatus_NoError when no error otherwise returns an error code indicating |
| * the error that occurred. Note: A return value of kCTIStatus_NoError does not mean |
| * that the request succeeded, merely that it was successfully started. |
| * |
| */ |
| #define cti_get_rloc16(server, ref, context, callback, client_queue) \ |
| cti_get_rloc16_(server, ref, context, callback, client_queue, __FILE__, __LINE__) |
| |
| DNS_SERVICES_EXPORT cti_status_t |
| cti_get_rloc16_(srp_server_t *NULLABLE server, cti_connection_t NULLABLE *NULLABLE ref, |
| void *NULLABLE context, cti_rloc16_reply_t NONNULL callback, |
| run_context_t NULLABLE client_queue, const char *NONNULL file, int line); |
| |
| /* cti_events_discontinue |
| * |
| * Requests that the CTI library stop delivering events on the specified connection. The connection will have |
| * been returned by a CTI library call that subscribes to events. |
| */ |
| DNS_SERVICES_EXPORT cti_status_t |
| cti_events_discontinue(cti_connection_t NONNULL ref); |
| |
| typedef union cti_callback { |
| cti_reply_t NULLABLE reply; |
| cti_string_property_reply_t NONNULL string_property_reply; |
| cti_service_reply_t NONNULL service_reply; |
| cti_prefix_reply_t NONNULL prefix_reply; |
| cti_state_reply_t NONNULL state_reply; |
| cti_uint64_property_reply_t NONNULL uint64_property_reply; |
| cti_network_node_type_reply_t NONNULL network_node_type_reply; |
| cti_offmesh_route_reply_t NONNULL offmesh_route_reply; |
| cti_onmesh_prefix_reply_t NONNULL onmesh_prefix_reply; |
| cti_rloc16_reply_t NONNULL rloc16_reply; |
| } cti_callback_t; |
| |
| #endif /* __CTI_SERVICES_H__ */ |
| |
| // Local Variables: |
| // mode: C |
| // tab-width: 4 |
| // c-file-style: "bsd" |
| // c-basic-offset: 4 |
| // fill-column: 120 |
| // indent-tabs-mode: nil |
| // End: |