]> andersk Git - openssh.git/commitdiff
- markus@cvs.openbsd.org 2002/01/13 21:31:20
authordjm <djm>
Tue, 22 Jan 2002 12:27:11 +0000 (12:27 +0000)
committerdjm <djm>
Tue, 22 Jan 2002 12:27:11 +0000 (12:27 +0000)
     [channels.h nchan.c]
     add chan_set_[io]state(), order states, state is now an u_int,
     simplifies debugging messages; ok provos@

ChangeLog
channels.h
nchan.c

index 7b6950e1e7837622dc40e8b40cccdb5c87b40735..8e2eff12fcdc9c84bc00f0d2c52c7009685b33ff 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
      [auth2.c auth2-chall.c compat.c sshconnect2.c sshd.c]
      use buffer API and avoid static strings of fixed size; 
      ok provos@/mouring@
+   - markus@cvs.openbsd.org 2002/01/13 21:31:20
+     [channels.h nchan.c]
+     add chan_set_[io]state(), order states, state is now an u_int,
+     simplifies debugging messages; ok provos@
 
 
 20020121
index 40142c509728794a1d2d8305535a8a1d88438b19..a857db11edec53e15116439d8e261ee69b720680 100644 (file)
@@ -32,7 +32,7 @@
  * (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: channels.h,v 1.56 2001/12/28 15:06:00 markus Exp $"); */
+/* RCSID("$OpenBSD: channels.h,v 1.57 2002/01/13 21:31:20 markus Exp $"); */
 
 #ifndef CHANNEL_H
 #define CHANNEL_H
@@ -68,8 +68,8 @@ struct Channel {
        int     type;           /* channel type/state */
        int     self;           /* my own channel identifier */
        int     remote_id;      /* channel identifier for remote peer */
-       int     istate;         /* input from channel (state of receive half) */
-       int     ostate;         /* output to channel  (state of transmit half) */
+       u_int   istate;         /* input from channel (state of receive half) */
+       u_int   ostate;         /* output to channel  (state of transmit half) */
        int     flags;          /* close sent/rcvd */
        int     rfd;            /* read fd */
        int     wfd;            /* write fd */
@@ -123,16 +123,16 @@ struct Channel {
 #define CHAN_X11_PACKET_DEFAULT        (CHAN_X11_WINDOW_DEFAULT/2)
 
 /* possible input states */
-#define CHAN_INPUT_OPEN                        0x01
-#define CHAN_INPUT_WAIT_DRAIN          0x02
-#define CHAN_INPUT_WAIT_OCLOSE         0x04
-#define CHAN_INPUT_CLOSED              0x08
+#define CHAN_INPUT_OPEN                        0
+#define CHAN_INPUT_WAIT_DRAIN          1
+#define CHAN_INPUT_WAIT_OCLOSE         2
+#define CHAN_INPUT_CLOSED              3
 
 /* possible output states */
-#define CHAN_OUTPUT_OPEN               0x10
-#define CHAN_OUTPUT_WAIT_DRAIN         0x20
-#define CHAN_OUTPUT_WAIT_IEOF          0x40
-#define CHAN_OUTPUT_CLOSED             0x80
+#define CHAN_OUTPUT_OPEN               0
+#define CHAN_OUTPUT_WAIT_DRAIN         1
+#define CHAN_OUTPUT_WAIT_IEOF          2
+#define CHAN_OUTPUT_CLOSED             3
 
 #define CHAN_CLOSE_SENT                        0x01
 #define CHAN_CLOSE_RCVD                        0x02
diff --git a/nchan.c b/nchan.c
index 905379b075455741115cd278fb9977605e6785bf..04266d32629302a5f47be16f8c42fddb2bfb72eb 100644 (file)
--- a/nchan.c
+++ b/nchan.c
@@ -23,7 +23,7 @@
  */
 
 #include "includes.h"
-RCSID("$OpenBSD: nchan.c,v 1.36 2002/01/10 12:47:59 markus Exp $");
+RCSID("$OpenBSD: nchan.c,v 1.37 2002/01/13 21:31:20 markus Exp $");
 
 #include "ssh1.h"
 #include "ssh2.h"
@@ -83,6 +83,28 @@ static void  chan_send_eof2(Channel *);
 static void    chan_shutdown_write(Channel *);
 static void    chan_shutdown_read(Channel *);
 
+static char *ostates[] = { "open", "drain", "wait_ieof", "closed" };
+static char *istates[] = { "open", "drain", "wait_oclose", "closed" };
+
+static void
+chan_set_istate(Channel *c, u_int next)
+{
+       if (c->istate > CHAN_INPUT_CLOSED || next > CHAN_INPUT_CLOSED)
+               fatal("chan_set_istate: bad state %d -> %d", c->istate, next);
+       debug("channel %d: input %s -> %s", c->self, istates[c->istate],
+           istates[next]);
+       c->istate = next;
+}
+static void
+chan_set_ostate(Channel *c, u_int next)
+{
+       if (c->ostate > CHAN_OUTPUT_CLOSED || next > CHAN_OUTPUT_CLOSED)
+               fatal("chan_set_ostate: bad state %d -> %d", c->ostate, next);
+       debug("channel %d: output %s -> %s", c->self, ostates[c->ostate],
+           ostates[next]);
+       c->ostate = next;
+}
+
 /*
  * SSH1 specific implementation of event functions
  */
@@ -93,20 +115,17 @@ chan_rcvd_oclose1(Channel *c)
        debug("channel %d: rcvd oclose", c->self);
        switch (c->istate) {
        case CHAN_INPUT_WAIT_OCLOSE:
-               debug("channel %d: input wait_oclose -> closed", c->self);
-               c->istate = CHAN_INPUT_CLOSED;
+               chan_set_istate(c, CHAN_INPUT_CLOSED);
                break;
        case CHAN_INPUT_OPEN:
-               debug("channel %d: input open -> closed", c->self);
                chan_shutdown_read(c);
                chan_send_ieof1(c);
-               c->istate = CHAN_INPUT_CLOSED;
+               chan_set_istate(c, CHAN_INPUT_CLOSED);
                break;
        case CHAN_INPUT_WAIT_DRAIN:
                /* both local read_failed and remote write_failed  */
-               log("channel %d: input drain -> closed", c->self);
                chan_send_ieof1(c);
-               c->istate = CHAN_INPUT_CLOSED;
+               chan_set_istate(c, CHAN_INPUT_CLOSED);
                break;
        default:
                error("channel %d: protocol error: rcvd_oclose for istate %d",
@@ -120,9 +139,8 @@ chan_read_failed_12(Channel *c)
        debug("channel %d: read failed", c->self);
        switch (c->istate) {
        case CHAN_INPUT_OPEN:
-               debug("channel %d: input open -> drain", c->self);
                chan_shutdown_read(c);
-               c->istate = CHAN_INPUT_WAIT_DRAIN;
+               chan_set_istate(c, CHAN_INPUT_WAIT_DRAIN);
                break;
        default:
                error("channel %d: chan_read_failed for istate %d",
@@ -141,9 +159,8 @@ chan_ibuf_empty1(Channel *c)
        }
        switch (c->istate) {
        case CHAN_INPUT_WAIT_DRAIN:
-               debug("channel %d: input drain -> wait_oclose", c->self);
                chan_send_ieof1(c);
-               c->istate = CHAN_INPUT_WAIT_OCLOSE;
+               chan_set_istate(c, CHAN_INPUT_WAIT_OCLOSE);
                break;
        default:
                error("channel %d: chan_ibuf_empty for istate %d",
@@ -157,12 +174,10 @@ chan_rcvd_ieof1(Channel *c)
        debug("channel %d: rcvd ieof", c->self);
        switch (c->ostate) {
        case CHAN_OUTPUT_OPEN:
-               debug("channel %d: output open -> drain", c->self);
-               c->ostate = CHAN_OUTPUT_WAIT_DRAIN;
+               chan_set_ostate(c, CHAN_OUTPUT_WAIT_DRAIN);
                break;
        case CHAN_OUTPUT_WAIT_IEOF:
-               debug("channel %d: output wait_ieof -> closed", c->self);
-               c->ostate = CHAN_OUTPUT_CLOSED;
+               chan_set_ostate(c, CHAN_OUTPUT_CLOSED);
                break;
        default:
                error("channel %d: protocol error: rcvd_ieof for ostate %d",
@@ -176,14 +191,12 @@ chan_write_failed1(Channel *c)
        debug("channel %d: write failed", c->self);
        switch (c->ostate) {
        case CHAN_OUTPUT_OPEN:
-               debug("channel %d: output open -> wait_ieof", c->self);
                chan_send_oclose1(c);
-               c->ostate = CHAN_OUTPUT_WAIT_IEOF;
+               chan_set_ostate(c, CHAN_OUTPUT_WAIT_IEOF);
                break;
        case CHAN_OUTPUT_WAIT_DRAIN:
-               debug("channel %d: output wait_drain -> closed", c->self);
                chan_send_oclose1(c);
-               c->ostate = CHAN_OUTPUT_CLOSED;
+               chan_set_ostate(c, CHAN_OUTPUT_CLOSED);
                break;
        default:
                error("channel %d: chan_write_failed for ostate %d",
@@ -202,9 +215,8 @@ chan_obuf_empty1(Channel *c)
        }
        switch (c->ostate) {
        case CHAN_OUTPUT_WAIT_DRAIN:
-               debug("channel %d: output drain -> closed", c->self);
                chan_send_oclose1(c);
-               c->ostate = CHAN_OUTPUT_CLOSED;
+               chan_set_ostate(c, CHAN_OUTPUT_CLOSED);
                break;
        default:
                error("channel %d: internal error: obuf_empty for ostate %d",
@@ -261,8 +273,8 @@ chan_rcvd_oclose2(Channel *c)
        c->flags |= CHAN_CLOSE_RCVD;
        if (c->type == SSH_CHANNEL_LARVAL) {
                /* tear down larval channels immediately */
-               c->ostate = CHAN_OUTPUT_CLOSED;
-               c->istate = CHAN_INPUT_CLOSED;
+               chan_set_ostate(c, CHAN_OUTPUT_CLOSED);
+               chan_set_istate(c, CHAN_INPUT_CLOSED);
                return;
        }
        switch (c->ostate) {
@@ -271,21 +283,18 @@ chan_rcvd_oclose2(Channel *c)
                 * wait until a data from the channel is consumed if a CLOSE
                 * is received
                 */
-               debug("channel %d: output open -> drain", c->self);
-               c->ostate = CHAN_OUTPUT_WAIT_DRAIN;
+               chan_set_ostate(c, CHAN_OUTPUT_WAIT_DRAIN);
                break;
        }
        switch (c->istate) {
        case CHAN_INPUT_OPEN:
-               debug("channel %d: input open -> closed", c->self);
                chan_shutdown_read(c);
                break;
        case CHAN_INPUT_WAIT_DRAIN:
-               debug("channel %d: input drain -> closed", c->self);
                chan_send_eof2(c);
                break;
        }
-       c->istate = CHAN_INPUT_CLOSED;
+       chan_set_istate(c, CHAN_INPUT_CLOSED);
 }
 static void
 chan_ibuf_empty2(Channel *c)
@@ -298,10 +307,9 @@ chan_ibuf_empty2(Channel *c)
        }
        switch (c->istate) {
        case CHAN_INPUT_WAIT_DRAIN:
-               debug("channel %d: input drain -> closed", c->self);
                if (!(c->flags & CHAN_CLOSE_SENT))
                        chan_send_eof2(c);
-               c->istate = CHAN_INPUT_CLOSED;
+               chan_set_istate(c, CHAN_INPUT_CLOSED);
                break;
        default:
                error("channel %d: chan_ibuf_empty for istate %d",
@@ -313,10 +321,8 @@ static void
 chan_rcvd_ieof2(Channel *c)
 {
        debug("channel %d: rcvd eof", c->self);
-       if (c->ostate == CHAN_OUTPUT_OPEN) {
-               debug("channel %d: output open -> drain", c->self);
-               c->ostate = CHAN_OUTPUT_WAIT_DRAIN;
-       }
+       if (c->ostate == CHAN_OUTPUT_OPEN)
+               chan_set_ostate(c, CHAN_OUTPUT_WAIT_DRAIN);
 }
 static void
 chan_write_failed2(Channel *c)
@@ -324,14 +330,12 @@ chan_write_failed2(Channel *c)
        debug("channel %d: write failed", c->self);
        switch (c->ostate) {
        case CHAN_OUTPUT_OPEN:
-               debug("channel %d: output open -> closed", c->self);
                chan_shutdown_write(c); /* ?? */
-               c->ostate = CHAN_OUTPUT_CLOSED;
+               chan_set_ostate(c, CHAN_OUTPUT_CLOSED);
                break;
        case CHAN_OUTPUT_WAIT_DRAIN:
-               debug("channel %d: output drain -> closed", c->self);
                chan_shutdown_write(c);
-               c->ostate = CHAN_OUTPUT_CLOSED;
+               chan_set_ostate(c, CHAN_OUTPUT_CLOSED);
                break;
        default:
                error("channel %d: chan_write_failed for ostate %d",
@@ -350,9 +354,8 @@ chan_obuf_empty2(Channel *c)
        }
        switch (c->ostate) {
        case CHAN_OUTPUT_WAIT_DRAIN:
-               debug("channel %d: output drain -> closed", c->self);
                chan_shutdown_write(c);
-               c->ostate = CHAN_OUTPUT_CLOSED;
+               chan_set_ostate(c, CHAN_OUTPUT_CLOSED);
                break;
        default:
                error("channel %d: chan_obuf_empty for ostate %d",
This page took 0.994577 seconds and 5 git commands to generate.