42 #define SSH_CHANNEL_X11_LISTENER 1 43 #define SSH_CHANNEL_PORT_LISTENER 2 44 #define SSH_CHANNEL_OPENING 3 45 #define SSH_CHANNEL_OPEN 4 46 #define SSH_CHANNEL_CLOSED 5 47 #define SSH_CHANNEL_AUTH_SOCKET 6 48 #define SSH_CHANNEL_X11_OPEN 7 49 #define SSH_CHANNEL_INPUT_DRAINING 8 50 #define SSH_CHANNEL_OUTPUT_DRAINING 9 51 #define SSH_CHANNEL_LARVAL 10 52 #define SSH_CHANNEL_RPORT_LISTENER 11 53 #define SSH_CHANNEL_CONNECTING 12 54 #define SSH_CHANNEL_DYNAMIC 13 55 #define SSH_CHANNEL_ZOMBIE 14 56 #define SSH_CHANNEL_MUX_LISTENER 15 57 #define SSH_CHANNEL_MUX_CLIENT 16 58 #define SSH_CHANNEL_ABANDONED 17 59 #define SSH_CHANNEL_UNIX_LISTENER 18 60 #define SSH_CHANNEL_RUNIX_LISTENER 19 61 #define SSH_CHANNEL_MUX_PROXY 20 62 #define SSH_CHANNEL_MAX_TYPE 21 64 #define CHANNEL_CANCEL_PORT_STATIC -1 67 typedef struct Channel Channel;
69 typedef void channel_open_fn(
int,
int,
void *);
70 typedef void channel_callback_fn(
int,
void *);
71 typedef int channel_infilter_fn(
struct Channel *,
char *,
int);
72 typedef void channel_filter_cleanup_fn(
int,
void *);
73 typedef u_char *channel_outfilter_fn(
struct Channel *, u_char **, u_int *);
76 typedef void channel_confirm_cb(
int,
struct Channel *,
void *);
77 typedef void channel_confirm_abandon_cb(
struct Channel *,
void *);
78 struct channel_confirm {
79 TAILQ_ENTRY(channel_confirm) entry;
80 channel_confirm_cb *cb;
81 channel_confirm_abandon_cb *abandon_cb;
84 TAILQ_HEAD(channel_confirms, channel_confirm);
87 struct channel_connect {
90 struct addrinfo *ai, *aitop;
94 typedef int mux_callback_fn(
struct Channel *);
128 char *listening_addr;
133 u_int remote_maxpacket;
135 u_int local_window_max;
136 u_int local_consumed;
137 u_int local_maxpacket;
140 int single_connection;
146 channel_open_fn *open_confirm;
147 void *open_confirm_ctx;
148 channel_callback_fn *detach_user;
150 struct channel_confirms status_confirms;
153 channel_infilter_fn *input_filter;
154 channel_outfilter_fn *output_filter;
156 channel_filter_cleanup_fn *filter_cleanup;
162 struct channel_connect connect_ctx;
165 mux_callback_fn *mux_rcb;
168 int mux_downstream_id;
184 int tx_bytes_skipped;
185 int rx_bytes_skipped;
191 #define CHAN_EXTENDED_IGNORE 0 192 #define CHAN_EXTENDED_READ 1 193 #define CHAN_EXTENDED_WRITE 2 196 #define CHAN_SES_PACKET_DEFAULT (32*1024) 197 #define CHAN_SES_WINDOW_DEFAULT (64*CHAN_SES_PACKET_DEFAULT) 198 #define CHAN_TCP_PACKET_DEFAULT (32*1024) 199 #define CHAN_TCP_WINDOW_DEFAULT (64*CHAN_TCP_PACKET_DEFAULT) 200 #define CHAN_X11_PACKET_DEFAULT (16*1024) 201 #define CHAN_X11_WINDOW_DEFAULT (4*CHAN_X11_PACKET_DEFAULT) 204 #define CHAN_INPUT_OPEN 0 205 #define CHAN_INPUT_WAIT_DRAIN 1 206 #define CHAN_INPUT_WAIT_OCLOSE 2 207 #define CHAN_INPUT_CLOSED 3 210 #define CHAN_OUTPUT_OPEN 0 211 #define CHAN_OUTPUT_WAIT_DRAIN 1 212 #define CHAN_OUTPUT_WAIT_IEOF 2 213 #define CHAN_OUTPUT_CLOSED 3 215 #define CHAN_CLOSE_SENT 0x01 216 #define CHAN_CLOSE_RCVD 0x02 217 #define CHAN_EOF_SENT 0x04 218 #define CHAN_EOF_RCVD 0x08 219 #define CHAN_LOCAL 0x10 221 #define CHAN_RBUF 16*1024 224 #define CHANNEL_EFD_INPUT_ACTIVE(c) \ 225 (compat20 && c->extended_usage == CHAN_EXTENDED_READ && \ 227 buffer_len(&c->extended) > 0)) 228 #define CHANNEL_EFD_OUTPUT_ACTIVE(c) \ 229 (compat20 && c->extended_usage == CHAN_EXTENDED_WRITE && \ 230 c->efd != -1 && (!(c->flags & (CHAN_EOF_RCVD|CHAN_CLOSE_RCVD)) || \ 231 buffer_len(&c->extended) > 0)) 235 Channel *channel_by_id(
int);
236 Channel *channel_by_remote_id(
int);
237 Channel *channel_lookup(
int);
238 Channel *channel_new(
char *,
int,
int,
int,
int, u_int, u_int,
int,
char *,
int);
239 void channel_set_fds(
int,
int,
int,
int,
int,
int,
int, u_int);
240 void channel_free(Channel *);
241 void channel_free_all(
void);
242 void channel_stop_listening(
void);
244 void channel_send_open(
int);
245 void channel_request_start(
int,
char *,
int);
246 void channel_register_cleanup(
int, channel_callback_fn *,
int);
247 void channel_register_open_confirm(
int, channel_open_fn *,
void *);
248 void channel_register_filter(
int, channel_infilter_fn *,
249 channel_outfilter_fn *, channel_filter_cleanup_fn *,
void *);
250 void channel_register_status_confirm(
int, channel_confirm_cb *,
251 channel_confirm_abandon_cb *,
void *);
252 void channel_cancel_cleanup(
int);
253 int channel_close_fd(
int *);
254 void channel_send_window_changes(
void);
258 int channel_proxy_downstream(Channel *mc);
259 int channel_proxy_upstream(Channel *,
int, u_int32_t,
void *);
263 int channel_input_close(
int, u_int32_t,
void *);
264 int channel_input_close_confirmation(
int, u_int32_t,
void *);
265 int channel_input_data(
int, u_int32_t,
void *);
266 int channel_input_extended_data(
int, u_int32_t,
void *);
267 int channel_input_ieof(
int, u_int32_t,
void *);
268 int channel_input_oclose(
int, u_int32_t,
void *);
269 int channel_input_open_confirmation(
int, u_int32_t,
void *);
270 int channel_input_open_failure(
int, u_int32_t,
void *);
271 int channel_input_port_open(
int, u_int32_t,
void *);
272 int channel_input_window_adjust(
int, u_int32_t,
void *);
273 int channel_input_status_confirm(
int, u_int32_t,
void *);
277 void channel_prepare_select(fd_set **, fd_set **,
int *, u_int*,
279 void channel_after_select(fd_set *, fd_set *);
280 void channel_output_poll(
void);
282 int channel_not_very_much_buffered_data(
void);
283 void channel_close_all(
void);
284 int channel_still_open(
void);
285 char *channel_open_message(
void);
286 int channel_find_open(
void);
290 struct ForwardOptions;
291 void channel_set_af(
int af);
292 void channel_permit_all_opens(
void);
293 void channel_add_permitted_opens(
char *,
int);
294 int channel_add_adm_permitted_opens(
char *,
int);
295 void channel_disable_adm_local_opens(
void);
296 void channel_update_permitted_opens(
int,
int);
297 void channel_clear_permitted_opens(
void);
298 void channel_clear_adm_permitted_opens(
void);
299 void channel_print_adm_permitted_opens(
void);
300 Channel *channel_connect_to_port(
const char *, u_short,
char *,
char *,
int *,
302 Channel *channel_connect_to_path(
const char *,
char *,
char *);
303 Channel *channel_connect_stdio_fwd(
const char*, u_short,
int,
int);
304 Channel *channel_connect_by_listen_address(
const char *, u_short,
306 Channel *channel_connect_by_listen_path(
const char *,
char *,
char *);
307 int channel_request_remote_forwarding(
struct Forward *);
308 int channel_setup_local_fwd_listener(
struct Forward *,
struct ForwardOptions *);
309 int channel_request_rforward_cancel(
struct Forward *);
310 int channel_setup_remote_fwd_listener(
struct Forward *,
int *,
struct ForwardOptions *);
311 int channel_cancel_rport_listener(
struct Forward *);
312 int channel_cancel_lport_listener(
struct Forward *,
int,
struct ForwardOptions *);
313 int permitopen_port(
const char *);
317 void channel_set_x11_refuse_time(u_int);
318 int x11_connect_display(
void);
319 int x11_create_display_inet(
int,
int,
int, u_int *,
int **);
320 int x11_input_open(
int, u_int32_t,
void *);
321 void x11_request_forwarding_with_spoofing(
int,
const char *,
const char *,
323 int deny_input_open(
int, u_int32_t,
void *);
327 void auth_request_forwarding(
void);
331 int chan_is_dead(Channel *,
int);
332 void chan_mark_dead(Channel *);
336 void chan_rcvd_oclose(Channel *);
337 void chan_rcvd_eow(Channel *);
338 void chan_read_failed(Channel *);
339 void chan_ibuf_empty(Channel *);
341 void chan_rcvd_ieof(Channel *);
342 void chan_write_failed(Channel *);
343 void chan_obuf_empty(Channel *);
346 void channel_set_hpn(
int,
int);