| /* |
| * Copyright (c) 2008-2009 Brent Fulgham <bfulgham@gmail.org>. All rights reserved. |
| * |
| * This source code is a modified version of the CoreFoundation sources released by Apple Inc. under |
| * the terms of the APSL version 2.0 (see below). |
| * |
| * For information about changes from the original Apple source release can be found by reviewing the |
| * source control system for the project at https://sourceforge.net/svn/?group_id=246198. |
| * |
| * The original license information is as follows: |
| * |
| * Copyright (c) 2008 Apple Inc. All rights reserved. |
| * |
| * @APPLE_LICENSE_HEADER_START@ |
| * |
| * This file contains Original Code and/or Modifications of Original Code |
| * as defined in and that are subject to the Apple Public Source License |
| * Version 2.0 (the 'License'). You may not use this file except in |
| * compliance with the License. Please obtain a copy of the License at |
| * http://www.opensource.apple.com/apsl/ and read it before using this |
| * file. |
| * |
| * The Original Code and all software distributed under the License are |
| * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
| * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
| * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, |
| * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. |
| * Please see the License for the specific language governing rights and |
| * limitations under the License. |
| * |
| * @APPLE_LICENSE_HEADER_END@ |
| */ |
| /* CFRunLoopPriv.h |
| Copyright (c) 2006-2007, Apple Inc. All rights reserved. |
| */ |
| |
| #if (DEPLOYMENT_TARGET_MACOSX || 0) |
| |
| /* -------- -------- -------- -------- -------- -------- -------- -------- */ |
| |
| #import "CFObject.h" |
| #include <CoreFoundation/CFRunLoop.h> |
| #include <CoreFoundation/CFMachPort.h> |
| #include <CoreFoundation/CFSocket.h> |
| #include <CoreFoundation/CFArray.h> |
| #include <CoreFoundation/CFBag.h> |
| #include <mach/mach.h> |
| #include <sys/event.h> |
| #include <pthread.h> |
| |
| @class CFRunLoopSourceSet; |
| typedef CFRunLoopSourceContext CFRunLoopSourceContext0; |
| typedef CFMachPortContext CFRunLoopMachPortContext; |
| typedef CFSocketContext CFRunLoopSocketContext; |
| |
| /* -------- -------- -------- -------- -------- -------- -------- -------- */ |
| |
| @interface CFRunLoopSource : CFObject { |
| uint8_t _cfruntime_[8]; // large enough for 32-bit or 64-bit |
| int _kq; |
| mach_port_t _portset; |
| mach_port_t _port; |
| CFIndex _order; |
| uint8_t _invalid; |
| uint8_t _firing; |
| uint8_t _ownsPort; |
| uint8_t _async; |
| } |
| |
| - (int)kqueue; |
| - (mach_port_t)machPortSet; |
| - (mach_port_t)machPort; |
| |
| - (void)setOrder:(CFIndex)o; |
| - (CFIndex)order; |
| |
| - (void)setAsyncStrategy:(uint8_t)s; |
| - (uint8_t)asyncStrategy; |
| |
| - (void)perform:(mach_msg_header_t *)msg; |
| |
| - (void)invalidate; |
| - (Boolean)isValid; |
| |
| - (void)noteAddedToSourceSet:(CFRunLoopSourceSet *)ss; |
| - (void)noteRemovedFromSourceSet:(CFRunLoopSourceSet *)ss; |
| |
| - (CFStringRef)copyPartialDebugDescription; // subclasses override |
| - (CFStringRef)copyDebugDescription; |
| |
| @end |
| |
| @interface CFRunLoopVersion0SourceCFRef : CFRunLoopSource { |
| CFRunLoopSourceContext0 _context; |
| } |
| |
| - (Boolean)setContext:(CFRunLoopSourceContext0)c; |
| - (CFRunLoopSourceContext0)context; |
| |
| - (void)markReady; |
| - (void)handle; |
| |
| - (void)scheduleInRunLoop:(CFRunLoopRef)rl mode:(CFStringRef)n; |
| - (void)cancelFromRunLoop:(CFRunLoopRef)rl mode:(CFStringRef)n; |
| |
| @end |
| |
| @interface CFRunLoopVersion1SourceCFRef : CFRunLoopSource { |
| CFRunLoopSourceContext1 _context; |
| } |
| |
| - (Boolean)setContext:(CFRunLoopSourceContext1)c; |
| - (CFRunLoopSourceContext1)context; |
| |
| - (void)markReady; |
| - (void)handle:(mach_msg_header_t *)msg; |
| |
| @end |
| |
| /* -------- -------- -------- -------- -------- -------- -------- -------- */ |
| |
| @interface CFRunLoopTimerSource : CFRunLoopSource { |
| CFAbsoluteTime _fireAT; |
| CFTimeInterval _interval; |
| } |
| |
| - (void)setFireTime:(CFAbsoluteTime)at; |
| - (CFAbsoluteTime)fireTime; |
| |
| - (void)setInterval:(CFTimeInterval)i; |
| - (CFTimeInterval)interval; |
| |
| - (void)handle; |
| |
| @end |
| |
| @interface CFRunLoopTimerSourceCFRef : CFRunLoopTimerSource { |
| void *_function; |
| CFRunLoopTimerContext _context; |
| } |
| |
| - (void)setFunction:(void *)f; |
| - (void *)function; |
| |
| - (Boolean)setContext:(CFRunLoopTimerContext)c; |
| - (CFRunLoopTimerContext)context; |
| |
| @end |
| |
| /* -------- -------- -------- -------- -------- -------- -------- -------- */ |
| |
| @interface CFRunLoopMachPortSource : CFRunLoopSource { |
| mach_port_t _notifyPort; |
| mach_port_t _oldNotifyPort; |
| } |
| |
| + (id)newWithPort:(mach_port_t)p; |
| |
| - (void)handle:(mach_msg_header_t *)msg; |
| |
| @end |
| |
| @interface CFRunLoopMachPortSourceCFRef : CFRunLoopMachPortSource { |
| void *_function; |
| CFRunLoopMachPortContext _context; |
| void *_invalidation; |
| } |
| |
| - (void)setFunction:(void *)f; |
| - (void *)function; |
| |
| - (Boolean)setContext:(CFRunLoopMachPortContext)c; |
| - (CFRunLoopMachPortContext)context; |
| |
| - (void)setInvalidationFunction:(void *)f; |
| - (void *)invalidationFunction; |
| |
| @end |
| |
| /* -------- -------- -------- -------- -------- -------- -------- -------- */ |
| |
| @interface CFRunLoopKEventSource : CFRunLoopSource { |
| struct kevent _filter; |
| } |
| |
| - (Boolean)setFilter:(struct kevent)kev; |
| - (struct kevent)filter; |
| |
| - (void)handle:(struct kevent *)kev; |
| |
| @end |
| |
| /* -------- -------- -------- -------- -------- -------- -------- -------- */ |
| |
| @interface CFRunLoopSignalSource : CFRunLoopSource { |
| int _signal; |
| } |
| |
| - (Boolean)setSignal:(int)sig; |
| - (int)signal; |
| |
| - (long)poll; |
| |
| - (void)handle:(long)n; |
| |
| @end |
| |
| /* -------- -------- -------- -------- -------- -------- -------- -------- */ |
| |
| @interface CFRunLoopProcessDeathSource : CFRunLoopSource { |
| int _pid; |
| } |
| |
| - (Boolean)setProcessID:(int)pid; |
| - (int)processID; |
| |
| - (void)handle; |
| |
| @end |
| |
| /* -------- -------- -------- -------- -------- -------- -------- -------- */ |
| |
| @interface CFRunLoopSocketSource : CFRunLoopSource { |
| int _socket; |
| uint8_t _ownsSocket; |
| uint8_t _enabledR; |
| uint8_t _enabledW; |
| } |
| |
| + (id)newWithSocket:(int)s; |
| |
| - (int)socket; |
| - (CFDataRef)copyLocalAddress; |
| - (CFDataRef)copyRemoteAddress; |
| |
| - (void)setReadEventsEnabled:(Boolean)b; |
| - (Boolean)readEventsEnabled; |
| |
| - (void)setWriteEventsEnabled:(Boolean)b; |
| - (Boolean)writeEventsEnabled; |
| |
| - (void)handleReadability:(CFIndex)amt endOfFile:(Boolean)b; |
| - (void)performRead:(struct kevent *)kev; |
| |
| - (void)handleWritability:(CFIndex)amt endOfFile:(Boolean)b; |
| - (void)performWrite:(struct kevent *)kev; |
| |
| @end |
| |
| @interface CFRunLoopSocketSourceCFRef : CFRunLoopSocketSource { |
| void *_function; |
| CFRunLoopSocketContext _context; |
| uint8_t _callbacks; |
| uint8_t _flags; |
| uint8_t _disabled; |
| } |
| |
| - (void)setFunction:(void *)f; |
| - (void *)function; |
| |
| - (Boolean)setContext:(CFRunLoopSocketContext)c; |
| - (CFRunLoopSocketContext)context; |
| |
| - (void)setCallBackTypes:(uint8_t)f; |
| - (uint8_t)callBackTypes; |
| |
| - (void)setFlags:(uint8_t)f; |
| - (uint8_t)flags; |
| |
| - (void)setDisabledFlags:(uint8_t)f; |
| - (uint8_t)disabledFlags; |
| |
| - (Boolean)handleAcceptError:(int)err; |
| - (Boolean)handleReadError:(int)err; |
| |
| @end |
| |
| /* -------- -------- -------- -------- -------- -------- -------- -------- */ |
| |
| @interface CFRunLoopObserver : CFRunLoopSource { |
| } |
| |
| - (void)observeEntry:(CFRunLoopSourceSet *)ss; |
| - (void)observeBeforeWaiting:(CFRunLoopSourceSet *)ss; |
| - (void)observeAfterWaiting:(CFRunLoopSourceSet *)ss; |
| - (void)observeExit:(CFRunLoopSourceSet *)ss; |
| |
| @end |
| |
| @interface CFRunLoopObserverCFRef : CFRunLoopObserver { |
| void *_function; |
| CFRunLoopObserverContext _context; |
| CFOptionFlags _activities; |
| uint8_t _oneshot; |
| } |
| |
| - (void)setFunction:(void *)f; |
| - (void *)function; |
| |
| - (Boolean)setContext:(CFRunLoopObserverContext)c; |
| - (CFRunLoopObserverContext)context; |
| |
| - (void)setActivities:(CFOptionFlags)a; |
| - (CFOptionFlags)activities; |
| |
| - (void)setOneshot:(Boolean)b; |
| - (Boolean)oneshot; |
| |
| @end |
| |
| /* -------- -------- -------- -------- -------- -------- -------- -------- */ |
| |
| @interface CFRunLoopSourceSet : CFRunLoopObserver { |
| CFMutableBagRef _sources; |
| CFStringRef _name; |
| pthread_t _thread; |
| CFMutableArrayRef _observers[4]; |
| CFRunLoopTimerSource *_timeoutTimer; |
| CFRunLoopMachPortSource *_wakeupPort; |
| uint8_t _stopped; |
| uint8_t _waiting; |
| } |
| |
| + (void)removeSourceFromAllSets:(CFRunLoopSource *)src; |
| |
| - (void)setName:(CFStringRef)n; |
| - (CFStringRef)name; |
| |
| - (void)setAffineThread:(pthread_t)t; |
| - (pthread_t)affineThread; |
| |
| - (Boolean)containsObserver:(CFRunLoopObserver *)o; |
| - (void)addObserver:(CFRunLoopObserver *)o activities:(CFRunLoopActivity)a; |
| - (void)removeObserver:(CFRunLoopObserver *)o activities:(CFRunLoopActivity)a; |
| |
| - (Boolean)containsSource:(CFRunLoopSource *)src; |
| - (void)addSource:(CFRunLoopSource *)src; |
| - (void)removeSource:(CFRunLoopSource *)src; |
| |
| - (void)forEachSource:(Boolean (*)(CFRunLoopSource *, void *))f context:(void *)c; |
| |
| - (void)stop; |
| - (void)wakeup; |
| - (Boolean)isWaiting; |
| - (Boolean)isEmpty; |
| - (Boolean)hasInputAvailable; |
| |
| - (int32_t)serviceUntil:(CFAbsoluteTime)at handleOne:(Boolean)handleOne; |
| |
| @end |
| |
| /* -------- -------- -------- -------- -------- -------- -------- -------- */ |
| |
| @interface CFRunLoopCFRef : CFObject { |
| uint8_t _cfruntime_[8]; // large enough for 32-bit or 64-bit |
| pthread_t _thread; |
| void *_counterpart; |
| CFMutableArrayRef _sourceSets; |
| CFRunLoopSourceSet *_currentSet; |
| uint8_t _invalid; |
| } |
| |
| - (void)setAffineThread:(pthread_t)t; |
| - (pthread_t)affineThread; |
| |
| - (void)setCounterpart:(void *)c; |
| - (void *)counterpart; |
| |
| - (void)invalidate; |
| - (Boolean)isValid; |
| |
| - (CFArrayRef)copySourceSets; |
| |
| - (void)setCurrentSourceSet:(CFRunLoopSourceSet *)ss; |
| - (CFRunLoopSourceSet *)currentSourceSet; |
| |
| - (CFRunLoopSourceSet *)lookupSourceSetWithName:(CFStringRef)n; |
| - (CFRunLoopSourceSet *)lookupOrCreateSourceSetWithName:(CFStringRef)n; |
| |
| - (CFStringRef)copyDebugDescription; |
| |
| @end |
| |
| /* -------- -------- -------- -------- -------- -------- -------- -------- */ |
| |
| #endif |
| |