#[repr(C)]pub struct NETunnelProviderSession { /* private fields */ }
Expand description
This file declares the NETunnelProviderSession API. The NETunnelProviderSession API is used to control network tunnel services provided by NETunnelProvider implementations.
This API is part of NetworkExtension.framework.
See also Apple’s documentation
Implementations§
Source§impl NETunnelProviderSession
impl NETunnelProviderSession
Sourcepub unsafe fn startTunnelWithOptions_andReturnError(
&self,
options: Option<&NSDictionary<NSString, AnyObject>>,
) -> Result<(), Retained<NSError>>
pub unsafe fn startTunnelWithOptions_andReturnError( &self, options: Option<&NSDictionary<NSString, AnyObject>>, ) -> Result<(), Retained<NSError>>
This function is used to start the tunnel using the configuration associated with this connection object. The tunnel connection process is started and this function returns immediately.
Parameter options
: A dictionary that will be passed as-is to the tunnel provider during the process of starting the tunnel.
Parameter error
: If the tunnel was started successfully, this parameter is set to nil. Otherwise this parameter is set to the error that occurred. Possible errors include:
- NEVPNErrorConfigurationInvalid
- NEVPNErrorConfigurationDisabled
Returns: YES if the tunnel was started successfully, NO if an error occurred.
Sourcepub unsafe fn stopTunnel(&self)
pub unsafe fn stopTunnel(&self)
This function is used to stop the tunnel. The tunnel disconnect process is started and this function returns immediately.
Sourcepub unsafe fn sendProviderMessage_returnError_responseHandler(
&self,
message_data: &NSData,
error: Option<&mut Option<Retained<NSError>>>,
response_handler: Option<&DynBlock<dyn Fn(*mut NSData)>>,
) -> bool
Available on crate feature block2
only.
pub unsafe fn sendProviderMessage_returnError_responseHandler( &self, message_data: &NSData, error: Option<&mut Option<Retained<NSError>>>, response_handler: Option<&DynBlock<dyn Fn(*mut NSData)>>, ) -> bool
block2
only.This function sends a message to the NETunnelProvider and provides a way to receive a response.
Parameter messageData
: An NSData object containing the message to be sent.
Parameter error
: If the message was sent successfully, this parameter is set to nil. Otherwise this parameter is set to the error that occurred. Possible errors include:
- NEVPNErrorConfigurationInvalid
- NEVPNErrorConfigurationDisabled
Parameter responseHandler
: A block that handles the response. Can be set to nil if no response is expected.
Returns: YES if the message was sent successfully, NO if an error occurred.
Methods from Deref<Target = NEVPNConnection>§
Sourcepub unsafe fn startVPNTunnelAndReturnError(
&self,
) -> Result<(), Retained<NSError>>
pub unsafe fn startVPNTunnelAndReturnError( &self, ) -> Result<(), Retained<NSError>>
This function is used to start the VPN tunnel using the current VPN configuration. The VPN tunnel connection process is started and this function returns immediately.
Parameter error
: If the VPN tunnel was started successfully, this parameter is set to nil. Otherwise this parameter is set to the error that occurred. Possible errors include:
- NEVPNErrorConfigurationInvalid
- NEVPNErrorConfigurationDisabled
Returns: YES if the VPN tunnel was started successfully, NO if an error occurred.
Sourcepub unsafe fn startVPNTunnelWithOptions_andReturnError(
&self,
options: Option<&NSDictionary<NSString, NSObject>>,
) -> Result<(), Retained<NSError>>
pub unsafe fn startVPNTunnelWithOptions_andReturnError( &self, options: Option<&NSDictionary<NSString, NSObject>>, ) -> Result<(), Retained<NSError>>
This function is used to start the VPN tunnel using the current VPN configuration. The VPN tunnel connection process is started and this function returns immediately.
Parameter options
: A dictionary that will be passed to the tunnel provider during the process of starting the tunnel.
If not nil, ‘options’ is an NSDictionary may contain the following keys
NEVPNConnectionStartOptionUsername
NEVPNConnectionStartOptionPassword
Parameter error
: If the VPN tunnel was started successfully, this parameter is set to nil. Otherwise this parameter is set to the error that occurred. Possible errors include:
- NEVPNErrorConfigurationInvalid
- NEVPNErrorConfigurationDisabled
Returns: YES if the VPN tunnel was started successfully, NO if an error occurred.
Sourcepub unsafe fn stopVPNTunnel(&self)
pub unsafe fn stopVPNTunnel(&self)
This function is used to stop the VPN tunnel. The VPN tunnel disconnect process is started and this function returns immediately.
Sourcepub unsafe fn fetchLastDisconnectErrorWithCompletionHandler(
&self,
handler: &DynBlock<dyn Fn(*mut NSError)>,
)
Available on crate feature block2
only.
pub unsafe fn fetchLastDisconnectErrorWithCompletionHandler( &self, handler: &DynBlock<dyn Fn(*mut NSError)>, )
block2
only.Retrive the most recent error that caused the VPN to disconnect. If the error was generated by the VPN system (including the IPsec client) then the error will be in the NEVPNConnectionErrorDomain error domain. If the error was generated by a tunnel provider app extension then the error will be the NSError that the provider passed when disconnecting the tunnel.
Parameter handler
: A block which takes an optional NSError that will be called when the error is obtained.
Sourcepub unsafe fn status(&self) -> NEVPNStatus
pub unsafe fn status(&self) -> NEVPNStatus
The current status of the VPN.
Sourcepub unsafe fn connectedDate(&self) -> Option<Retained<NSDate>>
pub unsafe fn connectedDate(&self) -> Option<Retained<NSDate>>
The date and time when the connection status changed to NEVPNStatusConnected. This property is nil if the connection is not fully established.
Sourcepub unsafe fn manager(&self) -> Retained<NEVPNManager>
pub unsafe fn manager(&self) -> Retained<NEVPNManager>
The NEVPNManager associated with this NEVPNConnection.
Methods from Deref<Target = NSObject>§
Sourcepub fn doesNotRecognizeSelector(&self, sel: Sel) -> !
pub fn doesNotRecognizeSelector(&self, sel: Sel) -> !
Handle messages the object doesn’t recognize.
See Apple’s documentation for details.
Methods from Deref<Target = AnyObject>§
Sourcepub fn class(&self) -> &'static AnyClass
pub fn class(&self) -> &'static AnyClass
Dynamically find the class of this object.
§Panics
May panic if the object is invalid (which may be the case for objects
returned from unavailable init
/new
methods).
§Example
Check that an instance of NSObject
has the precise class NSObject
.
use objc2::ClassType;
use objc2::runtime::NSObject;
let obj = NSObject::new();
assert_eq!(obj.class(), NSObject::class());
Sourcepub unsafe fn get_ivar<T>(&self, name: &str) -> &Twhere
T: Encode,
👎Deprecated: this is difficult to use correctly, use Ivar::load
instead.
pub unsafe fn get_ivar<T>(&self, name: &str) -> &Twhere
T: Encode,
Ivar::load
instead.Use Ivar::load
instead.
§Safety
The object must have an instance variable with the given name, and it
must be of type T
.
See Ivar::load_ptr
for details surrounding this.
Sourcepub fn downcast_ref<T>(&self) -> Option<&T>where
T: DowncastTarget,
pub fn downcast_ref<T>(&self) -> Option<&T>where
T: DowncastTarget,
Attempt to downcast the object to a class of type T
.
This is the reference-variant. Use Retained::downcast
if you want
to convert a retained object to another type.
§Mutable classes
Some classes have immutable and mutable variants, such as NSString
and NSMutableString
.
When some Objective-C API signature says it gives you an immutable class, it generally expects you to not mutate that, even though it may technically be mutable “under the hood”.
So using this method to convert a NSString
to a NSMutableString
,
while not unsound, is generally frowned upon unless you created the
string yourself, or the API explicitly documents the string to be
mutable.
See Apple’s documentation on mutability and on
isKindOfClass:
for more details.
§Generic classes
Objective-C generics are called “lightweight generics”, and that’s because they aren’t exposed in the runtime. This makes it impossible to safely downcast to generic collections, so this is disallowed by this method.
You can, however, safely downcast to generic collections where all the
type-parameters are AnyObject
.
§Panics
This works internally by calling isKindOfClass:
. That means that the
object must have the instance method of that name, and an exception
will be thrown (if CoreFoundation is linked) or the process will abort
if that is not the case. In the vast majority of cases, you don’t need
to worry about this, since both root objects NSObject
and
NSProxy
implement this method.
§Examples
Cast an NSString
back and forth from NSObject
.
use objc2::rc::Retained;
use objc2_foundation::{NSObject, NSString};
let obj: Retained<NSObject> = NSString::new().into_super();
let string = obj.downcast_ref::<NSString>().unwrap();
// Or with `downcast`, if we do not need the object afterwards
let string = obj.downcast::<NSString>().unwrap();
Try (and fail) to cast an NSObject
to an NSString
.
use objc2_foundation::{NSObject, NSString};
let obj = NSObject::new();
assert!(obj.downcast_ref::<NSString>().is_none());
Try to cast to an array of strings.
use objc2_foundation::{NSArray, NSObject, NSString};
let arr = NSArray::from_retained_slice(&[NSObject::new()]);
// This is invalid and doesn't type check.
let arr = arr.downcast_ref::<NSArray<NSString>>();
This fails to compile, since it would require enumerating over the array to ensure that each element is of the desired type, which is a performance pitfall.
Downcast when processing each element instead.
use objc2_foundation::{NSArray, NSObject, NSString};
let arr = NSArray::from_retained_slice(&[NSObject::new()]);
for elem in arr {
if let Some(data) = elem.downcast_ref::<NSString>() {
// handle `data`
}
}
Trait Implementations§
Source§impl AsRef<AnyObject> for NETunnelProviderSession
impl AsRef<AnyObject> for NETunnelProviderSession
Source§impl AsRef<NEVPNConnection> for NETunnelProviderSession
impl AsRef<NEVPNConnection> for NETunnelProviderSession
Source§fn as_ref(&self) -> &NEVPNConnection
fn as_ref(&self) -> &NEVPNConnection
Source§impl AsRef<NSObject> for NETunnelProviderSession
impl AsRef<NSObject> for NETunnelProviderSession
Source§impl Borrow<AnyObject> for NETunnelProviderSession
impl Borrow<AnyObject> for NETunnelProviderSession
Source§impl Borrow<NEVPNConnection> for NETunnelProviderSession
impl Borrow<NEVPNConnection> for NETunnelProviderSession
Source§fn borrow(&self) -> &NEVPNConnection
fn borrow(&self) -> &NEVPNConnection
Source§impl Borrow<NSObject> for NETunnelProviderSession
impl Borrow<NSObject> for NETunnelProviderSession
Source§impl ClassType for NETunnelProviderSession
impl ClassType for NETunnelProviderSession
Source§const NAME: &'static str = "NETunnelProviderSession"
const NAME: &'static str = "NETunnelProviderSession"
Source§type Super = NEVPNConnection
type Super = NEVPNConnection
Source§type ThreadKind = <<NETunnelProviderSession as ClassType>::Super as ClassType>::ThreadKind
type ThreadKind = <<NETunnelProviderSession as ClassType>::Super as ClassType>::ThreadKind
Source§impl Debug for NETunnelProviderSession
impl Debug for NETunnelProviderSession
Source§impl Deref for NETunnelProviderSession
impl Deref for NETunnelProviderSession
Source§impl Hash for NETunnelProviderSession
impl Hash for NETunnelProviderSession
Source§impl Message for NETunnelProviderSession
impl Message for NETunnelProviderSession
Source§impl NSObjectProtocol for NETunnelProviderSession
impl NSObjectProtocol for NETunnelProviderSession
Source§fn isEqual(&self, other: Option<&AnyObject>) -> bool
fn isEqual(&self, other: Option<&AnyObject>) -> bool
Source§fn hash(&self) -> usize
fn hash(&self) -> usize
Source§fn isKindOfClass(&self, cls: &AnyClass) -> bool
fn isKindOfClass(&self, cls: &AnyClass) -> bool
Source§fn is_kind_of<T>(&self) -> bool
fn is_kind_of<T>(&self) -> bool
isKindOfClass
directly, or cast your objects with AnyObject::downcast_ref