aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--vexnc.c29
1 files changed, 29 insertions, 0 deletions
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;
}