checkpoint.

This commit is contained in:
crs 2002-06-23 21:54:05 +00:00
parent 76db457830
commit 80d11df2f9
1 changed files with 294 additions and 129 deletions

423
notes
View File

@ -9,15 +9,7 @@ query info -->
---
use automake
order includes according to source directory
fix function definitions
return type on first line
function name in 1st column on 2nd line
parameters at 1st tab stop starting 3rd line, one per line
fix parameter indentation
in header file: 7th tab stop (not 8th)
in source file: 1st tab stop (not 8th)
use doxygen
---
HTTP stuff
@ -30,13 +22,54 @@ HTTP stuff
handy for debugging at least
---
CThreadRep::threadSignalHandler not shutdown on assert
thread stays around and holds our resources (like sockets)
should ensure that it terminates correctly
make generic input devices?
replace mouse and keyboard with button and valuator devices?
could fairly easily add new devices then
valuators would have to come in groups that change together
mouse position would be two ganged valuators
key events are not simply button presses though
they have a non-boolean character, shift state, and repeat count
maybe another device type: {data, state, repeat}
must handle on-the-fly addition/removal of devices
USB allows hotplugging and we should support, say, an added joystick
must have device negotiation
at very least it negotiates mouse/keyboard at start
---
should add clipboard data type format negotiation
server sends permitted data type formats
client responds with known formats in permitted list
client must only send permitted formats
server can discard non-permitted formats
server must only send known, permitted formats to client
formats are names of the form [a-zA-Z0-9_/]+
server must be able to translate between all permitted formats
example: text formats:
text/plain/CRLF -- windows plain text
text/plain/LF -- unix plain text
text/plain/CR -- mac plain text
text/rtf -- rich text (does that require a particular newline?)
or image formats:
image/BMP
image/RAW
image/XPM
this will allow future versions to interoperate better. it also
allows compatibility with versions that are identical except for
the support clipboard formats, obviating bumping up the protocol
version number.
---
hot keys
should have keyboard shortcuts to jump to screens
---
win32:
need icon
provide taskbar icon
provide control panel?
win32 dll:
should make this as small as possible
@ -44,15 +77,15 @@ win32 dll:
use custom _DllMainCRTStartup(); just call DllMain() from it.
use /MERGE linker switch to merge sections
win32 service:
need message table for proper event reporting
clean up c:\winnt\synergy.sgc
desktop switcher program failure when running synergy as service
returns access denied from CreateDesktop()
don't know why
client will need to be able to retry connecting to server
in case server isn't ready yet, client can camp
---
bug with half-duplex keys
win32 server sent num-lock to grace
@ -68,60 +101,6 @@ must send up key events when leaving screen for keys still down
ctrl and alt up not sent to grace
grace thinks ctrl and alt are down 'til user physically press/releases them
---
CClient and CServer:
not checking in stop() that we're actually running
must mutex m_primary/m_screen
they could be NULL if in the middle of shutting down
---
win32 screen saver
win95 etc:
keybd_event can terminate screen saver but not mouse_event
keybd_event resets screen saver start timer but not mouse_event
to kill screen saver (if it's known to be running):
PostMessage (GetActiveWindow(), WM_CLOSE, 0, 0L);
to find if screen saver is running:
FindWindow ("WindowsScreenSaverClass", NULL);
win nt 4:
mouse_event resets screen saver start timer but not keybd_event
neither can stop screen saver because it runs in a separate desktop
to kill screen saver:
BOOL CALLBACK KillScreenSaverFunc(HWND hwnd, LPARAM lParam)
{
if(IsWindowVisible(hwnd))
PostMessage(hwnd, WM_CLOSE, 0, 0);
return TRUE;
}
HDESK hdesk;
hdesk = OpenDesktop(TEXT("Screen-saver"),
0,
FALSE,
DESKTOP_READOBJECTS | DESKTOP_WRITEOBJECTS);
if (hdesk)
{
EnumDesktopWindows(hdesk, KillScreenSaverFunc, 0);
CloseDesktop(hdesk);
}
---
unix:
restarting fails to connect until a user logs in:
Xlib: no protocol specified
this is caused by login manager
all clients are rejected, except those started by manager itself
workaround is to have synergy started by login manager
should then use --no-restart, though that's not necessary
affects client and server
cannot switch screens on login screen:
xdm,kdm grab keyboard for duration of login screen
synergy cannot switch unless it can grab keyboard
gdm doesn't appear to grab keyboard or mouse for duration
affects server, only
check if DISPLAY env var is unset. use ":0.0" as default.
---
bug in updating screens
saw a goofy set of screens after update
@ -130,11 +109,24 @@ bug in updating screens
C
D E
---
should switch to user nobody (or something similar) if running as root
for security reasons
will make it impossible to overwrite /etc/synergy.conf
if that file is only root writable (as it should be)
---
Xsetup file may have to kill previous synergy
or synergy should exit if there's already a synergy running
---
not handling international characters
---
not handling screen saver at all yet
screen saver won't lock screen if on secondary screen
because synergy has mouse/keyboard grabbed
synergy will immediately release grabs when screen saver activates
but looks like xscreensaver wont map window until it grabs
---
not distinguishing between caps lock and shift lock
@ -152,17 +144,15 @@ currently sending all clipboards to all clients
add filtering mechanism
---
sometimes not sending correct clipboard
some kind of race condition i think
can select text then switch and get empty clipboard
switching back to owner screen then out gets correct clipboard
dunno if this is still a problem
sometimes jumping too far into secondary screen
probably bogus delta (adding in center pixel coords into delta?)
this is with an X primary and secondary
don't know which matters but probably X primary
---
win32 not sending correct clipboard
got 43 bytes sent for a 3 byte selection
remaining bytes were 0
problem persisted; also got 43 bytes for a 2 byte selection
not handling large motif selections
there must be a limit because properties can only be so big
don't know protocol for transfer, though
---
need timeout on CXWindowsClipboard::CReply objects
@ -188,7 +178,50 @@ win32 hook DLL sometimes not unloaded when server is killed?
try to figure out why it's not unloading
---
test:
avoid fullscreen transparent window on win32
using CBT hook to discard activation/focus messages
but it's not being called when we lose keyboard input
also, we sometimes don't get the keyboard input to start with
---
keyboard hook problems (win32)
now passing keyboard events through in most cases
this fixes problem on isabel where toggle lights don't toggle
and num-lock behaved incorrectly (generated wrong keys).
seems the DefWindowProc() needed to process the keys
unfortunately, keys sometimes leak into wrong app. seems related
to times when we don't get the keyboard input. key events are
not delivered to app on primary until cursor returns to primary.
no idea how that's possible.
current have some code to check active window and reset it in
keyboard hook. that code doesn't work.
seem to be having problems with windows key now, too. looks like
a down is sent but not the corresponding up so secondary system
thinks the key is always down.
---
try to determine keyboard quirks automatically
in particular, set the half-duplex flags
maybe KBD extension will help determine this
---
key events sent to console on win me (95/98?) are very slow
1/4 to 1/2 second delay before key up is processed
key up log message is also delayed
console causing a system-wide delay?
---
adjust thread priorities on win32
maybe remove changes altogether
currently isabel starts single-stepping mouse when dragging window
sometimes it goes normal speed but it's mostly very slow
even a very high priority doesn't seem to help
haven't tried real-time priority
a very high priority on client fixes delay when typeing into console
is it the output console causing the slowness?
---
results:
X primary
ctrl+alt+keypad_add, ctrl+alt_keypad_minus -> eaten by primary X server
ctrl+alt+backspace probably eaten by primary X server if so configured
@ -254,49 +287,6 @@ test:
check accessibility shortcuts work on secondary
check accessibility features work on secondary
---
avoid fullscreen transparent window on win32
using CBT hook to discard activation/focus messages
but it's not being called when we lose keyboard input
also, we sometimes don't get the keyboard input to start with
---
keyboard hook problems (win32)
now passing keyboard events through in most cases
this fixes problem on isabel where toggle lights don't toggle
and num-lock behaved incorrectly (generated wrong keys).
seems the DefWindowProc() needed to process the keys
unfortunately, keys sometimes leak into wrong app. seems related
to times when we don't get the keyboard input. key events are
not delivered to app on primary until cursor returns to primary.
no idea how that's possible.
current have some code to check active window and reset it in
keyboard hook. that code doesn't work.
seem to be having problems with windows key now, too. looks like
a down is sent but not the corresponding up so secondary system
thinks the key is always down.
---
try to determine keyboard quirks automatically
in particular, set the half-duplex flags
maybe KBD extension will help determine this
---
key events sent to console on win me (95/98?) are very slow
1/4 to 1/2 second delay before key up is processed
key up log message is also delayed
console causing a system-wide delay?
---
adjust thread priorities on win32
maybe remove changes altogether
currently isabel starts single-stepping mouse when dragging window
sometimes it goes normal speed but it's mostly very slow
even a very high priority doesn't seem to help
haven't tried real-time priority
a very high priority on client fixes delay when typeing into console
is it the output console causing the slowness?
---
Accessibility Shortcuts
@ -340,12 +330,6 @@ Q179905
suggestion for bypassing hook code when called by debugger.
may prevent system from getting locked up when debugging.
---
how is CTCPSocket::connect() able to cancel?
looks like it can't
make it asynchronous and use poll() to wait for connection
use testCancel() to make it cancellable
---
win32 rel notes:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Windows\NoInteractiveServices
@ -359,3 +343,184 @@ win32 rel notes:
maybe possible to get around NoInteractiveServices
modify DACLs on windows station/desktops to impersonate logged on user
see "Interacting with the User by a Win32 Service"
---
unix release notes:
restarting fails to connect until a user logs in:
Xlib: no protocol specified
this is caused by login manager
all clients are rejected, except those started by manager itself
workaround is to have synergy started by login manager
should then use --no-restart, though that's not necessary
affects client and server
cannot switch screens on login screen:
xdm,kdm grab keyboard for duration of login screen
synergy cannot switch unless it can grab keyboard
gdm doesn't appear to grab keyboard or mouse for duration
affects server, only
=== feedback ===
send all toggle states instead of (individual) toggle ups/downs (gspencer)
Actually, Teleffect already does that too, but what I meant was that
each time the state of a "toggle" key (caps lock, scroll lock, num lock)
changes on the master, I think it should force the client to take on
that state, instead of just toggling on the client. That way when Word
(on the client) helpfullly turns off the caps lock, it doesn't get
toggled back on when I turn off the caps lock on the master. Ideally,
it would just notice that Word turned off the caps lock on the client
and turn it off on the master (and all other clients) too, but I think
that's probably too complicated to implement.
dragging windows is too slow
grace (as client) exhibits this
dunno if it happens with audrey2 as the client
liz says her windows laptop does it too
double clicking NT binaries fails (liz)
add note to README or use separate binaries for services. client
would also need a dialog to query options. server would probably
need one too. use dialogs if there are no command line args.
how to exit (liz)
no good way to exit on windows
win32 console disappears too quickly (liz)
maybe show a message box if exiting to due an error
better support for reloading configuration (liz)
use SIGHUP on unix
use an app message on win32
provide access through a control panel or taskbar icon
non-functional on ctrl+alt+del screen in win2k (kurt)
i suppose it must be when win2k is the client. mouse input wasn't
working. keyboard probably didn't work either.
---
automake stuff
rebuild:
* 'autoheader' - creates config.h.in
* 'touch NEWS README AUTHORS ChangeLog'
* 'touch stamp-h'
* aclocal - adds aclocal.m4 to directory. Defines some m4 macros used by the auto tools.
* 'autoconf '- creates configure from configure.in
* 'automake' - Creates Makefile.in from Makefile.am
* './configure' - creates Makefile from Makefile.in
* 'make'
funky functions:
snprintf -- ick!
some return negative value -- no problem
some return truncated length -- uh oh
some return buffer length without truncation -- huh?
some actually overrun the buffer -- must not build on those!
use AC_LIBOBJ(function) for missing/broken functions
adds function.c to build
must add @LIBOBJS@ to *_LIBADD
or AC_REPLACE_FUNCS(function ...)
automatically calls AC_LIBOBJ for missing functions
use AC_CHECK_FUNC or AC_CHECK_FUNCS to detect missing functions
use AC_CHECK_LIB first if function not in std C lib
maybe AC_CHECK_TYPE for size_t and ssize_t
replace sys/time.h with:
#if TIME_WITH_SYS_TIME
# include <sys/time.h>
# include <time.h>
#else
# if HAVE_SYS_TIME_H
# include <sys/time.h>
# else
# include <time.h>
# endif
#endif
what does `make install' do?
check in derived files?
aclocal.m4
config.h.in
configure
used library functions:
accept
bind
chdir
close
connect
dup
fork
fprintf
getenv
gethostbyaddr
gethostbyname
gethostname
getpeername
getprotobyname
getprotobynumber
getservbyname
getservbyport
getsockname
getsockopt
gettimeofday
inet_addr
inet_ntoa
ioctl
listen
memcpy
memmove
memset
nanosleep
open
openlog
poll
read
recv
recvfrom
send
sendto
setsid
setsockopt
shutdown
sigaction
sigaddset
sigemptyset
socket
sprintf
strcat
strcmp
strerror
strrchr
syslog
umask
vsnprintf
write
included files
#include <arpa/inet.h>
#include <fcntl.h>
#include <pthread.h>
#include <pwd.h>
#include <shlobj.h>
#include <signal.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <syslog.h>
#include <unistd.h>
these put stuff in std::. replace with .h versions or use std::?
3 #include <cctype>
3 #include <cerrno>
1 #include <clocale>
3 #include <cstdio>
4 #include <cstdlib>
12 #include <cstring>
1 #include <ctime>
can we use AC_REPLACE_FUNCS and only build the missing function files
in a single directory. do we have to have a separate configure.in
script to do that?