- reyk@cvs.openbsd.org 2005/12/30 15:56:37
     [channels.c channels.h clientloop.c]
     add channel output filter interface.
     ok djm@, suggested by markus@
diff --git a/channels.h b/channels.h
index 7990fe1..a97dd90 100644
--- a/channels.h
+++ b/channels.h
@@ -1,4 +1,4 @@
-/*	$OpenBSD: channels.h,v 1.82 2005/12/12 13:46:18 markus Exp $	*/
+/*	$OpenBSD: channels.h,v 1.83 2005/12/30 15:56:37 reyk Exp $	*/
 
 /*
  * Author: Tatu Ylonen <ylo@cs.hut.fi>
@@ -63,7 +63,8 @@
 typedef struct Channel Channel;
 
 typedef void channel_callback_fn(int, void *);
-typedef int channel_filter_fn(struct Channel *, char *, int);
+typedef int channel_infilter_fn(struct Channel *, char *, int);
+typedef u_char *channel_outfilter_fn(struct Channel *, u_char **, u_int *);
 
 struct Channel {
 	int     type;		/* channel type/state */
@@ -111,7 +112,8 @@
 	int			detach_close;
 
 	/* filter */
-	channel_filter_fn	*input_filter;
+	channel_infilter_fn	*input_filter;
+	channel_outfilter_fn	*output_filter;
 
 	int     datagram;	/* keep boundaries */
 };
@@ -145,6 +147,8 @@
 #define CHAN_EOF_SENT			0x04
 #define CHAN_EOF_RCVD			0x08
 
+#define CHAN_RBUF	16*1024
+
 /* check whether 'efd' is still in use */
 #define CHANNEL_EFD_INPUT_ACTIVE(c) \
 	(compat20 && c->extended_usage == CHAN_EXTENDED_READ && \
@@ -169,7 +173,7 @@
 void	 channel_request_start(int, char *, int);
 void	 channel_register_cleanup(int, channel_callback_fn *, int);
 void	 channel_register_confirm(int, channel_callback_fn *, void *);
-void	 channel_register_filter(int, channel_filter_fn *);
+void	 channel_register_filter(int, channel_infilter_fn *, channel_outfilter_fn *);
 void	 channel_cancel_cleanup(int);
 int	 channel_close_fd(int *);
 void	 channel_send_window_changes(void);