Skip to content

Network iOS xcode13.0 beta1

Sebastien Pouliot edited this page Jun 7, 2021 · 1 revision

#Network.framework

diff -ruN /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/Network.h /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/Network.h
--- /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/Network.h	2021-03-16 08:40:53.000000000 -0400
+++ /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/Network.h	2021-05-22 06:37:30.000000000 -0400
@@ -34,6 +34,7 @@
 #include <Network/path.h>
 #include <Network/privacy_context.h>
 #include <Network/protocol_options.h>
+#include <Network/quic_options.h>
 #include <Network/resolver_config.h>
 #include <Network/tcp_options.h>
 #include <Network/tls_options.h>
diff -ruN /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/connection.h /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/connection.h
--- /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/connection.h	2021-03-16 13:58:27.000000000 -0400
+++ /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/connection.h	2021-06-02 11:06:10.000000000 -0400
@@ -2,7 +2,7 @@
 //  connection.h
 //  Network
 //
-//  Copyright (c) 2015-2019 Apple Inc. All rights reserved.
+//  Copyright (c) 2015-2019, 2021 Apple Inc. All rights reserved.
 //
 
 #ifndef __NW_CONNECTION_H__
@@ -239,7 +239,9 @@
  * @abstract
  *		Starts the connection, which will cause the connection
  *		to evaluate its path, do resolution, and try to become
- *		readable and writable.
+ *		readable and writable. Once started, a connection
+ *		must be cancelled using nw_connection_cancel() or
+ *		nw_connection_force_cancel() when it is no longer needed.
  *
  * @param connection
  *		The connection object.
@@ -594,6 +596,7 @@
  *		enqueued to be sent.
  */
 API_AVAILABLE(macos(10.14), ios(12.0), watchos(5.0), tvos(12.0))
+NW_SWIFT_DISABLE_ASYNC
 void
 nw_connection_send(nw_connection_t connection,
 				   _Nullable dispatch_data_t content,
@@ -678,7 +681,7 @@
  *
  * @result
  *		Returns a retained protocol metadata object, or NULL if the connection
- *		has not been established yet, or is cancelled.
+ *		has not been established yet or is cancelled.
  */
 API_AVAILABLE(macos(10.14), ios(12.0), watchos(5.0), tvos(12.0))
 NW_RETURNS_RETAINED _Nullable nw_protocol_metadata_t
diff -ruN /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/connection_group.h /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/connection_group.h
--- /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/connection_group.h	2021-03-16 08:47:09.000000000 -0400
+++ /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/connection_group.h	2021-06-02 12:46:44.000000000 -0400
@@ -2,7 +2,7 @@
 //  connection_group.h
 //  Network
 //
-//  Copyright (c) 2019-2020 Apple Inc. All rights reserved.
+//  Copyright (c) 2019-2021 Apple Inc. All rights reserved.
 //
 
 #ifndef __NW_CONNECTION_GROUP_H__
@@ -350,6 +350,57 @@
 										  nw_content_context_t context);
 
 /*!
+ * @function nw_connection_group_copy_protocol_metadata_for_message
+ *
+ * @abstract
+ *		Copy the metadata corresponding to a given inbound connection group message.
+ *
+ * @param group
+ *		The connection group object.
+ *
+ * @param definition
+ *		The protocol definition for which metadata will be returned.
+ *
+ * @result
+ *		Returns a retained protocol metadata object, or NULL if not found.
+ */
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0))
+_Nullable nw_protocol_metadata_t
+nw_connection_group_copy_protocol_metadata_for_message(nw_connection_group_t group,
+													   nw_content_context_t context,
+													   nw_protocol_definition_t definition);
+
+/*!
+ * @function nw_connection_group_extract_connection_for_message
+ *
+ * @abstract
+ *		Extract a connection corresponding to an inbound message from the
+ *		connection group. Once extracted, subsequent messages from this
+ *		remote endpoint on this connection will no longer be handled by the
+ *		connection group. The connection may be used to read the remainder
+ *		of a partial message or to send a large response with support for partial
+ *		messages and backpressure.
+ *		Any incoming messages from this remote endpoint which were saved from
+ *		the receive handler may no longer be valid after a connection is returned.
+ *
+ * @param group
+ *		The connection group object from which the context was received. If the context was
+ *		not received from this connection group, the extraction will fail.
+ *
+ *	@param context
+ *		A content context representing an inbound message received from this connection group.
+ *
+ * @result
+ *		Returns the connection associated with the provided message, or nil if the extraction
+ *		fails. Extraction will fail if the provided message is not an inbound message from
+ *		this connection group.
+ */
+API_AVAILABLE(macos(11.0), ios(14.0), watchos(7.0), tvos(14.0))
+NW_RETURNS_RETAINED _Nullable nw_connection_t
+nw_connection_group_extract_connection_for_message(nw_connection_group_t group,
+												   nw_content_context_t context);
+
+/*!
  * @function nw_connection_group_reply
  *
  * @abstract
@@ -385,34 +436,58 @@
 						  dispatch_data_t _Nullable content);
 
 /*!
- * @function nw_connection_group_extract_connection_for_message
+ * @function nw_connection_group_extract_connection
  *
  * @abstract
- *		Extract a connection corresponding to an inbound message from the
- *		connection group. Once extracted, subsequent messages from this
- *		remote endpoint on this connection will no longer be handled by the
- *		connection group. The connection may be used to read the remainder
- *		of a partial message or to send a large response with support for partial
- *		messages and backpressure.
- *		Any incoming messages from this remote endpoint which were saved from
- *		the receive handler may no longer be valid after a connection is returned.
+ *      Extract a connection from the connection group. For a multiplex connection group, this means that
+ *      a new stream is opened and the corresponding nw_connection_t object is returned. For non-multiplex
+ *      connection groups, a connection to the specified endpoint will be returned if allowed by the group descriptor.
+ *
+ *      The connection can be re-inserted into the group later. Once reinserted, the connection group
+ *      will handle subsequent messages from this remote endpoint.
  *
  * @param group
- *		The connection group object from which the context was received. If the context was
- *		not received from this connection group, the extraction will fail.
+ *      The connection group object from which to extract a connection.
  *
- *	@param context
- *		A content context representing an inbound message received from this connection group.
+ * @param endpoint
+ *      The endpoint to use as the remote endpoint for the extracted connection, if applicable.
+ *      For connection groups with multiplex group descriptors, this should be nil.
+ *
+ * @param protocol_options
+ *      The protocol options to apply to the extracted connection. May be nil if not applicable.
  *
  * @result
- *		Returns the connection associated with the provided message, or nil if the extraction
- *		fails. Extraction will fail if the provided message is not an inbound message from
- *		this connection group.
+ *      Returns the connection from the connection group.
  */
-API_AVAILABLE(macos(11.0), ios(14.0), watchos(7.0), tvos(14.0))
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0))
 NW_RETURNS_RETAINED _Nullable nw_connection_t
-nw_connection_group_extract_connection_for_message(nw_connection_group_t group,
-												   nw_content_context_t context);
+nw_connection_group_extract_connection(nw_connection_group_t group,
+									   _Nullable nw_endpoint_t endpoint,
+									   _Nullable nw_protocol_options_t protocol_options);
+
+/*!
+ * @function nw_connection_group_reinsert_extracted_connection
+ *
+ * @abstract
+ *		Reinsert a connection into a connection group. Once reinserted, the connection group
+ *		will handle subsequent messages from this remote endpoint, and any outstanding reads on
+ *		the connection will be cancelled.
+ *
+ * @param group
+ *		The connection group object from which the connection was extracted. If the connection was
+ *		not extracted from this connection group, the reinsertion will fail.
+ *
+ *	@param connection
+ *		A connection that was extracted from this connection group.
+ *
+ * @result
+ *		Returns true if the reinsertion was successful. Reinsertion will fail if the provided connection was
+ *		not extracted from this connection group.
+ */
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0))
+bool
+nw_connection_group_reinsert_extracted_connection(nw_connection_group_t group,
+												  nw_connection_t connection);
 
 #ifdef __BLOCKS__
 
@@ -474,6 +549,7 @@
  *		enqueued to be sent.
  */
 API_AVAILABLE(macos(11.0), ios(14.0), watchos(7.0), tvos(14.0))
+NW_SWIFT_DISABLE_ASYNC
 void
 nw_connection_group_send_message(nw_connection_group_t group,
 								 _Nullable dispatch_data_t content,
@@ -481,6 +557,66 @@
 								 nw_content_context_t context,
 								 nw_connection_group_send_completion_t completion);
 
+/*!
+ * @typedef nw_connection_group_new_connection_handler_t
+ *
+ * @abstract
+ *		A block called with a new connection when a multiplex group receives a new stream. If a new connection
+ *		handler is set the user must handle connections received by this handler. There are three possible
+ *		actions to take and one of these three actions must be taken.
+ *		1) Take over the ownership of the connection. In this case, the connection is used by the client to
+ *		   send and receive data as any other connection would be used. The client may insert this
+ *		   connection back into the connection group at a later point if so desired.
+ *      2) If you want the connection group to handle this connection, simply insert this connection back into
+ *         the connection group right away.
+ *      3) If you don't want to accept this connection, simply cancel the connection.
+ *
+ * @param connection
+ *		The connection representing the new stream on this multiplexing protocol
+ */
+typedef void (^nw_connection_group_new_connection_handler_t)(nw_connection_t connection);
+
+/*!
+ * @function nw_connection_group_set_new_connection_handler
+ *
+ * @abstract
+ *		Sets the new connection handler to be invoked whenever a new inbound connection
+ *		is received by the connection group. This function must not be called
+ *		after starting the connection group.
+ *
+ * @param group
+ *		The connection group object.
+ *
+ * @param new_connection_handler
+ *		The new connection handler to call upon receipt of a new inbound connection.
+ *		Pass NULL to remove the handler.
+ */
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0))
+void
+nw_connection_group_set_new_connection_handler(nw_connection_group_t group,
+											   _Nullable nw_connection_group_new_connection_handler_t new_connection_handler);
+
+/*!
+ * @function nw_connection_group_copy_protocol_metadata
+ *
+ * @abstract
+ *		Copy the metadata corresponding to a given inbound connection group message.
+ *
+ * @param group
+ *		The connection group object.
+ *
+ * @param definition
+ *		The protocol definition for which metadata will be returned.
+ *
+ * @result
+ *		Returns a retained protocol metadata object, or NULL if the connection
+ *		group has not been established yet or is cancelled.
+ */
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0))
+_Nullable nw_protocol_metadata_t
+nw_connection_group_copy_protocol_metadata(nw_connection_group_t group,
+										   nw_protocol_definition_t definition);
+
 #endif // __BLOCKS__
 
 __END_DECLS
diff -ruN /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/connection_report.h /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/connection_report.h
--- /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/connection_report.h	2021-03-16 13:58:29.000000000 -0400
+++ /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/connection_report.h	2021-06-02 07:34:00.000000000 -0400
@@ -534,7 +534,8 @@
  *		values across paths where applicable. For values that cannot
  *		sum, the value of the primary path is used.
  */
-NW_EXPORT extern const uint32_t _nw_data_transfer_report_all_paths;
+API_AVAILABLE(macos(10.15), ios(13.0), watchos(6.0), tvos(13.0))
+extern const uint32_t _nw_data_transfer_report_all_paths;
 #define NW_ALL_PATHS (_nw_data_transfer_report_all_paths)
 
 /*!
@@ -594,8 +595,7 @@
  *
  * @param path_index
  *		The index for the path over which data is transferred.
- *		For non-multipath connections, pass 0 as the path index to access
- *		the single path. Passing NW_ALL_PATHS for this function returns
+ *		Passing NW_ALL_PATHS for this function returns
  *		the sum of all paths.
  *
  * @result
@@ -619,8 +619,7 @@
  *
  * @param path_index
  *		The index for the path over which data is transferred.
- *		For non-multipath connections, pass 0 as the path index to access
- *		the single path. Passing NW_ALL_PATHS for this function returns
+ *		Passing NW_ALL_PATHS for this function returns
  *		the sum of all paths.
  *
  * @result
@@ -644,8 +643,7 @@
  *
  * @param path_index
  *		The index for the path over which data is transferred.
- *		For non-multipath connections, pass 0 as the path index to access
- *		the single path. Passing NW_ALL_PATHS for this function returns
+ *		Passing NW_ALL_PATHS for this function returns
  *		the sum of all paths.
  *
  * @result
@@ -669,8 +667,7 @@
  *
  * @param path_index
  *		The index for the path over which data is transferred.
- *		For non-multipath connections, pass 0 as the path index to access
- *		the single path. Passing NW_ALL_PATHS for this function returns
+ *		Passing NW_ALL_PATHS for this function returns
  *		the sum of all paths.
  *
  * @result
@@ -694,8 +691,7 @@
  *
  * @param path_index
  *		The index for the path over which data is transferred.
- *		For non-multipath connections, pass 0 as the path index to access
- *		the single path. Passing NW_ALL_PATHS for this function returns
+ *		Passing NW_ALL_PATHS for this function returns
  *		the sum of all paths.
  *
  * @result
@@ -719,8 +715,7 @@
  *
  * @param path_index
  *		The index for the path over which data is transferred.
- *		For non-multipath connections, pass 0 as the path index to access
- *		the single path. Passing NW_ALL_PATHS for this function returns
+ *		Passing NW_ALL_PATHS for this function returns
  *		the sum of all paths.
  *
  * @result
@@ -744,8 +739,7 @@
  *
  * @param path_index
  *		The index for the path over which data is transferred.
- *		For non-multipath connections, pass 0 as the path index to access
- *		the single path. Passing NW_ALL_PATHS for this function returns
+ *		Passing NW_ALL_PATHS for this function returns
  *		the sum of all paths.
  *
  * @result
@@ -844,8 +838,7 @@
  *
  * @param path_index
  *		The index for the path over which data is transferred.
- *		For non-multipath connections, pass 0 as the path index to access
- *		the single path. Passing NW_ALL_PATHS for this function returns
+ *		Passing NW_ALL_PATHS for this function returns
  *		the sum of all paths.
  *
  * @result
@@ -869,8 +862,7 @@
  *
  * @param path_index
  *		The index for the path over which data is transferred.
- *		For non-multipath connections, pass 0 as the path index to access
- *		the single path. Passing NW_ALL_PATHS for this function returns
+ *		Passing NW_ALL_PATHS for this function returns
  *		the sum of all paths.
  *
  * @result
@@ -894,8 +886,7 @@
  *
  * @param path_index
  *		The index for the path over which data is transferred.
- *		For non-multipath connections, pass 0 as the path index to access
- *		the single path. Passing NW_ALL_PATHS for this function is
+ *		Passing NW_ALL_PATHS for this function is
  *		equivalent to passing 0.
  *
  * @result
@@ -909,6 +900,31 @@
 nw_data_transfer_report_copy_path_interface(nw_data_transfer_report_t report,
 											uint32_t path_index);
 
+/*!
+ * @function nw_data_transfer_report_get_path_radio_type
+ *
+ * @abstract
+ *		Retrieve the radio type used for data transfer for a given
+ *		path used by a connection.
+ *
+ * @param report
+ *		A data transfer report in the "collected" state.
+ *
+ * @param path_index
+ *		The index for the path over which data is transferred.
+ *		Passing NW_ALL_PATHS for this function is
+ *		equivalent to passing 0.
+ *
+ * @result
+ *		Returns the radio type used for the specified path.
+ *		Returns nw_interface_radio_type_unknown on failure.
+ *		Fails if the report is not yet collected.
+ */
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0))
+nw_interface_radio_type_t
+nw_data_transfer_report_get_path_radio_type(nw_data_transfer_report_t report,
+											uint32_t path_index);
+
 __END_DECLS
 
 NW_ASSUME_NONNULL_END
diff -ruN /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/content_context.h /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/content_context.h
--- /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/content_context.h	2021-03-16 09:53:41.000000000 -0400
+++ /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/content_context.h	2021-06-02 12:43:49.000000000 -0400
@@ -107,7 +107,7 @@
 /*!
  * @function nw_content_context_get_expiration_milliseconds
  * @discussion Retrieve the number of milliseconds after which the content will expire.
- *		See nw_content_context_set_expiration_milliseconds for futher discussion.
+ *		See nw_content_context_set_expiration_milliseconds for further discussion.
  * @param context The context object
  * @result Returns content expiration, or 0 if not set.
  */
@@ -132,7 +132,7 @@
 /*!
  * @function nw_content_context_get_relative_priority
  * @discussion Get the relative priority for the content. See
- *		nw_content_context_set_relative_priority for futher discussion.
+ *		nw_content_context_set_relative_priority for further discussion.
  * @param context The context object
  * @result Returns the relative priority, between 0.0 (lowest priority)
  *		to 1.0 (highest priority). The default value is 0.5.
diff -ruN /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/ethernet_channel.h /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/ethernet_channel.h
--- /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/ethernet_channel.h	2021-03-16 05:20:00.000000000 -0400
+++ /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/ethernet_channel.h	2021-06-02 12:43:50.000000000 -0400
@@ -2,7 +2,7 @@
 //  ethernet_channel.h
 //  Network
 //
-//  Copyright (c) 2019 Apple Inc. All rights reserved.
+//  Copyright (c) 2019, 2021 Apple Inc. All rights reserved.
 //
 
 #ifndef __NW_ETHERNET_CHANNEL_H__
@@ -278,6 +278,7 @@
  *		This callback does indicate that the data has been sent.
  */
 API_AVAILABLE(macos(10.15)) API_UNAVAILABLE(ios, watchos, tvos)
+NW_SWIFT_DISABLE_ASYNC
 void
 nw_ethernet_channel_send(nw_ethernet_channel_t ethernet_channel,
 						 dispatch_data_t content,
diff -ruN /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/framer_options.h /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/framer_options.h
--- /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/framer_options.h	2021-03-16 05:20:00.000000000 -0400
+++ /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/framer_options.h	2021-06-02 12:46:45.000000000 -0400
@@ -350,6 +350,13 @@
  *		run, the implementation should call functions like
  *		nw_framer_parse_input() and nw_framer_deliver_input().
  *
+ *		Input events are edge triggered. The input_handler block
+ *		should continue to call nw_framer_parse_input()
+ *		until nw_framer_parse_input() can no longer produce
+ *		enough bytes to satisfy the request, or the protocol
+ *		needs to wait for some other event to continue processing
+ *		later.
+ *
  *		This setter is required, and must only be set from within
  *		the invocation of a nw_framer_start_handler_t.
  *
diff -ruN /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/group_descriptor.h /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/group_descriptor.h
--- /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/group_descriptor.h	2021-03-16 08:40:53.000000000 -0400
+++ /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/group_descriptor.h	2021-06-02 07:34:00.000000000 -0400
@@ -47,7 +47,7 @@
  *		endpoint is not an address endpoint representing a valid multicast
  *		group.
  */
-NW_EXPORT
+API_AVAILABLE(macos(11.0), ios(14.0), watchos(7.0), tvos(14.0))
 NW_RETURNS_RETAINED nw_group_descriptor_t
 nw_group_descriptor_create_multicast(nw_endpoint_t multicast_group);
 
@@ -66,7 +66,7 @@
  * @result Returns true if the endpoint was added, false if the endpoint was
  * 		not of a valid type and therefore not added.
  */
-NW_EXPORT
+API_AVAILABLE(macos(11.0), ios(14.0), watchos(7.0), tvos(14.0))
 bool
 nw_group_descriptor_add_endpoint(nw_group_descriptor_t descriptor,
 								 nw_endpoint_t endpoint);
@@ -101,7 +101,7 @@
  *		Returning true from the block will continue to enumerate, and returning false will stop
  *		enumerating.
  */
-NW_EXPORT
+API_AVAILABLE(macos(11.0), ios(14.0), watchos(7.0), tvos(14.0))
 void
 nw_group_descriptor_enumerate_endpoints(nw_group_descriptor_t descriptor,
 										NW_NOESCAPE nw_group_descriptor_enumerate_endpoints_block_t enumerate_block);
@@ -120,7 +120,7 @@
  * @param source
  *		An endpoint describing the source for this descriptor.
  */
-NW_EXPORT
+API_AVAILABLE(macos(11.0), ios(14.0), watchos(7.0), tvos(14.0))
 void
 nw_multicast_group_descriptor_set_specific_source(nw_group_descriptor_t multicast_descriptor,
 												  nw_endpoint_t source);
@@ -137,7 +137,7 @@
  * @param disable_unicast_traffic
  *		A boolean indicating if receiving unicast traffic should be disabled.
  */
-NW_EXPORT
+API_AVAILABLE(macos(11.0), ios(14.0), watchos(7.0), tvos(14.0))
 void
 nw_multicast_group_descriptor_set_disable_unicast_traffic(nw_group_descriptor_t multicast_descriptor,
 														  bool disable_unicast_traffic);
@@ -153,7 +153,7 @@
  *
  * @result A boolean indicating if receiving unicast traffic should be disabled.
  */
-NW_EXPORT
+API_AVAILABLE(macos(11.0), ios(14.0), watchos(7.0), tvos(14.0))
 bool
 nw_multicast_group_descriptor_get_disable_unicast_traffic(nw_group_descriptor_t multicast_descriptor);
 
diff -ruN /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/interface.h /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/interface.h
--- /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/interface.h	2021-03-16 08:47:09.000000000 -0400
+++ /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/interface.h	2021-06-02 12:43:50.000000000 -0400
@@ -75,6 +75,40 @@
 nw_interface_get_type(nw_interface_t interface);
 
 /*!
+ * @typedef nw_interface_radio_type_t
+ * @abstract
+ *		Interface radio types represent the radio technology for a network link.
+ */
+typedef enum {
+	nw_interface_radio_type_unknown = 0,
+	nw_interface_radio_type_wifi_b = 1,
+	nw_interface_radio_type_wifi_a = 2,
+	nw_interface_radio_type_wifi_g = 3,
+	nw_interface_radio_type_wifi_n = 4,
+	nw_interface_radio_type_wifi_ac = 5,
+	nw_interface_radio_type_wifi_ax = 6,
+
+	// 4G LTE
+	nw_interface_radio_type_cell_lte = 0x80,
+	// 5G Dual LTE & New Radio Sub6
+	nw_interface_radio_type_cell_endc_sub6 = 0x81,
+	// 5G Dual LTE & New Radio mmWave
+	nw_interface_radio_type_cell_endc_mmw = 0x82,
+	// 5G Stand Alone New Radio Sub6
+	nw_interface_radio_type_cell_nr_sa_sub6 = 0x83,
+	// 5G Stand Alone New Radio mmWave
+	nw_interface_radio_type_cell_nr_sa_mmw = 0x84,
+	// 3G WCDMA
+	nw_interface_radio_type_cell_wcdma = 0x85,
+	// 2G GSM
+	nw_interface_radio_type_cell_gsm = 0x86,
+	// 1x data
+	nw_interface_radio_type_cell_cdma = 0x87,
+	// HDR data
+	nw_interface_radio_type_cell_evdo = 0x88,
+} nw_interface_radio_type_t;
+
+/*!
  * @function nw_interface_get_name
  *
  * @abstract
diff -ruN /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/ip_options.h /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/ip_options.h
--- /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/ip_options.h	2021-03-16 05:20:00.000000000 -0400
+++ /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/ip_options.h	2021-06-02 05:37:41.000000000 -0400
@@ -2,7 +2,7 @@
 //  ip_options.h
 //  Network
 //
-//  Copyright (c) 2017-2019 Apple Inc. All rights reserved.
+//  Copyright (c) 2017-2020 Apple Inc. All rights reserved.
 //
 
 #ifndef __NW_IP_OPTIONS_H__
diff -ruN /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/listener.h /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/listener.h
--- /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/listener.h	2021-03-16 13:56:12.000000000 -0400
+++ /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/listener.h	2021-06-02 11:06:10.000000000 -0400
@@ -13,6 +13,7 @@
 #endif // __NW_INDIRECT__
 
 #include <Network/connection.h>
+#include <Network/connection_group.h>
 #include <Network/advertise_descriptor.h>
 #include <Network/error.h>
 
@@ -208,6 +209,41 @@
 nw_listener_set_new_connection_handler(nw_listener_t listener,
 									   _Nullable nw_listener_new_connection_handler_t handler);
 
+/*!
+ * @typedef nw_listener_new_connection_group_handler_t
+ *
+ * @abstract
+ *		The block called to notify the client of a new connection group.
+ *
+ * @param connection_group
+ *		The new connection group object. This connection group is not yet started. Set the
+ *		event handler and other settings on the connection group before calling start.
+ */
+typedef void (^nw_listener_new_connection_group_handler_t)(nw_connection_group_t connection_group);
+
+/*!
+ * @function nw_listener_set_new_connection_group_handler
+ *
+ * @abstract
+ *		Sets a new connection group handler to be called upon receiving an incoming
+ *		connection that has a multiplexing protocol in its connected protocol stack.
+ *		Must be called before nw_listener_start. Note that this handler is mutually
+ *		exclusive with the new connection handler that is set via
+ *		nw_listener_set_new_connection_handler. Only one of these handlers may
+ *		be set at one time.
+ *
+ * @param listener
+ *		The listener object.
+ *
+ * @param handler
+ *		The event handler to call when the listener receives a new connection group.
+ *		Pass NULL to remove the new connection group handler.
+ */
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0))
+void
+nw_listener_set_new_connection_group_handler(nw_listener_t listener,
+											 _Nullable nw_listener_new_connection_group_handler_t handler);
+
 #endif // __BLOCKS__
 
 /*!
diff -ruN /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/nw_object.h /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/nw_object.h
--- /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/nw_object.h	2021-03-16 13:58:29.000000000 -0400
+++ /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/nw_object.h	2021-06-02 11:06:11.000000000 -0400
@@ -2,7 +2,7 @@
 //  nw_object.h
 //  Network
 //
-//  Copyright (c) 2016-2020 Apple Inc. All rights reserved.
+//  Copyright (c) 2016-2021 Apple Inc. All rights reserved.
 //
 
 #ifndef __NW_OBJECT_H__
@@ -27,10 +27,13 @@
 
 #if OS_OBJECT_USE_OBJC
 #  define NW_OBJECT_DECL(type) OS_OBJECT_DECL(type)
+#  define NW_OBJECT_DECL_SUBCLASS(type, super) OS_OBJECT_DECL_SUBCLASS(type, super)
 #else // OS_OBJECT_USE_OBJC
-#  define NW_OBJECT_DECL(type)				\
-		struct type;						\
+#  define NW_OBJECT_DECL(type)					\
+		struct type;							\
 		typedef	struct type *type##_t
+#  define NW_OBJECT_DECL_SUBCLASS(type, super)	\
+		typedef super##_t type##_t
 #endif // OS_OBJECT_USE_OBJC
 
 
@@ -56,11 +59,17 @@
 #  define NW_RETURNS_RETAINED OS_OBJECT_RETURNS_RETAINED
 #endif // !NW_RETURNS_RETAINED
 
-#if defined(__OBJC__) && __has_feature(attribute_ns_returns_not_retained)
+#if __has_attribute(swift_async)
+#  define NW_SWIFT_DISABLE_ASYNC __attribute__((swift_async(none)))
+#else // __has_attribute(swift_async)
+#  define NW_SWIFT_DISABLE_ASYNC
+#endif // __has_attribute(swift_async)
+
+#if defined(__OBJC__) && OS_OBJECT_USE_OBJC && __has_feature(attribute_ns_returns_not_retained)
 #  define NW_RETURNS_NOT_RETAINED __attribute__((ns_returns_not_retained))
-#else // __OBJC__ && ns_returns_not_retained
+#else // __OBJC__ && OS_OBJECT_USE_OBJC && ns_returns_not_retained
 #  define NW_RETURNS_NOT_RETAINED
-#endif // __OBJC__ && ns_returns_not_retained
+#endif // __OBJC__ && OS_OBJECT_USE_OBJC && ns_returns_not_retained
 
 #if __has_attribute(noescape)
 #define NW_NOESCAPE __attribute__((__noescape__))
@@ -74,6 +83,12 @@
 #define NW_DIRECT
 #endif // objc_direct
 
+#if __has_attribute(objc_direct_members)
+#define NW_DIRECT_MEMBERS __attribute__((objc_direct_members))
+#else // objc_direct_members
+#define NW_DIRECT_MEMBERS
+#endif // objc_direct_members
+
 #if defined(__OBJC__) && __has_attribute(ns_consumed)
 #  define NW_RELEASES_ARGUMENT __attribute__((__ns_consumed__))
 #else // __OBJC__ && ns_consumed
@@ -101,24 +116,20 @@
 #endif // !NW_UNSAFE_UNRETAINED
 
 #ifndef NW_EXTERNALLY_RETAINED
-#if defined(__OBJC__) && __has_attribute(objc_externally_retained)
+#if defined(__OBJC__) && __has_feature(objc_arc) && __has_attribute(objc_externally_retained)
 #   define NW_EXTERNALLY_RETAINED              __attribute__((objc_externally_retained))
 #   define NW_ASSUME_EXTERNALLY_RETAINED_BEGIN _Pragma("clang attribute NW_ASSUME_EXTERNALLY_RETAINED.push(__attribute__((objc_externally_retained)), apply_to=any(function, block, objc_method))")
 #   define NW_ASSUME_EXTERNALLY_RETAINED_END   _Pragma("clang attribute NW_ASSUME_EXTERNALLY_RETAINED.pop")
-#else // __OBJC__ && objc_externally_retained
+#else // __OBJC__ && objc_arc && objc_externally_retained
 #   define NW_EXTERNALLY_RETAINED
 #   define NW_ASSUME_EXTERNALLY_RETAINED_BEGIN
 #   define NW_ASSUME_EXTERNALLY_RETAINED_END
-#endif // __OBJC__ && objc_externally_retained
+#endif // __OBJC__ && objc_arc && objc_externally_retained
 #endif // !NW_EXTERNALLY_RETAINED
 
-#ifndef NW_EXPORT
-#  define NW_EXPORT __attribute__((visibility("default")))
-#endif // !NW_EXPORT
-
 #ifndef NW_EXPORT_PROJECT
-#  define NW_EXPORT_PROJECT NW_EXPORT
-#endif // !NW_EXPORT
+#  define NW_EXPORT_PROJECT __attribute__((visibility("default")))
+#endif // !NW_EXPORT_PROJECT
 
 #ifndef NW_NOT_i386_MAC
 #  if !TARGET_OS_OSX || !defined(__i386__)
@@ -150,6 +161,24 @@
 
 #endif // !OS_OBJECT_USE_OBJC_RETAIN_RELEASE
 
+#ifndef NW_ENUM
+#if __has_attribute(enum_extensibility)
+#define __NW_ENUM_ATTRIBUTES __attribute__((enum_extensibility(open)))
+#else // __has_attribute(enum_extensibility)
+#define __NW_ENUM_ATTRIBUTES
+#endif // __has_attribute(enum_extensibility)
+
+#define __NW_ENUM_GET_MACRO(_1, _2, NAME, ...) NAME
+#if (defined(__cplusplus) && __cplusplus >= 201103L && (__has_extension(cxx_strong_enums) || __has_feature(objc_fixed_enum))) || (!defined(__cplusplus) && __has_feature(objc_fixed_enum))
+#define __NW_NAMED_ENUM(_type, _name)     enum __NW_ENUM_ATTRIBUTES _name : _type _name; enum _name : _type
+#define __NW_ANON_ENUM(_type)             enum __NW_ENUM_ATTRIBUTES : _type
+#else // (defined(__cplusplus) && __cplusplus >= 201103L && (__has_extension(cxx_strong_enums) || __has_feature(objc_fixed_enum))) || (!defined(__cplusplus) && __has_feature(objc_fixed_enum))
+#define __NW_NAMED_ENUM(_type, _name) _type _name; enum
+#define __NW_ANON_ENUM(_type) enum
+#endif // (defined(__cplusplus) && __cplusplus >= 201103L && (__has_extension(cxx_strong_enums) || __has_feature(objc_fixed_enum))) || (!defined(__cplusplus) && __has_feature(objc_fixed_enum))
+#define NW_ENUM(...) __NW_ENUM_GET_MACRO(__VA_ARGS__, __NW_NAMED_ENUM, __NW_ANON_ENUM, )(__VA_ARGS__)
+#endif // NW_ENUM
+
 
 NW_OBJECT_DECL(nw_object);
 
diff -ruN /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/parameters.h /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/parameters.h
--- /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/parameters.h	2021-03-16 08:47:09.000000000 -0400
+++ /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/parameters.h	2021-06-02 05:35:04.000000000 -0400
@@ -2,7 +2,7 @@
 //  parameters.h
 //  Network
 //
-//  Copyright (c) 2014-2020 Apple Inc. All rights reserved.
+//  Copyright (c) 2014-2021 Apple Inc. All rights reserved.
 //
 
 #ifndef __NW_PARAMETERS_H__
@@ -175,6 +175,27 @@
 nw_parameters_create_custom_ip(uint8_t custom_ip_protocol_number,
 							   nw_parameters_configure_protocol_block_t configure_ip);
 
+/*!
+ * @function nw_parameters_create_quic
+ *
+ * @abstract
+ *		Creates a parameters object that is configured for QUIC. The caller must
+ *		pass in a block to configure options.
+ *
+ * @param configure_quic
+ *		A block to configure QUIC. The caller must pass a custom
+ *		block to configure the QUIC options.
+ *
+ * @result
+ *		Returns an allocated nw_parameters_t object on success.
+ *		Callers are responsible for deallocating using nw_release(obj) or [obj release].
+ *		These objects support ARC.
+ *		Returns NULL on failure. Fails due to invalid parameters.
+ */
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0))
+NW_RETURNS_RETAINED nw_parameters_t
+nw_parameters_create_quic(nw_parameters_configure_protocol_block_t configure_quic);
+
 #endif // __BLOCKS__
 
 /*!
@@ -237,6 +258,53 @@
 nw_parameters_set_privacy_context(nw_parameters_t parameters,
 								  nw_privacy_context_t privacy_context);
 
+/*!
+ * @typedef nw_parameters_attribution_t
+ * @abstract
+ *		Attribution values can be used to indicate who determined the network content being accessed.
+ */
+typedef NW_ENUM(uint8_t, nw_parameters_attribution_t) {
+	/*! @const nw_parameters_attribution_developer Developer chosen content. */
+	nw_parameters_attribution_developer = 1,
+	/*! @const nw_parameters_attribution_user User chosen content. */
+	nw_parameters_attribution_user = 2
+};
+
+/*!
+ * @function nw_parameters_set_attribution
+ *
+ * @abstract
+ *        In order to help differentiate communication with domains requested by the user from those requested by the
+ *        developer, attribution may be used. Attribution defaults to nw_parameters_attribution_developer. Setting
+ *        attribution to nw_parameters_attribution_user indicates that the networking performed using these parameters
+ *        is directed to content specified by the user, not the developer.
+ *
+ * @param parameters
+ *		The parameters to modify.
+ *
+ * @param attribution
+ *		The entity to attribute the network operations to.
+ */
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0))
+void
+nw_parameters_set_attribution(nw_parameters_t parameters, nw_parameters_attribution_t attribution);
+
+/*!
+ * @function nw_parameters_get_attribution
+ *
+ * @abstract
+ *		Returns the attribution set on the parameters.
+ *
+ * @param parameters
+ *		The parameters to check.
+ *
+ * @result
+ *		Returns the attribution property of the parameters.
+ */
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0))
+nw_parameters_attribution_t
+nw_parameters_get_attribution(nw_parameters_t parameters);
+
 #pragma mark - Path Selection
 
 /*!
diff -ruN /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/quic_options.h /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/quic_options.h
--- /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/quic_options.h	1969-12-31 19:00:00.000000000 -0500
+++ /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/quic_options.h	2021-06-02 11:06:11.000000000 -0400
@@ -0,0 +1,790 @@
+//
+//  quic_options.h
+//  Network
+//
+//  Copyright (c) 2020-2021 Apple Inc. All rights reserved.
+//
+
+#ifndef __NW_QUIC_OPTIONS_H__
+#define __NW_QUIC_OPTIONS_H__
+
+#ifndef __NW_INDIRECT__
+#warning "Please include <Network/Network.h> instead of this file directly."
+#endif // __NW_INDIRECT__
+
+#include <Network/protocol_options.h>
+
+#include <Security/Security.h>
+
+
+__BEGIN_DECLS
+
+NW_ASSUME_NONNULL_BEGIN
+
+#pragma mark - QUIC
+
+/*!
+ * @function nw_protocol_copy_quic_definition
+ *
+ * @abstract
+ *		Access the definition of the default system protocol implementation
+ *		of QUIC. This protocol can be used as part of a
+ *		connection's protocol stack as a transport protocol.
+ *
+ * @result
+ *		Returns a retained protocol definition object.
+ */
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0))
+NW_RETURNS_RETAINED nw_protocol_definition_t
+nw_protocol_copy_quic_definition(void);
+
+/*!
+ * @function nw_quic_create_options
+ *
+ * @abstract
+ *		Create an instance of QUIC protocol options. This object can be added
+ *		to an nw_protocol_stack_t to be used in an nw_connection_t or
+ *		an nw_listener_t.
+ *
+ * @result
+ *		Returns a retained protocol options object.
+ */
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0))
+NW_RETURNS_RETAINED nw_protocol_options_t
+nw_quic_create_options(void);
+
+/*!
+ * @function nw_protocol_options_is_quic
+ *
+ * @abstract
+ *		Checks whether the given protocol options define a QUIC protocol.
+ *
+ * @result
+ *		Returns true if the protocol options are for QUIC, false otherwise.
+ */
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0))
+bool
+nw_protocol_options_is_quic(nw_protocol_options_t options);
+
+/*!
+ * @function nw_quic_add_tls_application_protocol
+ *
+ * @abstract
+ *		Adds an Application-Layer Protocol Negotiation (ALPN) value to present in the TLS handshake.
+ *
+ * @param options
+ *		An nw_protocol_options_t for QUIC.
+ */
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0))
+void
+nw_quic_add_tls_application_protocol(nw_protocol_options_t options, const char *application_protocol);
+
+/*!
+ * @function nw_quic_copy_sec_protocol_options
+ *
+ * @abstract
+ *		Access the sec_protocol_options_t for a given QUIC
+ *		options instance. See <Security/SecProtocolOptions.h> for functions
+ *		to further configure security options.
+ *
+ * @param options
+ *		An nw_protocol_options_t for QUIC.
+ *
+ * @result
+ *		Returns a retained sec_protocol_options_t object.
+ */
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0))
+NW_RETURNS_RETAINED sec_protocol_options_t
+nw_quic_copy_sec_protocol_options(nw_protocol_options_t options);
+
+#pragma mark - QUIC Options
+
+/*!
+ * @function nw_quic_get_stream_is_unidirectional
+ *
+ * @abstract
+ *		Returns whether or not a QUIC stream is unidirectional.
+ *
+ * @param options
+ *		An nw_protocol_options_t for a QUIC stream.
+ *
+ * @result
+ *		True if the stream is unidirectional, false otherwise.
+ */
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0))
+bool
+nw_quic_get_stream_is_unidirectional(nw_protocol_options_t options);
+
+/*!
+ * @function nw_quic_set_stream_is_unidirectional
+ *
+ * @abstract
+ *		Set whether or not a QUIC stream should be unidirectional.
+ *
+ * @param options
+ *		An nw_protocol_options_t for a QUIC stream.
+ *
+ * @param is_unidirectional
+ *		True if the stream is unidirectional, false otherwise.
+ */
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0))
+void
+nw_quic_set_stream_is_unidirectional(nw_protocol_options_t options,
+									 bool is_unidirectional);
+
+/*!
+ * @function nw_quic_get_initial_max_data
+ *
+ * @abstract
+ *		Get the initial_max_data transport parameter on a QUIC
+ *		connection.
+ *
+ * @param options
+ *		An nw_protocol_options_t for QUIC.
+ *
+ * @result
+ *		The initial_max_data that a client
+ *		is willing to receive on a connection.
+ */
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0))
+uint64_t
+nw_quic_get_initial_max_data(nw_protocol_options_t options);
+
+/*!
+ * @function nw_quic_set_initial_max_data
+ *
+ * @abstract
+ *		Set the initial_max_data transport parameter on a QUIC
+ *		connection. Setting this option requires
+ *		initial_max_stream_data_bidirectional_local,
+ *		initial_max_stream_data_bidirectional_remote and
+ *		initial_max_stream_data_unidirectional also to be set.
+ *
+ * @param options
+ *		An nw_protocol_options_t for QUIC.
+ *
+ * @param initial_max_data
+ *		The initial_max_data controls how much data, in bytes, a client
+ *		is willing to receive on a connection.
+ */
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0))
+void
+nw_quic_set_initial_max_data(nw_protocol_options_t options,
+							 uint64_t initial_max_data);
+
+/*!
+ * @function nw_quic_get_max_udp_payload_size
+ *
+ * @abstract
+ *		Get the maximum length of a QUIC packet (UDP payload)
+ *		that the client is willing to receive on a connection, in bytes.
+ *
+ * @param options
+ *		An nw_protocol_options_t for QUIC.
+ *
+ * @result
+ *		The max_udp_payload_size value, in bytes.
+ */
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0))
+uint16_t
+nw_quic_get_max_udp_payload_size(nw_protocol_options_t options);
+
+/*!
+ * @function nw_quic_set_max_udp_payload_size
+ *
+ * @abstract
+ *		Define the maximum length of a QUIC packet (UDP payload)
+ *		that the client is willing to receive on a connection, in bytes.
+ *
+ * @param options
+ *		An nw_protocol_options_t for QUIC.
+ *
+ * @param max_udp_payload_size
+ *		The max_udp_payload_size value, in bytes.
+ */
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0))
+void
+nw_quic_set_max_udp_payload_size(nw_protocol_options_t options,
+								 uint16_t max_udp_payload_size);
+
+/*!
+ * @function nw_quic_get_idle_timeout
+ *
+ * @abstract
+ *		Get the idle timeout value for the QUIC connection. If no packets are sent or received
+ *		within this timeout, the QUIC connection will be closed.
+ *
+ * @param options
+ *		An nw_protocol_options_t for QUIC.
+ *
+ * @result
+ *		The idle_timeout value, in milliseconds.
+ */
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0))
+uint32_t
+nw_quic_get_idle_timeout(nw_protocol_options_t options);
+
+/*!
+ * @function nw_quic_set_idle_timeout
+ *
+ * @abstract
+ *		Define an idle timeout value for the QUIC connection. If no packets are sent or received
+ *		within this timeout, the QUIC connection will be closed.
+ *
+ * @param options
+ *		An nw_protocol_options_t for QUIC.
+ *
+ * @param idle_timeout
+ *		The idle_timeout value, in milliseconds.
+ */
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0))
+void
+nw_quic_set_idle_timeout(nw_protocol_options_t options,
+						 uint32_t idle_timeout);
+
+/*!
+ * @function nw_quic_get_initial_max_streams_bidirectional
+ *
+ * @abstract
+ *		Get the initial value of maximum bidirectional streams
+ *		that the peer can initiate on a QUIC connection.
+ *
+ * @param options
+ *		An nw_protocol_options_t for QUIC.
+ *
+ * @result
+ *		The initial value for the maximum concurrent bidirectional streams.
+ */
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0))
+uint64_t
+nw_quic_get_initial_max_streams_bidirectional(nw_protocol_options_t options);
+
+/*!
+ * @function nw_quic_set_initial_max_streams_bidirectional
+ *
+ * @abstract
+ *		Set the initial value of maximum bidirectional streams
+ *		that the peer can initiate on a QUIC connection.
+ *
+ * @param options
+ *		An nw_protocol_options_t for QUIC.
+ *
+ * @param initial_max_streams_bidirectional
+ *		The initial value for the maximum concurrent bidirectional streams.
+ */
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0))
+void
+nw_quic_set_initial_max_streams_bidirectional(nw_protocol_options_t options,
+											  uint64_t initial_max_streams_bidirectional);
+
+/*!
+ * @function nw_quic_get_initial_max_streams_unidirectional
+ *
+ * @abstract
+ *		Get the initial value of maximum unidirectional streams
+ *		that the peer can initiate on a QUIC connection.
+ *
+ * @param options
+ *		An nw_protocol_options_t for QUIC.
+ *
+ * @result
+ *		The initial value for the maximum concurrent unidirectional streams.
+ */
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0))
+uint64_t
+nw_quic_get_initial_max_streams_unidirectional(nw_protocol_options_t options);
+
+/*!
+ * @function nw_quic_set_initial_max_streams_unidirectional
+ *
+ * @abstract
+ *		Set the initial value of maximum unidirectional streams
+ *		that the peer can initiate on a QUIC connection.
+ *
+ * @param options
+ *		An nw_protocol_options_t for QUIC.
+ *
+ * @param initial_max_streams_unidirectional
+ *		The initial value for the maximum concurrent unidirectional streams.
+ */
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0))
+void
+nw_quic_set_initial_max_streams_unidirectional(nw_protocol_options_t options,
+											   uint64_t initial_max_streams_unidirectional);
+
+/*!
+ * @function nw_quic_get_initial_max_stream_data_bidirectional_local
+ *
+ * @abstract
+ *		Get the initial_max_stream_data_bidi_local transport parameter
+ *		on a QUIC connection.
+ *
+ * @param options
+ *		An nw_protocol_options_t for QUIC.
+ *
+ * @result
+ *		How much data the client is willing to receive on a locally initiated stream.
+ */
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0))
+uint64_t
+nw_quic_get_initial_max_stream_data_bidirectional_local(nw_protocol_options_t options);
+
+/*!
+ * @function nw_quic_set_initial_max_stream_data_bidirectional_local
+ *
+ * @abstract
+ *		Set the initial_max_stream_data_bidi_local transport parameter
+ *		on a QUIC connection.
+ *
+ * @param options
+ *		An nw_protocol_options_t for QUIC.
+ *
+ * @param initial_max_stream_data_bidirectional_local
+ *		The initial_max_stream_data_bidi_local controls how much data
+ *		the client is willing to receive on a locally initiated stream.
+ */
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0))
+void
+nw_quic_set_initial_max_stream_data_bidirectional_local(nw_protocol_options_t options,
+														uint64_t initial_max_stream_data_bidirectional_local);
+
+/*!
+ * @function nw_quic_get_initial_max_stream_data_bidirectional_remote
+ *
+ * @abstract
+ *		Get the initial_max_stream_data_bidi_remote transport parameter
+ *		on a QUIC connection.
+ *
+ * @param options
+ *		An nw_protocol_options_t for QUIC.
+ *
+ * @result
+ *		How much data the client is willing to receive on a remotely initiated stream.
+ */
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0))
+uint64_t
+nw_quic_get_initial_max_stream_data_bidirectional_remote(nw_protocol_options_t options);
+
+/*!
+ * @function nw_quic_set_initial_max_stream_data_bidirectional_remote
+ *
+ * @abstract
+ *		Set the initial_max_stream_data_bidi_remote transport parameter
+ *		on a QUIC connection.
+ *
+ * @param options
+ *		An nw_protocol_options_t for QUIC.
+ *
+ * @param initial_max_stream_data_bidirectional_remote
+ *		The initial_max_stream_data_bidi_remote controls how much data
+ *		the client is willing to receive on a remotely initiated stream.
+ */
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0))
+void
+nw_quic_set_initial_max_stream_data_bidirectional_remote(nw_protocol_options_t options,
+														 uint64_t initial_max_stream_data_bidirectional_remote);
+
+/*!
+ * @function nw_quic_get_initial_max_stream_data_unidirectional
+ *
+ * @abstract
+ *		Get the initial_max_stream_data_uni transport parameter
+ *		on a QUIC connection.
+ *
+ * @param options
+ *		An nw_protocol_options_t for QUIC.
+ *
+ * @result
+ *		How much data the client is willing to receive on a unidirectional stream.
+ */
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0))
+uint64_t
+nw_quic_get_initial_max_stream_data_unidirectional(nw_protocol_options_t options);
+
+/*!
+ * @function nw_quic_set_initial_max_stream_data_unidirectional
+ *
+ * @abstract
+ *		Set the initial_max_stream_data_uni transport parameter
+ *		on a QUIC connection.
+ *
+ * @param options
+ *		An nw_protocol_options_t for QUIC.
+ *
+ * @param initial_max_stream_data_unidirectional
+ *		The initial_max_stream_data_uni controls how much data
+ *		the client is willing to receive on a unidirectional stream.
+ */
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0))
+void
+nw_quic_set_initial_max_stream_data_unidirectional(nw_protocol_options_t options,
+												   uint64_t initial_max_stream_data_unidirectional);
+
+#pragma mark - QUIC Metadata
+
+/**
+ * @typedef nw_quic_stream_type_t
+ * @abstract
+ *    Represents the type of a QUIC stream.
+ */
+typedef enum {
+	/*! @const nw_quic_stream_type_unknown 		A QUIC stream whose direction can not be determined. */
+	nw_quic_stream_type_unknown = 0,
+	/*! @const nw_quic_stream_type_bidirectional	A bidirectional QUIC stream. */
+	nw_quic_stream_type_bidirectional = 1,
+	/*! @const nw_quic_stream_type_unidirectional 	An unidirectional QUIC stream. */
+	nw_quic_stream_type_unidirectional = 2,
+} nw_quic_stream_type_t;
+
+/*!
+ * @function nw_protocol_metadata_is_quic
+ *
+ * @abstract
+ *		Checks if a protocol metadata object is compatible with the
+ *		accessors defined in this file for the default system
+ *		implementation of QUIC.
+ *
+ * @result
+ *		Returns true if the metadata is for the default system QUIC,
+ *		false otherwise.
+ */
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0))
+bool
+nw_protocol_metadata_is_quic(nw_protocol_metadata_t metadata);
+
+/*!
+ * @function nw_quic_copy_sec_protocol_metadata
+ *
+ * @abstract
+ *		Access the sec_protocol_metadata_t for a given QUIC connection
+ *		metadata instance. See <Security/SecProtocolOptions.h> for functions
+ *		to further configure security options.
+ *
+ *		Will be filled out on connected instances of QUIC for metadata
+ *		returned by nw_connection_copy_protocol_metadata.
+ *
+ * @param metadata
+ *		An nw_protocol_metadata_t for QUIC.
+ *
+ * @result
+ *		Returns a retained sec_protocol_metadata_t object.
+ */
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0))
+NW_RETURNS_RETAINED sec_protocol_metadata_t
+nw_quic_copy_sec_protocol_metadata(nw_protocol_metadata_t metadata);
+
+/*!
+ * @function nw_quic_get_stream_id
+ *
+ * @abstract
+ *		Get the QUIC stream ID.
+ *
+ * @param metadata
+ *		A nw_protocol_metadata_t for a QUIC stream.
+ *
+ * @result
+ *		Returns the QUIC stream id.
+ */
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0))
+uint64_t
+nw_quic_get_stream_id(nw_protocol_metadata_t metadata);
+
+/*!
+ * @function nw_quic_stream_get_type
+ *
+ * @abstract
+ *        Describes the type of the QUIC stream.
+ *
+ * @param stream_metadata
+ *        A nw_protocol_metadata_t for a QUIC stream.
+ *
+ * @result
+ *        Returns the type of the QUIC stream, stored in nw_quic_stream_type_t.
+ *        If the type can not be determined, returns nw_quic_stream_type_unknown.
+ */
+API_UNAVAILABLE(macos, ios, watchos, tvos)
+uint8_t
+nw_quic_get_stream_type(nw_protocol_metadata_t stream_metadata);
+
+/*!
+ * @function nw_quic_get_stream_application_error
+ *
+ * @abstract
+ *		Access the Application Error value received from the peer in a stream close
+ *		message.
+ *
+ * @param metadata
+ *		A nw_protocol_metadata_t for a QUIC stream.
+ *
+ * @result
+ *		Returns the Application Error code value received from by the peer,
+ *		or UINT64_MAX if no error has been received.
+ */
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0))
+uint64_t
+nw_quic_get_stream_application_error(nw_protocol_metadata_t metadata);
+
+/*!
+ * @function nw_quic_set_stream_application_error
+ *
+ * @abstract
+ *		Set an Application Error value to send to the peer when the stream
+ *		is closed.
+ *
+ * @param metadata
+ *		A nw_protocol_metadata_t for a QUIC stream.
+ *
+ * @param application_error
+ *		An application-specific error code value.
+ */
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0))
+void
+nw_quic_set_stream_application_error(nw_protocol_metadata_t metadata,
+									 uint64_t application_error);
+
+/*!
+ * @function nw_quic_get_local_max_streams_bidirectional
+ *
+ * @abstract
+ *      Get the most recent value of the maximum number of bidirectional streams that the peer can create.
+ *
+ * @param metadata
+ *		A nw_protocol_metadata_t for QUIC.
+ *
+ * @result
+ *		Returns the most recent value of the peer's max number of bidirectional streams.
+ */
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0))
+uint64_t
+nw_quic_get_local_max_streams_bidirectional(nw_protocol_metadata_t metadata);
+
+/*!
+ * @function nw_quic_set_local_max_streams_bidirectional
+ *
+ * @abstract
+ *		Sets the maximum number of bidirectional streams that the peer can create.
+ *
+ * @param metadata
+ *		A nw_protocol_metadata_t for QUIC.
+ *
+ * @param max_streams_bidirectional
+ *		The new number of maximum bidirectional streams.
+ */
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0))
+void
+nw_quic_set_local_max_streams_bidirectional(nw_protocol_metadata_t metadata,
+											uint64_t max_streams_bidirectional);
+
+/*!
+ * @function nw_quic_get_local_max_streams_unidirectional
+ *
+ * @abstract
+ *      Get the most recent value of the maximum number of unidirectional streams that the peer can create.
+ *
+ * @param metadata
+ *		A nw_protocol_metadata_t for QUIC.
+ *
+ * @result
+ *		Returns the most recent value of the peer's max number of unidirectional streams.
+ */
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0))
+uint64_t
+nw_quic_get_local_max_streams_unidirectional(nw_protocol_metadata_t metadata);
+
+/*!
+ * @function nw_quic_set_local_max_streams_unidirectional
+ *
+ * @abstract
+ *		Sets the maximum number of undirectional streams that the peer can create.
+ *
+ * @param metadata
+ *		A nw_protocol_metadata_t for QUIC.
+ *
+ * @param max_streams_unidirectional
+ *		The new number of maximum unidirectional streams.
+ */
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0))
+void
+nw_quic_set_local_max_streams_unidirectional(nw_protocol_metadata_t metadata,
+											 uint64_t max_streams_unidirectional);
+
+/*!
+ * @function nw_quic_get_remote_max_streams_bidirectional
+ *
+ * @abstract
+ * 	    Get the maximum number of bidirectional streams advertised by peer that an application
+ *  	is allowed to create.
+ *
+ *  	Note that while attempts to create streams above this limit will
+ *  	be blocked until the server increases the limit, these blocked
+ *  	attempts will cause a STREAMS_BLOCKED frame to be sent to the
+ *  	server. This informs the server that the client has more streams
+ *  	it would like to create. As a result, the caller should attempt to
+ *  	create streams over this limit if it desires more streams.
+ *
+ * @param metadata
+ *		A nw_protocol_metadata_t for QUIC.
+ *
+ * @result
+ *		Returns the most recent value of the peer's advertised max number of bidirectional streams.
+ */
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0))
+uint64_t
+nw_quic_get_remote_max_streams_bidirectional(nw_protocol_metadata_t metadata);
+
+/*!
+ * @function nw_quic_get_remote_max_streams_unidirectional
+ *
+ * @abstract
+ * 	    Get the maximum number of unidirectional streams advertised by peer that an application
+ *  	is allowed to create.
+ *
+ *  	Note that while attempts to create streams above this limit will
+ *  	be blocked until the server increases the limit, these blocked
+ *  	attempts will cause a STREAMS_BLOCKED frame to be sent to the
+ *  	server. This informs the server that the client has more streams
+ *  	it would like to create. As a result, the caller should attempt to
+ *  	create streams over this limit if it desires more streams.
+ *
+ * @param metadata
+ *		A nw_protocol_metadata_t for QUIC.
+ *
+ * @result
+ *		Returns the most recent value of the peer's advertised max number of unidirectional streams.
+ */
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0))
+uint64_t
+nw_quic_get_remote_max_streams_unidirectional(nw_protocol_metadata_t metadata);
+
+/*!
+ * @function nw_quic_get_application_error
+ *
+ * @abstract
+ *		Access the Application Error value received from the peer in a connection close
+ *		message.
+ *
+ * @param metadata
+ *		A nw_protocol_metadata_t for QUIC.
+ *
+ * @result
+ *		Returns the Application Error code value received from by the peer,
+ *		or UINT64_MAX if no	error has been received.
+ */
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0))
+uint64_t
+nw_quic_get_application_error(nw_protocol_metadata_t metadata);
+
+/*!
+ * @function nw_quic_get_application_error_reason
+ *
+ * @abstract
+ *		Access the Application Error reason string received from the peer in a connection
+ *		close message.
+ *
+ * @param metadata
+ *		A nw_protocol_metadata_t for QUIC.
+ *
+ * @result
+ *		Returns the Application Error reason received from by the peer,
+ *		or NULL if no error reason has been received.
+ */
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0))
+const char * _Nullable
+nw_quic_get_application_error_reason(nw_protocol_metadata_t metadata);
+
+/*!
+ * @function nw_quic_set_application_error
+ *
+ * @abstract
+ *		Set the Application Error value to send to the peer in a connection close
+ *		message.
+ *
+ * @param metadata
+ *		A nw_protocol_metadata_t for QUIC.
+ *
+ * @param application_error
+ *		Sets the Application Error code value.
+ *
+ * @param reason
+ *		An optional reason string to associate with the error.
+ */
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0))
+void
+nw_quic_set_application_error(nw_protocol_metadata_t metadata,
+							  uint64_t application_error,
+							  const char * _Nullable reason);
+
+/*!
+ * @function nw_quic_get_keepalive_interval
+ *
+ * @abstract
+ *		Retrieves the keep-alive interval set on a QUIC connection.
+ *
+ * @param metadata
+ *		A nw_protocol_metadata_t for QUIC.
+ *
+ * @result
+ *		Returns value of the keep-alive interval, in seconds,
+ *		or 0 if the keep-alive timer is disabled.
+ */
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0))
+uint16_t
+nw_quic_get_keepalive_interval(nw_protocol_metadata_t metadata);
+
+/*!
+ * @function nw_quic_set_keepalive_interval
+ *
+ * @abstract
+ *		Changes the keep-alive interval for QUIC.
+ *
+ * @discussion
+ * 		QUIC connections are encrypted and operate over the UDP protocol
+ * 		which makes it hard for Network Address	Translators and firewalls
+ * 		to track their state. For this reason, these middleboxes may
+ * 		use short timeouts for QUIC flows. By sending keep-alive packets
+ * 		(QUIC PING frames), the endpoint can maintain
+ * 		state of the flow across the network.
+ * 		Keep-alives should only be enabled while there is an outstanding
+ * 		exchange of information with the remote endpoint that has not yet
+ * 		completed, it is not recommended to enable keep-alive packets on an
+ * 		idle connection that is not expecting to send or receive data in
+ * 		the near future.
+ *
+ * @param metadata
+ *		A nw_protocol_metadata_t for QUIC.
+ *
+ * @param keepalive_interval
+ * 		The keep-alive interval for QUIC, in seconds,
+ * 		or 0 if the keep-alive timer is disabled.
+ * 		Pass `NW_QUIC_CONNECTION_DEFAULT_KEEPALIVE` to use the default
+ * 		keep-alive interval.
+ */
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0))
+void
+nw_quic_set_keepalive_interval(nw_protocol_metadata_t metadata,
+							   uint16_t keepalive_interval);
+
+#pragma mark - QUIC Metadata Get Only
+
+/*!
+ * @function nw_quic_get_remote_idle_timeout
+ *
+ * @abstract
+ *		Access the idle_timeout value in milliseconds received from the peer
+ *		in the transport parameters.
+ *
+ * @param metadata
+ *		A nw_protocol_metadata_t for QUIC.
+ *
+ * @result
+ *		Returns the idle_timeout value in milliseconds received from the peer.
+ */
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0))
+uint64_t
+nw_quic_get_remote_idle_timeout(nw_protocol_metadata_t metadata);
+
+NW_ASSUME_NONNULL_END
+
+__END_DECLS
+
+#endif // __NW_QUIC_OPTIONS_H__
diff -ruN /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/tcp_options.h /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/tcp_options.h
--- /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/tcp_options.h	2021-03-16 13:56:13.000000000 -0400
+++ /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/tcp_options.h	2021-06-02 11:06:12.000000000 -0400
@@ -2,7 +2,7 @@
 //  tcp_options.h
 //  Network
 //
-//  Copyright (c) 2017-2019 Apple Inc. All rights reserved.
+//  Copyright (c) 2017-2020 Apple Inc. All rights reserved.
 //
 
 #ifndef __NW_TCP_OPTIONS_H__
@@ -336,6 +336,38 @@
 nw_tcp_options_set_disable_ecn(nw_protocol_options_t options,
 							   bool disable_ecn);
 
+/*!
+ * @typedef nw_multipath_version_t
+ * @abstract
+ *		Multipath versions represent the MPTCP standard versions
+ */
+typedef enum {
+	/*! @const nw_multipath_version_unspecified MPTCP unspecified version  */
+	nw_multipath_version_unspecified = -1,
+	/*! @const nw_multipath_version_0 MPTCP version 0 */
+	nw_multipath_version_0 = 0,
+	/*! @const nw_multipath_version_1 MPTCP version 1 */
+	nw_multipath_version_1 = 1,
+} nw_multipath_version_t;
+
+/*!
+ * @function nw_tcp_options_set_multipath_force_version
+ *
+ * @abstract
+ *		Configure MPTCP to use a specified MPTCP standard version.
+ *		This ignores the cached value from MPTCP version discovery.
+ *
+ * @param options
+ *		A TCP protocol options object.
+ *
+ * @param multipath_force_version
+ *		The MPTCP version.
+ */
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0))
+void
+nw_tcp_options_set_multipath_force_version(nw_protocol_options_t options,
+										   nw_multipath_version_t multipath_force_version);
+
 #pragma mark - Metadata
 
 /*!
diff -ruN /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/tls_options.h /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/tls_options.h
--- /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/tls_options.h	2021-03-16 08:47:08.000000000 -0400
+++ /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Network.framework/Headers/tls_options.h	2021-06-02 12:46:44.000000000 -0400
@@ -60,7 +60,7 @@
  * @abstract
  *		Access the sec_protocol_options_t for a given network protocol
  *		options instance. See <Security/SecProtocolOptions.h> for functions
- *		to futher configure security options.
+ *		to further configure security options.
  *
  * @param options
  *		An nw_protocol_options_t that has been created for TLS.
Clone this wiki locally