From db8548a8682d32e589831c2099ecac898525cd42 Mon Sep 17 00:00:00 2001 From: 1024x2 Date: Wed, 18 Sep 2024 11:52:26 +0100 Subject: Add client logging 149.1784.2.4209. Look familiar? --- vexnc.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/vexnc.c b/vexnc.c index 3ef1383..039b723 100644 --- a/vexnc.c +++ b/vexnc.c @@ -21,6 +21,20 @@ int mkderp(const char *name) { return ret; } +int spewtxt(int fd, const char *fmt, ...) { + va_list va; + char buf[256] = {0xF0, 0x9F, 0xBF, 0xBF, '\n', 0}; + + va_start(va, fmt); + vsnprintf(buf + 5, sizeof(buf) - 5, fmt, va); + va_end(va); + + size_t len = strlen(buf); + buf[len++] = '\n'; + + return write(fd, buf, len); +} + int spewchr(int fd, uint16_t chr) { char buf[4]; int i = 0; @@ -59,6 +73,20 @@ int openlogfile() { return 0; } +void userofflog(rfbClientRec *cl) { + if (openlogfile()) return; + if (spewtxt(fdlog, "disconnect %s", cl->host) < 0) + perror("spewtxt"); +} + +enum rfbNewClientAction useronlog(rfbClientRec *cl) { + cl->clientGoneHook = userofflog; + if (openlogfile()) return RFB_CLIENT_ACCEPT; + if (spewtxt(fdlog, "connect %s", cl->host) < 0) + perror("spewtxt"); + return RFB_CLIENT_ACCEPT; +} + void keylog(rfbBool down, rfbKeySym keySym, rfbClientRec* cl) { if (!down) return; // only log key downs if (openlogfile()) return; // ensure log file opened @@ -97,6 +125,7 @@ int main(int argc, char const *argv[]) { rfbScreen->frameBuffer = (char*)im; rfbScreen->alwaysShared = TRUE; if (logdirenabled) { + rfbScreen->newClientHook = useronlog; rfbScreen->kbdAddEvent = keylog; } -- cgit v1.2.3