import type { _NEProvider } from "./NEProvider.js";
import type { _NETunnelNetworkSettings } from "./NETunnelNetworkSettings.js";
import type { _NEVPNProtocol } from "./NEVPNProtocol.js";
import type { _NSArray } from "../Foundation/NSArray.js";
import type { _NSData } from "../Foundation/NSData.js";
import type { _NSError } from "../Foundation/NSError.js";
import type { NETunnelProviderRoutingMethod } from "./NETunnelProviderRoutingMethod.js";
export declare class _NETunnelProvider extends _NEProvider {
    static alloc(): _NETunnelProvider;
    static new(): _NETunnelProvider;
    init(): _NETunnelProvider;
    /**
     * @method handleAppMessage:completionHandler: @discussion This function is called by the framework when the container app sends a message to the provider. Subclasses should override this method to handle the message and optionally send a response. @param messageData An NSData object containing the message sent by the container app. @param completionHandler A block that the method can execute to send a response to the container app. If this parameter is non-nil then the method implementation should always execute the block. If this parameter is nil then the method implementation should treat this as an indication that the container app is not expecting a response.
     */
    handleAppMessage$completionHandler$(messageData: _NSData, completionHandler: ((responseData: _NSData) => void) | null): void;
    /**
     * @method setTunnelNetworkSettings:completionHandler: @discussion This function is called by tunnel provider implementations to set the network settings of the tunnel, including IP routes, DNS servers, and virtual interface addresses depending on the tunnel type. Subclasses should not override this method. This method can be called multiple times during the lifetime of a particular tunnel. It is not necessary to call this function with nil to clear out the existing settings before calling this function with a non-nil configuration. @param tunnelNetworkSettings An NETunnelNetworkSettings object containing all of the desired network settings for the tunnel. Pass nil to clear out the current network settings. @param completionHandler A block that will be called by the framework when the process of setting or clearing the network settings is complete. If an error occurred during the process of setting or clearing the IP network settings then a non-nill NSError object will be passed to this block containing error details.
     */
    setTunnelNetworkSettings$completionHandler$(tunnelNetworkSettings: _NETunnelNetworkSettings | null, completionHandler: ((error: _NSError) => void) | null): void;
    /**
     * @property protocolConfiguration @discussion An NEVPNProtocol object containing the provider's current configuration. The value of this property may change during the lifetime of the tunnel provided by this NETunnelProvider, KVO can be used to detect when changes occur. For different protocol types, this property will contain the corresponding subclass. For NEVPNProtocolTypePlugin protocol type, this property will contain the NETunnelProviderProtocol subclass. For NEVPNProtocolTypeIKEv2 protocol type, this property will contain the NEVPNProtocolIKEv2 subclass.
     */
    protocolConfiguration(): _NEVPNProtocol;
    /**
     * @property appRules @discussion An array of NEAppRule objects specifying which applications are currently being routed through the tunnel provided by this NETunnelProvider. If application-based routing is not enabled for the tunnel, then this property is set to nil.
     */
    appRules(): _NSArray | null;
    /**
     * @property routingMethod @discussion The method by which network traffic is routed to the tunnel. The default is NETunnelProviderRoutingMethodDestinationIP.
     */
    routingMethod(): NETunnelProviderRoutingMethod;
    /**
     * @property reasserting @discussion A flag that indicates to the framework if this NETunnelProvider is currently re-establishing the tunnel. Setting this flag will cause the session status visible to the user to change to "Reasserting". Clearing this flag will change the user-visible status of the session back to "Connected". Setting and clearing this flag only has an effect if the session is in the "Connected" state.
     */
    reasserting(): boolean;
    setReasserting$(value: boolean): void;
}
