Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Network] Make P/Invokes in NWProtocol* have blittable signatures. #20638

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions src/Network/NWProtocolDefinition.cs
Original file line number Diff line number Diff line change
Expand Up @@ -43,16 +43,15 @@ public NWProtocolDefinition (NativeHandle handle, bool owns) : base (handle, own
#endif

[DllImport (Constants.NetworkLibrary)]
[return: MarshalAs (UnmanagedType.I1)]
static extern bool nw_protocol_definition_is_equal (OS_nw_protocol_definition definition1, OS_nw_protocol_definition definition2);
static extern byte nw_protocol_definition_is_equal (OS_nw_protocol_definition definition1, OS_nw_protocol_definition definition2);

public bool Equals (object other)
{
if (other is null)
return false;
if (!(other is NWProtocolDefinition otherDefinition))
return false;
return nw_protocol_definition_is_equal (GetCheckedHandle (), otherDefinition.Handle);
return nw_protocol_definition_is_equal (GetCheckedHandle (), otherDefinition.Handle) != 0;
}

[DllImport (Constants.NetworkLibrary)]
Expand Down
10 changes: 5 additions & 5 deletions src/Network/NWProtocolIPOptions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -47,13 +47,13 @@ public void SetHopLimit (nuint hopLimit)
=> nw_ip_options_set_hop_limit (GetCheckedHandle (), (byte) hopLimit);

public void SetUseMinimumMtu (bool useMinimumMtu)
=> nw_ip_options_set_use_minimum_mtu (GetCheckedHandle (), useMinimumMtu);
=> nw_ip_options_set_use_minimum_mtu (GetCheckedHandle (), useMinimumMtu.AsByte ());

public void SetDisableFragmentation (bool disableFragmentation)
=> nw_ip_options_set_disable_fragmentation (GetCheckedHandle (), disableFragmentation);
=> nw_ip_options_set_disable_fragmentation (GetCheckedHandle (), disableFragmentation.AsByte ());

public void SetCalculateReceiveTime (bool shouldCalculateReceiveTime)
=> nw_ip_options_set_calculate_receive_time (GetCheckedHandle (), shouldCalculateReceiveTime);
=> nw_ip_options_set_calculate_receive_time (GetCheckedHandle (), shouldCalculateReceiveTime.AsByte ());

public void SetIPLocalAddressPreference (NWIPLocalAddressPreference localAddressPreference)
=> nw_ip_options_set_local_address_preference (GetCheckedHandle (), localAddressPreference);
Expand All @@ -71,7 +71,7 @@ public void SetIPLocalAddressPreference (NWIPLocalAddressPreference localAddress
[MacCatalyst (15, 0)]
#endif
[DllImport (Constants.NetworkLibrary)]
static extern void nw_ip_options_set_disable_multicast_loopback (OS_nw_protocol_options options, [MarshalAs (UnmanagedType.I1)] bool disableMulticastLoopback);
static extern void nw_ip_options_set_disable_multicast_loopback (OS_nw_protocol_options options, byte disableMulticastLoopback);

#if NET
[SupportedOSPlatform ("tvos15.0")]
Expand All @@ -86,6 +86,6 @@ public void SetIPLocalAddressPreference (NWIPLocalAddressPreference localAddress
[MacCatalyst (15, 0)]
#endif
public void DisableMulticastLoopback (bool disable)
=> nw_ip_options_set_disable_multicast_loopback (GetCheckedHandle (), disable);
=> nw_ip_options_set_disable_multicast_loopback (GetCheckedHandle (), disable.AsByte ());
}
}
35 changes: 14 additions & 21 deletions src/Network/NWProtocolMetadata.cs
Original file line number Diff line number Diff line change
Expand Up @@ -73,28 +73,24 @@ public NWProtocolMetadata (NativeHandle handle, bool owns) : base (handle, owns)
public NWProtocolDefinition ProtocolDefinition => new NWProtocolDefinition (nw_protocol_metadata_copy_definition (GetCheckedHandle ()), owns: true);

[DllImport (Constants.NetworkLibrary)]
[return: MarshalAs (UnmanagedType.I1)]
internal static extern bool nw_protocol_metadata_is_ip (OS_nw_protocol_metadata metadata);
internal static extern byte nw_protocol_metadata_is_ip (OS_nw_protocol_metadata metadata);

public bool IsIP => nw_protocol_metadata_is_ip (GetCheckedHandle ());
public bool IsIP => nw_protocol_metadata_is_ip (GetCheckedHandle ()) != 0;

[DllImport (Constants.NetworkLibrary)]
[return: MarshalAs (UnmanagedType.I1)]
internal static extern bool nw_protocol_metadata_is_udp (OS_nw_protocol_metadata metadata);
internal static extern byte nw_protocol_metadata_is_udp (OS_nw_protocol_metadata metadata);

public bool IsUdp => nw_protocol_metadata_is_udp (GetCheckedHandle ());
public bool IsUdp => nw_protocol_metadata_is_udp (GetCheckedHandle ()) != 0;

[DllImport (Constants.NetworkLibrary)]
[return: MarshalAs (UnmanagedType.I1)]
internal static extern bool nw_protocol_metadata_is_tls (OS_nw_protocol_metadata metadata);
internal static extern byte nw_protocol_metadata_is_tls (OS_nw_protocol_metadata metadata);

public bool IsTls => nw_protocol_metadata_is_tls (GetCheckedHandle ());
public bool IsTls => nw_protocol_metadata_is_tls (GetCheckedHandle ()) != 0;

[DllImport (Constants.NetworkLibrary)]
[return: MarshalAs (UnmanagedType.I1)]
internal static extern bool nw_protocol_metadata_is_tcp (OS_nw_protocol_metadata metadata);
internal static extern byte nw_protocol_metadata_is_tcp (OS_nw_protocol_metadata metadata);

public bool IsTcp => nw_protocol_metadata_is_tcp (GetCheckedHandle ());
public bool IsTcp => nw_protocol_metadata_is_tcp (GetCheckedHandle ()) != 0;

#if NET
[SupportedOSPlatform ("tvos15.0")]
Expand All @@ -109,8 +105,7 @@ public NWProtocolMetadata (NativeHandle handle, bool owns) : base (handle, owns)
[MacCatalyst (15, 0)]
#endif
[DllImport (Constants.NetworkLibrary)]
[return: MarshalAs (UnmanagedType.I1)]
static extern bool nw_protocol_metadata_is_quic (OS_nw_protocol_metadata metadata);
static extern byte nw_protocol_metadata_is_quic (OS_nw_protocol_metadata metadata);

#if NET
[SupportedOSPlatform ("tvos15.0")]
Expand All @@ -124,7 +119,7 @@ public NWProtocolMetadata (NativeHandle handle, bool owns) : base (handle, owns)
[iOS (15, 0)]
[MacCatalyst (15, 0)]
#endif
public bool IsQuic => nw_protocol_metadata_is_quic (GetCheckedHandle ());
public bool IsQuic => nw_protocol_metadata_is_quic (GetCheckedHandle ()) != 0;

[DllImport (Constants.NetworkLibrary)]
internal static extern IntPtr nw_tls_copy_sec_protocol_metadata (IntPtr handle);
Expand Down Expand Up @@ -253,8 +248,7 @@ public uint TcpGetAvailableSendBuffer ()
[iOS (13, 0)]
#endif
[DllImport (Constants.NetworkLibrary)]
[return: MarshalAs (UnmanagedType.I1)]
internal static extern bool nw_protocol_metadata_is_framer_message (OS_nw_protocol_metadata metadata);
internal static extern byte nw_protocol_metadata_is_framer_message (OS_nw_protocol_metadata metadata);

#if NET
[SupportedOSPlatform ("tvos13.0")]
Expand All @@ -265,7 +259,7 @@ public uint TcpGetAvailableSendBuffer ()
[TV (13, 0)]
[iOS (13, 0)]
#endif
public bool IsFramerMessage => nw_protocol_metadata_is_framer_message (GetCheckedHandle ());
public bool IsFramerMessage => nw_protocol_metadata_is_framer_message (GetCheckedHandle ()) != 0;

#if NET
[SupportedOSPlatform ("tvos13.0")]
Expand All @@ -277,8 +271,7 @@ public uint TcpGetAvailableSendBuffer ()
[iOS (13, 0)]
#endif
[DllImport (Constants.NetworkLibrary)]
[return: MarshalAs (UnmanagedType.I1)]
internal static extern bool nw_protocol_metadata_is_ws (OS_nw_protocol_metadata metadata);
internal static extern byte nw_protocol_metadata_is_ws (OS_nw_protocol_metadata metadata);

#if NET
[SupportedOSPlatform ("tvos13.0")]
Expand All @@ -289,6 +282,6 @@ public uint TcpGetAvailableSendBuffer ()
[TV (13, 0)]
[iOS (13, 0)]
#endif
public bool IsWebSocket => nw_protocol_metadata_is_ws (GetCheckedHandle ());
public bool IsWebSocket => nw_protocol_metadata_is_ws (GetCheckedHandle ()) != 0;
}
}
53 changes: 26 additions & 27 deletions src/Network/NWProtocolOptions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -132,35 +132,35 @@ public void IPSetHopLimit (byte hopLimit)
#endif // !NET

[DllImport (Constants.NetworkLibrary)]
internal static extern void nw_ip_options_set_use_minimum_mtu (IntPtr options, [MarshalAs (UnmanagedType.I1)] bool use_minimum_mtu);
internal static extern void nw_ip_options_set_use_minimum_mtu (IntPtr options, byte use_minimum_mtu);

#if !NET
[Obsolete ("Use the 'NWProtocolIPOptions' class instead.")]
public void IPSetUseMinimumMtu (bool useMinimumMtu)
{
nw_ip_options_set_use_minimum_mtu (GetCheckedHandle (), useMinimumMtu);
nw_ip_options_set_use_minimum_mtu (GetCheckedHandle (), useMinimumMtu.AsByte ());
}
#endif // !NET

[DllImport (Constants.NetworkLibrary)]
internal static extern void nw_ip_options_set_disable_fragmentation (IntPtr options, [MarshalAs (UnmanagedType.I1)] bool disable_fragmentation);
internal static extern void nw_ip_options_set_disable_fragmentation (IntPtr options, byte disable_fragmentation);

#if !NET
[Obsolete ("Use the 'NWProtocolIPOptions' class instead.")]
public void IPSetDisableFragmentation (bool disableFragmentation)
{
nw_ip_options_set_disable_fragmentation (GetCheckedHandle (), disableFragmentation);
nw_ip_options_set_disable_fragmentation (GetCheckedHandle (), disableFragmentation.AsByte ());
}
#endif // !NET

[DllImport (Constants.NetworkLibrary)]
internal static extern void nw_ip_options_set_calculate_receive_time (IntPtr options, [MarshalAs (UnmanagedType.I1)] bool calculateReceiveTime);
internal static extern void nw_ip_options_set_calculate_receive_time (IntPtr options, byte calculateReceiveTime);

#if !NET
[Obsolete ("Use the 'NWProtocolIPOptions' class instead.")]
public void IPSetCalculateReceiveTime (bool calculateReceiveTime)
{
nw_ip_options_set_calculate_receive_time (GetCheckedHandle (), calculateReceiveTime);
nw_ip_options_set_calculate_receive_time (GetCheckedHandle (), calculateReceiveTime.AsByte ());
}
#endif // !NET

Expand Down Expand Up @@ -190,35 +190,35 @@ public NWIPLocalAddressPreference IPLocalAddressPreference {
//

[DllImport (Constants.NetworkLibrary)]
internal extern static void nw_tcp_options_set_no_delay (IntPtr handle, [MarshalAs (UnmanagedType.U1)] bool noDelay);
internal extern static void nw_tcp_options_set_no_delay (IntPtr handle, byte noDelay);

#if !NET
[Obsolete ("Use the 'NWProtocolTcpOptions' class instead.")]
public void TcpSetNoDelay (bool noDelay) => nw_tcp_options_set_no_delay (GetCheckedHandle (), noDelay);
public void TcpSetNoDelay (bool noDelay) => nw_tcp_options_set_no_delay (GetCheckedHandle (), noDelay.AsByte ());
#endif // !NET

[DllImport (Constants.NetworkLibrary)]
internal extern static void nw_tcp_options_set_no_push (IntPtr handle, [MarshalAs (UnmanagedType.U1)] bool noPush);
internal extern static void nw_tcp_options_set_no_push (IntPtr handle, byte noPush);

#if !NET
[Obsolete ("Use the 'NWProtocolTcpOptions' class instead.")]
public void TcpSetNoPush (bool noPush) => nw_tcp_options_set_no_push (GetCheckedHandle (), noPush);
public void TcpSetNoPush (bool noPush) => nw_tcp_options_set_no_push (GetCheckedHandle (), noPush.AsByte ());
#endif // !NET

[DllImport (Constants.NetworkLibrary)]
internal extern static void nw_tcp_options_set_no_options (IntPtr handle, [MarshalAs (UnmanagedType.U1)] bool noOptions);
internal extern static void nw_tcp_options_set_no_options (IntPtr handle, byte noOptions);

#if !NET
[Obsolete ("Use the 'NWProtocolTcpOptions' class instead.")]
public void TcpSetNoOptions (bool noOptions) => nw_tcp_options_set_no_options (GetCheckedHandle (), noOptions);
public void TcpSetNoOptions (bool noOptions) => nw_tcp_options_set_no_options (GetCheckedHandle (), noOptions.AsByte ());
#endif // !NET

[DllImport (Constants.NetworkLibrary)]
internal extern static void nw_tcp_options_set_enable_keepalive (IntPtr handle, [MarshalAs (UnmanagedType.U1)] bool enableKeepAlive);
internal extern static void nw_tcp_options_set_enable_keepalive (IntPtr handle, byte enableKeepAlive);

#if !NET
[Obsolete ("Use the 'NWProtocolTcpOptions' class instead.")]
public void TcpSetEnableKeepAlive (bool enableKeepAlive) => nw_tcp_options_set_enable_keepalive (GetCheckedHandle (), enableKeepAlive);
public void TcpSetEnableKeepAlive (bool enableKeepAlive) => nw_tcp_options_set_enable_keepalive (GetCheckedHandle (), enableKeepAlive.AsByte ());
#endif // !NET

[DllImport (Constants.NetworkLibrary)]
Expand Down Expand Up @@ -278,46 +278,46 @@ public NWIPLocalAddressPreference IPLocalAddressPreference {
#endif // !NET

[DllImport (Constants.NetworkLibrary)]
internal extern static void nw_tcp_options_set_retransmit_fin_drop (IntPtr handle, [MarshalAs (UnmanagedType.U1)] bool retransmitFinDrop);
internal extern static void nw_tcp_options_set_retransmit_fin_drop (IntPtr handle, byte retransmitFinDrop);

#if !NET
[Obsolete ("Use the 'NWProtocolTcpOptions' class instead.")]
public void TcpSetRetransmitFinDrop (bool retransmitFinDrop) => nw_tcp_options_set_retransmit_fin_drop (GetCheckedHandle (), retransmitFinDrop);
public void TcpSetRetransmitFinDrop (bool retransmitFinDrop) => nw_tcp_options_set_retransmit_fin_drop (GetCheckedHandle (), retransmitFinDrop.AsByte ());
#endif // !NET

[DllImport (Constants.NetworkLibrary)]
internal extern static void nw_tcp_options_set_disable_ack_stretching (IntPtr handle, [MarshalAs (UnmanagedType.U1)] bool disableAckStretching);
internal extern static void nw_tcp_options_set_disable_ack_stretching (IntPtr handle, byte disableAckStretching);

#if !NET
[Obsolete ("Use the 'NWProtocolTcpOptions' class instead.")]
public void TcpSetDisableAckStretching (bool disableAckStretching) => nw_tcp_options_set_disable_ack_stretching (GetCheckedHandle (), disableAckStretching);
public void TcpSetDisableAckStretching (bool disableAckStretching) => nw_tcp_options_set_disable_ack_stretching (GetCheckedHandle (), disableAckStretching.AsByte ());
#endif // !NET

[DllImport (Constants.NetworkLibrary)]
internal extern static void nw_tcp_options_set_enable_fast_open (IntPtr handle, [MarshalAs (UnmanagedType.U1)] bool enableFastOpen);
internal extern static void nw_tcp_options_set_enable_fast_open (IntPtr handle, byte enableFastOpen);

#if !NET
[Obsolete ("Use the 'NWProtocolTcpOptions' class instead.")]
public void TcpSetEnableFastOpen (bool enableFastOpen) => nw_tcp_options_set_enable_fast_open (GetCheckedHandle (), enableFastOpen);
public void TcpSetEnableFastOpen (bool enableFastOpen) => nw_tcp_options_set_enable_fast_open (GetCheckedHandle (), enableFastOpen.AsByte ());
#endif // !NET

[DllImport (Constants.NetworkLibrary)]
internal extern static void nw_tcp_options_set_disable_ecn (IntPtr handle, [MarshalAs (UnmanagedType.U1)] bool disableEcn);
internal extern static void nw_tcp_options_set_disable_ecn (IntPtr handle, byte disableEcn);

#if !NET
[Obsolete ("Use the 'NWProtocolTcpOptions' class instead.")]
public void TcpSetDisableEcn (bool disableEcn) => nw_tcp_options_set_disable_ecn (GetCheckedHandle (), disableEcn);
public void TcpSetDisableEcn (bool disableEcn) => nw_tcp_options_set_disable_ecn (GetCheckedHandle (), disableEcn.AsByte ());
#endif // !NET

//
// UDP Options
//
[DllImport (Constants.NetworkLibrary)]
internal extern static void nw_udp_options_set_prefer_no_checksum (IntPtr handle, [MarshalAs (UnmanagedType.U1)] bool preferNoChecksums);
internal extern static void nw_udp_options_set_prefer_no_checksum (IntPtr handle, byte preferNoChecksums);

#if !NET
[Obsolete ("Use the 'NWProtocolUdpOptions' class instead.")]
public void UdpSetPreferNoChecksum (bool preferNoChecksums) => nw_udp_options_set_prefer_no_checksum (GetCheckedHandle (), preferNoChecksums);
public void UdpSetPreferNoChecksum (bool preferNoChecksums) => nw_udp_options_set_prefer_no_checksum (GetCheckedHandle (), preferNoChecksums.AsByte ());
#endif // !NET

//
Expand Down Expand Up @@ -345,9 +345,8 @@ public NWIPLocalAddressPreference IPLocalAddressPreference {
[MacCatalyst (15, 0)]
#endif
[DllImport (Constants.NetworkLibrary)]
[return: MarshalAs (UnmanagedType.I1)]
static extern bool nw_protocol_options_is_quic (IntPtr options);
static extern byte nw_protocol_options_is_quic (IntPtr options);

public bool IsQuic => nw_protocol_options_is_quic (GetCheckedHandle ());
public bool IsQuic => nw_protocol_options_is_quic (GetCheckedHandle ()) != 0;
}
}
18 changes: 8 additions & 10 deletions src/Network/NWProtocolQuicOptions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -54,15 +54,14 @@ public SecProtocolOptions SecProtocolOptions
=> new SecProtocolOptions (nw_quic_copy_sec_protocol_options (GetCheckedHandle ()), true);

[DllImport (Constants.NetworkLibrary)]
[return: MarshalAs (UnmanagedType.I1)]
static extern bool nw_quic_get_stream_is_unidirectional (OS_nw_protocol_options options);
static extern byte nw_quic_get_stream_is_unidirectional (OS_nw_protocol_options options);

[DllImport (Constants.NetworkLibrary)]
static extern void nw_quic_set_stream_is_unidirectional (OS_nw_protocol_options options, [MarshalAs (UnmanagedType.I1)] bool isUnidirectional);
static extern void nw_quic_set_stream_is_unidirectional (OS_nw_protocol_options options, byte isUnidirectional);

public bool StreamIsUnidirectional {
get => nw_quic_get_stream_is_unidirectional (GetCheckedHandle ());
set => nw_quic_set_stream_is_unidirectional (GetCheckedHandle (), value);
get => nw_quic_get_stream_is_unidirectional (GetCheckedHandle ()) != 0;
set => nw_quic_set_stream_is_unidirectional (GetCheckedHandle (), value.AsByte ());
}

[DllImport (Constants.NetworkLibrary)]
Expand Down Expand Up @@ -209,8 +208,7 @@ public ushort DatagramFrameSize {
[Watch (9, 0)]
#endif
[DllImport (Constants.NetworkLibrary)]
[return: MarshalAs (UnmanagedType.I1)]
static extern bool nw_quic_get_stream_is_datagram (OS_nw_protocol_options options);
static extern byte nw_quic_get_stream_is_datagram (OS_nw_protocol_options options);

#if NET
[SupportedOSPlatform ("tvos16.0")]
Expand All @@ -224,7 +222,7 @@ public ushort DatagramFrameSize {
[Watch (9, 0)]
#endif
[DllImport (Constants.NetworkLibrary)]
static extern void nw_quic_set_stream_is_datagram (OS_nw_protocol_options options, [MarshalAs (UnmanagedType.I1)] bool is_datagram);
static extern void nw_quic_set_stream_is_datagram (OS_nw_protocol_options options, byte is_datagram);

#if NET
[SupportedOSPlatform ("tvos16.0")]
Expand All @@ -238,8 +236,8 @@ public ushort DatagramFrameSize {
[Watch (9, 0)]
#endif
public bool StreamIsDatagram {
get => nw_quic_get_stream_is_datagram (GetCheckedHandle ());
set => nw_quic_set_stream_is_datagram (GetCheckedHandle (), value);
get => nw_quic_get_stream_is_datagram (GetCheckedHandle ()) != 0;
set => nw_quic_set_stream_is_datagram (GetCheckedHandle (), value.AsByte ());
}

#if NET
Expand Down
Loading
Loading