[BACK]Return to channels.h CVS log [TXT][DIR] Up to [local] / src / usr.bin / ssh

Annotation of src/usr.bin/ssh/channels.h, Revision 1.16

1.16    ! markus      1: /* RCSID("$OpenBSD: channels.h,v 1.15 2000/08/19 18:48:11 markus Exp $"); */
1.2       markus      2:
1.1       markus      3: #ifndef CHANNELS_H
                      4: #define CHANNELS_H
                      5:
                      6: /* Definitions for channel types. */
1.6       markus      7: #define SSH_CHANNEL_FREE               0       /* This channel is free (unused). */
                      8: #define SSH_CHANNEL_X11_LISTENER       1       /* Listening for inet X11 conn. */
1.5       deraadt     9: #define SSH_CHANNEL_PORT_LISTENER      2       /* Listening on a port. */
                     10: #define SSH_CHANNEL_OPENING            3       /* waiting for confirmation */
                     11: #define SSH_CHANNEL_OPEN               4       /* normal open two-way channel */
1.6       markus     12: #define SSH_CHANNEL_CLOSED             5       /* waiting for close confirmation */
1.7       markus     13: #define SSH_CHANNEL_AUTH_SOCKET                6       /* authentication socket */
                     14: #define SSH_CHANNEL_X11_OPEN           7       /* reading first X11 packet */
                     15: #define SSH_CHANNEL_INPUT_DRAINING     8       /* sending remaining data to conn */
                     16: #define SSH_CHANNEL_OUTPUT_DRAINING    9       /* sending remaining data to app */
                     17: #define SSH_CHANNEL_LARVAL             10      /* larval session */
                     18: #define SSH_CHANNEL_MAX_TYPE           11
1.1       markus     19:
1.6       markus     20: /*
                     21:  * Data structure for channel data.  This is iniailized in channel_allocate
                     22:  * and cleared in channel_free.
                     23:  */
1.16    ! markus     24: struct Channel;
        !            25: typedef struct Channel Channel;
        !            26:
1.7       markus     27: typedef void channel_callback_fn(int id, void *arg);
1.16    ! markus     28: typedef int channel_filter_fn(struct Channel *c, char *buf, int len);
1.1       markus     29:
1.16    ! markus     30: struct Channel {
1.5       deraadt    31:        int     type;           /* channel type/state */
                     32:        int     self;           /* my own channel identifier */
                     33:        int     remote_id;      /* channel identifier for remote peer */
                     34:        /* peer can be reached over encrypted connection, via packet-sent */
                     35:        int     istate;         /* input from channel (state of receive half) */
                     36:        int     ostate;         /* output to channel  (state of transmit half) */
1.8       markus     37:        int     flags;          /* close sent/rcvd */
1.7       markus     38:        int     rfd;            /* read fd */
                     39:        int     wfd;            /* write fd */
                     40:        int     efd;            /* extended fd */
                     41:        int     sock;           /* sock fd */
1.5       deraadt    42:        Buffer  input;          /* data read from socket, to be sent over
                     43:                                 * encrypted connection */
                     44:        Buffer  output;         /* data received over encrypted connection for
                     45:                                 * send on socket */
1.7       markus     46:        Buffer  extended;
1.5       deraadt    47:        char    path[200];      /* path for unix domain sockets, or host name
                     48:                                 * for forwards */
                     49:        int     listening_port; /* port being listened for forwards */
                     50:        int     host_port;      /* remote port to connect for forwards */
                     51:        char   *remote_name;    /* remote hostname */
1.7       markus     52:
                     53:        int     remote_window;
                     54:        int     remote_maxpacket;
                     55:        int     local_window;
                     56:        int     local_window_max;
                     57:        int     local_consumed;
                     58:        int     local_maxpacket;
                     59:        int     extended_usage;
                     60:
                     61:        char   *ctype;          /* type */
                     62:
1.11      markus     63:        /* callback */
1.7       markus     64:        channel_callback_fn     *cb_fn;
                     65:        void    *cb_arg;
                     66:        int     cb_event;
                     67:        channel_callback_fn     *dettach_user;
1.15      markus     68:
                     69:        /* filter */
                     70:        channel_filter_fn       *input_filter;
1.16    ! markus     71: };
1.7       markus     72:
                     73: #define CHAN_EXTENDED_IGNORE           0
                     74: #define CHAN_EXTENDED_READ             1
                     75: #define CHAN_EXTENDED_WRITE            2
                     76:
1.8       markus     77: void   channel_set_fds(int id, int rfd, int wfd, int efd, int extusage);
1.7       markus     78: void   channel_open(int id);
1.8       markus     79: void   channel_request(int id, char *service, int wantconfirm);
                     80: void   channel_request_start(int id, char *service, int wantconfirm);
                     81: void   channel_register_callback(int id, int mtype, channel_callback_fn *fn, void *arg);
                     82: void   channel_register_cleanup(int id, channel_callback_fn *fn);
1.15      markus     83: void   channel_register_filter(int id, channel_filter_fn *fn);
1.8       markus     84: void   channel_cancel_cleanup(int id);
1.7       markus     85: Channel        *channel_lookup(int id);
                     86:
                     87: int
                     88: channel_new(char *ctype, int type, int rfd, int wfd, int efd,
                     89:     int window, int maxpack, int extended_usage, char *remote_name);
                     90:
1.8       markus     91: void   channel_input_channel_request(int type, int plen);
1.7       markus     92: void   channel_input_close(int type, int plen);
                     93: void   channel_input_close_confirmation(int type, int plen);
                     94: void   channel_input_data(int type, int plen);
1.8       markus     95: void   channel_input_extended_data(int type, int plen);
1.7       markus     96: void   channel_input_ieof(int type, int plen);
                     97: void   channel_input_oclose(int type, int plen);
                     98: void   channel_input_open_confirmation(int type, int plen);
                     99: void   channel_input_open_failure(int type, int plen);
                    100: void   channel_input_port_open(int type, int plen);
1.8       markus    101: void   channel_input_window_adjust(int type, int plen);
1.7       markus    102: void   channel_input_open(int type, int plen);
                    103:
                    104: /* Sets specific protocol options. */
                    105: void    channel_set_options(int hostname_in_open);
                    106:
                    107: /*
                    108:  * Allocate a new channel object and set its type and socket.  Remote_name
                    109:  * must have been allocated with xmalloc; this will free it when the channel
                    110:  * is freed.
                    111:  */
                    112: int     channel_allocate(int type, int sock, char *remote_name);
                    113:
                    114: /* Free the channel and close its socket. */
                    115: void    channel_free(int channel);
                    116:
                    117: /* Add any bits relevant to channels in select bitmasks. */
                    118: void    channel_prepare_select(fd_set * readset, fd_set * writeset);
                    119:
                    120: /*
                    121:  * After select, perform any appropriate operations for channels which have
                    122:  * events pending.
                    123:  */
                    124: void    channel_after_select(fd_set * readset, fd_set * writeset);
                    125:
                    126: /* If there is data to send to the connection, send some of it now. */
                    127: void    channel_output_poll(void);
                    128:
                    129: /* Returns true if no channel has too much buffered data. */
                    130: int     channel_not_very_much_buffered_data(void);
                    131:
                    132: /* This closes any sockets that are listening for connections; this removes
                    133:    any unix domain sockets. */
                    134: void    channel_stop_listening(void);
                    135:
                    136: /*
                    137:  * Closes the sockets of all channels.  This is used to close extra file
                    138:  * descriptors after a fork.
                    139:  */
                    140: void    channel_close_all(void);
                    141:
                    142: /* Returns the maximum file descriptor number used by the channels. */
                    143: int     channel_max_fd(void);
                    144:
                    145: /* Returns true if there is still an open channel over the connection. */
                    146: int     channel_still_open(void);
                    147:
                    148: /*
                    149:  * Returns a string containing a list of all open channels.  The list is
                    150:  * suitable for displaying to the user.  It uses crlf instead of newlines.
                    151:  * The caller should free the string with xfree.
                    152:  */
                    153: char   *channel_open_message(void);
                    154:
                    155: /*
                    156:  * Initiate forwarding of connections to local port "port" through the secure
                    157:  * channel to host:port from remote side.  This never returns if there was an
                    158:  * error.
                    159:  */
1.9       markus    160: void
1.7       markus    161: channel_request_local_forwarding(u_short port, const char *host,
                    162:     u_short remote_port, int gateway_ports);
                    163:
                    164: /*
                    165:  * Initiate forwarding of connections to port "port" on remote host through
                    166:  * the secure channel to host:port from local side.  This never returns if
                    167:  * there was an error.  This registers that open requests for that port are
                    168:  * permitted.
                    169:  */
1.9       markus    170: void
1.7       markus    171: channel_request_remote_forwarding(u_short port, const char *host,
                    172:     u_short remote_port);
                    173:
                    174: /*
                    175:  * Permits opening to any host/port in SSH_MSG_PORT_OPEN.  This is usually
                    176:  * called by the server, because the user could connect to any port anyway,
                    177:  * and the server has no way to know but to trust the client anyway.
                    178:  */
                    179: void    channel_permit_all_opens(void);
                    180:
                    181: /*
                    182:  * This is called after receiving CHANNEL_FORWARDING_REQUEST.  This initates
                    183:  * listening for the port, and sends back a success reply (or disconnect
                    184:  * message if there was an error).  This never returns if there was an error.
                    185:  */
1.12      markus    186: void    channel_input_port_forward_request(int is_root, int gateway_ports);
1.7       markus    187:
                    188: /*
                    189:  * Creates a port for X11 connections, and starts listening for it. Returns
                    190:  * the display name, or NULL if an error was encountered.
                    191:  */
                    192: char   *x11_create_display(int screen);
                    193:
                    194: /*
                    195:  * Creates an internet domain socket for listening for X11 connections.
                    196:  * Returns a suitable value for the DISPLAY variable, or NULL if an error
                    197:  * occurs.
                    198:  */
                    199: char   *x11_create_display_inet(int screen, int x11_display_offset);
                    200:
                    201: /*
                    202:  * This is called when SSH_SMSG_X11_OPEN is received.  The packet contains
                    203:  * the remote channel number.  We should do whatever we want, and respond
                    204:  * with either SSH_MSG_OPEN_CONFIRMATION or SSH_MSG_OPEN_FAILURE.
                    205:  */
                    206: void    x11_input_open(int type, int plen);
                    207:
                    208: /*
                    209:  * Requests forwarding of X11 connections.  This should be called on the
                    210:  * client only.
                    211:  */
                    212: void    x11_request_forwarding(void);
                    213:
                    214: /*
                    215:  * Requests forwarding for X11 connections, with authentication spoofing.
                    216:  * This should be called in the client only.
                    217:  */
1.10      markus    218: void
                    219: x11_request_forwarding_with_spoofing(int client_session_id,
                    220:     const char *proto, const char *data);
1.7       markus    221:
                    222: /* Sends a message to the server to request authentication fd forwarding. */
                    223: void    auth_request_forwarding(void);
                    224:
                    225: /*
                    226:  * Returns the name of the forwarded authentication socket.  Returns NULL if
                    227:  * there is no forwarded authentication socket.  The returned value points to
                    228:  * a static buffer.
                    229:  */
                    230: char   *auth_get_socket_name(void);
                    231:
                    232: /*
1.13      markus    233:  * This is called to process SSH_CMSG_AGENT_REQUEST_FORWARDING on the server.
1.7       markus    234:  * This starts forwarding authentication requests.
                    235:  */
1.13      markus    236: int     auth_input_request_forwarding(struct passwd * pw);
1.7       markus    237:
                    238: /* This is called to process an SSH_SMSG_AGENT_OPEN message. */
                    239: void    auth_input_open_request(int type, int plen);
1.8       markus    240:
                    241: /* XXX */
                    242: int    channel_connect_to(const char *host, u_short host_port);
1.10      markus    243: int    x11_connect_display(void);
1.7       markus    244:
1.1       markus    245: #endif