SCNetworkInterfaceProvider.h   [plain text]


/*
 * Copyright (c) 2018 Apple Inc. All rights reserved.
 *
 * @APPLE_LICENSE_HEADER_START@
 *
 * This file contains Original Code and/or Modifications of Original Code
 * as defined in and that are subject to the Apple Public Source License
 * Version 2.0 (the 'License'). You may not use this file except in
 * compliance with the License. Please obtain a copy of the License at
 * http://www.opensource.apple.com/apsl/ and read it before using this
 * file.
 *
 * The Original Code and all software distributed under the License are
 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
 * Please see the License for the specific language governing rights and
 * limitations under the License.
 *
 * @APPLE_LICENSE_HEADER_END@
 */

#ifndef _SCNETWORKINTERFACEPROVIDER_H
#define _SCNETWORKINTERFACEPROVIDER_H

/*
 * Modification History
 *
 * January 17, 2018		Dieter Siegmund (dieter@apple.com)
 * - initial revision
 */

/*
 * SCNetworkInterfaceProvider.h
 */


#include <os/availability.h>
#include <CoreFoundation/CoreFoundation.h>
#include <SystemConfiguration/SCNetworkConfiguration.h>

__BEGIN_DECLS

typedef CF_ENUM(uint32_t, SCNetworkInterfaceProviderEvent) {
	kSCNetworkInterfaceProviderEventActivationRequested = 1,
	kSCNetworkInterfaceProviderEventActivationNoLongerRequested = 2,
};

typedef struct CF_BRIDGED_TYPE(id) __SCNetworkInterfaceProvider *
SCNetworkInterfaceProviderRef;

/*!
	@typedef SCNetworkInterfaceProviderEventHandler
	@discussion Event handler callback to process SCNetworkInterfaceProvider
	events.
	@param event The event to handle.
	@param event_data The event data, always NULL currently.
 */
typedef void
(^SCNetworkInterfaceProviderEventHandler)(SCNetworkInterfaceProviderEvent event,
					  CFDictionaryRef event_data);

/*!
	@function SCNetworkInterfaceProviderCreate
	@discussion  Create an interface provider for a single network
	interface. The interface provider processes the events on the
	interface and takes actions based on the specific event.
	After calling this function, activate the event handler by calling
	SCNetworkInterfaceProviderSetEventHandler() followed by
	SCNetworkInterfaceProviderResume().
	Calling CFRelease() will free resources and deactivate the
	SCNetworkInterfaceProvider callback.
	@param interfaceType The kSCNetworkInterfaceType that the interface
	provider handles e.g. kSCNetworkInterfaceTypeCellular.
	@param interfaceName The name of the network interface, e.g. "pdp_ip0".
	@param options NULL for now.
	@result A non-NULL SCNetworkInterfaceProviderRef if the interface
	provider was successfully registered, NULL otherwise.
 */
SCNetworkInterfaceProviderRef
SCNetworkInterfaceProviderCreate(CFStringRef interfaceType,
				 CFStringRef interfaceName,
				 CFDictionaryRef options)
     API_AVAILABLE(macos(10.14), ios(12.0));

/*!
	@function SCNetworkInterfaceProviderSetEventHandler
	@discussion  Set the event handler to process events for the
	SCNetworkInterfaceProvider object.
	@param provider The SCNetworkInterfaceProvider to set the callback for.
	@param handler The event handler to process events. Invoking this
	function more than once or with a NULL handler is not valid.
 */
void
SCNetworkInterfaceProviderSetEventHandler(SCNetworkInterfaceProviderRef provider,
					  SCNetworkInterfaceProviderEventHandler handler)
     API_AVAILABLE(macos(10.14), ios(12.0));

/*!
	@function SCNetworkInterfaceProviderResume
	@discussion  Activate the interface provider so that its event handler
	will get called.
	@param provider The provider object to enable events on.
 */
void
SCNetworkInterfaceProviderResume(SCNetworkInterfaceProviderRef provider)
     API_AVAILABLE(macos(10.14), ios(12.0));

__END_DECLS
#endif /* _SCNETWORKINTERFACEPROVIDER_H */