summaryrefslogtreecommitdiffstats
path: root/runtime/netstrm.h
diff options
context:
space:
mode:
authorRainer Gerhards <rgerhards@adiscon.com>2008-04-23 09:59:01 +0200
committerRainer Gerhards <rgerhards@adiscon.com>2008-04-23 09:59:01 +0200
commit2be459c4d7645ad12f83723be7bb26199fe98b82 (patch)
tree749db3a20481dea667b5405961c173c4317d9e0d /runtime/netstrm.h
parent22ad77a627fe813acd286b48aaf44945c0480f49 (diff)
downloadrsyslog-2be459c4d7645ad12f83723be7bb26199fe98b82.tar.gz
rsyslog-2be459c4d7645ad12f83723be7bb26199fe98b82.tar.xz
rsyslog-2be459c4d7645ad12f83723be7bb26199fe98b82.zip
objects for receive-side socket abstraction specified
The objects for receiver-side socket abstraction have now be specified. The project as whole does not yet compile and definitely not run, but I'd like to commit some milestones along this way.
Diffstat (limited to 'runtime/netstrm.h')
-rw-r--r--runtime/netstrm.h34
1 files changed, 31 insertions, 3 deletions
diff --git a/runtime/netstrm.h b/runtime/netstrm.h
index 75b7c457..a3719f93 100644
--- a/runtime/netstrm.h
+++ b/runtime/netstrm.h
@@ -29,11 +29,34 @@
/* the netstrm object */
struct netstrm_s {
BEGINobjInstance; /* Data to implement generic object - MUST be the first data element! */
- nsd_if_t Drvr; /**< our stream driver */
nsd_t *pDrvrData; /**< the driver's data elements */
uchar *pDrvrName; /**< nsd driver name to use, or NULL if system default */
+ nsd_if_t Drvr; /**< our stream driver */
+ /* for listeners, we need to have the capablity to listen on multiple "sockets". This
+ * is needed to support IPv6. We do this by specifying an array of nsd_t objects to
+ * handle this case.
+ */
+ int isizeLstnArr;
+ nsd_t **parrLstn;
};
+/* a helper object enabling us to wait on a set of streams to become
+ * ready for IO - this is modelled after select(). We need this, because
+ * stream drivers may have different concepts. Consequently,
+ * the structure must contain nsd_t's from the same stream driver type
+ * only. This is implemented as a singly-linked list where every
+ * new element is added at the top of the list. -- rgerhards, 2008-04-22
+ */
+typedef struct netstrm_iowaiter_s netstrm_iowaiter_t;
+struct netstrm_iowaiter_s {
+ netstrm_iowaiter_t *pNext;
+ nsd_t *pNsd;
+ enum {
+ NETSTRM_IOWAIT_RD = 1,
+ NETSTRM_IOWAIT_WR = 2,
+ NETSTRM_IOWAIT_RDWR = 3
+ } waitOp; /**< the operation we wait for */
+};
/* interface */
BEGINinterface(netstrm) /* name must also be changed in ENDinterface macro! */
@@ -41,11 +64,16 @@ BEGINinterface(netstrm) /* name must also be changed in ENDinterface macro! */
rsRetVal (*ConstructFinalize)(netstrm_t *pThis);
rsRetVal (*Destruct)(netstrm_t **ppThis);
rsRetVal (*AbortDestruct)(netstrm_t **ppThis);
- rsRetVal (*LstnInit)(netstrm_t *pThis, unsigned char *pLstnPort);
- rsRetVal (*AcceptConnReq)(netstrm_t **ppThis, int sock);
+ rsRetVal (*LstnInit)(netstrm_t *pThis, uchar *pLstnPort, uchar *pLstnIP, int iSessMax);
+ rsRetVal (*AcceptConnReq)(netstrm_t *pThis, nsd_t *pReqNsd, netstrm_t **ppNew);
rsRetVal (*Rcv)(netstrm_t *pThis, uchar *pRcvBuf, ssize_t *pLenBuf);
rsRetVal (*Send)(netstrm_t *pThis, uchar *pBuf, ssize_t *pLenBuf);
rsRetVal (*Connect)(netstrm_t *pThis, int family, unsigned char *port, unsigned char *host);
+ rsRetVal (*SelectInit)(nsdsel_t **ppSel, netstrm_t *pThis);
+ rsRetVal (*SelectAdd)(nsdsel_t *pSel, netstrm_t *pThis);
+ rsRetVal (*SelectWait)(nsdsel_t *pSel, int *piNumReady);
+ rsRetVal (*SelectIsReady)(nsdsel_t *pSel, int *piNumReady);
+ rsRetVal (*SelectExit)(nsdsel_t **ppSel);
ENDinterface(netstrm)
#define netstrmCURR_IF_VERSION 1 /* increment whenever you change the interface structure! */