summaryrefslogtreecommitdiffhomepage
path: root/channel.h
diff options
context:
space:
mode:
authorMatt Johnston <matt@ucc.asn.au>2004-09-12 04:56:50 +0000
committerMatt Johnston <matt@ucc.asn.au>2004-09-12 04:56:50 +0000
commitc23ffe4bc1bb26f9c3773d55715910a901f3a614 (patch)
tree8cb0fb70372099de4317c27c3cf6f5ad3c9584a0 /channel.h
parent3238bed9c9467a4c77bb6b430cd8f9fc394315c2 (diff)
parent7ed5870ed9e2be7cde050eafcdd778d6fce8540c (diff)
propagate of 717950f4061f1123659ee87c7c168805af920ab7 and 839f98f136788cc1466e4641bf796f96040a085d from branch 'matt.dbclient.authpam' to 'matt.dbclient.rez'
--HG-- branch : private-rez extra : convert_revision : d58a4ff37f9784978a07df6a944f7dbae8196f6d
Diffstat (limited to 'channel.h')
-rw-r--r--channel.h35
1 files changed, 24 insertions, 11 deletions
diff --git a/channel.h b/channel.h
index e1bdae2..8a494c7 100644
--- a/channel.h
+++ b/channel.h
@@ -27,6 +27,7 @@
#include "includes.h"
#include "buffer.h"
+#include "circbuffer.h"
/* channel->type values */
#define CHANNEL_ID_NONE 0
@@ -41,14 +42,18 @@
#define SSH_OPEN_UNKNOWN_CHANNEL_TYPE 3
#define SSH_OPEN_RESOURCE_SHORTAGE 4
-#define MAX_CHANNELS 60 /* simple mem restriction, includes each tcp/x11
+/* Not a real type */
+#define SSH_OPEN_IN_PROGRESS 99
+
+#define MAX_CHANNELS 100 /* simple mem restriction, includes each tcp/x11
connection, so can't be _too_ small */
#define CHAN_EXTEND_SIZE 3 /* how many extra slots to add when we need more */
-#define RECV_MAXWINDOW 6000 /* tweak */
-#define RECV_MAXPACKET 1400 /* tweak */
-#define RECV_MINWINDOW 19000 /* when we get below this, we send a windowadjust */
+#define RECV_MAXWINDOW 4000 /* tweak */
+#define RECV_WINDOWEXTEND 500 /* We send a "window extend" every
+ RECV_WINDOWEXTEND bytes */
+#define RECV_MAXPACKET RECV_MAXWINDOW /* tweak */
struct ChanType;
@@ -57,15 +62,16 @@ struct Channel {
unsigned int index; /* the local channel index */
unsigned int remotechan;
unsigned int recvwindow, transwindow;
+ unsigned int recvdonelen;
unsigned int recvmaxpacket, transmaxpacket;
void* typedata; /* a pointer to type specific data */
- int infd; /* stdin for the program, we write to this */
- int outfd; /* stdout for the program, we read from this */
- int errfd; /* stdout for a program. This doesn't really fit here,
- but makes the code a lot tidyer without being too bad. This
- is -1 for channels which don't requre it. Currently only
- a 'session' without a pty will use it */
- buffer *writebuf; /* data for the program */
+ int infd; /* data to send over the wire */
+ int outfd; /* data for consumption, what was in writebuf */
+ int errfd; /* used like infd or errfd, depending if it's client or server.
+ Doesn't exactly belong here, but is cleaner here */
+ circbuffer *writebuf; /* data from the wire, for local consumption */
+ circbuffer *extrabuf; /* extended-data for the program - used like writebuf
+ but for stderr */
int sentclosed, recvclosed;
@@ -94,6 +100,7 @@ void chaninitialise();
void chancleanup();
void setchannelfds(fd_set *readfd, fd_set *writefd);
void channelio(fd_set *readfd, fd_set *writefd);
+struct Channel* getchannel(unsigned int chan);
struct Channel* newchannel(unsigned int remotechan,
const struct ChanType *type,
unsigned int transwindow, unsigned int transmaxpacket);
@@ -103,10 +110,16 @@ void recv_msg_channel_request();
void send_msg_channel_failure(struct Channel *channel);
void send_msg_channel_success(struct Channel *channel);
void recv_msg_channel_data();
+void recv_msg_channel_extended_data();
void recv_msg_channel_window_adjust();
void recv_msg_channel_close();
void recv_msg_channel_eof();
+void common_recv_msg_channel_data(struct Channel *channel, int fd,
+ circbuffer * buf);
+
+const struct ChanType clichansess;
+
#ifdef USING_LISTENERS
int send_msg_channel_open_init(int fd, const struct ChanType *type);
void recv_msg_channel_open_confirmation();