diff options
author | Colin Watson <cjwatson@debian.org> | 2009-12-29 21:42:53 +0000 |
---|---|---|
committer | Colin Watson <cjwatson@debian.org> | 2009-12-29 21:42:53 +0000 |
commit | 87552344215a38d3a2b0d4d63dc151e05978bbe1 (patch) | |
tree | 9f4b96055e6ccaa915e8d59d9f2805e9e119371d /channels.h | |
parent | a25ec0b132c44c9e341e08464ff830de06b81126 (diff) | |
parent | ef94e5613d37bcbf880f21ee6094e4b1c7683a4c (diff) |
import openssh-5.1p1-gsskex-cjwatson-20080722.patch
Diffstat (limited to 'channels.h')
-rw-r--r-- | channels.h | 52 |
1 files changed, 42 insertions, 10 deletions
diff --git a/channels.h b/channels.h index b632a86af..108b36068 100644 --- a/channels.h +++ b/channels.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: channels.h,v 1.89 2007/06/11 09:14:00 markus Exp $ */ | 1 | /* $OpenBSD: channels.h,v 1.96 2008/06/15 20:06:26 djm Exp $ */ |
2 | 2 | ||
3 | /* | 3 | /* |
4 | * Author: Tatu Ylonen <ylo@cs.hut.fi> | 4 | * Author: Tatu Ylonen <ylo@cs.hut.fi> |
@@ -62,8 +62,27 @@ typedef struct Channel Channel; | |||
62 | 62 | ||
63 | typedef void channel_callback_fn(int, void *); | 63 | typedef void channel_callback_fn(int, void *); |
64 | typedef int channel_infilter_fn(struct Channel *, char *, int); | 64 | typedef int channel_infilter_fn(struct Channel *, char *, int); |
65 | typedef void channel_filter_cleanup_fn(int, void *); | ||
65 | typedef u_char *channel_outfilter_fn(struct Channel *, u_char **, u_int *); | 66 | typedef u_char *channel_outfilter_fn(struct Channel *, u_char **, u_int *); |
66 | 67 | ||
68 | /* Channel success/failure callbacks */ | ||
69 | typedef void channel_confirm_cb(int, struct Channel *, void *); | ||
70 | typedef void channel_confirm_abandon_cb(struct Channel *, void *); | ||
71 | struct channel_confirm { | ||
72 | TAILQ_ENTRY(channel_confirm) entry; | ||
73 | channel_confirm_cb *cb; | ||
74 | channel_confirm_abandon_cb *abandon_cb; | ||
75 | void *ctx; | ||
76 | }; | ||
77 | TAILQ_HEAD(channel_confirms, channel_confirm); | ||
78 | |||
79 | /* Context for non-blocking connects */ | ||
80 | struct channel_connect { | ||
81 | char *host; | ||
82 | int port; | ||
83 | struct addrinfo *ai, *aitop; | ||
84 | }; | ||
85 | |||
67 | struct Channel { | 86 | struct Channel { |
68 | int type; /* channel type/state */ | 87 | int type; /* channel type/state */ |
69 | int self; /* my own channel identifier */ | 88 | int self; /* my own channel identifier */ |
@@ -104,16 +123,23 @@ struct Channel { | |||
104 | char *ctype; /* type */ | 123 | char *ctype; /* type */ |
105 | 124 | ||
106 | /* callback */ | 125 | /* callback */ |
107 | channel_callback_fn *confirm; | 126 | channel_callback_fn *open_confirm; |
108 | void *confirm_ctx; | 127 | void *open_confirm_ctx; |
109 | channel_callback_fn *detach_user; | 128 | channel_callback_fn *detach_user; |
110 | int detach_close; | 129 | int detach_close; |
130 | struct channel_confirms status_confirms; | ||
111 | 131 | ||
112 | /* filter */ | 132 | /* filter */ |
113 | channel_infilter_fn *input_filter; | 133 | channel_infilter_fn *input_filter; |
114 | channel_outfilter_fn *output_filter; | 134 | channel_outfilter_fn *output_filter; |
135 | void *filter_ctx; | ||
136 | channel_filter_cleanup_fn *filter_cleanup; | ||
137 | |||
138 | /* keep boundaries */ | ||
139 | int datagram; | ||
115 | 140 | ||
116 | int datagram; /* keep boundaries */ | 141 | /* non-blocking connect */ |
142 | struct channel_connect connect_ctx; | ||
117 | }; | 143 | }; |
118 | 144 | ||
119 | #define CHAN_EXTENDED_IGNORE 0 | 145 | #define CHAN_EXTENDED_IGNORE 0 |
@@ -162,7 +188,7 @@ struct Channel { | |||
162 | Channel *channel_by_id(int); | 188 | Channel *channel_by_id(int); |
163 | Channel *channel_lookup(int); | 189 | Channel *channel_lookup(int); |
164 | Channel *channel_new(char *, int, int, int, int, u_int, u_int, int, char *, int); | 190 | Channel *channel_new(char *, int, int, int, int, u_int, u_int, int, char *, int); |
165 | void channel_set_fds(int, int, int, int, int, int, u_int); | 191 | void channel_set_fds(int, int, int, int, int, int, int, u_int); |
166 | void channel_free(Channel *); | 192 | void channel_free(Channel *); |
167 | void channel_free_all(void); | 193 | void channel_free_all(void); |
168 | void channel_stop_listening(void); | 194 | void channel_stop_listening(void); |
@@ -170,8 +196,11 @@ void channel_stop_listening(void); | |||
170 | void channel_send_open(int); | 196 | void channel_send_open(int); |
171 | void channel_request_start(int, char *, int); | 197 | void channel_request_start(int, char *, int); |
172 | void channel_register_cleanup(int, channel_callback_fn *, int); | 198 | void channel_register_cleanup(int, channel_callback_fn *, int); |
173 | void channel_register_confirm(int, channel_callback_fn *, void *); | 199 | void channel_register_open_confirm(int, channel_callback_fn *, void *); |
174 | void channel_register_filter(int, channel_infilter_fn *, channel_outfilter_fn *); | 200 | void channel_register_filter(int, channel_infilter_fn *, |
201 | channel_outfilter_fn *, channel_filter_cleanup_fn *, void *); | ||
202 | void channel_register_status_confirm(int, channel_confirm_cb *, | ||
203 | channel_confirm_abandon_cb *, void *); | ||
175 | void channel_cancel_cleanup(int); | 204 | void channel_cancel_cleanup(int); |
176 | int channel_close_fd(int *); | 205 | int channel_close_fd(int *); |
177 | void channel_send_window_changes(void); | 206 | void channel_send_window_changes(void); |
@@ -188,6 +217,7 @@ void channel_input_open_confirmation(int, u_int32_t, void *); | |||
188 | void channel_input_open_failure(int, u_int32_t, void *); | 217 | void channel_input_open_failure(int, u_int32_t, void *); |
189 | void channel_input_port_open(int, u_int32_t, void *); | 218 | void channel_input_port_open(int, u_int32_t, void *); |
190 | void channel_input_window_adjust(int, u_int32_t, void *); | 219 | void channel_input_window_adjust(int, u_int32_t, void *); |
220 | void channel_input_status_confirm(int, u_int32_t, void *); | ||
191 | 221 | ||
192 | /* file descriptor handling (read/write) */ | 222 | /* file descriptor handling (read/write) */ |
193 | 223 | ||
@@ -208,9 +238,10 @@ void channel_add_permitted_opens(char *, int); | |||
208 | int channel_add_adm_permitted_opens(char *, int); | 238 | int channel_add_adm_permitted_opens(char *, int); |
209 | void channel_clear_permitted_opens(void); | 239 | void channel_clear_permitted_opens(void); |
210 | void channel_clear_adm_permitted_opens(void); | 240 | void channel_clear_adm_permitted_opens(void); |
241 | void channel_print_adm_permitted_opens(void); | ||
211 | int channel_input_port_forward_request(int, int); | 242 | int channel_input_port_forward_request(int, int); |
212 | int channel_connect_to(const char *, u_short); | 243 | Channel *channel_connect_to(const char *, u_short, char *, char *); |
213 | int channel_connect_by_listen_address(u_short); | 244 | Channel *channel_connect_by_listen_address(u_short, char *, char *); |
214 | int channel_request_remote_forwarding(const char *, u_short, | 245 | int channel_request_remote_forwarding(const char *, u_short, |
215 | const char *, u_short); | 246 | const char *, u_short); |
216 | int channel_setup_local_fwd_listener(const char *, u_short, | 247 | int channel_setup_local_fwd_listener(const char *, u_short, |
@@ -225,7 +256,7 @@ int x11_connect_display(void); | |||
225 | int x11_create_display_inet(int, int, int, u_int *, int **); | 256 | int x11_create_display_inet(int, int, int, u_int *, int **); |
226 | void x11_input_open(int, u_int32_t, void *); | 257 | void x11_input_open(int, u_int32_t, void *); |
227 | void x11_request_forwarding_with_spoofing(int, const char *, const char *, | 258 | void x11_request_forwarding_with_spoofing(int, const char *, const char *, |
228 | const char *); | 259 | const char *); |
229 | void deny_input_open(int, u_int32_t, void *); | 260 | void deny_input_open(int, u_int32_t, void *); |
230 | 261 | ||
231 | /* agent forwarding */ | 262 | /* agent forwarding */ |
@@ -240,6 +271,7 @@ void chan_mark_dead(Channel *); | |||
240 | /* channel events */ | 271 | /* channel events */ |
241 | 272 | ||
242 | void chan_rcvd_oclose(Channel *); | 273 | void chan_rcvd_oclose(Channel *); |
274 | void chan_rcvd_eow(Channel *); /* SSH2-only */ | ||
243 | void chan_read_failed(Channel *); | 275 | void chan_read_failed(Channel *); |
244 | void chan_ibuf_empty(Channel *); | 276 | void chan_ibuf_empty(Channel *); |
245 | 277 | ||