CX Framework
Cross-platform C utility framework
Loading...
Searching...
No Matches
filter.h
Go to the documentation of this file.
1
62
63#pragma once
64// This header file is auto-generated!
65// Do not make changes to this file or they will be overwritten.
66// clang-format off
67#include <cx/obj.h>
68#include <cx/struct.h>
69#include <cx/net/net_shared.h>
70#include <cx/net/pool.h>
71#include <cx/buffer/bufring.h>
72
73CX_C_BEGIN
74
75typedef struct NetFilter NetFilter;
76typedef struct NetFilter_WeakRef NetFilter_WeakRef;
78typedef struct NetFlowFilter_WeakRef NetFlowFilter_WeakRef;
80typedef struct NetStreamFilter_WeakRef NetStreamFilter_WeakRef;
82typedef struct NetDatagramFilter_WeakRef NetDatagramFilter_WeakRef;
84saDeclarePtr(NetFilter_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)
93saDeclarePtr(NetFlowFilter_WeakRef);
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)
102saDeclarePtr(NetStreamFilter_WeakRef);
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)
111saDeclarePtr(NetDatagramFilter_WeakRef);
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)
119
120
121
122typedef struct NetFilter_ClassIf {
123 ObjIface* _implements;
124 ObjIface* _parent;
125 size_t _size;
126
127 NetFlowFilter* (*createFlow)(_In_ void* self, NetSocketType type);
128 bool (*canFilter)(_In_ void* self, NetSocketType type);
129} NetFilter_ClassIf;
130extern NetFilter_ClassIf NetFilter_ClassIf_tmpl;
131
132typedef struct NetFlowFilter_ClassIf {
133 ObjIface* _implements;
134 ObjIface* _parent;
135 size_t _size;
136
137 void (*shutdown)(_In_ void* self);
138} NetFlowFilter_ClassIf;
139extern NetFlowFilter_ClassIf NetFlowFilter_ClassIf_tmpl;
140
141typedef struct NetStreamFilter_ClassIf {
142 ObjIface* _implements;
143 ObjIface* _parent;
144 size_t _size;
145
146 void (*shutdown)(_In_ void* self);
147 // allocates encOut / decOut
148 // tears down encOut / decOut
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;
153
154typedef struct NetDatagramFilter_ClassIf {
155 ObjIface* _implements;
156 ObjIface* _parent;
157 size_t _size;
158
159 void (*shutdown)(_In_ void* self);
160 // releases any messages still queued in encOut / decOut back to their pool
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;
165
184typedef struct NetFilter {
185 union {
186 NetFilter_ClassIf* _;
187 void* _is_NetFilter;
188 void* _is_ObjInst;
189 };
190 ObjClassInfo* _clsinfo;
191 atomic(uintptr) _ref;
192 atomic(ptr) _weakref;
193
194} NetFilter;
195extern ObjClassInfo NetFilter_clsinfo;
196#define NetFilter(inst) objInstCheckClass(NetFilter, inst)
197#define NetFilterNone ((NetFilter*)NULL)
198
199typedef struct NetFilter_WeakRef {
200 union {
201 ObjInst* _inst;
202 void* _is_NetFilter_WeakRef;
203 void* _is_ObjInst_WeakRef;
204 };
205 atomic(uintptr) _ref;
206 RWLock _lock;
207} NetFilter_WeakRef;
208#define NetFilter_WeakRef(inst) objWeakRefCheckClass(NetFilter, inst)
209
225#define netfilterCreateFlow(self, type) (self)->_->createFlow(NetFilter(self), type)
235#define netfilterCanFilter(self, type) (self)->_->canFilter(NetFilter(self), type)
236
243typedef struct NetFlowFilter {
244 union {
245 NetFlowFilter_ClassIf* _;
246 void* _is_NetFlowFilter;
247 void* _is_ObjInst;
248 };
249 ObjClassInfo* _clsinfo;
250 atomic(uintptr) _ref;
251 atomic(ptr) _weakref;
252
253 // Pending out-of-band notification, or NFN_None. Written by notify() and cleared by the
254 // data-plane driver once it delivers the matching NET_FilterNotify event; concrete filters
255 // never read or write this directly.
256 NetFilterNotify pendingNotify;
258extern ObjClassInfo NetFlowFilter_clsinfo;
259#define NetFlowFilter(inst) objInstCheckClass(NetFlowFilter, inst)
260#define NetFlowFilterNone ((NetFlowFilter*)NULL)
261
262typedef struct NetFlowFilter_WeakRef {
263 union {
264 ObjInst* _inst;
265 void* _is_NetFlowFilter_WeakRef;
266 void* _is_ObjInst_WeakRef;
267 };
268 atomic(uintptr) _ref;
269 RWLock _lock;
270} NetFlowFilter_WeakRef;
271#define NetFlowFilter_WeakRef(inst) objWeakRefCheckClass(NetFlowFilter, inst)
272
273void NetFlowFilter_notify(_In_ NetFlowFilter* self, NetFilterNotify note);
285#define netflowfilterNotify(self, note) NetFlowFilter_notify(NetFlowFilter(self), note)
286
295#define netflowfilterShutdown(self) (self)->_->shutdown(NetFlowFilter(self))
296
305typedef struct NetStreamFilter {
306 union {
307 NetStreamFilter_ClassIf* _;
308 void* _is_NetStreamFilter;
309 void* _is_NetFlowFilter;
310 void* _is_ObjInst;
311 };
312 ObjClassInfo* _clsinfo;
313 atomic(uintptr) _ref;
314 atomic(ptr) _weakref;
315
316 // Pending out-of-band notification, or NFN_None. Written by notify() and cleared by the
317 // data-plane driver once it delivers the matching NET_FilterNotify event; concrete filters
318 // never read or write this directly.
319 NetFilterNotify pendingNotify;
320 BufRing encOut;
321 BufRing decOut;
323extern ObjClassInfo NetStreamFilter_clsinfo;
324#define NetStreamFilter(inst) objInstCheckClass(NetStreamFilter, inst)
325#define NetStreamFilterNone ((NetStreamFilter*)NULL)
326
327typedef struct NetStreamFilter_WeakRef {
328 union {
329 ObjInst* _inst;
330 void* _is_NetStreamFilter_WeakRef;
331 void* _is_NetFlowFilter_WeakRef;
332 void* _is_ObjInst_WeakRef;
333 };
334 atomic(uintptr) _ref;
335 RWLock _lock;
336} NetStreamFilter_WeakRef;
337#define NetStreamFilter_WeakRef(inst) objWeakRefCheckClass(NetStreamFilter, inst)
338
350#define netstreamfilterNotify(self, note) NetFlowFilter_notify(NetFlowFilter(self), note)
351
360#define netstreamfilterShutdown(self) (self)->_->shutdown(NetStreamFilter(self))
361//
362// allocates encOut / decOut
363// tears down encOut / decOut
378#define netstreamfilterEncode(self, src) (self)->_->encode(NetStreamFilter(self), src)
390#define netstreamfilterDecode(self, src) (self)->_->decode(NetStreamFilter(self), src)
391
400typedef struct NetDatagramFilter {
401 union {
402 NetDatagramFilter_ClassIf* _;
403 void* _is_NetDatagramFilter;
404 void* _is_NetFlowFilter;
405 void* _is_ObjInst;
406 };
407 ObjClassInfo* _clsinfo;
408 atomic(uintptr) _ref;
409 atomic(ptr) _weakref;
410
411 // Pending out-of-band notification, or NFN_None. Written by notify() and cleared by the
412 // data-plane driver once it delivers the matching NET_FilterNotify event; concrete filters
413 // never read or write this directly.
414 NetFilterNotify pendingNotify;
424extern ObjClassInfo NetDatagramFilter_clsinfo;
425#define NetDatagramFilter(inst) objInstCheckClass(NetDatagramFilter, inst)
426#define NetDatagramFilterNone ((NetDatagramFilter*)NULL)
427
428typedef struct NetDatagramFilter_WeakRef {
429 union {
430 ObjInst* _inst;
431 void* _is_NetDatagramFilter_WeakRef;
432 void* _is_NetFlowFilter_WeakRef;
433 void* _is_ObjInst_WeakRef;
434 };
435 atomic(uintptr) _ref;
436 RWLock _lock;
437} NetDatagramFilter_WeakRef;
438#define NetDatagramFilter_WeakRef(inst) objWeakRefCheckClass(NetDatagramFilter, inst)
439
451#define netdatagramfilterNotify(self, note) NetFlowFilter_notify(NetFlowFilter(self), note)
452
461#define netdatagramfilterShutdown(self) (self)->_->shutdown(NetDatagramFilter(self))
462//
463// releases any messages still queued in encOut / decOut back to their pool
482#define netdatagramfilterEncodeMsg(self, src) (self)->_->encodeMsg(NetDatagramFilter(self), src)
496#define netdatagramfilterDecodeMsg(self, src) (self)->_->decodeMsg(NetDatagramFilter(self), src)
497
498CX_C_END
Ring buffer implementation for efficient streaming I/O.
#define saDeclarePtr(name)
Definition sarray.h:100
NetFilterNotify
Definition net_shared.h:195
NetSocketType
Socket types.
Definition net_shared.h:134
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)
Definition filter.h:400
NetMsgQueue decOut
Definition filter.h:416
NetMsgQueue encOut
This stage's output toward the wire (a chain boundary queue)
Definition filter.h:415
NetPool * pool
The pool this stage allocates its output from, held strongly.
Definition filter.h:422
Socket-level factory for per-flow filters.
Definition filter.h:184
Shared lifecycle base for all flow filters.
Definition filter.h:243
Simple intrusive FIFO of NetMessage, linked through NetMessage::next.
Definition net_shared.h:416
Shared, capped pool of network message buffers and headers.
Definition pool.h:51
Base for byte-stream filters (attached between the application and a stream socket)
Definition filter.h:305
BufRing decOut
This stage's output toward the app (a chain boundary buffer)
Definition filter.h:321
BufRing encOut
This stage's output toward the wire (a chain boundary buffer)
Definition filter.h:320