From dd877475ef05fc373f70b897bc940f237e99fafe Mon Sep 17 00:00:00 2001 From: DRC Date: Sun, 30 Jun 2024 12:33:37 -0400 Subject: [PATCH] Server: Log # of simultaneously connected viewers --- ChangeLog.md | 4 +++- unix/Xvnc/programs/Xserver/hw/vnc/rfb.h | 1 + unix/Xvnc/programs/Xserver/hw/vnc/rfbserver.c | 15 +++++++++++++++ unix/Xvnc/programs/Xserver/hw/vnc/sockets.c | 6 ++---- 4 files changed, 21 insertions(+), 5 deletions(-) diff --git a/ChangeLog.md b/ChangeLog.md index 79d3d6ba5..55afeeb91 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -48,7 +48,9 @@ viewer successfully connects, and the viewer's ID is reported in the TurboVNC session log along with the IP address from which the viewer connection originated. This makes it easier to distinguish log entries related to a specific viewer, especially when using SSH tunneling (which makes it appear as -if all viewer connections originate from the loopback IP address.) +if all viewer connections originate from the loopback IP address.) The +TurboVNC Server now also logs the total number of simultaneously connected +viewers. 3.0.3 diff --git a/unix/Xvnc/programs/Xserver/hw/vnc/rfb.h b/unix/Xvnc/programs/Xserver/hw/vnc/rfb.h index 6d75c0805..146a5db58 100644 --- a/unix/Xvnc/programs/Xserver/hw/vnc/rfb.h +++ b/unix/Xvnc/programs/Xserver/hw/vnc/rfb.h @@ -901,6 +901,7 @@ extern char *captureFile; rfbLog(m" %d, %d %d x %d\n", (r).extents.x1, (r).extents.y1, \ (r).extents.x2 - (r).extents.x1, (r).extents.y2 - (r).extents.y1) +extern int rfbClientCount(void); extern void rfbNewClientConnection(int sock); extern rfbClientPtr rfbReverseConnection(char *host, int port, int id); extern void rfbClientConnectionGone(rfbClientPtr cl); diff --git a/unix/Xvnc/programs/Xserver/hw/vnc/rfbserver.c b/unix/Xvnc/programs/Xserver/hw/vnc/rfbserver.c index f80500d62..db48fea5b 100644 --- a/unix/Xvnc/programs/Xserver/hw/vnc/rfbserver.c +++ b/unix/Xvnc/programs/Xserver/hw/vnc/rfbserver.c @@ -98,6 +98,17 @@ Bool rfbSendDesktopSize(rfbClientPtr cl); Bool rfbSendExtDesktopSize(rfbClientPtr cl); +int rfbClientCount(void) +{ + rfbClientPtr cl; + int count = 0; + + for (cl = rfbClientHead; cl; cl = cl->next) + count++; + return count; +} + + /* * Session capture */ @@ -582,6 +593,8 @@ void rfbClientConnectionGone(rfbClientPtr cl) free(cl); + rfbLog("Number of connected clients: %d\n", rfbClientCount()); + if (rfbClientHead == NULL && rfbIdleTimeout > 0) IdleTimerSet(); } @@ -768,6 +781,8 @@ static void rfbProcessClientInitMessage(rfbClientPtr cl) } } } + + rfbLog("Number of connected clients: %d\n", rfbClientCount()); } diff --git a/unix/Xvnc/programs/Xserver/hw/vnc/sockets.c b/unix/Xvnc/programs/Xserver/hw/vnc/sockets.c index c27e7aeb1..419eeec00 100644 --- a/unix/Xvnc/programs/Xserver/hw/vnc/sockets.c +++ b/unix/Xvnc/programs/Xserver/hw/vnc/sockets.c @@ -150,7 +150,7 @@ static void rfbSockNotify(int fd, int ready, void *data) socklen_t addrlen = sizeof(struct sockaddr_storage); char addrStr[INET6_ADDRSTRLEN]; const int one = 1; - int sock, numClientConnections = 0; + int sock; rfbClientPtr cl, nextCl; if (rfbListenSock != -1 && fd == rfbListenSock) { @@ -186,9 +186,7 @@ static void rfbSockNotify(int fd, int ready, void *data) } #endif - for (cl = rfbClientHead; cl; cl = cl->next) - numClientConnections++; - if (numClientConnections >= rfbMaxClientConnections) { + if (rfbClientCount() >= rfbMaxClientConnections) { rfbClientRec tempCl; rfbProtocolVersionMsg pv; const char *errMsg = "Connection limit reached";