=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/ssh/nchan.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- src/usr.bin/ssh/nchan.c 1999/10/25 21:04:28 1.5 +++ src/usr.bin/ssh/nchan.c 1999/11/23 22:25:54 1.6 @@ -1,5 +1,5 @@ #include "includes.h" -RCSID("$Id: nchan.c,v 1.5 1999/10/25 21:04:28 markus Exp $"); +RCSID("$Id: nchan.c,v 1.6 1999/11/23 22:25:54 markus Exp $"); #include "ssh.h" @@ -15,122 +15,131 @@ static void chan_delele_if_full_closed(Channel *c); /* - * EVENTS: update channel input/output states - * execute ACTIONS + * EVENTS update channel input/output states execute ACTIONS */ + /* events concerning the INPUT from socket for channel (istate) */ void -chan_rcvd_oclose(Channel *c){ - switch(c->istate){ +chan_rcvd_oclose(Channel *c) +{ + switch (c->istate) { case CHAN_INPUT_WAIT_OCLOSE: debug("channel %d: INPUT_WAIT_OCLOSE -> INPUT_CLOSED [rcvd OCLOSE]", c->self); - c->istate=CHAN_INPUT_CLOSED; + c->istate = CHAN_INPUT_CLOSED; chan_delele_if_full_closed(c); break; case CHAN_INPUT_OPEN: debug("channel %d: INPUT_OPEN -> INPUT_CLOSED [rvcd OCLOSE, send IEOF]", c->self); chan_shutdown_read(c); chan_send_ieof(c); - c->istate=CHAN_INPUT_CLOSED; + c->istate = CHAN_INPUT_CLOSED; chan_delele_if_full_closed(c); break; default: - debug("protocol error: chan_rcvd_oclose %d for istate %d",c->self,c->istate); + debug("protocol error: chan_rcvd_oclose %d for istate %d", c->self, c->istate); break; } } void -chan_read_failed(Channel *c){ - switch(c->istate){ +chan_read_failed(Channel *c) +{ + switch (c->istate) { case CHAN_INPUT_OPEN: debug("channel %d: INPUT_OPEN -> INPUT_WAIT_DRAIN [read failed]", c->self); chan_shutdown_read(c); - c->istate=CHAN_INPUT_WAIT_DRAIN; + c->istate = CHAN_INPUT_WAIT_DRAIN; break; default: debug("internal error: we do not read, but chan_read_failed %d for istate %d", - c->self,c->istate); + c->self, c->istate); break; } } void -chan_ibuf_empty(Channel *c){ - if(buffer_len(&c->input)){ - debug("internal error: chan_ibuf_empty %d for non empty buffer",c->self); +chan_ibuf_empty(Channel *c) +{ + if (buffer_len(&c->input)) { + debug("internal error: chan_ibuf_empty %d for non empty buffer", c->self); return; } - switch(c->istate){ + switch (c->istate) { case CHAN_INPUT_WAIT_DRAIN: debug("channel %d: INPUT_WAIT_DRAIN -> INPUT_WAIT_OCLOSE [inbuf empty, send IEOF]", c->self); chan_send_ieof(c); - c->istate=CHAN_INPUT_WAIT_OCLOSE; + c->istate = CHAN_INPUT_WAIT_OCLOSE; break; default: - debug("internal error: chan_ibuf_empty %d for istate %d",c->self,c->istate); + debug("internal error: chan_ibuf_empty %d for istate %d", c->self, c->istate); break; } } + /* events concerning the OUTPUT from channel for socket (ostate) */ void -chan_rcvd_ieof(Channel *c){ - switch(c->ostate){ +chan_rcvd_ieof(Channel *c) +{ + switch (c->ostate) { case CHAN_OUTPUT_OPEN: debug("channel %d: OUTPUT_OPEN -> OUTPUT_WAIT_DRAIN [rvcd IEOF]", c->self); - c->ostate=CHAN_OUTPUT_WAIT_DRAIN; + c->ostate = CHAN_OUTPUT_WAIT_DRAIN; break; case CHAN_OUTPUT_WAIT_IEOF: debug("channel %d: OUTPUT_WAIT_IEOF -> OUTPUT_CLOSED [rvcd IEOF]", c->self); - c->ostate=CHAN_OUTPUT_CLOSED; + c->ostate = CHAN_OUTPUT_CLOSED; chan_delele_if_full_closed(c); break; default: - debug("protocol error: chan_rcvd_ieof %d for ostate %d", c->self,c->ostate); + debug("protocol error: chan_rcvd_ieof %d for ostate %d", c->self, c->ostate); break; } } void -chan_write_failed(Channel *c){ - switch(c->ostate){ +chan_write_failed(Channel *c) +{ + switch (c->ostate) { case CHAN_OUTPUT_OPEN: debug("channel %d: OUTPUT_OPEN -> OUTPUT_WAIT_IEOF [write failed]", c->self); chan_send_oclose(c); - c->ostate=CHAN_OUTPUT_WAIT_IEOF; + c->ostate = CHAN_OUTPUT_WAIT_IEOF; break; case CHAN_OUTPUT_WAIT_DRAIN: debug("channel %d: OUTPUT_WAIT_DRAIN -> OUTPUT_CLOSED [write failed]", c->self); chan_send_oclose(c); - c->ostate=CHAN_OUTPUT_CLOSED; + c->ostate = CHAN_OUTPUT_CLOSED; chan_delele_if_full_closed(c); break; default: - debug("internal error: chan_write_failed %d for ostate %d",c->self,c->ostate); + debug("internal error: chan_write_failed %d for ostate %d", c->self, c->ostate); break; } } void -chan_obuf_empty(Channel *c){ - if(buffer_len(&c->output)){ - debug("internal error: chan_obuf_empty %d for non empty buffer",c->self); +chan_obuf_empty(Channel *c) +{ + if (buffer_len(&c->output)) { + debug("internal error: chan_obuf_empty %d for non empty buffer", c->self); return; } - switch(c->ostate){ + switch (c->ostate) { case CHAN_OUTPUT_WAIT_DRAIN: debug("channel %d: OUTPUT_WAIT_DRAIN -> OUTPUT_CLOSED [obuf empty, send OCLOSE]", c->self); chan_send_oclose(c); - c->ostate=CHAN_OUTPUT_CLOSED; + c->ostate = CHAN_OUTPUT_CLOSED; chan_delele_if_full_closed(c); break; default: - debug("internal error: chan_obuf_empty %d for ostate %d",c->self,c->ostate); + debug("internal error: chan_obuf_empty %d for ostate %d", c->self, c->ostate); break; } } + /* - * ACTIONS: should never update c->istate or c->ostate + * ACTIONS: should never update the channel states: c->istate or c->ostate */ static void -chan_send_ieof(Channel *c){ - switch(c->istate){ +chan_send_ieof(Channel *c) +{ + switch (c->istate) { case CHAN_INPUT_OPEN: case CHAN_INPUT_WAIT_DRAIN: packet_start(SSH_MSG_CHANNEL_INPUT_EOF); @@ -138,13 +147,14 @@ packet_send(); break; default: - debug("internal error: channel %d: cannot send IEOF for istate %d",c->self,c->istate); + debug("internal error: channel %d: cannot send IEOF for istate %d", c->self, c->istate); break; } } static void -chan_send_oclose(Channel *c){ - switch(c->ostate){ +chan_send_oclose(Channel *c) +{ + switch (c->ostate) { case CHAN_OUTPUT_OPEN: case CHAN_OUTPUT_WAIT_DRAIN: chan_shutdown_write(c); @@ -154,34 +164,39 @@ packet_send(); break; default: - debug("internal error: channel %d: cannot send OCLOSE for ostate %d",c->self,c->istate); + debug("internal error: channel %d: cannot send OCLOSE for ostate %d", c->self, c->istate); break; } } + /* helper */ static void -chan_shutdown_write(Channel *c){ +chan_shutdown_write(Channel *c) +{ debug("channel %d: shutdown_write", c->self); - if(shutdown(c->sock, SHUT_WR)<0) + if (shutdown(c->sock, SHUT_WR) < 0) error("chan_shutdown_write failed for #%d/fd%d: %.100s", - c->self, c->sock, strerror(errno)); + c->self, c->sock, strerror(errno)); } static void -chan_shutdown_read(Channel *c){ +chan_shutdown_read(Channel *c) +{ debug("channel %d: shutdown_read", c->self); - if(shutdown(c->sock, SHUT_RD)<0) + if (shutdown(c->sock, SHUT_RD) < 0) error("chan_shutdown_read failed for #%d/fd%d: %.100s", - c->self, c->sock, strerror(errno)); + c->self, c->sock, strerror(errno)); } static void -chan_delele_if_full_closed(Channel *c){ - if(c->istate==CHAN_INPUT_CLOSED && c->ostate==CHAN_OUTPUT_CLOSED){ +chan_delele_if_full_closed(Channel *c) +{ + if (c->istate == CHAN_INPUT_CLOSED && c->ostate == CHAN_OUTPUT_CLOSED) { debug("channel %d: closing", c->self); channel_free(c->self); } } void -chan_init_iostates(Channel *c){ - c->ostate=CHAN_OUTPUT_OPEN; - c->istate=CHAN_INPUT_OPEN; +chan_init_iostates(Channel *c) +{ + c->ostate = CHAN_OUTPUT_OPEN; + c->istate = CHAN_INPUT_OPEN; }