From d60e8ccfc8c1b173c914ffa26a88203690bf9e3a Mon Sep 17 00:00:00 2001 From: runge Date: Mon, 19 Feb 2007 03:08:12 +0000 Subject: [PATCH] x11vnc: Get ultravnc textchat working with ssvnc. --- x11vnc/ChangeLog | 3 +++ x11vnc/README | 6 +++--- x11vnc/x11vnc.1 | 2 +- x11vnc/x11vnc.c | 2 +- x11vnc/x11vnc_defs.c | 2 +- x11vnc/xevents.c | 28 ++++++++++++++++++++++------ 6 files changed, 31 insertions(+), 12 deletions(-) diff --git a/x11vnc/ChangeLog b/x11vnc/ChangeLog index 19c5225..df0401e 100644 --- a/x11vnc/ChangeLog +++ b/x11vnc/ChangeLog @@ -1,3 +1,6 @@ +2007-02-18 Karl Runge + * x11vnc: Get ultravnc textchat working with ssvnc. + 2007-02-16 Karl Runge * x11vnc: add Files mode to user controlled input. more ultra/tight filexfer tweaks. rfbversion remote control. diff --git a/x11vnc/README b/x11vnc/README index 657ce9a..50655c6 100644 --- a/x11vnc/README +++ b/x11vnc/README @@ -1,5 +1,5 @@ -x11vnc README file Date: Fri Feb 16 20:41:26 EST 2007 +x11vnc README file Date: Sun Feb 18 18:24:55 EST 2007 The following information is taken from these URLs: @@ -10027,7 +10027,7 @@ x11vnc: a VNC server for real X displays Here are all of x11vnc command line options: % x11vnc -opts (see below for -help long descriptions) -x11vnc: allow VNC connections to real X11 displays. 0.8.5 lastmod: 2007-02-16 +x11vnc: allow VNC connections to real X11 displays. 0.8.5 lastmod: 2007-02-18 x11vnc options: -display disp -auth file -N @@ -10140,7 +10140,7 @@ libvncserver-tight-extension options: % x11vnc -help -x11vnc: allow VNC connections to real X11 displays. 0.8.5 lastmod: 2007-02-16 +x11vnc: allow VNC connections to real X11 displays. 0.8.5 lastmod: 2007-02-18 (type "x11vnc -opts" to just list the options.) diff --git a/x11vnc/x11vnc.1 b/x11vnc/x11vnc.1 index e25f83f..a68a30d 100644 --- a/x11vnc/x11vnc.1 +++ b/x11vnc/x11vnc.1 @@ -2,7 +2,7 @@ .TH X11VNC "1" "February 2007" "x11vnc " "User Commands" .SH NAME x11vnc - allow VNC connections to real X11 displays - version: 0.8.5, lastmod: 2007-02-16 + version: 0.8.5, lastmod: 2007-02-18 .SH SYNOPSIS .B x11vnc [OPTION]... diff --git a/x11vnc/x11vnc.c b/x11vnc/x11vnc.c index 77cb075..38a1fe5 100644 --- a/x11vnc/x11vnc.c +++ b/x11vnc/x11vnc.c @@ -3814,6 +3814,7 @@ int main(int argc, char* argv[]) { #if LIBVNCSERVER_HAVE_FORK && LIBVNCSERVER_HAVE_SETSID if (bg) { + int p, n; if (getenv("X11VNC_LOOP_MODE_BG")) { if (screen && screen->listenSock >= 0) { close(screen->listenSock); @@ -3835,7 +3836,6 @@ int main(int argc, char* argv[]) { } } /* fork into the background now */ - int p, n; if ((p = fork()) > 0) { exit(0); } else if (p == -1) { diff --git a/x11vnc/x11vnc_defs.c b/x11vnc/x11vnc_defs.c index 193b16d..3eb7b2a 100644 --- a/x11vnc/x11vnc_defs.c +++ b/x11vnc/x11vnc_defs.c @@ -15,7 +15,7 @@ int xtrap_base_event_type = 0; int xdamage_base_event_type = 0; /* date +'lastmod: %Y-%m-%d' */ -char lastmod[] = "0.8.5 lastmod: 2007-02-16"; +char lastmod[] = "0.8.5 lastmod: 2007-02-18"; /* X display info */ diff --git a/x11vnc/xevents.c b/x11vnc/xevents.c index bf1aa8d..f69588e 100644 --- a/x11vnc/xevents.c +++ b/x11vnc/xevents.c @@ -1374,25 +1374,41 @@ void set_server_input(rfbClientPtr cl, int grab) { } void set_text_chat(rfbClientPtr cl, int len, char *txt) { char buf[100]; + int dochat = 1; + rfbClientIteratorPtr iter; + rfbClientPtr cl2; - if (no_ultra_ext) { + if (no_ultra_ext || ! dochat) { return; } +#if 0 + rfbLog("set_text_chat: len=%d\n", len); rfbLog("set_text_chat: len=0x%x txt='", len); if (0 < len && len < 10000) write(2, txt, len); fprintf(stderr, "'\n"); +#endif if (unixpw_in_progress) { rfbLog("set_text_chat: unixpw_in_progress, skipping.\n"); return; } - if (0 && len == rfbTextChatOpen) { - if (rfbSendTextChatMessage(cl, rfbTextChatOpen, "")) { - rfbLog("rfbSendTextChatMessage: true\n"); - } else { - rfbLog("rfbSendTextChatMessage: false\n"); + iter = rfbGetClientIterator(screen); + while( (cl2 = rfbClientIteratorNext(iter)) ) { + if (cl2 == cl) { + continue; + } + if (len == rfbTextChatOpen) { + rfbSendTextChatMessage(cl2, rfbTextChatOpen, ""); + } else if (len == rfbTextChatClose) { + rfbSendTextChatMessage(cl2, rfbTextChatClose, ""); + } else if (len == rfbTextChatFinished) { + rfbSendTextChatMessage(cl2, rfbTextChatFinished, ""); + } else if (len <= rfbTextMaxSize) { + rfbSendTextChatMessage(cl2, len, txt); } } + rfbReleaseClientIterator(iter); } + int get_keyboard_led_state_hook(rfbScreenInfoPtr s) { if (unixpw_in_progress) { rfbLog("get_keyboard_led_state_hook: unixpw_in_progress, skipping.\n");