import type { _NEFilterDataVerdict } from "./NEFilterDataVerdict.js";
import type { _NEFilterFlow } from "./NEFilterFlow.js";
import type { _NEFilterNewFlowVerdict } from "./NEFilterNewFlowVerdict.js";
import type { _NEFilterProvider } from "./NEFilterProvider.js";
import type { _NEFilterRemediationVerdict } from "./NEFilterRemediationVerdict.js";
import type { _NEFilterSettings } from "./NEFilterSettings.js";
import type { _NEFilterSocketFlow } from "./NEFilterSocketFlow.js";
import type { _NEFilterVerdict } from "./NEFilterVerdict.js";
import type { _NSData } from "../Foundation/NSData.js";
import type { _NSError } from "../Foundation/NSError.js";
import type { NETrafficDirection } from "./NETrafficDirection.js";
export declare class _NEFilterDataProvider extends _NEFilterProvider {
    static alloc(): _NEFilterDataProvider;
    static new(): _NEFilterDataProvider;
    init(): _NEFilterDataProvider;
    /**
     * @method handleNewFlow: @discussion This function is called by the framework when a filtering decision needs to be made about a new network data flow. Subclasses must override this method to implement the steps necessary to match the flow against some locally stored rules and return an appropriate verdict. @param flow An NEFilterFlow object containing details about the new flow. @return An NEFilterNewFlowVerdict object containing the verdict for the new flow.
     */
    handleNewFlow$(flow: _NEFilterFlow): _NEFilterNewFlowVerdict;
    /**
     * @method handleInboundDataFromFlow:readBytesStartOffset:readBytes: @discussion This function is called by the framework when a filtering decision needs to be made about some inbound data that the filter previously requested access to via the NEFilterFlowDataVerdict or the NEFilterNewFlowVerdict. Subclasses must override this method. @param flow The NEFilterFlow from which the data was read. @param offset The offset in bytes from the start of the flow's inbound data at which readBytes begins. @param readBytes The data that was read. For non-UDP/TCP flows, since data may optionally include the IP header, readBytes includes a 4-bytes NEFilterDataAttribute field preceding the user data. Handler must examine the NEFilterDataAttribute field and handle the data accordingly. @return An NEFilterFlowDataVerdict containing the verdict for the flow.
     */
    handleInboundDataFromFlow$readBytesStartOffset$readBytes$(flow: _NEFilterFlow, offset: number, readBytes: _NSData): _NEFilterDataVerdict;
    /**
     * @method handleOutboundDataFromFlow:readBytesStartOffset:readBytes: @discussion This function is called by the framework when a filtering decision needs to be made about some outbound data that the filter previously requested access to via the NEFilterFlowDataVerdict or the NEFilterNewFlowVerdict. Subclasses must override this method. @param flow The NEFilterFlow from which the data was read. @param offset The offset in bytes from the start of the flow's outbound data at which readBytes begins. @param readBytes The data that was read. For non-UDP/TCP flows, since data may optionally include the IP header, readBytes includes a 4-bytes NEFilterDataAttribute field preceding the user data. Handler must examine the NEFilterDataAttribute field and handle the data accordingly. @return An NEFilterFlowDataVerdict containing the verdict for the flow.
     */
    handleOutboundDataFromFlow$readBytesStartOffset$readBytes$(flow: _NEFilterFlow, offset: number, readBytes: _NSData): _NEFilterDataVerdict;
    /**
     * @method handleInboundDataCompleteForFlow: @discussion This function is called by the framework after all of the inbound data for a flow has been seen by the filter. Subclasses must override this method to return an appropriate pass/block result. @param flow The flow @return The final NEFilterFlowDataVerdict verdict for the flow.
     */
    handleInboundDataCompleteForFlow$(flow: _NEFilterFlow): _NEFilterDataVerdict;
    /**
     * @method handleOutboundDataCompleteForFlow: @discussion This function is called by the framework after all of the outbound data for a flow has been seen by the filter. Subclasses must override this method to return an appropriate pass/block result. @param flow The flow @return The final NEFilterFlowDataVerdict verdict for the flow.
     */
    handleOutboundDataCompleteForFlow$(flow: _NEFilterFlow): _NEFilterDataVerdict;
    /**
     * @method handleRemediationForFlow: @discussion This function is called by the framework after the user requests remediation for a blocked flow. Subclasses must override this method to return an appropriate pass/block result. @param flow The flow @return The final NEFilterRemediationVerdict verdict for the flow.
     */
    handleRemediationForFlow$(flow: _NEFilterFlow): _NEFilterRemediationVerdict;
    /**
     * @method handleRulesChanged @discussion This function is called by the framework when -[NEFilterControlProvider notifyRulesChanged] is called. Subclasses should override this method to reload new rules from disk.
     */
    handleRulesChanged(): void;
    /**
     * @method applyFilterRules:defaultAction:withCompletionHandler: @discussion The provider calls this function to apply the current set of filtering rules associated with the provider and also change the default filtering action. @param settings A NEFilterSettings object containing the filter settings to apply to the system. Pass nil to revert to the default settings, which are an empty list of rules and a default action of NEFilterActionFilterData. @param completionHandler A block that will be executed when the settings have been applied to the system. If an error occurs then the error parameter will be non-nil.
     */
    applySettings$completionHandler$(settings: _NEFilterSettings | null, completionHandler: ((error: _NSError) => void) | null): void;
    /**
     * @method resumeFlow:withVerdict: @discussion This function is called by the provider to resume a flow that was previously paused by the provider returning a pause verdict. @param flow The flow to resume @param verdict The next NEFilterDataVerdict for the flow. This verdict is used as the verdict corresponding to the flow handler callback (handleNewFlow:, handleInboundDataFromFlow:, etc.) that returned the pause verdict that paused the flow. This must be either a NEFilterDataVerdict or a NEFilterNewFlowVerdict. It is invalid to resume a flow that is not paused.
     */
    resumeFlow$withVerdict$(flow: _NEFilterFlow, verdict: _NEFilterVerdict): void;
    /**
     * @method updateFlow:withVerdict:forDirection: @discussion This function is called by the provider to update the verdict for a flow outside the context of any NEFilterDataProvider callback. @param flow The NEFilterSocketFlow to update the verdict for. @param verdict The NEFilterDataVerdict. Must be a +[NEFilterDataVerdict allowVerdict], a +[NEFilterDataVerdict dropVerdict], or a +[NEFilterDataVerdict dataVerdictWithPassBytes:peekBytes:]. @param direction The direction to which the verdict applies. Pass NETrafficDirectionAny to update the verdict for both the inbound and outbound directions. This parameter is ignored if the verdict is +[NEFilterDataVerdict dropVerdict].
     */
    updateFlow$usingVerdict$forDirection$(flow: _NEFilterSocketFlow, verdict: _NEFilterDataVerdict, direction: NETrafficDirection): void;
}
