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