2 * Copyright (c) 2009 Apple Inc. All rights reserved.
4 * @APPLE_LICENSE_HEADER_START@
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
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.
21 * @APPLE_LICENSE_HEADER_END@
25 Copyright (c) 2000-2009, Apple Inc. All rights reserved.
28 #if !defined(__COREFOUNDATION_CFSTREAMPRIV__)
29 #define __COREFOUNDATION_CFSTREAMPRIV__ 1
31 #include <CoreFoundation/CFStream.h>
32 #include <CoreFoundation/CFRunLoop.h>
33 #include <CoreFoundation/CFRuntime.h>
38 struct _CFStreamClient
{
39 CFStreamClientContext cbContext
;
40 void (*cb
)(struct _CFStream
*, CFStreamEventType
, void *);
42 CFRunLoopSourceRef rlSource
;
43 CFMutableArrayRef runLoopsAndModes
;
44 CFOptionFlags whatToSignal
;
47 #define CFStreamCurrentVersion 2
49 // A unified set of callbacks so we can use a single structure for all struct _CFStreams.
50 struct _CFStreamCallBacks
{
52 void *(*create
)(struct _CFStream
*stream
, void *info
);
53 void (*finalize
)(struct _CFStream
*stream
, void *info
);
54 CFStringRef (*copyDescription
)(struct _CFStream
*stream
, void *info
);
56 Boolean (*open
)(struct _CFStream
*stream
, CFErrorRef
*error
, Boolean
*openComplete
, void *info
);
57 Boolean (*openCompleted
)(struct _CFStream
*stream
, CFErrorRef
*error
, void *info
);
58 CFIndex (*read
)(CFReadStreamRef stream
, UInt8
*buffer
, CFIndex bufferLength
, CFErrorRef
*error
, Boolean
*atEOF
, void *info
);
59 const UInt8
*(*getBuffer
)(CFReadStreamRef sream
, CFIndex maxBytesToRead
, CFIndex
*numBytesRead
, CFErrorRef
*error
, Boolean
*atEOF
, void *info
);
60 Boolean (*canRead
)(CFReadStreamRef
, CFErrorRef
*error
, void *info
);
61 CFIndex (*write
)(CFWriteStreamRef
, const UInt8
*buffer
, CFIndex bufferLength
, CFErrorRef
*error
, void *info
);
62 Boolean (*canWrite
)(CFWriteStreamRef
, CFErrorRef
*error
, void *info
);
63 void (*close
)(struct _CFStream
*stream
, void *info
);
65 CFTypeRef (*copyProperty
)(struct _CFStream
*stream
, CFStringRef propertyName
, void *info
);
66 Boolean (*setProperty
)(struct _CFStream
*stream
, CFStringRef propertyName
, CFTypeRef propertyValue
, void *info
);
67 void (*requestEvents
)(struct _CFStream
*stream
, CFOptionFlags events
, void *info
);
68 void (*schedule
)(struct _CFStream
*stream
, CFRunLoopRef runLoop
, CFStringRef runLoopMode
, void *info
);
69 void (*unschedule
)(struct _CFStream
*stream
, CFRunLoopRef runLoop
, CFStringRef runLoopMode
, void *info
);
73 CFRuntimeBase _cfBase
;
75 CFErrorRef error
; // if callBacks->version < 2, this is actually a pointer to a CFStreamError
76 struct _CFStreamClient
*client
;
78 const struct _CFStreamCallBacks
*callBacks
; // This will not exist (will not be allocated) if the callbacks are from our known, "blessed" set.
83 CF_INLINE
void *_CFStreamGetInfoPointer(struct _CFStream
*stream
) {
88 // cb version must be > 0
89 CF_EXPORT
struct _CFStream
*_CFStreamCreateWithConstantCallbacks(CFAllocatorRef alloc
, void *info
, const struct _CFStreamCallBacks
*cb
, Boolean isReading
);
91 // Only available for streams created with _CFStreamCreateWithConstantCallbacks, above. cb's version must be 1
92 CF_EXPORT
void _CFStreamSetInfoPointer(struct _CFStream
*stream
, void *info
, const struct _CFStreamCallBacks
*cb
);
95 ** _CFStreamSourceScheduleWithRunLoop
97 ** Schedules the given run loop source on the given run loop and mode. It then
98 ** adds the loop and mode pair to the runLoopsAndModes list. The list is
99 ** simply a linear list of a loop reference followed by a mode reference.
101 ** source Run loop source to be scheduled
103 ** runLoopsAndModes List of run loop/mode pairs on which the source is scheduled
105 ** runLoop Run loop on which the source is being scheduled
107 ** runLoopMode Run loop mode on which the source is being scheduled
110 void _CFStreamSourceScheduleWithRunLoop(CFRunLoopSourceRef source
, CFMutableArrayRef runLoopsAndModes
, CFRunLoopRef runLoop
, CFStringRef runLoopMode
);
114 ** _CFStreamSourceUnscheduleFromRunLoop
116 ** Unschedule the given source from the given run loop and mode. It then will
117 ** guarantee that the source remains scheduled on the list of run loop and mode
118 ** pairs in the runLoopsAndModes list. The list is simply a linear list of a
119 ** loop reference followed by a mode reference.
121 ** source Run loop source to be unscheduled
123 ** runLoopsAndModes List of run loop/mode pairs on which the source is scheduled
125 ** runLoop Run loop from which the source is being unscheduled
127 ** runLoopMode Run loop mode from which the source is being unscheduled
130 void _CFStreamSourceUnscheduleFromRunLoop(CFRunLoopSourceRef source
, CFMutableArrayRef runLoopsAndModes
, CFRunLoopRef runLoop
, CFStringRef runLoopMode
);
134 ** _CFStreamSourceScheduleWithAllRunLoops
136 ** Schedules the given run loop source on all the run loops and modes in the list.
137 ** The list is simply a linear list of a loop reference followed by a mode reference.
139 ** source Run loop source to be unscheduled
141 ** runLoopsAndModes List of run loop/mode pairs on which the source is scheduled
144 void _CFStreamSourceScheduleWithAllRunLoops(CFRunLoopSourceRef source
, CFArrayRef runLoopsAndModes
);
148 ** _CFStreamSourceUnscheduleFromRunLoop
150 ** Unschedule the given source from all the run loops and modes in the list.
151 ** The list is simply a linear list of a loop reference followed by a mode
154 ** source Run loop source to be unscheduled
156 ** runLoopsAndModes List of run loop/mode pairs on which the source is scheduled
159 void _CFStreamSourceUncheduleFromAllRunLoops(CFRunLoopSourceRef source
, CFArrayRef runLoopsAndModes
);
162 CFReadStreamRef
_CFReadStreamCreateFromFileDescriptor(CFAllocatorRef alloc
, int fd
);
165 CFWriteStreamRef
_CFWriteStreamCreateFromFileDescriptor(CFAllocatorRef alloc
, int fd
);
169 #define SECURITY_NONE (0)
170 #define SECURITY_SSLv2 (1)
171 #define SECURITY_SSLv3 (2)
172 #define SECURITY_SSLv32 (3)
173 #define SECURITY_TLS (4)
175 #if (TARGET_OS_MAC && !(TARGET_OS_EMBEDDED || TARGET_OS_IPHONE)) || (TARGET_OS_EMBEDDED || TARGET_OS_IPHONE)
176 // This symbol is exported from CFNetwork (see CFSocketStream.i). Only __MACH__ systems will
177 // get this symbol from CoreFoundation.
178 extern const int kCFStreamErrorDomainSSL
;
182 * Additional SPI for CFNetwork for select side read buffering
185 Boolean
__CFSocketGetBytesAvailable(CFSocketRef s
, CFIndex
* ctBytesAvailable
);
188 CFIndex
__CFSocketRead(CFSocketRef s
, UInt8
* buffer
, CFIndex length
, int* error
);
191 * This define can be removed once 6030579 is removed
193 #define CFNETWORK_6030579 1
196 void __CFSocketSetSocketReadBufferAttrs(CFSocketRef s
, CFTimeInterval timeout
, CFIndex length
);
200 #endif /* ! __COREFOUNDATION_CFSTREAMPRIV__ */