2 * Copyright (c) 2015 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-2014, 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
);
74 CF_EXPORT
void* _CFStreamGetInfoPointer(struct _CFStream
* stream
);
76 // cb version must be > 0
77 CF_EXPORT
struct _CFStream
*_CFStreamCreateWithConstantCallbacks(CFAllocatorRef alloc
, void *info
, const struct _CFStreamCallBacks
*cb
, Boolean isReading
);
79 // Only available for streams created with _CFStreamCreateWithConstantCallbacks, above. cb's version must be 1
80 CF_EXPORT
void _CFStreamSetInfoPointer(struct _CFStream
*stream
, void *info
, const struct _CFStreamCallBacks
*cb
);
83 ** _CFStreamSourceScheduleWithRunLoop
85 ** Schedules the given run loop source on the given run loop and mode. It then
86 ** adds the loop and mode pair to the runLoopsAndModes list. The list is
87 ** simply a linear list of a loop reference followed by a mode reference.
89 ** source Run loop source to be scheduled
91 ** runLoopsAndModes List of run loop/mode pairs on which the source is scheduled
93 ** runLoop Run loop on which the source is being scheduled
95 ** runLoopMode Run loop mode on which the source is being scheduled
98 void _CFStreamSourceScheduleWithRunLoop(CFRunLoopSourceRef source
, CFMutableArrayRef runLoopsAndModes
, CFRunLoopRef runLoop
, CFStringRef runLoopMode
);
102 ** _CFStreamSourceUnscheduleFromRunLoop
104 ** Unschedule the given source from the given run loop and mode. It then will
105 ** guarantee that the source remains scheduled on the list of run loop and mode
106 ** pairs in the runLoopsAndModes list. The list is simply a linear list of a
107 ** loop reference followed by a mode reference.
109 ** source Run loop source to be unscheduled
111 ** runLoopsAndModes List of run loop/mode pairs on which the source is scheduled
113 ** runLoop Run loop from which the source is being unscheduled
115 ** runLoopMode Run loop mode from which the source is being unscheduled
118 void _CFStreamSourceUnscheduleFromRunLoop(CFRunLoopSourceRef source
, CFMutableArrayRef runLoopsAndModes
, CFRunLoopRef runLoop
, CFStringRef runLoopMode
);
122 ** _CFStreamSourceScheduleWithAllRunLoops
124 ** Schedules the given run loop source on all the run loops and modes in the list.
125 ** The list is simply a linear list of a loop reference followed by a mode reference.
127 ** source Run loop source to be unscheduled
129 ** runLoopsAndModes List of run loop/mode pairs on which the source is scheduled
132 void _CFStreamSourceScheduleWithAllRunLoops(CFRunLoopSourceRef source
, CFArrayRef runLoopsAndModes
);
136 ** _CFStreamSourceUnscheduleFromRunLoop
138 ** Unschedule the given source from all the run loops and modes in the list.
139 ** The list is simply a linear list of a loop reference followed by a mode
142 ** source Run loop source to be unscheduled
144 ** runLoopsAndModes List of run loop/mode pairs on which the source is scheduled
147 void _CFStreamSourceUncheduleFromAllRunLoops(CFRunLoopSourceRef source
, CFArrayRef runLoopsAndModes
);
150 CFReadStreamRef
_CFReadStreamCreateFromFileDescriptor(CFAllocatorRef alloc
, int fd
);
153 CFWriteStreamRef
_CFWriteStreamCreateFromFileDescriptor(CFAllocatorRef alloc
, int fd
);
157 #define SECURITY_NONE (0)
158 #define SECURITY_SSLv2 (1)
159 #define SECURITY_SSLv3 (2)
160 #define SECURITY_SSLv32 (3)
161 #define SECURITY_TLS (4)
163 #if (TARGET_OS_MAC && !(TARGET_OS_EMBEDDED || TARGET_OS_IPHONE)) || (TARGET_OS_EMBEDDED || TARGET_OS_IPHONE)
164 // This symbol is exported from CFNetwork (see CFSocketStream.i). Only __MACH__ systems will
165 // get this symbol from CoreFoundation.
166 extern const int kCFStreamErrorDomainSSL
;
170 * Additional SPI for CFNetwork for select side read buffering
173 Boolean
__CFSocketGetBytesAvailable(CFSocketRef s
, CFIndex
* ctBytesAvailable
);
176 CFIndex
__CFSocketRead(CFSocketRef s
, UInt8
* buffer
, CFIndex length
, int* error
);
179 * This define can be removed once 6030579 is removed
181 #define CFNETWORK_6030579 1
184 void __CFSocketSetSocketReadBufferAttrs(CFSocketRef s
, CFTimeInterval timeout
, CFIndex length
);
189 * for CF{Read/Write}StreamCopyProperty created from a file. The
190 * result is a CFDataRef containing sizeof(int) bytes in machine byte
191 * ordering representing the file descriptor of the underlying open
192 * file. If the underlying file descriptor is not open, the property
193 * value will be NULL (as opposed to containing ((int) -1)).
195 CF_EXPORT
const CFStringRef _kCFStreamPropertyFileNativeHandle
CF_AVAILABLE_IOS(5_0
);
197 #endif /* ! __COREFOUNDATION_CFSTREAMPRIV__ */