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_MAX_TYPE 20 63 #define CHANNEL_CANCEL_PORT_STATIC -1 66 typedef struct Channel Channel;
68 typedef void channel_open_fn(
int,
int,
void *);
69 typedef void channel_callback_fn(
int,
void *);
70 typedef int channel_infilter_fn(
struct Channel *,
char *,
int);
71 typedef void channel_filter_cleanup_fn(
int,
void *);
72 typedef u_char *channel_outfilter_fn(
struct Channel *, u_char **, u_int *);
75 typedef void channel_confirm_cb(
int,
struct Channel *,
void *);
76 typedef void channel_confirm_abandon_cb(
struct Channel *,
void *);
77 struct channel_confirm {
78 TAILQ_ENTRY(channel_confirm) entry;
79 channel_confirm_cb *cb;
80 channel_confirm_abandon_cb *abandon_cb;
83 TAILQ_HEAD(channel_confirms, channel_confirm);
86 struct channel_connect {
89 struct addrinfo *ai, *aitop;
93 typedef int mux_callback_fn(
struct Channel *);
127 char *listening_addr;
132 u_int remote_maxpacket;
134 u_int local_window_max;
135 u_int local_consumed;
136 u_int local_maxpacket;
139 int single_connection;
145 channel_open_fn *open_confirm;
146 void *open_confirm_ctx;
147 channel_callback_fn *detach_user;
149 struct channel_confirms status_confirms;
152 channel_infilter_fn *input_filter;
153 channel_outfilter_fn *output_filter;
155 channel_filter_cleanup_fn *filter_cleanup;
161 struct channel_connect connect_ctx;
164 mux_callback_fn *mux_rcb;
181 int tx_bytes_skipped;
182 int rx_bytes_skipped;
188 #define CHAN_EXTENDED_IGNORE 0 189 #define CHAN_EXTENDED_READ 1 190 #define CHAN_EXTENDED_WRITE 2 193 #define CHAN_SES_PACKET_DEFAULT (32*1024) 194 #define CHAN_SES_WINDOW_DEFAULT (64*CHAN_SES_PACKET_DEFAULT) 195 #define CHAN_TCP_PACKET_DEFAULT (32*1024) 196 #define CHAN_TCP_WINDOW_DEFAULT (64*CHAN_TCP_PACKET_DEFAULT) 197 #define CHAN_X11_PACKET_DEFAULT (16*1024) 198 #define CHAN_X11_WINDOW_DEFAULT (4*CHAN_X11_PACKET_DEFAULT) 201 #define CHAN_INPUT_OPEN 0 202 #define CHAN_INPUT_WAIT_DRAIN 1 203 #define CHAN_INPUT_WAIT_OCLOSE 2 204 #define CHAN_INPUT_CLOSED 3 207 #define CHAN_OUTPUT_OPEN 0 208 #define CHAN_OUTPUT_WAIT_DRAIN 1 209 #define CHAN_OUTPUT_WAIT_IEOF 2 210 #define CHAN_OUTPUT_CLOSED 3 212 #define CHAN_CLOSE_SENT 0x01 213 #define CHAN_CLOSE_RCVD 0x02 214 #define CHAN_EOF_SENT 0x04 215 #define CHAN_EOF_RCVD 0x08 216 #define CHAN_LOCAL 0x10 218 #define CHAN_RBUF 16*1024 221 #define CHANNEL_EFD_INPUT_ACTIVE(c) \ 222 (compat20 && c->extended_usage == CHAN_EXTENDED_READ && \ 224 buffer_len(&c->extended) > 0)) 225 #define CHANNEL_EFD_OUTPUT_ACTIVE(c) \ 226 (compat20 && c->extended_usage == CHAN_EXTENDED_WRITE && \ 227 c->efd != -1 && (!(c->flags & (CHAN_EOF_RCVD|CHAN_CLOSE_RCVD)) || \ 228 buffer_len(&c->extended) > 0)) 232 Channel *channel_by_id(
int);
233 Channel *channel_lookup(
int);
234 Channel *channel_new(
char *,
int,
int,
int,
int, u_int, u_int,
int,
char *,
int);
235 void channel_set_fds(
int,
int,
int,
int,
int,
int,
int, u_int);
236 void channel_free(Channel *);
237 void channel_free_all(
void);
238 void channel_stop_listening(
void);
240 void channel_send_open(
int);
241 void channel_request_start(
int,
char *,
int);
242 void channel_register_cleanup(
int, channel_callback_fn *,
int);
243 void channel_register_open_confirm(
int, channel_open_fn *,
void *);
244 void channel_register_filter(
int, channel_infilter_fn *,
245 channel_outfilter_fn *, channel_filter_cleanup_fn *,
void *);
246 void channel_register_status_confirm(
int, channel_confirm_cb *,
247 channel_confirm_abandon_cb *,
void *);
248 void channel_cancel_cleanup(
int);
249 int channel_close_fd(
int *);
250 void channel_send_window_changes(
void);
254 int channel_input_close(
int, u_int32_t,
void *);
255 int channel_input_close_confirmation(
int, u_int32_t,
void *);
256 int channel_input_data(
int, u_int32_t,
void *);
257 int channel_input_extended_data(
int, u_int32_t,
void *);
258 int channel_input_ieof(
int, u_int32_t,
void *);
259 int channel_input_oclose(
int, u_int32_t,
void *);
260 int channel_input_open_confirmation(
int, u_int32_t,
void *);
261 int channel_input_open_failure(
int, u_int32_t,
void *);
262 int channel_input_port_open(
int, u_int32_t,
void *);
263 int channel_input_window_adjust(
int, u_int32_t,
void *);
264 int channel_input_status_confirm(
int, u_int32_t,
void *);
268 void channel_prepare_select(fd_set **, fd_set **,
int *, u_int*,
270 void channel_after_select(fd_set *, fd_set *);
271 void channel_output_poll(
void);
273 int channel_not_very_much_buffered_data(
void);
274 void channel_close_all(
void);
275 int channel_still_open(
void);
276 char *channel_open_message(
void);
277 int channel_find_open(
void);
281 struct ForwardOptions;
282 void channel_set_af(
int af);
283 void channel_permit_all_opens(
void);
284 void channel_add_permitted_opens(
char *,
int);
285 int channel_add_adm_permitted_opens(
char *,
int);
286 void channel_disable_adm_local_opens(
void);
287 void channel_update_permitted_opens(
int,
int);
288 void channel_clear_permitted_opens(
void);
289 void channel_clear_adm_permitted_opens(
void);
290 void channel_print_adm_permitted_opens(
void);
291 int channel_input_port_forward_request(
int,
struct ForwardOptions *);
292 Channel *channel_connect_to_port(
const char *, u_short,
char *,
char *);
293 Channel *channel_connect_to_path(
const char *,
char *,
char *);
294 Channel *channel_connect_stdio_fwd(
const char*, u_short,
int,
int);
295 Channel *channel_connect_by_listen_address(
const char *, u_short,
297 Channel *channel_connect_by_listen_path(
const char *,
char *,
char *);
298 int channel_request_remote_forwarding(
struct Forward *);
299 int channel_setup_local_fwd_listener(
struct Forward *,
struct ForwardOptions *);
300 int channel_request_rforward_cancel(
struct Forward *);
301 int channel_setup_remote_fwd_listener(
struct Forward *,
int *,
struct ForwardOptions *);
302 int channel_cancel_rport_listener(
struct Forward *);
303 int channel_cancel_lport_listener(
struct Forward *,
int,
struct ForwardOptions *);
304 int permitopen_port(
const char *);
308 void channel_set_x11_refuse_time(u_int);
309 int x11_connect_display(
void);
310 int x11_create_display_inet(
int,
int,
int, u_int *,
int **);
311 int x11_input_open(
int, u_int32_t,
void *);
312 void x11_request_forwarding_with_spoofing(
int,
const char *,
const char *,
314 int deny_input_open(
int, u_int32_t,
void *);
318 void auth_request_forwarding(
void);
322 int chan_is_dead(Channel *,
int);
323 void chan_mark_dead(Channel *);
327 void chan_rcvd_oclose(Channel *);
328 void chan_rcvd_eow(Channel *);
329 void chan_read_failed(Channel *);
330 void chan_ibuf_empty(Channel *);
332 void chan_rcvd_ieof(Channel *);
333 void chan_write_failed(Channel *);
334 void chan_obuf_empty(Channel *);
337 void channel_set_hpn(
int,
int);