1/*
2 * Copyright (c) 2012 Apple Inc. All rights reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
11 * file.
12 *
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
20 *
21 * @APPLE_LICENSE_HEADER_END@
22 */
23
24#ifndef _LIBSYSTEMCONFIGURATION_SERVER_H
25#define _LIBSYSTEMCONFIGURATION_SERVER_H
26
27#include <Availability.h>
28#include <TargetConditionals.h>
29#include <sys/cdefs.h>
30#include <dispatch/dispatch.h>
31#include <xpc/xpc.h>
32#include <CoreFoundation/CoreFoundation.h>
33
34// ------------------------------------------------------------
35
36#pragma mark -
37#pragma mark [XPC] information server common code
38
39// ------------------------------------------------------------
40
41
42/*
43 * libSC_info_server_t
44 *	data (CFData)
45 *		stored configuration
46 *	generation
47 *		generation of the last stored configuration
48 *	info (CFDictionary)
49 *		key = xpc_connection_t [CFData]
50 *		val = [CFData] (process name, last push'd, last ack'd)
51 *	inSync_NO, inSync_YES
52 *		count of client connections that have ack'd a configuration that
53 *		are (or are not) in sync with the last stored generation#
54*/
55typedef struct {
56	CFDataRef		data;
57	uint64_t		generation;
58	CFMutableDictionaryRef	info;
59	int			inSync_NO;	// ack'ing clients not in sync w/generation
60	int			inSync_YES;	// ack'ing clients in sync w/generation
61} libSC_info_server_t;
62
63
64__BEGIN_DECLS
65
66// Global server info SPIs
67
68void
69_libSC_info_server_init		(
70				 libSC_info_server_t	*server_info
71				);
72
73Boolean
74_libSC_info_server_in_sync	(
75				 libSC_info_server_t	*server_info
76				);
77
78void
79_libSC_info_server_set_data	(
80				 libSC_info_server_t	*server_info,
81				 CFDataRef		data,
82				 uint64_t		generation
83				);
84
85// Per-session server info SPIs
86
87void
88_libSC_info_server_open		(
89				 libSC_info_server_t	*server_info,
90				 xpc_connection_t	c
91				);
92
93CFDataRef
94_libSC_info_server_get_data	(
95				 libSC_info_server_t	*server_info,
96				 xpc_connection_t	c,
97				 uint64_t		*generation
98				);
99
100Boolean
101_libSC_info_server_acknowledged	(
102				 libSC_info_server_t	*server_info,
103				 xpc_connection_t	c,
104				 uint64_t		generation
105				);
106
107Boolean
108_libSC_info_server_close	(
109				 libSC_info_server_t	*server_info,
110				 xpc_connection_t	c
111				);
112
113__END_DECLS
114
115#endif // _LIBSYSTEMCONFIGURATION_SERVER_H
116