use std::os::raw::c_void;
use crate::base::{Boolean, CFAllocatorRef, CFIndex, CFOptionFlags, CFTypeID, SInt32, UInt16};
use crate::data::CFDataRef;
use crate::date::CFTimeInterval;
use crate::propertylist::CFPropertyListRef;
use crate::runloop::CFRunLoopSourceRef;
use crate::string::CFStringRef;
#[repr(C)]
pub struct __CFSocket(c_void);
pub type CFSocketRef = *mut __CFSocket;
pub type CFSocketError = CFIndex;
pub type CFSocketCallBackType = CFOptionFlags;
pub type CFSocketCallBack = extern "C" fn(
s: CFSocketRef,
_type: CFSocketCallBackType,
address: CFDataRef,
cdata: *const c_void,
info: *mut c_void,
);
#[cfg(not(target_os = "windows"))]
pub type CFSocketNativeHandle = std::os::raw::c_int;
#[cfg(target_os = "windows")]
pub type CFSocketNativeHandle = std::os::raw::c_ulong;
pub const kCFSocketSuccess: CFSocketError = 0;
pub const kCFSocketError: CFSocketError = -1;
pub const kCFSocketTimeout: CFSocketError = -2;
#[derive(Debug, Copy, Clone)]
#[repr(C)]
pub struct CFSocketSignature {
pub protocolFamily: SInt32,
pub socketType: SInt32,
pub protocol: SInt32,
pub address: CFDataRef,
}
#[derive(Debug, Copy, Clone)]
#[repr(C)]
pub struct CFSocketContext {
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 const kCFSocketNoCallBack: CFSocketError = 0;
pub const kCFSocketReadCallBack: CFSocketError = 1;
pub const kCFSocketAcceptCallBack: CFSocketError = 2;
pub const kCFSocketDataCallBack: CFSocketError = 3;
pub const kCFSocketConnectCallBack: CFSocketError = 4;
pub const kCFSocketWriteCallBack: CFSocketError = 8;
pub const kCFSocketAutomaticallyReenableReadCallBack: CFOptionFlags = 1;
pub const kCFSocketAutomaticallyReenableAcceptCallBack: CFOptionFlags = 2;
pub const kCFSocketAutomaticallyReenableDataCallBack: CFOptionFlags = 3;
pub const kCFSocketAutomaticallyReenableWriteCallBack: CFOptionFlags = 8;
pub const kCFSocketLeaveErrors: CFOptionFlags = 64;
pub const kCFSocketCloseOnInvalidate: CFOptionFlags = 128;
extern "C" {
pub static kCFSocketCommandKey: CFStringRef;
pub static kCFSocketNameKey: CFStringRef;
pub static kCFSocketValueKey: CFStringRef;
pub static kCFSocketResultKey: CFStringRef;
pub static kCFSocketErrorKey: CFStringRef;
pub static kCFSocketRegisterCommand: CFStringRef;
pub static kCFSocketRetrieveCommand: CFStringRef;
pub fn CFSocketCreate(
allocator: CFAllocatorRef,
protocolFamily: SInt32,
socketType: SInt32,
protocol: SInt32,
callBackTypes: CFOptionFlags,
callout: CFSocketCallBack,
context: *const CFSocketContext,
) -> CFSocketRef;
pub fn CFSocketCreateConnectedToSocketSignature(
allocator: CFAllocatorRef,
signature: *const CFSocketSignature,
callBackTypes: CFOptionFlags,
callout: CFSocketCallBack,
context: *const CFSocketContext,
timeout: CFTimeInterval,
) -> CFSocketRef;
pub fn CFSocketCreateWithNative(
allocator: CFAllocatorRef,
sock: CFSocketNativeHandle,
callBackTypes: CFOptionFlags,
callout: CFSocketCallBack,
context: *const CFSocketContext,
) -> CFSocketRef;
pub fn CFSocketCreateWithSocketSignature(
allocator: CFAllocatorRef,
signature: *const CFSocketSignature,
callBackTypes: CFOptionFlags,
callout: CFSocketCallBack,
context: *const CFSocketContext,
) -> CFSocketRef;
pub fn CFSocketCopyAddress(s: CFSocketRef) -> CFDataRef;
pub fn CFSocketCopyPeerAddress(s: CFSocketRef) -> CFDataRef;
pub fn CFSocketDisableCallBacks(s: CFSocketRef, callBackTypes: CFOptionFlags);
pub fn CFSocketEnableCallBacks(s: CFSocketRef, callBackTypes: CFOptionFlags);
pub fn CFSocketGetContext(s: CFSocketRef, context: *mut CFSocketContext);
pub fn CFSocketGetNative(s: CFSocketRef) -> CFSocketNativeHandle;
pub fn CFSocketGetSocketFlags(s: CFSocketRef) -> CFOptionFlags;
pub fn CFSocketSetAddress(s: CFSocketRef, address: CFDataRef) -> CFSocketError;
pub fn CFSocketSetSocketFlags(s: CFSocketRef, flags: CFOptionFlags);
pub fn CFSocketConnectToAddress(
s: CFSocketRef,
address: CFDataRef,
timeout: CFTimeInterval,
) -> CFSocketError;
pub fn CFSocketCreateRunLoopSource(
allocator: CFAllocatorRef,
s: CFSocketRef,
order: CFIndex,
) -> CFRunLoopSourceRef;
pub fn CFSocketGetTypeID() -> CFTypeID;
pub fn CFSocketInvalidate(s: CFSocketRef);
pub fn CFSocketIsValid(s: CFSocketRef) -> Boolean;
pub fn CFSocketSendData(
s: CFSocketRef,
address: CFDataRef,
data: CFDataRef,
timeout: CFTimeInterval,
) -> CFSocketError;
pub fn CFSocketCopyRegisteredSocketSignature(
nameServerSignature: *const CFSocketSignature,
timeout: CFTimeInterval,
name: CFStringRef,
signature: *mut CFSocketSignature,
nameServerAddress: *mut CFDataRef,
) -> CFSocketError;
pub fn CFSocketCopyRegisteredValue(
nameServerSignature: *const CFSocketSignature,
timeout: CFTimeInterval,
name: CFStringRef,
value: *mut CFPropertyListRef,
nameServerAddress: *mut CFDataRef,
) -> CFSocketError;
pub fn CFSocketGetDefaultNameRegistryPortNumber() -> UInt16;
pub fn CFSocketRegisterSocketSignature(
nameServerSignature: *const CFSocketSignature,
timeout: CFTimeInterval,
name: CFStringRef,
signature: *const CFSocketSignature,
) -> CFSocketError;
pub fn CFSocketRegisterValue(
nameServerSignature: *const CFSocketSignature,
timeout: CFTimeInterval,
name: CFStringRef,
value: CFPropertyListRef,
) -> CFSocketError;
pub fn CFSocketSetDefaultNameRegistryPortNumber(port: UInt16);
pub fn CFSocketUnregister(
nameServerSignature: *const CFSocketSignature,
timeout: CFTimeInterval,
name: CFStringRef,
) -> CFSocketError;
}