1/* 2 * Copyright (c) 1998-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 "DACallback.h" 25 26DACallbackRef DACallbackCreate( CFAllocatorRef allocator, 27 DASessionRef session, 28 mach_vm_offset_t address, 29 mach_vm_offset_t context, 30 _DACallbackKind kind, 31 CFIndex order, 32 CFDictionaryRef match, 33 CFArrayRef watch ) 34{ 35 CFMutableDictionaryRef callback; 36 37 callback = CFDictionaryCreateMutable( allocator, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks ); 38 39 if ( callback ) 40 { 41 CFDictionarySetValue( callback, _kDACallbackSessionKey, session ); 42 43 ___CFDictionarySetIntegerValue( callback, _kDACallbackAddressKey, address ); 44 ___CFDictionarySetIntegerValue( callback, _kDACallbackContextKey, context ); 45 ___CFDictionarySetIntegerValue( callback, _kDACallbackKindKey, kind ); 46 ___CFDictionarySetIntegerValue( callback, _kDACallbackOrderKey, order ); 47 48 if ( match ) CFDictionarySetValue( callback, _kDACallbackMatchKey, match ); 49 if ( watch ) CFDictionarySetValue( callback, _kDACallbackWatchKey, watch ); 50 } 51 52 return ( void * ) callback; 53} 54 55DACallbackRef DACallbackCreateCopy( CFAllocatorRef allocator, DACallbackRef callback ) 56{ 57 return ( void * ) CFDictionaryCreateMutableCopy( allocator, 0, ( void * ) callback ); 58} 59 60mach_vm_offset_t DACallbackGetAddress( DACallbackRef callback ) 61{ 62 return ___CFDictionaryGetIntegerValue( ( void * ) callback, _kDACallbackAddressKey ); 63} 64 65CFTypeRef DACallbackGetArgument0( DACallbackRef callback ) 66{ 67 return CFDictionaryGetValue( ( void * ) callback, _kDACallbackArgument0Key ); 68} 69 70CFTypeRef DACallbackGetArgument1( DACallbackRef callback ) 71{ 72 return CFDictionaryGetValue( ( void * ) callback, _kDACallbackArgument1Key ); 73} 74 75mach_vm_offset_t DACallbackGetContext( DACallbackRef callback ) 76{ 77 return ___CFDictionaryGetIntegerValue( ( void * ) callback, _kDACallbackContextKey ); 78} 79 80DADiskRef DACallbackGetDisk( DACallbackRef callback ) 81{ 82 return ( void * ) CFDictionaryGetValue( ( void * ) callback, _kDACallbackDiskKey ); 83} 84 85_DACallbackKind DACallbackGetKind( DACallbackRef callback ) 86{ 87 return ___CFDictionaryGetIntegerValue( ( void * ) callback, _kDACallbackKindKey ); 88} 89 90CFDictionaryRef DACallbackGetMatch( DACallbackRef callback ) 91{ 92 return CFDictionaryGetValue( ( void * ) callback, _kDACallbackMatchKey ); 93} 94 95SInt32 DACallbackGetOrder( DACallbackRef callback ) 96{ 97 return ___CFDictionaryGetIntegerValue( ( void * ) callback, _kDACallbackOrderKey ); 98} 99 100DASessionRef DACallbackGetSession( DACallbackRef callback ) 101{ 102 return ( void * ) CFDictionaryGetValue( ( void * ) callback, _kDACallbackSessionKey ); 103} 104 105CFAbsoluteTime DACallbackGetTime( DACallbackRef callback ) 106{ 107 CFDateRef date; 108 CFAbsoluteTime time = 0; 109 110 date = CFDictionaryGetValue( ( void * ) callback, _kDACallbackTimeKey ); 111 112 if ( date ) 113 { 114 time = CFDateGetAbsoluteTime( date ); 115 } 116 117 return time; 118} 119 120CFArrayRef DACallbackGetWatch( DACallbackRef callback ) 121{ 122 return CFDictionaryGetValue( ( void * ) callback, _kDACallbackWatchKey ); 123} 124 125void DACallbackSetArgument0( DACallbackRef callback, CFTypeRef argument0 ) 126{ 127 if ( argument0 ) 128 { 129 CFDictionarySetValue( ( void * ) callback, _kDACallbackArgument0Key, argument0 ); 130 } 131 else 132 { 133 CFDictionaryRemoveValue( ( void * ) callback, _kDACallbackArgument0Key ); 134 } 135} 136 137void DACallbackSetArgument1( DACallbackRef callback, CFTypeRef argument1 ) 138{ 139 if ( argument1 ) 140 { 141 CFDictionarySetValue( ( void * ) callback, _kDACallbackArgument1Key, argument1 ); 142 } 143 else 144 { 145 CFDictionaryRemoveValue( ( void * ) callback, _kDACallbackArgument1Key ); 146 } 147} 148 149void DACallbackSetDisk( DACallbackRef callback, DADiskRef disk ) 150{ 151 if ( disk ) 152 { 153 CFDictionarySetValue( ( void * ) callback, _kDACallbackDiskKey, disk ); 154 } 155 else 156 { 157 CFDictionaryRemoveValue( ( void * ) callback, _kDACallbackDiskKey ); 158 } 159} 160 161void DACallbackSetMatch( DACallbackRef callback, CFDictionaryRef match ) 162{ 163 if ( match ) 164 { 165 CFDictionarySetValue( ( void * ) callback, _kDACallbackMatchKey, match ); 166 } 167 else 168 { 169 CFDictionaryRemoveValue( ( void * ) callback, _kDACallbackMatchKey ); 170 } 171} 172 173void DACallbackSetSession( DACallbackRef callback, DASessionRef session ) 174{ 175 if ( session ) 176 { 177 CFDictionarySetValue( ( void * ) callback, _kDACallbackSessionKey, session ); 178 } 179 else 180 { 181 CFDictionaryRemoveValue( ( void * ) callback, _kDACallbackSessionKey ); 182 } 183} 184 185void DACallbackSetTime( DACallbackRef callback, CFAbsoluteTime time ) 186{ 187 CFDateRef date; 188 189 date = CFDateCreate( kCFAllocatorDefault, time ); 190 191 if ( date ) 192 { 193 CFDictionarySetValue( ( void * ) callback, _kDACallbackTimeKey, date ); 194 195 CFRelease( date ); 196 } 197} 198