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

Annotation of src/usr.bin/ssh/nchan.ms, Revision 1.3

1.1       markus      1: .TL
                      2: OpenSSH Channel Close Protocol 1.5 Implementation
                      3: .SH
                      4: Channel Input State Diagram
                      5: .PS
                      6: reset
                      7: l=1
                      8: s=1.2
                      9: ellipsewid=s*ellipsewid
                     10: boxwid=s*boxwid
                     11: ellipseht=s*ellipseht
                     12: S1: ellipse "INPUT" "OPEN"
                     13: move right 2*l from last ellipse.e
                     14: S4: ellipse "INPUT" "CLOSED"
                     15: move down l from last ellipse.s
                     16: S3: ellipse "INPUT" "WAIT" "OCLOSED"
                     17: move down l from 1st ellipse.s
                     18: S2: ellipse "INPUT" "WAIT" "DRAIN"
                     19: arrow "" "rcvd OCLOSE/" "shutdown_read" "send IEOF" from S1.e to S4.w
                     20: arrow "ibuf_empty/" "send IEOF" from S2.e to S3.w
                     21: arrow from S1.s to S2.n
                     22: box invis "read_failed/" "shutdown_read" with .e at last arrow.c
                     23: arrow  from S3.n to S4.s
                     24: box invis "rcvd OCLOSE/" "-" with .w at last arrow.c
                     25: ellipse wid .9*ellipsewid ht .9*ellipseht at S4
                     26: arrow "start" "" from S1.w+(-0.5,0) to S1.w
                     27: .PE
                     28: .SH
                     29: Channel Output State Diagram
                     30: .PS
                     31: S1: ellipse "OUTPUT" "OPEN"
                     32: move right 2*l from last ellipse.e
                     33: S3: ellipse "OUTPUT" "WAIT" "IEOF"
                     34: move down l from last ellipse.s
                     35: S4: ellipse "OUTPUT" "CLOSED"
                     36: move down l from 1st ellipse.s
                     37: S2: ellipse "OUTPUT" "WAIT" "DRAIN"
                     38: arrow "" "write_failed/" "shutdown_write" "send OCLOSE" from S1.e to S3.w
                     39: arrow "obuf_empty ||" "write_failed/" "shutdown_write" "send OCLOSE" from S2.e to S4.w
                     40: arrow from S1.s to S2.n
                     41: box invis "rcvd IEOF/" "-" with .e at last arrow.c
                     42: arrow from S3.s to S4.n
                     43: box invis "rcvd IEOF/" "-" with .w at last arrow.c
                     44: ellipse wid .9*ellipsewid ht .9*ellipseht at S4
                     45: arrow "start" "" from S1.w+(-0.5,0) to S1.w
                     46: .PE
1.2       markus     47: .SH
                     48: Notes
                     49: .PP
                     50: The input buffer is filled with data from the socket
                     51: (the socket represents the local comsumer/producer of the
                     52: forwarded channel).
1.3     ! markus     53: The data is then sent over the INPUT-end (transmit-end) of the channel to the
1.2       markus     54: remote peer.
1.3     ! markus     55: Data sent by the peer is received on the OUTPUT-end (receive-end),
1.2       markus     56: saved in the output buffer and written to the socket.
                     57: .PP
                     58: If the local protocol instance has forwarded all data on the
                     59: INPUT-end of the channel, it sends an IEOF message to the peer.
                     60: If the peer receives the IEOF and has comsumed all
                     61: data he replies with an OCLOSE.
                     62: When the local instance receives the OCLOSE
                     63: he considers the INPUT-half of the channel closed.
                     64: The peer has his OUTOUT-half closed.
                     65: .PP
                     66: A channel can be deallocated by a protocol instance
                     67: if both the INPUT- and the OUTOUT-half on his
                     68: side of the channel are closed.
                     69: Note that when an instance is unable to comsume the
                     70: received data, he is permitted to send an OCLOSE
                     71: before the matching IEOF is received.