summaryrefslogtreecommitdiff
path: root/channels.h
diff options
context:
space:
mode:
authorDamien Miller <djm@mindrot.org>2010-05-21 14:57:10 +1000
committerDamien Miller <djm@mindrot.org>2010-05-21 14:57:10 +1000
commitd530f5f471491b6be9edb58a063f2590e4dce48d (patch)
treee536e2b4031a4dd70026ff49c39b02b72af06f30 /channels.h
parentc6afb5f2c095a6a4380cc13a6480abb7614d949f (diff)
- djm@cvs.openbsd.org 2010/05/14 23:29:23
[channels.c channels.h mux.c ssh.c] Pause the mux channel while waiting for reply from aynch callbacks. Prevents misordering of replies if new requests arrive while waiting. Extend channel open confirm callback to allow signalling failure conditions as well as success. Use this to 1) fix a memory leak, 2) start using the above pause mechanism and 3) delay sending a success/ failure message on mux slave session open until we receive a reply from the server. motivated by and with feedback from markus@
Diffstat (limited to 'channels.h')
-rw-r--r--channels.h8
1 files changed, 5 insertions, 3 deletions
diff --git a/channels.h b/channels.h
index cc71885f4..0680ed00e 100644
--- a/channels.h
+++ b/channels.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: channels.h,v 1.103 2010/01/26 01:28:35 djm Exp $ */ 1/* $OpenBSD: channels.h,v 1.104 2010/05/14 23:29:23 djm Exp $ */
2 2
3/* 3/*
4 * Author: Tatu Ylonen <ylo@cs.hut.fi> 4 * Author: Tatu Ylonen <ylo@cs.hut.fi>
@@ -60,6 +60,7 @@
60struct Channel; 60struct Channel;
61typedef struct Channel Channel; 61typedef struct Channel Channel;
62 62
63typedef void channel_open_fn(int, int, void *);
63typedef void channel_callback_fn(int, void *); 64typedef void channel_callback_fn(int, void *);
64typedef int channel_infilter_fn(struct Channel *, char *, int); 65typedef int channel_infilter_fn(struct Channel *, char *, int);
65typedef void channel_filter_cleanup_fn(int, void *); 66typedef void channel_filter_cleanup_fn(int, void *);
@@ -130,7 +131,7 @@ struct Channel {
130 char *ctype; /* type */ 131 char *ctype; /* type */
131 132
132 /* callback */ 133 /* callback */
133 channel_callback_fn *open_confirm; 134 channel_open_fn *open_confirm;
134 void *open_confirm_ctx; 135 void *open_confirm_ctx;
135 channel_callback_fn *detach_user; 136 channel_callback_fn *detach_user;
136 int detach_close; 137 int detach_close;
@@ -151,6 +152,7 @@ struct Channel {
151 /* multiplexing protocol hook, called for each packet received */ 152 /* multiplexing protocol hook, called for each packet received */
152 mux_callback_fn *mux_rcb; 153 mux_callback_fn *mux_rcb;
153 void *mux_ctx; 154 void *mux_ctx;
155 int mux_pause;
154}; 156};
155 157
156#define CHAN_EXTENDED_IGNORE 0 158#define CHAN_EXTENDED_IGNORE 0
@@ -208,7 +210,7 @@ void channel_stop_listening(void);
208void channel_send_open(int); 210void channel_send_open(int);
209void channel_request_start(int, char *, int); 211void channel_request_start(int, char *, int);
210void channel_register_cleanup(int, channel_callback_fn *, int); 212void channel_register_cleanup(int, channel_callback_fn *, int);
211void channel_register_open_confirm(int, channel_callback_fn *, void *); 213void channel_register_open_confirm(int, channel_open_fn *, void *);
212void channel_register_filter(int, channel_infilter_fn *, 214void channel_register_filter(int, channel_infilter_fn *,
213 channel_outfilter_fn *, channel_filter_cleanup_fn *, void *); 215 channel_outfilter_fn *, channel_filter_cleanup_fn *, void *);
214void channel_register_status_confirm(int, channel_confirm_cb *, 216void channel_register_status_confirm(int, channel_confirm_cb *,