69#include <cx/net/net_shared.h>
76typedef struct NetFilter_WeakRef NetFilter_WeakRef;
78typedef struct NetFlowFilter_WeakRef NetFlowFilter_WeakRef;
80typedef struct NetStreamFilter_WeakRef NetStreamFilter_WeakRef;
82typedef struct NetDatagramFilter_WeakRef NetDatagramFilter_WeakRef;
85#define _sti_NetFilter _sti_object
86#define SType_NetFilter NetFilter*
87#define STStorageType_NetFilter NetFilter*
88#define STypeArg_NetFilter(type, val) stgeneric(object, (ObjInst*)objInstCheckClass(NetFilter, val))
89#define STypeArgPtr_NetFilter(type, val) (stgeneric*)objInstCheckClassPtr(NetFilter, val)
90#define STypeCheckedArg_NetFilter(type, val) stType(type), stArg(type, val)
91#define STypeCheckedPtrArg_NetFilter(type, val) stType(type), stArgPtr(type, val)
94#define _sti_NetFlowFilter _sti_object
95#define SType_NetFlowFilter NetFlowFilter*
96#define STStorageType_NetFlowFilter NetFlowFilter*
97#define STypeArg_NetFlowFilter(type, val) stgeneric(object, (ObjInst*)objInstCheckClass(NetFlowFilter, val))
98#define STypeArgPtr_NetFlowFilter(type, val) (stgeneric*)objInstCheckClassPtr(NetFlowFilter, val)
99#define STypeCheckedArg_NetFlowFilter(type, val) stType(type), stArg(type, val)
100#define STypeCheckedPtrArg_NetFlowFilter(type, val) stType(type), stArgPtr(type, val)
103#define _sti_NetStreamFilter _sti_object
104#define SType_NetStreamFilter NetStreamFilter*
105#define STStorageType_NetStreamFilter NetStreamFilter*
106#define STypeArg_NetStreamFilter(type, val) stgeneric(object, (ObjInst*)objInstCheckClass(NetStreamFilter, val))
107#define STypeArgPtr_NetStreamFilter(type, val) (stgeneric*)objInstCheckClassPtr(NetStreamFilter, val)
108#define STypeCheckedArg_NetStreamFilter(type, val) stType(type), stArg(type, val)
109#define STypeCheckedPtrArg_NetStreamFilter(type, val) stType(type), stArgPtr(type, val)
112#define _sti_NetDatagramFilter _sti_object
113#define SType_NetDatagramFilter NetDatagramFilter*
114#define STStorageType_NetDatagramFilter NetDatagramFilter*
115#define STypeArg_NetDatagramFilter(type, val) stgeneric(object, (ObjInst*)objInstCheckClass(NetDatagramFilter, val))
116#define STypeArgPtr_NetDatagramFilter(type, val) (stgeneric*)objInstCheckClassPtr(NetDatagramFilter, val)
117#define STypeCheckedArg_NetDatagramFilter(type, val) stType(type), stArg(type, val)
118#define STypeCheckedPtrArg_NetDatagramFilter(type, val) stType(type), stArgPtr(type, val)
122typedef struct NetFilter_ClassIf {
130extern NetFilter_ClassIf NetFilter_ClassIf_tmpl;
132typedef struct NetFlowFilter_ClassIf {
137 void (*shutdown)(_In_
void* self);
138} NetFlowFilter_ClassIf;
139extern NetFlowFilter_ClassIf NetFlowFilter_ClassIf_tmpl;
141typedef struct NetStreamFilter_ClassIf {
146 void (*shutdown)(_In_
void* self);
149 intptr (*encode)(_In_
void* self, BufRing* src);
150 intptr (*decode)(_In_
void* self, BufRing* src);
151} NetStreamFilter_ClassIf;
152extern NetStreamFilter_ClassIf NetStreamFilter_ClassIf_tmpl;
154typedef struct NetDatagramFilter_ClassIf {
159 void (*shutdown)(_In_
void* self);
161 intptr (*encodeMsg)(_In_
void* self,
NetMsgQueue* src);
162 intptr (*decodeMsg)(_In_
void* self,
NetMsgQueue* src);
163} NetDatagramFilter_ClassIf;
164extern NetDatagramFilter_ClassIf NetDatagramFilter_ClassIf_tmpl;
186 NetFilter_ClassIf* _;
191 atomic(uintptr) _ref;
192 atomic(ptr) _weakref;
196#define NetFilter(inst) objInstCheckClass(NetFilter, inst)
197#define NetFilterNone ((NetFilter*)NULL)
199typedef struct NetFilter_WeakRef {
202 void* _is_NetFilter_WeakRef;
203 void* _is_ObjInst_WeakRef;
205 atomic(uintptr) _ref;
208#define NetFilter_WeakRef(inst) objWeakRefCheckClass(NetFilter, inst)
225#define netfilterCreateFlow(self, type) (self)->_->createFlow(NetFilter(self), type)
235#define netfilterCanFilter(self, type) (self)->_->canFilter(NetFilter(self), type)
245 NetFlowFilter_ClassIf* _;
246 void* _is_NetFlowFilter;
250 atomic(uintptr) _ref;
251 atomic(ptr) _weakref;
259#define NetFlowFilter(inst) objInstCheckClass(NetFlowFilter, inst)
260#define NetFlowFilterNone ((NetFlowFilter*)NULL)
262typedef struct NetFlowFilter_WeakRef {
265 void* _is_NetFlowFilter_WeakRef;
266 void* _is_ObjInst_WeakRef;
268 atomic(uintptr) _ref;
270} NetFlowFilter_WeakRef;
271#define NetFlowFilter_WeakRef(inst) objWeakRefCheckClass(NetFlowFilter, inst)
285#define netflowfilterNotify(self, note) NetFlowFilter_notify(NetFlowFilter(self), note)
295#define netflowfilterShutdown(self) (self)->_->shutdown(NetFlowFilter(self))
307 NetStreamFilter_ClassIf* _;
308 void* _is_NetStreamFilter;
309 void* _is_NetFlowFilter;
313 atomic(uintptr) _ref;
314 atomic(ptr) _weakref;
324#define NetStreamFilter(inst) objInstCheckClass(NetStreamFilter, inst)
325#define NetStreamFilterNone ((NetStreamFilter*)NULL)
327typedef struct NetStreamFilter_WeakRef {
330 void* _is_NetStreamFilter_WeakRef;
331 void* _is_NetFlowFilter_WeakRef;
332 void* _is_ObjInst_WeakRef;
334 atomic(uintptr) _ref;
336} NetStreamFilter_WeakRef;
337#define NetStreamFilter_WeakRef(inst) objWeakRefCheckClass(NetStreamFilter, inst)
350#define netstreamfilterNotify(self, note) NetFlowFilter_notify(NetFlowFilter(self), note)
360#define netstreamfilterShutdown(self) (self)->_->shutdown(NetStreamFilter(self))
378#define netstreamfilterEncode(self, src) (self)->_->encode(NetStreamFilter(self), src)
390#define netstreamfilterDecode(self, src) (self)->_->decode(NetStreamFilter(self), src)
402 NetDatagramFilter_ClassIf* _;
403 void* _is_NetDatagramFilter;
404 void* _is_NetFlowFilter;
408 atomic(uintptr) _ref;
409 atomic(ptr) _weakref;
425#define NetDatagramFilter(inst) objInstCheckClass(NetDatagramFilter, inst)
426#define NetDatagramFilterNone ((NetDatagramFilter*)NULL)
428typedef struct NetDatagramFilter_WeakRef {
431 void* _is_NetDatagramFilter_WeakRef;
432 void* _is_NetFlowFilter_WeakRef;
433 void* _is_ObjInst_WeakRef;
435 atomic(uintptr) _ref;
437} NetDatagramFilter_WeakRef;
438#define NetDatagramFilter_WeakRef(inst) objWeakRefCheckClass(NetDatagramFilter, inst)
451#define netdatagramfilterNotify(self, note) NetFlowFilter_notify(NetFlowFilter(self), note)
461#define netdatagramfilterShutdown(self) (self)->_->shutdown(NetDatagramFilter(self))
482#define netdatagramfilterEncodeMsg(self, src) (self)->_->encodeMsg(NetDatagramFilter(self), src)
496#define netdatagramfilterDecodeMsg(self, src) (self)->_->decodeMsg(NetDatagramFilter(self), src)
Ring buffer implementation for efficient streaming I/O.
#define saDeclarePtr(name)
NetSocketType
Socket types.
CX Struct System - Introspectable, serializable POD structures in C.
CX Object System - Object-oriented programming in C.
Base for datagram filters (attached between the application and a datagram flow)
NetMsgQueue encOut
This stage's output toward the wire (a chain boundary queue)
NetPool * pool
The pool this stage allocates its output from, held strongly.
Socket-level factory for per-flow filters.
Shared lifecycle base for all flow filters.
Simple intrusive FIFO of NetMessage, linked through NetMessage::next.
Shared, capped pool of network message buffers and headers.
Base for byte-stream filters (attached between the application and a stream socket)
BufRing decOut
This stage's output toward the app (a chain boundary buffer)
BufRing encOut
This stage's output toward the wire (a chain boundary buffer)