Annotation of src/usr.bin/ssh/nchan.h, Revision 1.10
1.5 markus 1: /*
2: * Copyright (c) 1999 Markus Friedl. All rights reserved.
3: *
4: * Redistribution and use in source and binary forms, with or without
5: * modification, are permitted provided that the following conditions
6: * are met:
7: * 1. Redistributions of source code must retain the above copyright
8: * notice, this list of conditions and the following disclaimer.
9: * 2. Redistributions in binary form must reproduce the above copyright
10: * notice, this list of conditions and the following disclaimer in the
11: * documentation and/or other materials provided with the distribution.
12: *
13: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
14: * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
15: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
16: * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
17: * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
18: * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
19: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
20: * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
22: * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23: */
24:
1.10 ! markus 25: /* RCSID("$OpenBSD: nchan.h,v 1.9 2000/09/07 20:27:52 deraadt Exp $"); */
1.2 markus 26:
1.1 markus 27: #ifndef NCHAN_H
28: #define NCHAN_H
29:
30: /*
1.2 markus 31: * SSH Protocol 1.5 aka New Channel Protocol
32: * Thanks to Martina, Axel and everyone who left Erlangen, leaving me bored.
33: * Written by Markus Friedl in October 1999
1.4 deraadt 34: *
1.2 markus 35: * Protocol versions 1.3 and 1.5 differ in the handshake protocol used for the
36: * tear down of channels:
1.4 deraadt 37: *
1.2 markus 38: * 1.3: strict request-ack-protocol:
39: * CLOSE ->
40: * <- CLOSE_CONFIRM
1.4 deraadt 41: *
1.2 markus 42: * 1.5: uses variations of:
43: * IEOF ->
44: * <- OCLOSE
45: * <- IEOF
46: * OCLOSE ->
47: * i.e. both sides have to close the channel
1.4 deraadt 48: *
1.2 markus 49: * See the debugging output from 'ssh -v' and 'sshd -d' of
50: * ssh-1.2.27 as an example.
1.4 deraadt 51: *
1.2 markus 52: */
1.1 markus 53:
1.3 markus 54: /* ssh-proto-1.5 overloads prot-1.3-message-types */
55: #define SSH_MSG_CHANNEL_INPUT_EOF SSH_MSG_CHANNEL_CLOSE
56: #define SSH_MSG_CHANNEL_OUTPUT_CLOSE SSH_MSG_CHANNEL_CLOSE_CONFIRMATION
57:
58: /* possible input states */
59: #define CHAN_INPUT_OPEN 0x01
60: #define CHAN_INPUT_WAIT_DRAIN 0x02
61: #define CHAN_INPUT_WAIT_OCLOSE 0x04
62: #define CHAN_INPUT_CLOSED 0x08
63:
64: /* possible output states */
65: #define CHAN_OUTPUT_OPEN 0x10
66: #define CHAN_OUTPUT_WAIT_DRAIN 0x20
67: #define CHAN_OUTPUT_WAIT_IEOF 0x40
68: #define CHAN_OUTPUT_CLOSED 0x80
1.1 markus 69:
1.7 markus 70: #define CHAN_CLOSE_SENT 0x01
71: #define CHAN_CLOSE_RCVD 0x02
72:
73:
74: /* Channel EVENTS */
75: typedef void chan_event_fn(Channel * c);
76:
77: /* for the input state */
78: extern chan_event_fn *chan_rcvd_oclose;
79: extern chan_event_fn *chan_read_failed;
80: extern chan_event_fn *chan_ibuf_empty;
81:
82: /* for the output state */
83: extern chan_event_fn *chan_rcvd_ieof;
84: extern chan_event_fn *chan_write_failed;
85: extern chan_event_fn *chan_obuf_empty;
86:
1.10 ! markus 87: int chan_is_dead(Channel * c);
1.3 markus 88:
1.4 deraadt 89: void chan_init_iostates(Channel * c);
1.7 markus 90: void chan_init(void);
1.1 markus 91: #endif