2 * Copyright (c) 1999 Markus Friedl. All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
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 * 3. All advertising materials mentioning features or use of this software
13 * must display the following acknowledgement:
14 * This product includes software developed by Markus Friedl.
15 * 4. The name of the author may not be used to endorse or promote products
16 * derived from this software without specific prior written permission.
18 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
19 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
22 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 * SSH Protocol 1.5 aka New Channel Protocol
37 * Thanks to Martina, Axel and everyone who left Erlangen, leaving me bored.
38 * Written by Markus Friedl in October 1999
40 * Protocol versions 1.3 and 1.5 differ in the handshake protocol used for the
41 * tear down of channels:
43 * 1.3: strict request-ack-protocol:
47 * 1.5: uses variations of:
52 * i.e. both sides have to close the channel
54 * See the debugging output from 'ssh -v' and 'sshd -d' of
55 * ssh-1.2.27 as an example.
59 /* ssh-proto-1.5 overloads prot-1.3-message-types */
60 #define SSH_MSG_CHANNEL_INPUT_EOF SSH_MSG_CHANNEL_CLOSE
61 #define SSH_MSG_CHANNEL_OUTPUT_CLOSE SSH_MSG_CHANNEL_CLOSE_CONFIRMATION
63 /* possible input states */
64 #define CHAN_INPUT_OPEN 0x01
65 #define CHAN_INPUT_WAIT_DRAIN 0x02
66 #define CHAN_INPUT_WAIT_OCLOSE 0x04
67 #define CHAN_INPUT_CLOSED 0x08
69 /* possible output states */
70 #define CHAN_OUTPUT_OPEN 0x10
71 #define CHAN_OUTPUT_WAIT_DRAIN 0x20
72 #define CHAN_OUTPUT_WAIT_IEOF 0x40
73 #define CHAN_OUTPUT_CLOSED 0x80
75 /* EVENTS for the input state */
76 void chan_rcvd_oclose(Channel * c);
77 void chan_read_failed(Channel * c);
78 void chan_ibuf_empty(Channel * c);
80 /* EVENTS for the output state */
81 void chan_rcvd_ieof(Channel * c);
82 void chan_write_failed(Channel * c);
83 void chan_obuf_empty(Channel * c);
85 void chan_init_iostates(Channel * c);