| 1 | /* |
| 2 | * Copyright (c) 2000-2004 Apple Inc. All rights reserved. |
| 3 | * |
| 4 | * @APPLE_OSREFERENCE_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. The rights granted to you under the License |
| 10 | * may not be used to create, or enable the creation or redistribution of, |
| 11 | * unlawful or unlicensed copies of an Apple operating system, or to |
| 12 | * circumvent, violate, or enable the circumvention or violation of, any |
| 13 | * terms of an Apple operating system software license agreement. |
| 14 | * |
| 15 | * Please obtain a copy of the License at |
| 16 | * http://www.opensource.apple.com/apsl/ and read it before using this file. |
| 17 | * |
| 18 | * The Original Code and all software distributed under the License are |
| 19 | * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
| 20 | * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
| 21 | * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, |
| 22 | * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. |
| 23 | * Please see the License for the specific language governing rights and |
| 24 | * limitations under the License. |
| 25 | * |
| 26 | * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ |
| 27 | */ |
| 28 | |
| 29 | #ifndef __USERNOTIFICATION_KUNCUSERNOTIFICATIONS_H |
| 30 | #define __USERNOTIFICATION_KUNCUSERNOTIFICATIONS_H |
| 31 | |
| 32 | #include <sys/cdefs.h> |
| 33 | |
| 34 | |
| 35 | #include <mach/message.h> |
| 36 | #include <mach/kern_return.h> |
| 37 | #include <UserNotification/UNDTypes.h> |
| 38 | |
| 39 | __BEGIN_DECLS |
| 40 | |
| 41 | /* |
| 42 | * non blocking notice call. |
| 43 | */ |
| 44 | kern_return_t |
| 45 | KUNCUserNotificationDisplayNotice( |
| 46 | int noticeTimeout, |
| 47 | unsigned flags, |
| 48 | char *iconPath, |
| 49 | char *soundPath, |
| 50 | char *localizationPath, |
| 51 | char *, |
| 52 | char *alertMessage, |
| 53 | char *defaultButtonTitle) __attribute__((deprecated)); |
| 54 | |
| 55 | /* |
| 56 | * ***BLOCKING*** alert call, returned int value corresponds to the |
| 57 | * pressed button, spin this off in a thread only, or expect your kext to block. |
| 58 | */ |
| 59 | kern_return_t |
| 60 | KUNCUserNotificationDisplayAlert( |
| 61 | int alertTimeout, |
| 62 | unsigned flags, |
| 63 | char *iconPath, |
| 64 | char *soundPath, |
| 65 | char *localizationPath, |
| 66 | char *, |
| 67 | char *alertMessage, |
| 68 | char *defaultButtonTitle, |
| 69 | char *alternateButtonTitle, |
| 70 | char *otherButtonTitle, |
| 71 | unsigned *responseFlags) __attribute__((deprecated)); |
| 72 | |
| 73 | |
| 74 | /* |
| 75 | * Execute a userland executable with the given path, user and type |
| 76 | */ |
| 77 | |
| 78 | #define kOpenApplicationPath 0 /* essentially executes the path */ |
| 79 | #define kOpenPreferencePanel 1 /* runs the preferences with the foo.preference opened. foo.preference must exist in /System/Library/Preferences */ |
| 80 | #define kOpenApplication 2 /* essentially runs /usr/bin/open on the passed in application name */ |
| 81 | |
| 82 | |
| 83 | #define kOpenAppAsRoot 0 |
| 84 | #define kOpenAppAsConsoleUser 1 |
| 85 | |
| 86 | kern_return_t |
| 87 | KUNCExecute( |
| 88 | char *executionPath, |
| 89 | int openAsUser, |
| 90 | int pathExecutionType) __attribute__((deprecated)); |
| 91 | |
| 92 | |
| 93 | /* KUNC User Notification XML Keys |
| 94 | * |
| 95 | * These are the keys used in the xml plist file passed in to the |
| 96 | * KUNCUserNotitificationDisplayFrom* calls |
| 97 | * |
| 98 | * KUNC Notifications are completely dependent on CFUserNotifications in |
| 99 | * user land. The same restrictions apply, including the number of text fields, |
| 100 | * types of information displayable, etc. |
| 101 | * |
| 102 | * Key Type |
| 103 | * Header string (header displayed on dialog) |
| 104 | * corresponds to kCFUserNotificationAlertHeaderKey |
| 105 | * |
| 106 | * Icon URL string (url of the icon to display) |
| 107 | * corresponds to kCFUserNotificationIconURLKey |
| 108 | * |
| 109 | * Sound URL string (url of the sound to play on display) |
| 110 | * corresponds to kCFUserNotificationSoundURLKey |
| 111 | * |
| 112 | * Localization URL string (url of bundle to retrieve localization |
| 113 | * info from, using Localizable.strings files) |
| 114 | * corresponds to kCFUserNotificationLocalizationURLKey |
| 115 | * |
| 116 | * Message string (text of the message, can contain %@'s |
| 117 | * which are filled from tokenString passed in) |
| 118 | * corresponds to kCFUserNotificationAlertMessageKey |
| 119 | * |
| 120 | * OK Button Title string (title of the "main" button) |
| 121 | * corresponds to kCFUserNotificationDefaultButtonTitleKey |
| 122 | * |
| 123 | * Alternate Button Title string (title of the "alternate" button, usually cancel) |
| 124 | * corresponds to kCFUserNotificationAlternateButtonTitleKey |
| 125 | * |
| 126 | * Other Button Title string (title of the "other" button) |
| 127 | * corresponds to kCFUserNotificationOtherButtonTitleKey |
| 128 | * |
| 129 | * Timeout string (numeric, int - seconds until the dialog |
| 130 | * goes away on it's own) |
| 131 | * |
| 132 | * Alert Level string (Stop, Notice, Alert) |
| 133 | * |
| 134 | * Blocking Message string (numeric, 1 or 0 - if 1, the dialog will |
| 135 | * have no buttons) |
| 136 | * |
| 137 | * Text Field Strings array of strings (each becomes a text field) |
| 138 | * corresponds to kCFUserNotificationTextFieldTitlesKey |
| 139 | * |
| 140 | * Password Fields array of strings (numeric - each indicates a |
| 141 | * pwd field) |
| 142 | * |
| 143 | * Popup Button Strings array of strings (each entry becomes a popup |
| 144 | * button string) |
| 145 | * |
| 146 | * Radio Button Strings array of strings (each becomes a radio button) |
| 147 | * |
| 148 | * Check Box Strings array of strings (each becomes a check box) |
| 149 | * corresponds to kCFUserNotificationCheckBoxTitlesKey |
| 150 | * |
| 151 | * Selected Radio string (numeric - which radio is selected) |
| 152 | * |
| 153 | * Checked Boxes array of strings (numeric - each indicates a |
| 154 | * checked field) |
| 155 | * |
| 156 | * Selected Popup string (numeric - which popup entry is selected) |
| 157 | * |
| 158 | */ |
| 159 | |
| 160 | /* |
| 161 | * Bundle Calls |
| 162 | * |
| 163 | * Arguments |
| 164 | * |
| 165 | * bundleIdentifier |
| 166 | * path to the actual bundle (not inside of it) |
| 167 | * (i.e. "/System/Library/Extensions/Foo.kext") |
| 168 | * ***NOTE*** |
| 169 | * This WILL change soon to expect the CFBundleIdentifier instead of a bundle path |
| 170 | * fileName |
| 171 | * filename in bundle to retrive the xml from (i.e. "Messages") |
| 172 | * fileExtension |
| 173 | * if fileName has an extension, it goes here (i.e., "dict"); |
| 174 | * messageKey |
| 175 | * name of the xml key in the dictionary in the file to retrieve |
| 176 | * the info from (i.e., "Error Message") |
| 177 | * tokenString |
| 178 | * a string in the form of "foo@bar" where each element is |
| 179 | * seperated by the @ character. This string can be used to |
| 180 | * replace values of the form %@ in the message key in the provided |
| 181 | * dictionary in the xml plist |
| 182 | * specialKey |
| 183 | * user specified key for notification, use this to match return |
| 184 | * values with your requested notification, this value is passed |
| 185 | * back to the client in the callback pararmeter contextKey |
| 186 | */ |
| 187 | |
| 188 | typedef uintptr_t KUNCUserNotificationID; |
| 189 | |
| 190 | /* |
| 191 | * Reponse value checking & default setting |
| 192 | * |
| 193 | * The reponse value returned in the response Flags of the |
| 194 | * KUNCUserNotificationCallBack can be tested against the following |
| 195 | * enum and 2 defines to determine the state. |
| 196 | */ |
| 197 | |
| 198 | enum { |
| 199 | kKUNCDefaultResponse = 0, |
| 200 | kKUNCAlternateResponse = 1, |
| 201 | kKUNCOtherResponse = 2, |
| 202 | kKUNCCancelResponse = 3 |
| 203 | }; |
| 204 | |
| 205 | #define KUNCCheckBoxChecked(i) (1 << (8 + i)) /* can be used for radio's too */ |
| 206 | #define (n) (n << 24) |
| 207 | |
| 208 | /* |
| 209 | * Callback function for KUNCNotifications |
| 210 | */ |
| 211 | typedef void |
| 212 | (*KUNCUserNotificationCallBack)( |
| 213 | int contextKey, |
| 214 | int responseFlags, |
| 215 | const void *xmlData); |
| 216 | |
| 217 | /* |
| 218 | * Get a notification ID |
| 219 | */ |
| 220 | KUNCUserNotificationID KUNCGetNotificationID(void) __attribute__((deprecated)); |
| 221 | |
| 222 | /* This function currently requires a bundle path, which kexts cannot currently get. In the future, the CFBundleIdentiofier of the kext will be pass in in place of the bundlePath. */ |
| 223 | |
| 224 | kern_return_t |
| 225 | KUNCUserNotificationDisplayFromBundle( |
| 226 | KUNCUserNotificationID notificationID, |
| 227 | char *bundleIdentifier, |
| 228 | char *fileName, |
| 229 | char *fileExtension, |
| 230 | char *messageKey, |
| 231 | char *tokenString, |
| 232 | KUNCUserNotificationCallBack callback, |
| 233 | int contextKey) __attribute__((deprecated)); |
| 234 | |
| 235 | |
| 236 | __END_DECLS |
| 237 | |
| 238 | #endif /* __USERNOTIFICATION_KUNCUSERNOTIFICATIONS_H */ |
| 239 | |