]> andersk Git - openssh.git/blob - nchan.h
- markus@cvs.openbsd.org 2001/05/04 23:47:34
[openssh.git] / nchan.h
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
25 /* RCSID("$OpenBSD: nchan.h,v 1.11 2001/05/04 23:47:34 markus Exp $"); */
26
27 #ifndef NCHAN_H
28 #define NCHAN_H
29
30 /*
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
34  *
35  * Protocol versions 1.3 and 1.5 differ in the handshake protocol used for the
36  * tear down of channels:
37  *
38  * 1.3: strict request-ack-protocol:
39  *      CLOSE   ->
40  *              <-  CLOSE_CONFIRM
41  *
42  * 1.5: uses variations of:
43  *      IEOF    ->
44  *              <-  OCLOSE
45  *              <-  IEOF
46  *      OCLOSE  ->
47  *      i.e. both sides have to close the channel
48  *
49  * See the debugging output from 'ssh -v' and 'sshd -d' of
50  * ssh-1.2.27 as an example.
51  *
52  */
53
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
69
70 #define CHAN_CLOSE_SENT                 0x01
71 #define CHAN_CLOSE_RCVD                 0x02
72 #define CHAN_DEAD                       0x04
73
74
75 /* Channel EVENTS */
76 typedef void    chan_event_fn(Channel * c);
77
78 /* for the input state */
79 extern chan_event_fn    *chan_rcvd_oclose;
80 extern chan_event_fn    *chan_read_failed;
81 extern chan_event_fn    *chan_ibuf_empty;
82
83 /* for the output state */
84 extern chan_event_fn    *chan_rcvd_ieof;
85 extern chan_event_fn    *chan_write_failed;
86 extern chan_event_fn    *chan_obuf_empty;
87
88 int chan_is_dead(Channel * c);
89 void chan_mark_dead(Channel * c);
90
91 void    chan_init_iostates(Channel * c);
92 void    chan_init(void);
93 #endif
This page took 0.240132 seconds and 5 git commands to generate.