#ifndef NETWORKFRAMEWORK_RS_NETWORK_SHIM_H
#define NETWORKFRAMEWORK_RS_NETWORK_SHIM_H
#include <stddef.h>
#include <stdint.h>
#include <sys/types.h>
#ifdef __cplusplus
extern "C" {
#endif
#define NW_OK 0
#define NW_INVALID_ARG -1
#define NW_CONNECT_FAILED -2
#define NW_SEND_FAILED -3
#define NW_RECV_FAILED -4
#define NW_LISTEN_FAILED -5
#define NW_CANCELLED -6
#define NW_TIMEOUT -7
typedef void (*BrowserServiceCallback)(
const char *name,
const char *service_type,
const char *domain,
void *user_info
);
typedef void (*PathMonitorCallback)(
int satisfied,
int interface_type,
void *user_info
);
typedef int (*InterfaceEnumerationCallback)(
const char *name,
int interface_type,
uint32_t index,
void *user_info
);
typedef void (*StringEnumerationCallback)(
const char *value,
void *user_info
);
typedef void *(*FramerCreateInstanceCallback)(void *user_info);
typedef void (*FramerDropInstanceCallback)(void *instance);
typedef int (*FramerStartCallback)(void *instance, void *framer);
typedef size_t (*FramerInputCallback)(void *instance, void *framer);
typedef void (*FramerOutputCallback)(
void *instance,
void *framer,
void *message,
size_t message_length,
int is_complete
);
typedef void (*FramerWakeupCallback)(void *instance, void *framer);
typedef int (*FramerStopCallback)(void *instance, void *framer);
typedef void (*FramerCleanupCallback)(void *instance, void *framer);
typedef size_t (*FramerParseCallback)(
const uint8_t *buffer,
size_t buffer_length,
int is_complete,
void *user_info
);
typedef void (*FramerAsyncCallback)(void *framer, void *user_info);
typedef void (*ConnectionGroupStateCallback)(int state, void *user_info);
typedef void (*ConnectionGroupReceiveCallback)(
const uint8_t *data,
size_t len,
void *context,
int is_complete,
void *user_info
);
typedef int (*TxtRecordEntryCallback)(
const char *key,
int found,
const uint8_t *value,
size_t value_len,
void *user_info
);
typedef void (*EthernetChannelStateCallback)(int state, void *user_info);
typedef void (*EthernetChannelReceiveCallback)(
const uint8_t *data,
size_t len,
uint16_t vlan_tag,
const uint8_t *local_address,
const uint8_t *remote_address,
void *user_info
);
typedef struct nw_shim_establishment_protocol_info {
void *protocol_definition;
uint64_t handshake_milliseconds;
uint64_t handshake_rtt_milliseconds;
} nw_shim_establishment_protocol_info;
typedef struct nw_shim_resolution_step_info {
int source;
uint64_t milliseconds;
uint32_t endpoint_count;
void *successful_endpoint;
void *preferred_endpoint;
} nw_shim_resolution_step_info;
void *nw_shim_tcp_connect(const char *host, uint16_t port, int use_tls, int *out_status);
int nw_shim_tcp_send(void *handle, const uint8_t *data, size_t len);
ssize_t nw_shim_tcp_receive(void *handle, uint8_t *out_buf, size_t max_len);
void nw_shim_tcp_close(void *handle);
void *nw_shim_listener_create(uint16_t port, int use_tls, int *out_status);
uint16_t nw_shim_listener_port(void *handle);
void *nw_shim_listener_accept(void *handle, int *out_status);
void nw_shim_listener_close(void *handle);
void *nw_shim_udp_connect(const char *host, uint16_t port, int *out_status);
void *nw_shim_path_monitor_start(PathMonitorCallback callback, void *user_info);
void nw_shim_path_monitor_stop(void *handle);
void *nw_shim_path_monitor_copy_latest_path(void *handle);
int nw_shim_path_monitor_enumerate_interfaces(
void *handle,
InterfaceEnumerationCallback callback,
void *user_info
);
int nw_shim_list_interfaces(InterfaceEnumerationCallback callback, void *user_info);
void *nw_shim_browser_start(
const char *service_type,
const char *domain,
BrowserServiceCallback found_callback,
BrowserServiceCallback lost_callback,
void *user_info
);
void *nw_shim_browser_start_with_descriptor(
void *descriptor,
void *parameters,
BrowserServiceCallback found_callback,
BrowserServiceCallback lost_callback,
void *user_info
);
void nw_shim_browser_stop(void *handle);
void *nw_shim_ws_connect(
const char *host,
uint16_t port,
const char *path,
int use_tls,
int *out_status
);
int nw_shim_ws_send(void *handle, const uint8_t *data, size_t len, int opcode);
ssize_t nw_shim_ws_receive(void *handle, uint8_t *out_buf, size_t max_len, int *out_opcode);
void *nw_shim_quic_connect(const char *host, uint16_t port, const char *alpn, int *out_status);
void *nw_shim_bonjour_advertise_start(
const char *service_type,
const char *service_name,
const char *domain,
uint16_t port,
int *out_status
);
void *nw_shim_bonjour_advertise_start_with_descriptor(void *descriptor, uint16_t port, int *out_status);
void nw_shim_bonjour_advertise_stop(void *handle);
void *nw_shim_retain_object(void *handle);
void nw_shim_release_object(void *handle);
void nw_shim_free_buffer(void *buffer);
void *nw_shim_parameters_create(void);
void *nw_shim_parameters_create_application_service(void);
void *nw_shim_parameters_create_tcp(int use_tls);
void *nw_shim_parameters_create_udp(void);
void *nw_shim_parameters_create_quic(const char *alpn);
void *nw_shim_parameters_copy(void *handle);
int nw_shim_parameters_prepend_application_protocol(void *parameters, void *protocol_options);
void nw_shim_parameters_set_privacy_context(void *parameters, void *privacy_context);
void nw_shim_parameters_set_prefer_no_proxy(void *parameters, int prefer_no_proxy);
void nw_shim_parameters_set_attribution(void *parameters, int attribution);
int nw_shim_parameters_get_attribution(void *parameters);
void nw_shim_parameters_set_required_interface_type(void *parameters, int interface_type);
int nw_shim_parameters_get_required_interface_type(void *parameters);
void nw_shim_parameters_set_prohibit_expensive(void *parameters, int prohibit_expensive);
int nw_shim_parameters_get_prohibit_expensive(void *parameters);
void nw_shim_parameters_set_prohibit_constrained(void *parameters, int prohibit_constrained);
int nw_shim_parameters_get_prohibit_constrained(void *parameters);
void nw_shim_parameters_set_allow_ultra_constrained(void *parameters, int allow_ultra_constrained);
int nw_shim_parameters_get_allow_ultra_constrained(void *parameters);
void *nw_shim_connection_create_with_parameters(
const char *host,
uint16_t port,
void *parameters,
int *out_status
);
void *nw_shim_connection_copy_endpoint(void *handle);
void *nw_shim_connection_copy_parameters(void *handle);
void *nw_shim_connection_copy_current_path(void *handle);
void *nw_shim_listener_create_with_parameters(void *parameters, uint16_t port, int *out_status);
void *nw_shim_content_context_create(const char *identifier);
const char *nw_shim_content_context_get_identifier(void *context);
int nw_shim_content_context_get_is_final(void *context);
void nw_shim_content_context_set_is_final(void *context, int is_final);
uint64_t nw_shim_content_context_get_expiration_milliseconds(void *context);
void nw_shim_content_context_set_expiration_milliseconds(void *context, uint64_t expiration_milliseconds);
double nw_shim_content_context_get_relative_priority(void *context);
void nw_shim_content_context_set_relative_priority(void *context, double relative_priority);
void nw_shim_content_context_set_antecedent(void *context, void *antecedent);
void *nw_shim_content_context_copy_antecedent(void *context);
void nw_shim_content_context_set_protocol_metadata(void *context, void *metadata);
void *nw_shim_content_context_copy_protocol_metadata_for_options(void *context, void *protocol_options);
int nw_shim_connection_send_with_context(void *handle, const uint8_t *data, size_t len, void *context);
ssize_t nw_shim_connection_receive_with_context(
void *handle,
uint8_t *out_buf,
size_t max_len,
void **out_context,
int *out_is_complete
);
void *nw_shim_privacy_context_create(const char *description);
void *nw_shim_privacy_context_copy_default(void);
void nw_shim_privacy_context_flush_cache(void *privacy_context);
void nw_shim_privacy_context_disable_logging(void *privacy_context);
void nw_shim_privacy_context_require_encrypted_name_resolution(
void *privacy_context,
int require_encrypted_name_resolution,
void *fallback_resolver_config
);
void nw_shim_privacy_context_add_proxy(void *privacy_context, void *proxy_config);
void nw_shim_privacy_context_clear_proxies(void *privacy_context);
void *nw_shim_resolver_config_create_https(const char *url);
void *nw_shim_resolver_config_create_tls(const char *host, uint16_t port);
int nw_shim_resolver_config_add_server_address(void *resolver_config, const char *address, uint16_t port);
void *nw_shim_proxy_config_create_http_connect(const char *host, uint16_t port, int use_tls);
void *nw_shim_proxy_config_create_socksv5(const char *host, uint16_t port);
void *nw_shim_relay_hop_create(void *http3_endpoint, void *http2_endpoint, void *relay_tls_options);
void nw_shim_relay_hop_add_additional_http_header_field(
void *relay_hop,
const char *field_name,
const char *field_value
);
void *nw_shim_proxy_config_create_relay(void *first_hop, void *second_hop);
void *nw_shim_proxy_config_create_oblivious_http(
void *relay_hop,
const char *relay_resource_path,
const uint8_t *gateway_key_config,
size_t gateway_key_config_length
);
void nw_shim_proxy_config_set_username_password(void *proxy_config, const char *username, const char *password);
void nw_shim_proxy_config_set_failover_allowed(void *proxy_config, int failover_allowed);
int nw_shim_proxy_config_get_failover_allowed(void *proxy_config);
void nw_shim_proxy_config_add_match_domain(void *proxy_config, const char *domain);
void nw_shim_proxy_config_clear_match_domains(void *proxy_config);
void nw_shim_proxy_config_add_excluded_domain(void *proxy_config, const char *domain);
void nw_shim_proxy_config_clear_excluded_domains(void *proxy_config);
void nw_shim_proxy_config_enumerate_match_domains(
void *proxy_config,
StringEnumerationCallback callback,
void *user_info
);
void nw_shim_proxy_config_enumerate_excluded_domains(
void *proxy_config,
StringEnumerationCallback callback,
void *user_info
);
void *nw_shim_framer_definition_create(
const char *identifier,
uint32_t flags,
FramerCreateInstanceCallback create_instance,
FramerDropInstanceCallback drop_instance,
FramerStartCallback start_callback,
FramerInputCallback input_callback,
FramerOutputCallback output_callback,
FramerWakeupCallback wakeup_callback,
FramerStopCallback stop_callback,
FramerCleanupCallback cleanup_callback,
void *user_info
);
void *nw_shim_framer_create_options(void *definition);
void *nw_shim_framer_message_create_from_options(void *protocol_options);
void *nw_shim_framer_message_create_for_instance(void *framer);
int nw_shim_framer_message_set_u64(void *message, const char *key, uint64_t value);
int nw_shim_framer_message_get_u64(void *message, const char *key, uint64_t *out_value);
int nw_shim_framer_parse_input(
void *framer,
size_t minimum_incomplete_length,
size_t maximum_length,
uint8_t *temp_buffer,
FramerParseCallback parse_callback,
void *user_info
);
int nw_shim_framer_parse_output(
void *framer,
size_t minimum_incomplete_length,
size_t maximum_length,
uint8_t *temp_buffer,
FramerParseCallback parse_callback,
void *user_info
);
void nw_shim_framer_mark_ready(void *framer);
int nw_shim_framer_prepend_application_protocol(void *framer, void *protocol_options);
void nw_shim_framer_mark_failed_with_error(void *framer, int error_code);
int nw_shim_framer_pass_input_data(void *framer, size_t input_length, void *message, int is_complete);
void nw_shim_framer_deliver_input_data(
void *framer,
const uint8_t *input_buffer,
size_t input_length,
void *message,
int is_complete
);
void nw_shim_framer_pass_through_input(void *framer);
int nw_shim_framer_pass_output_data(void *framer, size_t output_length);
void nw_shim_framer_write_output_data(void *framer, const uint8_t *output_buffer, size_t output_length);
void nw_shim_framer_pass_through_output(void *framer);
void nw_shim_framer_schedule_wakeup(void *framer, uint64_t milliseconds);
void nw_shim_framer_async(void *framer, FramerAsyncCallback async_callback, void *user_info);
void *nw_shim_group_descriptor_create_multiplex(const char *host, uint16_t port);
void *nw_shim_group_descriptor_create_multicast(const char *group_address, uint16_t port);
int nw_shim_group_descriptor_add_endpoint(void *descriptor, const char *host, uint16_t port);
void *nw_shim_connection_group_create(void *descriptor, void *parameters);
void nw_shim_connection_group_set_state_changed_handler(
void *handle,
ConnectionGroupStateCallback state_callback,
void *user_info
);
void nw_shim_connection_group_set_receive_handler(
void *handle,
uint32_t maximum_message_size,
int reject_oversized_messages,
ConnectionGroupReceiveCallback receive_callback,
void *user_info
);
int nw_shim_connection_group_start(void *handle);
void nw_shim_connection_group_cancel(void *handle);
int nw_shim_connection_group_send(
void *handle,
const uint8_t *data,
size_t len,
const char *host,
uint16_t port,
void *context
);
void nw_shim_connection_group_release(void *handle);
void *nw_shim_endpoint_create_host(const char *host, uint16_t port);
void *nw_shim_endpoint_create_address(const char *address, uint16_t port);
void *nw_shim_endpoint_create_bonjour_service(const char *name, const char *type, const char *domain);
void *nw_shim_endpoint_create_url(const char *url);
int nw_shim_endpoint_get_type(void *endpoint);
char *nw_shim_endpoint_copy_hostname(void *endpoint);
char *nw_shim_endpoint_copy_port_string(void *endpoint);
uint16_t nw_shim_endpoint_get_port(void *endpoint);
char *nw_shim_endpoint_copy_address_string(void *endpoint);
char *nw_shim_endpoint_copy_bonjour_service_name(void *endpoint);
char *nw_shim_endpoint_copy_bonjour_service_type(void *endpoint);
char *nw_shim_endpoint_copy_bonjour_service_domain(void *endpoint);
char *nw_shim_endpoint_copy_url(void *endpoint);
uint8_t *nw_shim_endpoint_copy_signature(void *endpoint, size_t *out_signature_length);
int nw_shim_path_get_status(void *path);
int nw_shim_path_get_unsatisfied_reason(void *path);
int nw_shim_path_is_equal(void *path, void *other_path);
int nw_shim_path_is_expensive(void *path);
int nw_shim_path_is_constrained(void *path);
int nw_shim_path_is_ultra_constrained(void *path);
int nw_shim_path_has_ipv4(void *path);
int nw_shim_path_has_ipv6(void *path);
int nw_shim_path_has_dns(void *path);
int nw_shim_path_uses_interface_type(void *path, int interface_type);
void *nw_shim_path_copy_effective_local_endpoint(void *path);
void *nw_shim_path_copy_effective_remote_endpoint(void *path);
int nw_shim_path_get_link_quality(void *path);
int nw_shim_path_enumerate_interfaces(void *path, InterfaceEnumerationCallback callback, void *user_info);
void *nw_shim_browse_descriptor_create_bonjour_service(const char *type, const char *domain);
char *nw_shim_browse_descriptor_copy_bonjour_service_type(void *descriptor);
char *nw_shim_browse_descriptor_copy_bonjour_service_domain(void *descriptor);
void nw_shim_browse_descriptor_set_include_txt_record(void *descriptor, int include_txt_record);
int nw_shim_browse_descriptor_get_include_txt_record(void *descriptor);
void *nw_shim_browse_descriptor_create_application_service(const char *application_service_name);
char *nw_shim_browse_descriptor_copy_application_service_name(void *descriptor);
void *nw_shim_advertise_descriptor_create_bonjour_service(const char *name, const char *type, const char *domain);
void *nw_shim_advertise_descriptor_create_application_service(const char *application_service_name);
void nw_shim_advertise_descriptor_set_txt_record(void *descriptor, const uint8_t *txt_record, size_t txt_length);
void nw_shim_advertise_descriptor_set_no_auto_rename(void *descriptor, int no_auto_rename);
int nw_shim_advertise_descriptor_get_no_auto_rename(void *descriptor);
char *nw_shim_advertise_descriptor_copy_application_service_name(void *descriptor);
void *nw_shim_protocol_copy_tcp_definition(void);
void *nw_shim_protocol_copy_udp_definition(void);
void *nw_shim_protocol_copy_tls_definition(void);
void *nw_shim_protocol_copy_ip_definition(void);
void *nw_shim_protocol_copy_ws_definition(void);
void *nw_shim_protocol_copy_quic_definition(void);
void *nw_shim_protocol_create_tcp_options(void);
void *nw_shim_protocol_create_udp_options(void);
void *nw_shim_protocol_create_tls_options(void);
void *nw_shim_protocol_create_ip_options(void);
void *nw_shim_protocol_create_ws_options(void);
void *nw_shim_protocol_create_quic_options(void);
int nw_shim_protocol_definition_is_equal(void *definition1, void *definition2);
void *nw_shim_protocol_options_copy_definition(void *options);
void *nw_shim_protocol_metadata_copy_definition(void *metadata);
int nw_shim_protocol_options_is_quic(void *options);
void nw_shim_quic_add_tls_application_protocol(void *options, const char *application_protocol);
int nw_shim_quic_get_stream_is_unidirectional(void *options);
void nw_shim_quic_set_stream_is_unidirectional(void *options, int is_unidirectional);
int nw_shim_quic_get_stream_is_datagram(void *options);
void nw_shim_quic_set_stream_is_datagram(void *options, int is_datagram);
uint64_t nw_shim_quic_get_initial_max_data(void *options);
void nw_shim_quic_set_initial_max_data(void *options, uint64_t initial_max_data);
uint16_t nw_shim_quic_get_max_udp_payload_size(void *options);
void nw_shim_quic_set_max_udp_payload_size(void *options, uint16_t max_udp_payload_size);
uint32_t nw_shim_quic_get_idle_timeout(void *options);
void nw_shim_quic_set_idle_timeout(void *options, uint32_t idle_timeout);
uint64_t nw_shim_quic_get_initial_max_streams_bidirectional(void *options);
void nw_shim_quic_set_initial_max_streams_bidirectional(void *options, uint64_t initial_max_streams_bidirectional);
uint64_t nw_shim_quic_get_initial_max_streams_unidirectional(void *options);
void nw_shim_quic_set_initial_max_streams_unidirectional(void *options, uint64_t initial_max_streams_unidirectional);
uint64_t nw_shim_quic_get_initial_max_stream_data_bidirectional_local(void *options);
void nw_shim_quic_set_initial_max_stream_data_bidirectional_local(void *options, uint64_t initial_max_stream_data_bidirectional_local);
uint64_t nw_shim_quic_get_initial_max_stream_data_bidirectional_remote(void *options);
void nw_shim_quic_set_initial_max_stream_data_bidirectional_remote(void *options, uint64_t initial_max_stream_data_bidirectional_remote);
uint64_t nw_shim_quic_get_initial_max_stream_data_unidirectional(void *options);
void nw_shim_quic_set_initial_max_stream_data_unidirectional(void *options, uint64_t initial_max_stream_data_unidirectional);
uint16_t nw_shim_quic_get_max_datagram_frame_size(void *options);
void nw_shim_quic_set_max_datagram_frame_size(void *options, uint16_t max_datagram_frame_size);
void *nw_shim_connection_copy_quic_metadata(void *handle);
void *nw_shim_content_context_copy_quic_metadata(void *context);
int nw_shim_protocol_metadata_is_quic(void *metadata);
void *nw_shim_quic_copy_sec_protocol_options(void *options);
void *nw_shim_quic_copy_sec_protocol_metadata(void *metadata);
uint64_t nw_shim_quic_get_stream_id(void *metadata);
int nw_shim_quic_get_stream_type(void *metadata);
uint64_t nw_shim_quic_get_stream_application_error(void *metadata);
void nw_shim_quic_set_stream_application_error(void *metadata, uint64_t application_error);
uint64_t nw_shim_quic_get_local_max_streams_bidirectional(void *metadata);
void nw_shim_quic_set_local_max_streams_bidirectional(void *metadata, uint64_t max_streams_bidirectional);
uint64_t nw_shim_quic_get_local_max_streams_unidirectional(void *metadata);
void nw_shim_quic_set_local_max_streams_unidirectional(void *metadata, uint64_t max_streams_unidirectional);
uint64_t nw_shim_quic_get_remote_max_streams_bidirectional(void *metadata);
uint64_t nw_shim_quic_get_remote_max_streams_unidirectional(void *metadata);
uint16_t nw_shim_quic_get_stream_usable_datagram_frame_size(void *metadata);
uint64_t nw_shim_quic_get_application_error(void *metadata);
char *nw_shim_quic_copy_application_error_reason(void *metadata);
void nw_shim_quic_set_application_error(void *metadata, uint64_t application_error, const char *reason);
uint16_t nw_shim_quic_get_keepalive_interval(void *metadata);
void nw_shim_quic_set_keepalive_interval(void *metadata, uint16_t keepalive_interval);
uint64_t nw_shim_quic_get_remote_idle_timeout(void *metadata);
void *nw_shim_sec_retain(void *object);
void nw_shim_sec_release(void *object);
char *nw_shim_interface_copy_name(void *interface);
int nw_shim_interface_get_type(void *interface);
uint32_t nw_shim_interface_get_index(void *interface);
void nw_shim_parameters_require_interface(void *parameters, const char *name, int interface_type, uint32_t index);
int nw_shim_parameters_copy_required_interface(void *parameters, char **out_name, int *out_type, uint32_t *out_index);
void nw_shim_parameters_prohibit_interface(void *parameters, const char *name, int interface_type, uint32_t index);
void nw_shim_parameters_clear_prohibited_interfaces(void *parameters);
void **nw_shim_parameters_copy_prohibited_interfaces(void *parameters, size_t *out_count);
void nw_shim_parameters_prohibit_interface_type(void *parameters, int interface_type);
void nw_shim_parameters_clear_prohibited_interface_types(void *parameters);
int *nw_shim_parameters_copy_prohibited_interface_types(void *parameters, size_t *out_count);
void nw_shim_parameters_set_reuse_local_address(void *parameters, int reuse_local_address);
int nw_shim_parameters_get_reuse_local_address(void *parameters);
void nw_shim_parameters_set_local_endpoint(void *parameters, void *local_endpoint);
void *nw_shim_parameters_copy_local_endpoint(void *parameters);
void nw_shim_parameters_set_include_peer_to_peer(void *parameters, int include_peer_to_peer);
int nw_shim_parameters_get_include_peer_to_peer(void *parameters);
void nw_shim_parameters_set_fast_open_enabled(void *parameters, int fast_open_enabled);
int nw_shim_parameters_get_fast_open_enabled(void *parameters);
void nw_shim_parameters_set_service_class(void *parameters, int service_class);
int nw_shim_parameters_get_service_class(void *parameters);
void nw_shim_parameters_set_multipath_service(void *parameters, int multipath_service);
int nw_shim_parameters_get_multipath_service(void *parameters);
void *nw_shim_parameters_copy_default_protocol_stack(void *parameters);
void nw_shim_protocol_stack_clear_application_protocols(void *stack);
void **nw_shim_protocol_stack_copy_application_protocols(void *stack, size_t *out_count);
void *nw_shim_protocol_stack_copy_transport_protocol(void *stack);
void nw_shim_protocol_stack_set_transport_protocol(void *stack, void *protocol);
void *nw_shim_protocol_stack_copy_internet_protocol(void *stack);
void nw_shim_parameters_set_local_only(void *parameters, int local_only);
int nw_shim_parameters_get_local_only(void *parameters);
int nw_shim_parameters_get_prefer_no_proxy(void *parameters);
void nw_shim_parameters_set_expired_dns_behavior(void *parameters, int expired_dns_behavior);
int nw_shim_parameters_get_expired_dns_behavior(void *parameters);
void nw_shim_parameters_set_requires_dnssec_validation(void *parameters, int requires_dnssec_validation);
int nw_shim_parameters_requires_dnssec_validation(void *parameters);
void *nw_shim_connection_copy_establishment_report(void *handle);
uint64_t nw_shim_establishment_report_get_duration_milliseconds(void *report);
uint64_t nw_shim_establishment_report_get_attempt_started_after_milliseconds(void *report);
uint32_t nw_shim_establishment_report_get_previous_attempt_count(void *report);
int nw_shim_establishment_report_get_used_proxy(void *report);
int nw_shim_establishment_report_get_proxy_configured(void *report);
void *nw_shim_establishment_report_copy_proxy_endpoint(void *report);
nw_shim_establishment_protocol_info *nw_shim_establishment_report_copy_protocols(void *report, size_t *out_count);
nw_shim_resolution_step_info *nw_shim_establishment_report_copy_resolutions(void *report, size_t *out_count);
void **nw_shim_establishment_report_copy_resolution_reports(void *report, size_t *out_count);
int nw_shim_resolution_report_get_source(void *report);
uint64_t nw_shim_resolution_report_get_milliseconds(void *report);
uint32_t nw_shim_resolution_report_get_endpoint_count(void *report);
void *nw_shim_resolution_report_copy_successful_endpoint(void *report);
void *nw_shim_resolution_report_copy_preferred_endpoint(void *report);
int nw_shim_resolution_report_get_protocol(void *report);
void *nw_shim_connection_create_data_transfer_report(void *handle);
int nw_shim_data_transfer_report_collect(void *report);
int nw_shim_data_transfer_report_get_state(void *report);
uint32_t nw_shim_data_transfer_report_all_paths(void);
uint64_t nw_shim_data_transfer_report_get_duration_milliseconds(void *report);
uint32_t nw_shim_data_transfer_report_get_path_count(void *report);
uint64_t nw_shim_data_transfer_report_get_received_ip_packet_count(void *report, uint32_t path_index);
uint64_t nw_shim_data_transfer_report_get_sent_ip_packet_count(void *report, uint32_t path_index);
uint64_t nw_shim_data_transfer_report_get_received_transport_byte_count(void *report, uint32_t path_index);
uint64_t nw_shim_data_transfer_report_get_received_transport_duplicate_byte_count(void *report, uint32_t path_index);
uint64_t nw_shim_data_transfer_report_get_received_transport_out_of_order_byte_count(void *report, uint32_t path_index);
uint64_t nw_shim_data_transfer_report_get_sent_transport_byte_count(void *report, uint32_t path_index);
uint64_t nw_shim_data_transfer_report_get_sent_transport_retransmitted_byte_count(void *report, uint32_t path_index);
uint64_t nw_shim_data_transfer_report_get_transport_smoothed_rtt_milliseconds(void *report, uint32_t path_index);
uint64_t nw_shim_data_transfer_report_get_transport_minimum_rtt_milliseconds(void *report, uint32_t path_index);
uint64_t nw_shim_data_transfer_report_get_transport_rtt_variance(void *report, uint32_t path_index);
uint64_t nw_shim_data_transfer_report_get_received_application_byte_count(void *report, uint32_t path_index);
uint64_t nw_shim_data_transfer_report_get_sent_application_byte_count(void *report, uint32_t path_index);
void *nw_shim_data_transfer_report_copy_path_interface(void *report, uint32_t path_index);
int nw_shim_data_transfer_report_get_path_radio_type(void *report, uint32_t path_index);
size_t nw_shim_endpoint_copy_address(void *endpoint, void *out_buffer, size_t out_buffer_length);
void *nw_shim_endpoint_copy_txt_record(void *endpoint);
void *nw_shim_txt_record_create_with_bytes(const uint8_t *txt_bytes, size_t txt_length);
void *nw_shim_txt_record_create_dictionary(void);
void *nw_shim_txt_record_copy(void *txt_record);
int nw_shim_txt_record_find_key(void *txt_record, const char *key);
uint8_t *nw_shim_txt_record_copy_value(void *txt_record, const char *key, size_t *out_value_length, int *out_found);
int nw_shim_txt_record_set_key(void *txt_record, const char *key, const uint8_t *value, size_t value_length);
int nw_shim_txt_record_remove_key(void *txt_record, const char *key);
size_t nw_shim_txt_record_get_key_count(void *txt_record);
uint8_t *nw_shim_txt_record_copy_bytes(void *txt_record, size_t *out_length);
int nw_shim_txt_record_apply(void *txt_record, TxtRecordEntryCallback callback, void *user_info);
int nw_shim_txt_record_is_dictionary(void *txt_record);
int nw_shim_txt_record_is_equal(void *txt_record, void *other_txt_record);
void *nw_shim_ethernet_channel_create(uint16_t ether_type, const char *name, int interface_type, uint32_t index);
void *nw_shim_ethernet_channel_create_with_parameters(uint16_t ether_type, const char *name, int interface_type, uint32_t index, void *parameters);
void nw_shim_ethernet_channel_set_state_changed_handler(void *handle, EthernetChannelStateCallback callback, void *user_info);
void nw_shim_ethernet_channel_set_receive_handler(void *handle, EthernetChannelReceiveCallback callback, void *user_info);
uint32_t nw_shim_ethernet_channel_get_maximum_payload_size(void *handle);
void nw_shim_ethernet_channel_start(void *handle);
void nw_shim_ethernet_channel_cancel(void *handle);
int nw_shim_ethernet_channel_send(void *handle, const uint8_t *data, size_t len, uint16_t vlan_tag, const uint8_t *remote_address);
void nw_shim_ethernet_channel_release(void *handle);
#ifdef __cplusplus
}
#endif
#endif