summaryrefslogtreecommitdiffstats
path: root/runtime/nsd_ptcp.c
diff options
context:
space:
mode:
authorRainer Gerhards <rgerhards@adiscon.com>2008-04-24 09:57:43 +0200
committerRainer Gerhards <rgerhards@adiscon.com>2008-04-24 09:57:43 +0200
commitbf3d2c1b392af1383a3cdc247f2280fd31a12699 (patch)
tree532f3de6ec3b7fc7557c4e3a60f142a07a29580a /runtime/nsd_ptcp.c
parent721b9ee252143d182c3c145380e5dbec8c3b0102 (diff)
downloadrsyslog-bf3d2c1b392af1383a3cdc247f2280fd31a12699.tar.gz
rsyslog-bf3d2c1b392af1383a3cdc247f2280fd31a12699.tar.xz
rsyslog-bf3d2c1b392af1383a3cdc247f2280fd31a12699.zip
message reception via TCP work again
... at least in some cases ;) I assume there are still a couple of bugs inside the code. But at least we have something from where we can continue to work on.
Diffstat (limited to 'runtime/nsd_ptcp.c')
-rw-r--r--runtime/nsd_ptcp.c53
1 files changed, 47 insertions, 6 deletions
diff --git a/runtime/nsd_ptcp.c b/runtime/nsd_ptcp.c
index 40b11ad4..8dbc80d9 100644
--- a/runtime/nsd_ptcp.c
+++ b/runtime/nsd_ptcp.c
@@ -207,7 +207,7 @@ AcceptConnReq(nsd_t *pNsd, nsd_t **ppNew)
DEFiRet;
assert(ppNew != NULL);
- ISOBJ_TYPE_assert(pThis, nsd_ptcp_t);
+ ISOBJ_TYPE_assert(pThis, nsd_ptcp);
iNewSock = accept(pThis->sock, (struct sockaddr*) &addr, &addrlen);
if(iNewSock < 0) {
@@ -294,6 +294,7 @@ LstnInit(netstrms_t *pNS, void *pUsr, rsRetVal(*fAddLstn)(void*,netstrm_t*),
numSocks = 0; /* num of sockets counter at start of array */
for(r = res; r != NULL ; r = r->ai_next) {
sock = socket(r->ai_family, r->ai_socktype, r->ai_protocol);
+RUNLOG_VAR("%d", sock);
if(sock < 0) {
if(!(r->ai_family == PF_INET6 && errno == EAFNOSUPPORT))
dbgprintf("error %d creating tcp listen socket", errno);
@@ -386,11 +387,9 @@ LstnInit(netstrms_t *pNS, void *pUsr, rsRetVal(*fAddLstn)(void*,netstrm_t*),
CHKiRet(fAddLstn(pUsr, pNewStrm));
pNewNsd = NULL;
pNewStrm = NULL;
+ ++numSocks;
}
- if(res != NULL)
- freeaddrinfo(res);
-
if(numSocks != maxs)
dbgprintf("We could initialize %d TCP listen sockets out of %d we received "
"- this may or may not be an error indication.\n", numSocks, maxs);
@@ -401,9 +400,10 @@ LstnInit(netstrms_t *pNS, void *pUsr, rsRetVal(*fAddLstn)(void*,netstrm_t*),
}
finalize_it:
+ if(res != NULL)
+ freeaddrinfo(res);
+
if(iRet != RS_RET_OK) {
- if(res != NULL)
- freeaddrinfo(res);
if(pNewStrm != NULL)
netstrm.Destruct(&pNewStrm);
if(pNewNsd != NULL)
@@ -515,6 +515,45 @@ finalize_it:
}
+/* get the remote hostname. The returned hostname must be freed by the
+ * caller.
+ * rgerhards, 2008-04-24
+ */
+static rsRetVal
+GetRemoteHName(nsd_t *pNsd, uchar **ppszHName)
+{
+ DEFiRet;
+ nsd_ptcp_t *pThis = (nsd_ptcp_t*) pNsd;
+ ISOBJ_TYPE_assert(pThis, nsd_ptcp);
+ assert(ppszHName != NULL);
+
+ // TODO: how can the RemHost be empty?
+ CHKmalloc(*ppszHName = (uchar*)strdup(pThis->pRemHostName == NULL ? "" : (char*) pThis->pRemHostName));
+
+finalize_it:
+ RETiRet;
+}
+
+
+/* get the remote host's IP address. The returned string must be freed by the
+ * caller.
+ * rgerhards, 2008-04-24
+ */
+static rsRetVal
+GetRemoteIP(nsd_t *pNsd, uchar **ppszIP)
+{
+ DEFiRet;
+ nsd_ptcp_t *pThis = (nsd_ptcp_t*) pNsd;
+ ISOBJ_TYPE_assert(pThis, nsd_ptcp);
+ assert(ppszIP != NULL);
+
+ CHKmalloc(*ppszIP = (uchar*)strdup(pThis->pRemHostIP == NULL ? "" : (char*) pThis->pRemHostIP));
+
+finalize_it:
+ RETiRet;
+}
+
+
/* queryInterface function */
BEGINobjQueryInterface(nsd_ptcp)
CODESTARTobjQueryInterface(nsd_ptcp)
@@ -535,6 +574,8 @@ CODESTARTobjQueryInterface(nsd_ptcp)
pIf->LstnInit = LstnInit;
pIf->AcceptConnReq = AcceptConnReq;
pIf->Connect = Connect;
+ pIf->GetRemoteHName = GetRemoteHName;
+ pIf->GetRemoteIP = GetRemoteIP;
finalize_it:
ENDobjQueryInterface(nsd_ptcp)