Source code
Revision control
Copy as Markdown
Other Tools
// Copyright 2023 The Servo Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// option. This file may not be copied, modified, or distributed
// except according to those terms.
use std::os::raw::{c_int, c_void};
use crate::base::{
Boolean, CFAllocatorRef, CFIndex, CFOptionFlags, CFTypeID, CFTypeRef, SInt32, UInt32, UInt8,
};
use crate::error::CFErrorRef;
use crate::runloop::CFRunLoopRef;
use crate::socket::{CFSocketNativeHandle, CFSocketSignature};
use crate::string::CFStringRef;
use crate::url::CFURLRef;
#[repr(C)]
pub struct __CFReadStream(c_void);
#[repr(C)]
pub struct __CFWriteStream(c_void);
pub type CFReadStreamRef = *mut __CFReadStream;
pub type CFWriteStreamRef = *mut __CFWriteStream;
pub type CFStreamPropertyKey = CFStringRef;
pub type CFStreamStatus = CFIndex;
pub type CFStreamEventType = CFOptionFlags;
pub type CFStreamErrorDomain = CFIndex;
#[repr(C)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct CFStreamError {
pub domain: CFIndex,
pub error: SInt32,
}
/* CFStreamStatus: Constants that describe the status of a stream */
pub const kCFStreamStatusNotOpen: CFStreamStatus = 0;
pub const kCFStreamStatusOpening: CFStreamStatus = 1;
pub const kCFStreamStatusOpen: CFStreamStatus = 2;
pub const kCFStreamStatusReading: CFStreamStatus = 3;
pub const kCFStreamStatusWriting: CFStreamStatus = 4;
pub const kCFStreamStatusAtEnd: CFStreamStatus = 5;
pub const kCFStreamStatusClosed: CFStreamStatus = 6;
pub const kCFStreamStatusError: CFStreamStatus = 7;
// deprecated
pub const kCFStreamErrorDomainCustom: CFStreamErrorDomain = -1;
pub const kCFStreamErrorDomainPOSIX: CFStreamErrorDomain = 1;
pub const kCFStreamErrorDomainMacOSStatus: CFStreamErrorDomain = 2;
/* CFStreamEventType: Defines constants for stream-related events */
pub const kCFStreamEventNone: CFStreamEventType = 0;
pub const kCFStreamEventOpenCompleted: CFStreamEventType = 1;
pub const kCFStreamEventHasBytesAvailable: CFStreamEventType = 2;
pub const kCFStreamEventCanAcceptBytes: CFStreamEventType = 4;
pub const kCFStreamEventErrorOccurred: CFStreamEventType = 8;
pub const kCFStreamEventEndEncountered: CFStreamEventType = 16;
#[repr(C)]
#[derive(Debug, Clone, Copy)]
pub struct CFStreamClientContext {
pub version: CFIndex,
pub info: *mut c_void,
pub retain: extern "C" fn(info: *const c_void) -> *const c_void,
pub release: extern "C" fn(info: *const c_void),
pub copyDescription: extern "C" fn(info: *const c_void) -> CFStringRef,
}
pub type CFReadStreamClientCallBack = extern "C" fn(
stream: CFReadStreamRef,
_type: CFStreamEventType,
clientCallBackInfo: *mut c_void,
);
pub type CFWriteStreamClientCallBack = extern "C" fn(
stream: CFWriteStreamRef,
_type: CFStreamEventType,
clientCallBackInfo: *mut c_void,
);
extern "C" {
/*
* CFStream.h
*/
/* Stream Properties */
pub static kCFStreamPropertyAppendToFile: CFStreamPropertyKey;
pub static kCFStreamPropertyDataWritten: CFStreamPropertyKey;
pub static kCFStreamPropertyFileCurrentOffset: CFStreamPropertyKey;
pub static kCFStreamPropertySocketNativeHandle: CFStreamPropertyKey;
pub static kCFStreamPropertySocketRemoteHostName: CFStreamPropertyKey;
pub static kCFStreamPropertySocketRemotePortNumber: CFStreamPropertyKey;
pub static kCFStreamPropertyShouldCloseNativeSocket: CFStringRef;
pub static kCFStreamPropertySocketSecurityLevel: CFStringRef;
/* CFStream Socket Security Level Constants */
pub static kCFStreamSocketSecurityLevelNone: CFStringRef;
pub static kCFStreamSocketSecurityLevelSSLv2: CFStringRef;
pub static kCFStreamSocketSecurityLevelSSLv3: CFStringRef;
pub static kCFStreamSocketSecurityLevelTLSv1: CFStringRef;
pub static kCFStreamSocketSecurityLevelNegotiatedSSL: CFStringRef;
/* CFStream SOCKS Proxy Key Constants */
pub static kCFStreamPropertySOCKSProxy: CFStringRef;
pub static kCFStreamPropertySOCKSProxyHost: CFStringRef;
pub static kCFStreamPropertySOCKSProxyPort: CFStringRef;
pub static kCFStreamPropertySOCKSVersion: CFStringRef;
pub static kCFStreamSocketSOCKSVersion4: CFStringRef;
pub static kCFStreamSocketSOCKSVersion5: CFStringRef;
pub static kCFStreamPropertySOCKSUser: CFStringRef;
pub static kCFStreamPropertySOCKSPassword: CFStringRef;
/* CFStream Error Domain Constants (CFHost) */
pub static kCFStreamErrorDomainSOCKS: c_int;
pub static kCFStreamErrorDomainSSL: c_int;
/* CFStream: Creating Streams */
pub fn CFStreamCreatePairWithPeerSocketSignature(
alloc: CFAllocatorRef,
signature: *const CFSocketSignature,
readStream: *mut CFReadStreamRef,
writeStream: *mut CFWriteStreamRef,
); // deprecated
pub fn CFStreamCreatePairWithSocketToHost(
alloc: CFAllocatorRef,
host: CFStringRef,
port: UInt32,
readStream: *mut CFReadStreamRef,
writeStream: *mut CFWriteStreamRef,
); // deprecated
pub fn CFStreamCreatePairWithSocket(
alloc: CFAllocatorRef,
sock: CFSocketNativeHandle,
readStream: *mut CFReadStreamRef,
writeStream: *mut CFWriteStreamRef,
); // deprecated
pub fn CFStreamCreateBoundPair(
alloc: CFAllocatorRef,
readStream: *mut CFReadStreamRef,
writeStream: *mut CFWriteStreamRef,
transferBufferSize: CFIndex,
);
//pub fn CFReadStreamSetDispatchQueue(stream: CFReadStreamRef, q: dispatch_queue_t); // macos(10.9)+
//pub fn CFWriteStreamSetDispatchQueue(stream: CFWriteStreamRef, q: dispatch_queue_t); // macos(10.9)+
//pub fn CFReadStreamCopyDispatchQueue(stream: CFReadStreamRef) -> dispatch_queue_t; // macos(10.9)+
//pub fn CFWriteStreamCopyDispatchQueue(stream: CFReadStreamRef) -> dispatch_queue_t; // macos(10.9)+
/* CFReadStream */
/* Creating a Read Stream */
pub fn CFReadStreamCreateWithBytesNoCopy(
alloc: CFAllocatorRef,
bytes: *const UInt8,
length: CFIndex,
bytesDeallocator: CFAllocatorRef,
) -> CFReadStreamRef;
pub fn CFReadStreamCreateWithFile(alloc: CFAllocatorRef, fileURL: CFURLRef) -> CFReadStreamRef;
/* Opening and Closing a Read Stream */
pub fn CFReadStreamClose(stream: CFReadStreamRef);
pub fn CFReadStreamOpen(stream: CFReadStreamRef) -> Boolean;
/* Reading from a Stream */
pub fn CFReadStreamRead(
stream: CFReadStreamRef,
buffer: *mut UInt8,
bufferLength: CFIndex,
) -> CFIndex;
/* Scheduling a Read Stream */
pub fn CFReadStreamScheduleWithRunLoop(
stream: CFReadStreamRef,
runLoop: CFRunLoopRef,
runLoopMode: CFStringRef,
);
pub fn CFReadStreamUnscheduleFromRunLoop(
stream: CFReadStreamRef,
runLoop: CFRunLoopRef,
runLoopMode: CFStringRef,
);
/* Examining Stream Properties */
pub fn CFReadStreamCopyProperty(
stream: CFReadStreamRef,
propertyName: CFStreamPropertyKey,
) -> CFTypeRef;
pub fn CFReadStreamGetBuffer(
stream: CFReadStreamRef,
maxBytesToRead: CFIndex,
numBytesRead: *mut CFIndex,
) -> *const UInt8;
pub fn CFReadStreamCopyError(stream: CFReadStreamRef) -> CFErrorRef;
pub fn CFReadStreamGetError(stream: CFReadStreamRef) -> CFStreamError; // deprecated
pub fn CFReadStreamGetStatus(stream: CFReadStreamRef) -> CFStreamStatus;
pub fn CFReadStreamHasBytesAvailable(stream: CFReadStreamRef) -> Boolean;
/* Setting Stream Properties */
pub fn CFReadStreamSetClient(
stream: CFReadStreamRef,
streamEvents: CFOptionFlags,
clientCB: CFReadStreamClientCallBack,
clientContext: *mut CFStreamClientContext,
) -> Boolean;
pub fn CFReadStreamSetProperty(
stream: CFReadStreamRef,
propertyName: CFStreamPropertyKey,
propertyValue: CFTypeRef,
) -> Boolean;
/* Getting the CFReadStream Type ID */
pub fn CFReadStreamGetTypeID() -> CFTypeID;
/* CFWriteStream */
/* Creating a Write Stream */
pub fn CFWriteStreamCreateWithAllocatedBuffers(
alloc: CFAllocatorRef,
bufferAllocator: CFAllocatorRef,
) -> CFWriteStreamRef;
pub fn CFWriteStreamCreateWithBuffer(
alloc: CFAllocatorRef,
buffer: *mut UInt8,
bufferCapacity: CFIndex,
) -> CFWriteStreamRef;
pub fn CFWriteStreamCreateWithFile(
alloc: CFAllocatorRef,
fileURL: CFURLRef,
) -> CFWriteStreamRef;
/* Opening and Closing a Stream */
pub fn CFWriteStreamClose(stream: CFWriteStreamRef);
pub fn CFWriteStreamOpen(stream: CFWriteStreamRef) -> Boolean;
/* Writing to a Stream */
pub fn CFWriteStreamWrite(
stream: CFWriteStreamRef,
buffer: *const UInt8,
bufferLength: CFIndex,
) -> CFIndex;
/* Scheduling a Write Stream */
pub fn CFWriteStreamScheduleWithRunLoop(
stream: CFWriteStreamRef,
runLoop: CFRunLoopRef,
runLoopMode: CFStringRef,
);
pub fn CFWriteStreamUnscheduleFromRunLoop(
stream: CFWriteStreamRef,
runLoop: CFRunLoopRef,
runLoopMode: CFStringRef,
);
/* Examining Stream Properties */
pub fn CFWriteStreamCanAcceptBytes(stream: CFWriteStreamRef) -> Boolean;
pub fn CFWriteStreamCopyProperty(
stream: CFWriteStreamRef,
propertyName: CFStreamPropertyKey,
) -> CFTypeRef;
pub fn CFWriteStreamCopyError(stream: CFWriteStreamRef) -> CFErrorRef;
pub fn CFWriteStreamGetError(stream: CFWriteStreamRef) -> CFStreamError; // deprecated
pub fn CFWriteStreamGetStatus(stream: CFWriteStreamRef) -> CFStreamStatus;
/* Setting Stream Properties */
pub fn CFWriteStreamSetClient(
stream: CFWriteStreamRef,
streamEvents: CFOptionFlags,
clientCB: CFWriteStreamClientCallBack,
clientContext: *mut CFStreamClientContext,
) -> Boolean;
pub fn CFWriteStreamSetProperty(
stream: CFWriteStreamRef,
propertyName: CFStreamPropertyKey,
propertyValue: CFTypeRef,
) -> Boolean;
/* Getting the CFWriteStream Type ID */
pub fn CFWriteStreamGetTypeID() -> CFTypeID;
}