1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-01-10 01:48:00 +00:00
putty-source/windows
Simon Tatham ca70b1285d Allow creating FdSocket/HandleSocket before the fds/handles.
Previously, a setup function returning one of these socket types (such
as platform_new_connection) had to do all its setup synchronously,
because if it was going to call make_fd_socket or make_handle_socket,
it had to have the actual fds or HANDLEs ready-made. If some kind of
asynchronous operation were needed before those fds become available,
there would be no way the function could achieve it, except by
becoming a whole extra permanent Socket wrapper layer.

Now there is, because you can make an FdSocket when you don't yet have
the fds, or a HandleSocket without the HANDLEs. Instead, you provide
an instance of the new trait 'DeferredSocketOpener', which is
responsible for setting in motion whatever asynchronous setup
procedure it needs, and when that finishes, calling back to
setup_fd_socket / setup_handle_socket to provide the missing pieces.

In the meantime, the FdSocket or HandleSocket will sit there inertly,
buffering any data the client might eagerly hand it via sk_write(),
and waiting for its setup to finish. When it does finish, buffered
data will be released.

In FdSocket, this is easy enough, because we were doing our own
buffering anyway - we called the uxsel system to find out when the fds
were readable/writable, and then wrote to them from our own bufchain.
So more or less all I had to do was make the try_send function do
nothing if the setup phase wasn't finished yet.

In HandleSocket, on the other hand, we're passing all our data to the
underlying handle-io.c system, and making _that_ deferrable in the
same way would be much more painful, because that's the place where
the scary threads live. So instead I've arranged it by replacing the
whole vtable, so that a deferred HandleSocket and a normal
HandleSocket are effectively separate trait implementations that can
share their state structure. And in fact that state struct itself now
contains a big anonymous union, containing one branch to go with each
vtable.

Nothing yet uses this system, but the next commit will do so.
2021-12-22 15:45:41 +00:00
..
utils Generalise strbuf_catf() into put_fmt(). 2021-11-19 11:32:47 +00:00
agent-client.c Close agent named-pipe handles when queries complete. 2021-05-13 18:22:05 +01:00
cliloop.c Reorganise Windows HANDLE management. 2021-05-24 15:27:38 +01:00
CMakeLists.txt Merge be_*.c into one ifdef-controlled module. 2021-11-26 17:58:55 +00:00
config.c Initial support for in-process proxy SSH connections. 2021-05-22 14:13:52 +01:00
conpty.c Add memsets after allocation of all Backend implementors. 2021-10-30 17:28:28 +01:00
console.c New Seat query, has_mixed_input_stream(). 2021-11-06 14:48:26 +00:00
controls.c Rename most of the platform source files. 2021-04-26 18:00:01 +01:00
cryptoapi.h Rename most of the platform source files. 2021-04-26 18:00:01 +01:00
dialog.c Marshalling macros put_dataz and put_datalit. 2021-11-19 15:09:17 +00:00
gss.c Avoid crash in MIT Kerberos for Windows on session restart. 2021-07-01 18:59:44 +01:00
handle-io.c handle_write_eof: delegate CloseHandle back to the client. 2021-09-30 19:16:20 +01:00
handle-socket.c Allow creating FdSocket/HandleSocket before the fds/handles. 2021-12-22 15:45:41 +00:00
handle-wait.c Fix an unused variable. 2021-05-27 09:48:32 +01:00
help.c Rename most of the platform source files. 2021-04-26 18:00:01 +01:00
help.h New config option for shifted arrow key handling. 2021-10-18 20:15:35 +01:00
help.rc2 Rename most of the platform source files. 2021-04-26 18:00:01 +01:00
installer.wxs Configurable CHM path in installer source. 2021-05-03 17:01:55 +01:00
jump-list.c Move some parts of window.c into putty.c. 2021-05-08 17:20:50 +01:00
local-proxy.c Pass an Interactor to platform_new_connection. 2021-12-22 15:24:58 +00:00
make_install_images.sh Remove white dialog background in MSI user interface. 2020-06-21 16:39:47 +01:00
msifixup.py Remove white dialog background in MSI user interface. 2020-06-21 16:39:47 +01:00
named-pipe-client.c Move proxy-related source files into a subdirectory. 2021-10-30 17:29:24 +01:00
named-pipe-server.c Move proxy-related source files into a subdirectory. 2021-10-30 17:29:24 +01:00
network.c New API for plug_closing() with a custom type enum. 2021-11-06 14:48:26 +00:00
no-jump-list.c Rename most of the platform source files. 2021-04-26 18:00:01 +01:00
nohelp.c Rename most of the platform source files. 2021-04-26 18:00:01 +01:00
noise.c Rename most of the platform source files. 2021-04-26 18:00:01 +01:00
pageant-rc.h winpgnt: say 'click to focus' in async passphrase prompt. 2021-04-22 20:00:46 +01:00
pageant.c Generalise strbuf_catf() into put_fmt(). 2021-11-19 11:32:47 +00:00
pageant.ico Tweak the icon script, and the generated icons, to more closely 2007-01-07 10:17:12 +00:00
pageant.mft Whitespace rationalisation of entire code base. 2019-09-08 20:29:21 +01:00
pageant.rc Rename most of the platform source files. 2021-04-26 18:00:01 +01:00
pageants.ico Tweak the icon script, and the generated icons, to more closely 2007-01-07 10:17:12 +00:00
platform.h Allow creating FdSocket/HandleSocket before the fds/handles. 2021-12-22 15:45:41 +00:00
plink.c Marshalling macros put_dataz and put_datalit. 2021-11-19 15:09:17 +00:00
plink.rc `win-versioninfo': all builds of all Windows binaries now contain 2005-10-04 14:13:28 +00:00
printing.c Rename most of the platform source files. 2021-04-26 18:00:01 +01:00
pscp.ico Tweak the icon script, and the generated icons, to more closely 2007-01-07 10:17:12 +00:00
pscp.rc `win-versioninfo': all builds of all Windows binaries now contain 2005-10-04 14:13:28 +00:00
psftp.rc `win-versioninfo': all builds of all Windows binaries now contain 2005-10-04 14:13:28 +00:00
psocks.c Rename most of the platform source files. 2021-04-26 18:00:01 +01:00
pterm.c New config option for shifted arrow key handling. 2021-10-18 20:15:35 +01:00
pterm.ico Make Windows versions of the pterm icons. 2021-05-08 17:33:25 +01:00
pterm.rc New application: a Windows version of 'pterm'! 2021-05-08 17:51:27 +01:00
ptermcfg.ico Make Windows versions of the pterm icons. 2021-05-08 17:33:25 +01:00
putty-common.rc2 Mention the host name in host-key prompts. 2021-09-16 14:33:59 +01:00
putty-rc.h Mention the host name in host-key prompts. 2021-09-16 14:33:59 +01:00
putty.c Move some parts of window.c into putty.c. 2021-05-08 17:20:50 +01:00
putty.ico Tweak the icon script, and the generated icons, to more closely 2007-01-07 10:17:12 +00:00
putty.mft Windows 10: add per monitor DPI awareness support. 2021-04-02 19:04:19 +01:00
putty.rc Move icon declarations out of putty-common.rc2. 2021-05-08 17:33:25 +01:00
puttycfg.ico Tweak the icon script, and the generated icons, to more closely 2007-01-07 10:17:12 +00:00
puttygen-rc.h PuTTYgen: option to control Argon2 flavour. 2021-02-23 18:26:50 +00:00
puttygen.c Close all thread handles returned from CreateThread. 2021-07-01 18:30:25 +01:00
puttygen.ico Tweak the icon script, and the generated icons, to more closely 2007-01-07 10:17:12 +00:00
puttygen.mft Whitespace rationalisation of entire code base. 2019-09-08 20:29:21 +01:00
puttygen.rc Rename most of the platform source files. 2021-04-26 18:00:01 +01:00
puttyins.ico `installer.ico' doesn't fit into 8.3, so gets truncated to INSTALLE.ICO in 2007-02-06 22:39:15 +00:00
puttytel.mft Windows 10: add per monitor DPI awareness support. 2021-04-02 19:04:19 +01:00
puttytel.rc Move icon declarations out of putty-common.rc2. 2021-05-08 17:33:25 +01:00
rcstuff.h Replace mkfiles.pl with a CMake build system. 2021-04-17 13:53:02 +01:00
README-msi.txt Remove note about .CHM on network drives. 2019-03-18 21:53:45 +00:00
security-api.h Rename most of the platform source files. 2021-04-26 18:00:01 +01:00
select-cli.c Rename most of the platform source files. 2021-04-26 18:00:01 +01:00
select-gui.c Rename most of the platform source files. 2021-04-26 18:00:01 +01:00
serial.c Add memsets after allocation of all Backend implementors. 2021-10-30 17:28:28 +01:00
sftp.c Complete rework of terminal userpass input system. 2021-09-14 13:19:33 +01:00
sharing.c Move proxy-related source files into a subdirectory. 2021-10-30 17:29:24 +01:00
sizetip.c Formatting change to braces around one case of a switch. 2020-02-16 11:26:21 +00:00
storage.c Generalise strbuf_catf() into put_fmt(). 2021-11-19 11:32:47 +00:00
unicode.c Rename most of the platform source files. 2021-04-26 18:00:01 +01:00
version.rc2 FIXME about Windows resource CHMfulness hint. 2019-03-18 22:02:13 +00:00
website.url Switch chiark URLs to https. 2017-05-07 16:29:01 +01:00
win-gui-seat.h Rename most of the platform source files. 2021-04-26 18:00:01 +01:00
window.c Proper buffer management between terminal and backend. 2021-12-19 11:02:48 +00:00
x11.c Rename most of the platform source files. 2021-04-26 18:00:01 +01:00