summaryrefslogtreecommitdiff
path: root/channels.h
diff options
context:
space:
mode:
Diffstat (limited to 'channels.h')
-rw-r--r--channels.h52
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
63typedef void channel_callback_fn(int, void *); 63typedef void channel_callback_fn(int, void *);
64typedef int channel_infilter_fn(struct Channel *, char *, int); 64typedef int channel_infilter_fn(struct Channel *, char *, int);
65typedef void channel_filter_cleanup_fn(int, void *);
65typedef u_char *channel_outfilter_fn(struct Channel *, u_char **, u_int *); 66typedef u_char *channel_outfilter_fn(struct Channel *, u_char **, u_int *);
66 67
68/* Channel success/failure callbacks */
69typedef void channel_confirm_cb(int, struct Channel *, void *);
70typedef void channel_confirm_abandon_cb(struct Channel *, void *);
71struct channel_confirm {
72 TAILQ_ENTRY(channel_confirm) entry;
73 channel_confirm_cb *cb;
74 channel_confirm_abandon_cb *abandon_cb;
75 void *ctx;
76};
77TAILQ_HEAD(channel_confirms, channel_confirm);
78
79/* Context for non-blocking connects */
80struct channel_connect {
81 char *host;
82 int port;
83 struct addrinfo *ai, *aitop;
84};
85
67struct Channel { 86struct 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 {
162Channel *channel_by_id(int); 188Channel *channel_by_id(int);
163Channel *channel_lookup(int); 189Channel *channel_lookup(int);
164Channel *channel_new(char *, int, int, int, int, u_int, u_int, int, char *, int); 190Channel *channel_new(char *, int, int, int, int, u_int, u_int, int, char *, int);
165void channel_set_fds(int, int, int, int, int, int, u_int); 191void channel_set_fds(int, int, int, int, int, int, int, u_int);
166void channel_free(Channel *); 192void channel_free(Channel *);
167void channel_free_all(void); 193void channel_free_all(void);
168void channel_stop_listening(void); 194void channel_stop_listening(void);
@@ -170,8 +196,11 @@ void channel_stop_listening(void);
170void channel_send_open(int); 196void channel_send_open(int);
171void channel_request_start(int, char *, int); 197void channel_request_start(int, char *, int);
172void channel_register_cleanup(int, channel_callback_fn *, int); 198void channel_register_cleanup(int, channel_callback_fn *, int);
173void channel_register_confirm(int, channel_callback_fn *, void *); 199void channel_register_open_confirm(int, channel_callback_fn *, void *);
174void channel_register_filter(int, channel_infilter_fn *, channel_outfilter_fn *); 200void channel_register_filter(int, channel_infilter_fn *,
201 channel_outfilter_fn *, channel_filter_cleanup_fn *, void *);
202void channel_register_status_confirm(int, channel_confirm_cb *,
203 channel_confirm_abandon_cb *, void *);
175void channel_cancel_cleanup(int); 204void channel_cancel_cleanup(int);
176int channel_close_fd(int *); 205int channel_close_fd(int *);
177void channel_send_window_changes(void); 206void channel_send_window_changes(void);
@@ -188,6 +217,7 @@ void channel_input_open_confirmation(int, u_int32_t, void *);
188void channel_input_open_failure(int, u_int32_t, void *); 217void channel_input_open_failure(int, u_int32_t, void *);
189void channel_input_port_open(int, u_int32_t, void *); 218void channel_input_port_open(int, u_int32_t, void *);
190void channel_input_window_adjust(int, u_int32_t, void *); 219void channel_input_window_adjust(int, u_int32_t, void *);
220void 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);
208int channel_add_adm_permitted_opens(char *, int); 238int channel_add_adm_permitted_opens(char *, int);
209void channel_clear_permitted_opens(void); 239void channel_clear_permitted_opens(void);
210void channel_clear_adm_permitted_opens(void); 240void channel_clear_adm_permitted_opens(void);
241void channel_print_adm_permitted_opens(void);
211int channel_input_port_forward_request(int, int); 242int channel_input_port_forward_request(int, int);
212int channel_connect_to(const char *, u_short); 243Channel *channel_connect_to(const char *, u_short, char *, char *);
213int channel_connect_by_listen_address(u_short); 244Channel *channel_connect_by_listen_address(u_short, char *, char *);
214int channel_request_remote_forwarding(const char *, u_short, 245int channel_request_remote_forwarding(const char *, u_short,
215 const char *, u_short); 246 const char *, u_short);
216int channel_setup_local_fwd_listener(const char *, u_short, 247int channel_setup_local_fwd_listener(const char *, u_short,
@@ -225,7 +256,7 @@ int x11_connect_display(void);
225int x11_create_display_inet(int, int, int, u_int *, int **); 256int x11_create_display_inet(int, int, int, u_int *, int **);
226void x11_input_open(int, u_int32_t, void *); 257void x11_input_open(int, u_int32_t, void *);
227void x11_request_forwarding_with_spoofing(int, const char *, const char *, 258void x11_request_forwarding_with_spoofing(int, const char *, const char *,
228 const char *); 259 const char *);
229void deny_input_open(int, u_int32_t, void *); 260void 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
242void chan_rcvd_oclose(Channel *); 273void chan_rcvd_oclose(Channel *);
274void chan_rcvd_eow(Channel *); /* SSH2-only */
243void chan_read_failed(Channel *); 275void chan_read_failed(Channel *);
244void chan_ibuf_empty(Channel *); 276void chan_ibuf_empty(Channel *);
245 277