checkpoint.

This commit is contained in:
crs 2002-06-08 21:48:16 +00:00
parent 4b28ffc5b2
commit 562e3aebb5
1 changed files with 134 additions and 72 deletions

206
notes
View File

@ -1,8 +1,3 @@
CServer
* must have connection thread in screen info map
allows disconnect if screen map changes and screen is removed
* put mutex locks wherever necessary (like accessing m_active)
server client server client
------ ------ ------ ------
[accept] <-- connect [accept] <-- connect
@ -16,13 +11,22 @@ query info -->
use automake use automake
--- ---
need config file and parser HTTP stuff
remove hard coded debugging stuff (in server.cpp) no way to save config using HTTP
should have a button or a page to force save of config
or just save config every time it's changed
should use authentication (at least basic)
---
use hostname instead of "primary", "secondary"
---
add aliases in config file
any alias of a screen name counts as that screen name
handy for mapping FQDN <-> hostname
--- ---
win32: win32:
need to support window stations
login screen on NT is a separate window station
provide taskbar icon provide taskbar icon
win32 dll: win32 dll:
@ -30,7 +34,91 @@ win32 dll:
don't use standard libraries don't use standard libraries
use custom _DllMainCRTStartup(); just call DllMain() from it. use custom _DllMainCRTStartup(); just call DllMain() from it.
use /MERGE linker switch to merge sections use /MERGE linker switch to merge sections
should use mutex on all public functions
clean up c:\winnt\synergy.sgc
desktop switcher program failure when running synergy as service
returns access denied from CreateDesktop()
don't know why
log window may prevent changing desktop
should start console in a thread just for that purpose
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
grace converts to half-duplex so only synthesizes key down
now grace starts server and is locked to screen
grace should ignore half duplex keys when seeing if locked to screen
---
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
get auto-restart into platform code
provide a `int(*)(void)' ptr to an auto-restart function
function just forks(), calls ptr, waits, repeats
may need something else on win32 or maybe just skip it
---
bug in updating screens
saw a goofy set of screens after update
i think the config was similar to:
A B
C
D E
--- ---
not handling international characters not handling international characters
@ -49,42 +137,16 @@ not distinguishing between caps lock and shift lock
either the Lock or the Shift key turns off the mode. either the Lock or the Shift key turns off the mode.
--- ---
problems with CLIPBOARD and KDE and NEdit
KDE mail reader (others?) and NEdit never reply to selection request
perhaps a general Motif problem?
currently sending all clipboards to all clients currently sending all clipboards to all clients
some clients may not need all clipboards some clients may not need all clipboards
add filtering mechanism add filtering mechanism
must find app that correctly sets the CLIPBOARD selection for testing
synergy must note changes to one or both selections
seems to be having trouble with noting CLIPBOARD after PRIMARY changes
investigate klipper
KDE's clipboard manager?
it crashed once when server did (see below)
---
blown assertion
between client being added to screen list and sending screen size:
attempt to switch to that screen blows assert
x,y isn't inside screen because screen has zero size
maybe have a "ready" flag for each client
only count ready clients when finding neighbor
or don't add client to screen list until fully ready
---
got crash when opening netscape window after trying copy in KDE mail
BadWindow in ChangeWindowAttributes
also got it when trying to transfer big clipboard from secondary
or just after transferring and perhaps trying to set locally
--- ---
sometimes not sending correct clipboard sometimes not sending correct clipboard
some kind of race condition i think some kind of race condition i think
can select text then switch and get empty clipboard can select text then switch and get empty clipboard
switching back to owner screen then out gets correct clipboard switching back to owner screen then out gets correct clipboard
dunno if this is still a problem
--- ---
win32 not sending correct clipboard win32 not sending correct clipboard
@ -93,11 +155,17 @@ win32 not sending correct clipboard
problem persisted; also got 43 bytes for a 2 byte selection problem persisted; also got 43 bytes for a 2 byte selection
--- ---
slow leaving primary screen on X need timeout on CXWindowsClipboard::CReply objects
possibly due to getting primary clipboards should flush replies that are too old
possibly something else assumption is that requestor is broken
could try asynchronously getting primary clipboard
race condition on secondary wrt pasting ---
inconsistencies
exceptions
using getWhat() in some places to return a code, elsewhere returns message
references/pointers
should use pointers for any in/out parameter
but using references in some places
--- ---
win32 hook DLL sometimes not unloaded when server is killed? win32 hook DLL sometimes not unloaded when server is killed?
@ -212,15 +280,6 @@ try to determine keyboard quirks automatically
in particular, set the half-duplex flags in particular, set the half-duplex flags
maybe KBD extension will help determine this maybe KBD extension will help determine this
---
blown assert:
client crashed and primary jumped to primary
left over queued motion events then processed
caused call to CServer::onMouseMoveSecondary
m_protocol is NULL because we're on primary screen
must flush queued events when jumping to primary
check for other things to do when jumping to primary
--- ---
key events sent to console on win me (95/98?) are very slow 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 1/4 to 1/2 second delay before key up is processed
@ -237,6 +296,14 @@ adjust thread priorities on win32
a very high priority on client fixes delay when typeing into console a very high priority on client fixes delay when typeing into console
is it the output console causing the slowness? is it the output console causing the slowness?
---
must send up key events when leaving screen for keys still down
some key combos get eaten and the key ups aren't sent
e.g. ctrl+alt+del on win2k to grace
mouse is forced back to to win2k
ctrl and alt up not sent to grace
grace thinks ctrl and alt are down 'til user physically press/releases them
--- ---
Accessibility Shortcuts Accessibility Shortcuts
@ -281,26 +348,21 @@ Q179905
may prevent system from getting locked up when debugging. may prevent system from getting locked up when debugging.
--- ---
config file format: how is CTCPSocket::connect() able to cancel?
looks like it can't
section screens make it asynchronous and use poll() to wait for connection
<screen>: use testCancel() to make it cancellable
# args in any order
# not sure if any args
end
section links
<screen>:
# args in any order
[left=<screen>]
[right=<screen>]
[up=<screen>]
[down=<screen>]
end
--- ---
will have to redo clipboard stuff on win32 win32 rel notes:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Windows\NoInteractiveServices
need timeout on CReply objects can prevent an interactive service from running interactively.
should flush replies that are too old how can we tell if we're not running interactively?
assumption is that requestor is broken even if not interactive we can use MessageBox() to alert user
use MB_SERVICE_NOTIFICATION flag
must use a separate thread in initialization if called from handler
must close dialog if CTRL_LOGOFF_EVENT is received
see SetConsoleCtrlHandler() and CLog (which uses it)
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"