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 #define CHAN_CLOSE_SENT 0x01
76 #define CHAN_CLOSE_RCVD 0x02
80 typedef void chan_event_fn(Channel * c);
82 /* for the input state */
83 extern chan_event_fn *chan_rcvd_oclose;
84 extern chan_event_fn *chan_read_failed;
85 extern chan_event_fn *chan_ibuf_empty;
87 /* for the output state */
88 extern chan_event_fn *chan_rcvd_ieof;
89 extern chan_event_fn *chan_write_failed;
90 extern chan_event_fn *chan_obuf_empty;
92 extern chan_event_fn *chan_delete_if_full_closed;
94 void chan_init_iostates(Channel * c);