1/* 2 * Copyright (c) 2013 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#include <TargetConditionals.h> 25#include <xpc/xpc.h> 26#include <errno.h> 27 28#include "tzlink.h" 29#include "tzlink_internal.h" 30 31errno_t 32tzlink(const char *tz) 33{ 34#if TARGET_OS_IPHONE && !TARGET_IPHONE_SIMULATOR 35 xpc_connection_t connection; 36 xpc_object_t request, reply; 37 errno_t e; 38 39 if (tz == NULL) { 40 return EINVAL; 41 } 42 43 connection = xpc_connection_create_mach_service(TZLINK_SERVICE_NAME, NULL, XPC_CONNECTION_MACH_SERVICE_PRIVILEGED); 44 xpc_connection_set_event_handler(connection, ^(__unused xpc_object_t event) { 45 }); 46 xpc_connection_resume(connection); 47 48 request = xpc_dictionary_create(NULL, NULL, 0); 49 xpc_dictionary_set_string(request, TZLINK_KEY_REQUEST_TIMEZONE, tz); 50 51 reply = xpc_connection_send_message_with_reply_sync(connection, request); 52 if (xpc_get_type(reply) == XPC_TYPE_DICTIONARY) { 53 e = (errno_t)xpc_dictionary_get_uint64(reply, TZLINK_KEY_REPLY_ERROR); 54 } else { 55 e = EIO; 56 } 57 58 xpc_release(reply); 59 xpc_release(request); 60 xpc_release(connection); 61 62 return e; 63#else /* !TARGET_OS_IPHONE */ 64#pragma unused (tz) 65 return ENOTSUP; 66#endif /* TARGET_OS_IPHONE */ 67} 68