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

Diff for /src/usr.bin/ssh/channels.h between version 1.12.2.5 and 1.13

version 1.12.2.5, 2001/03/21 18:52:40 version 1.13, 2000/05/30 17:23:37
Line 1 
Line 1 
 /*  /* RCSID("$Id$"); */
  * Author: Tatu Ylonen <ylo@cs.hut.fi>  
  * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland  
  *                    All rights reserved  
  *  
  * As far as I am concerned, the code I have written for this software  
  * can be used freely for any purpose.  Any derived versions of this  
  * software must be clearly marked as such, and if the derived work is  
  * incompatible with the protocol description in the RFC file, it must be  
  * called by a name other than "ssh" or "Secure Shell".  
  */  
 /*  
  * Copyright (c) 2000 Markus Friedl.  All rights reserved.  
  *  
  * Redistribution and use in source and binary forms, with or without  
  * modification, are permitted provided that the following conditions  
  * are met:  
  * 1. Redistributions of source code must retain the above copyright  
  *    notice, this list of conditions and the following disclaimer.  
  * 2. Redistributions in binary form must reproduce the above copyright  
  *    notice, this list of conditions and the following disclaimer in the  
  *    documentation and/or other materials provided with the distribution.  
  *  
  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR  
  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES  
  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  
  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,  
  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT  
  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,  
  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY  
  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT  
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF  
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  
  */  
 /* RCSID("$OpenBSD$"); */  
   
 #ifndef CHANNELS_H  #ifndef CHANNELS_H
 #define CHANNELS_H  #define CHANNELS_H
   
 #include "buffer.h"  
   
 /* Definitions for channel types. */  /* Definitions for channel types. */
 #define SSH_CHANNEL_FREE                0       /* This channel is free (unused). */  #define SSH_CHANNEL_FREE                0       /* This channel is free (unused). */
 #define SSH_CHANNEL_X11_LISTENER        1       /* Listening for inet X11 conn. */  #define SSH_CHANNEL_X11_LISTENER        1       /* Listening for inet X11 conn. */
Line 51 
Line 15 
 #define SSH_CHANNEL_INPUT_DRAINING      8       /* sending remaining data to conn */  #define SSH_CHANNEL_INPUT_DRAINING      8       /* sending remaining data to conn */
 #define SSH_CHANNEL_OUTPUT_DRAINING     9       /* sending remaining data to app */  #define SSH_CHANNEL_OUTPUT_DRAINING     9       /* sending remaining data to app */
 #define SSH_CHANNEL_LARVAL              10      /* larval session */  #define SSH_CHANNEL_LARVAL              10      /* larval session */
 #define SSH_CHANNEL_RPORT_LISTENER      11      /* Listening to a R-style port  */  #define SSH_CHANNEL_MAX_TYPE            11
 #define SSH_CHANNEL_CONNECTING          12  
 #define SSH_CHANNEL_MAX_TYPE            13  
   
 /*  /*
  * Data structure for channel data.  This is iniailized in channel_allocate   * Data structure for channel data.  This is iniailized in channel_allocate
  * and cleared in channel_free.   * and cleared in channel_free.
  */   */
 struct Channel;  
 typedef struct Channel Channel;  
   
 typedef void channel_callback_fn(int id, void *arg);  typedef void channel_callback_fn(int id, void *arg);
 typedef int channel_filter_fn(struct Channel *c, char *buf, int len);  
   
 struct Channel {  typedef struct Channel {
         int     type;           /* channel type/state */          int     type;           /* channel type/state */
         int     self;           /* my own channel identifier */          int     self;           /* my own channel identifier */
         int     remote_id;      /* channel identifier for remote peer */          int     remote_id;      /* channel identifier for remote peer */
Line 77 
Line 35 
         int     wfd;            /* write fd */          int     wfd;            /* write fd */
         int     efd;            /* extended fd */          int     efd;            /* extended fd */
         int     sock;           /* sock fd */          int     sock;           /* sock fd */
         int     isatty;         /* rfd is a tty */  
         Buffer  input;          /* data read from socket, to be sent over          Buffer  input;          /* data read from socket, to be sent over
                                  * encrypted connection */                                   * encrypted connection */
         Buffer  output;         /* data received over encrypted connection for          Buffer  output;         /* data received over encrypted connection for
Line 104 
Line 61 
         void    *cb_arg;          void    *cb_arg;
         int     cb_event;          int     cb_event;
         channel_callback_fn     *dettach_user;          channel_callback_fn     *dettach_user;
   }       Channel;
   
         /* filter */  
         channel_filter_fn       *input_filter;  
 };  
   
 #define CHAN_EXTENDED_IGNORE            0  #define CHAN_EXTENDED_IGNORE            0
 #define CHAN_EXTENDED_READ              1  #define CHAN_EXTENDED_READ              1
 #define CHAN_EXTENDED_WRITE             2  #define CHAN_EXTENDED_WRITE             2
   
 /* default window/packet sizes for tcp/x11-fwd-channel */  void    channel_set_fds(int id, int rfd, int wfd, int efd, int extusage);
 #define CHAN_SES_WINDOW_DEFAULT (32*1024)  
 #define CHAN_SES_PACKET_DEFAULT (CHAN_SES_WINDOW_DEFAULT/2)  
 #define CHAN_TCP_WINDOW_DEFAULT (32*1024)  
 #define CHAN_TCP_PACKET_DEFAULT (CHAN_TCP_WINDOW_DEFAULT/2)  
 #define CHAN_X11_WINDOW_DEFAULT (4*1024)  
 #define CHAN_X11_PACKET_DEFAULT (CHAN_X11_WINDOW_DEFAULT/2)  
   
   
 void    channel_open(int id);  void    channel_open(int id);
 void    channel_request(int id, char *service, int wantconfirm);  void    channel_request(int id, char *service, int wantconfirm);
 void    channel_request_start(int id, char *service, int wantconfirm);  void    channel_request_start(int id, char *service, int wantconfirm);
 void    channel_register_callback(int id, int mtype, channel_callback_fn *fn, void *arg);  void    channel_register_callback(int id, int mtype, channel_callback_fn *fn, void *arg);
 void    channel_register_cleanup(int id, channel_callback_fn *fn);  void    channel_register_cleanup(int id, channel_callback_fn *fn);
 void    channel_register_filter(int id, channel_filter_fn *fn);  
 void    channel_cancel_cleanup(int id);  void    channel_cancel_cleanup(int id);
 Channel *channel_lookup(int id);  Channel *channel_lookup(int id);
   
 int  int
 channel_new(char *ctype, int type, int rfd, int wfd, int efd,  channel_new(char *ctype, int type, int rfd, int wfd, int efd,
     int window, int maxpack, int extended_usage, char *remote_name,      int window, int maxpack, int extended_usage, char *remote_name);
     int nonblock);  
 void  
 channel_set_fds(int id, int rfd, int wfd, int efd,  
     int extusage, int nonblock);  
   
 void    deny_input_open(int type, int plen, void *ctxt);  void    channel_input_channel_request(int type, int plen);
   void    channel_input_close(int type, int plen);
   void    channel_input_close_confirmation(int type, int plen);
   void    channel_input_data(int type, int plen);
   void    channel_input_extended_data(int type, int plen);
   void    channel_input_ieof(int type, int plen);
   void    channel_input_oclose(int type, int plen);
   void    channel_input_open_confirmation(int type, int plen);
   void    channel_input_open_failure(int type, int plen);
   void    channel_input_port_open(int type, int plen);
   void    channel_input_window_adjust(int type, int plen);
   void    channel_input_open(int type, int plen);
   
 void    channel_input_channel_request(int type, int plen, void *ctxt);  
 void    channel_input_close(int type, int plen, void *ctxt);  
 void    channel_input_close_confirmation(int type, int plen, void *ctxt);  
 void    channel_input_data(int type, int plen, void *ctxt);  
 void    channel_input_extended_data(int type, int plen, void *ctxt);  
 void    channel_input_ieof(int type, int plen, void *ctxt);  
 void    channel_input_oclose(int type, int plen, void *ctxt);  
 void    channel_input_open_confirmation(int type, int plen, void *ctxt);  
 void    channel_input_open_failure(int type, int plen, void *ctxt);  
 void    channel_input_port_open(int type, int plen, void *ctxt);  
 void    channel_input_window_adjust(int type, int plen, void *ctxt);  
   
 /* Sets specific protocol options. */  /* Sets specific protocol options. */
 void    channel_set_options(int hostname_in_open);  void    channel_set_options(int hostname_in_open);
   
Line 166 
Line 106 
 /* Free the channel and close its socket. */  /* Free the channel and close its socket. */
 void    channel_free(int channel);  void    channel_free(int channel);
   
 /*  /* Add any bits relevant to channels in select bitmasks. */
  * Allocate/update select bitmasks and add any bits relevant to channels in  void    channel_prepare_select(fd_set * readset, fd_set * writeset);
  * select bitmasks.  
  */  
 void  
 channel_prepare_select(fd_set **readsetp, fd_set **writesetp, int *maxfdp);  
   
 /*  /*
  * After select, perform any appropriate operations for channels which have   * After select, perform any appropriate operations for channels which have
Line 195 
Line 131 
  */   */
 void    channel_close_all(void);  void    channel_close_all(void);
   
   /* Returns the maximum file descriptor number used by the channels. */
   int     channel_max_fd(void);
   
 /* Returns true if there is still an open channel over the connection. */  /* Returns true if there is still an open channel over the connection. */
 int     channel_still_open(void);  int     channel_still_open(void);
   
Line 207 
Line 146 
   
 /*  /*
  * Initiate forwarding of connections to local port "port" through the secure   * Initiate forwarding of connections to local port "port" through the secure
  * channel to host:port from remote side.   * channel to host:port from remote side.  This never returns if there was an
    * error.
  */   */
 int  void
 channel_request_local_forwarding(u_short listen_port,  channel_request_local_forwarding(u_short port, const char *host,
     const char *host_to_connect, u_short port_to_connect, int gateway_ports);      u_short remote_port, int gateway_ports);
 int  
 channel_request_forwarding(const char *listen_address, u_short listen_port,  
     const char *host_to_connect, u_short port_to_connect, int gateway_ports,  
     int remote_fwd);  
   
 /*  /*
  * Initiate forwarding of connections to port "port" on remote host through   * Initiate forwarding of connections to port "port" on remote host through
Line 228 
Line 164 
     u_short remote_port);      u_short remote_port);
   
 /*  /*
  * Permits opening to any host/port if permitted_opens[] is empty.  This is   * Permits opening to any host/port in SSH_MSG_PORT_OPEN.  This is usually
  * usually called by the server, because the user could connect to any port   * called by the server, because the user could connect to any port anyway,
  * anyway, and the server has no way to know but to trust the client anyway.   * and the server has no way to know but to trust the client anyway.
  */   */
 void    channel_permit_all_opens(void);  void    channel_permit_all_opens(void);
   
 /* Add host/port to list of allowed targets for port forwarding */  
 void    channel_add_permitted_opens(char *host, int port);  
   
 /* Flush list */  
 void    channel_clear_permitted_opens(void);  
   
 /*  /*
  * This is called after receiving CHANNEL_FORWARDING_REQUEST.  This initates   * This is called after receiving CHANNEL_FORWARDING_REQUEST.  This initates
  * listening for the port, and sends back a success reply (or disconnect   * listening for the port, and sends back a success reply (or disconnect
Line 265 
Line 195 
  * the remote channel number.  We should do whatever we want, and respond   * the remote channel number.  We should do whatever we want, and respond
  * with either SSH_MSG_OPEN_CONFIRMATION or SSH_MSG_OPEN_FAILURE.   * with either SSH_MSG_OPEN_CONFIRMATION or SSH_MSG_OPEN_FAILURE.
  */   */
 void    x11_input_open(int type, int plen, void *ctxt);  void    x11_input_open(int type, int plen);
   
 /*  /*
  * Requests forwarding of X11 connections.  This should be called on the   * Requests forwarding of X11 connections.  This should be called on the
Line 298 
Line 228 
 int     auth_input_request_forwarding(struct passwd * pw);  int     auth_input_request_forwarding(struct passwd * pw);
   
 /* This is called to process an SSH_SMSG_AGENT_OPEN message. */  /* This is called to process an SSH_SMSG_AGENT_OPEN message. */
 void    auth_input_open_request(int type, int plen, void *ctxt);  void    auth_input_open_request(int type, int plen);
   
 /* XXX */  /* XXX */
 int     channel_connect_to(const char *host, u_short host_port);  int     channel_connect_to(const char *host, u_short host_port);
 int     channel_connect_by_listen_adress(u_short listen_port);  
 int     x11_connect_display(void);  int     x11_connect_display(void);
   
 #endif  #endif

Legend:
Removed from v.1.12.2.5  
changed lines
  Added in v.1.13