diff options
author | Ben Lindstrom <mouring@eviladmin.org> | 2001-07-04 04:46:56 +0000 |
---|---|---|
committer | Ben Lindstrom <mouring@eviladmin.org> | 2001-07-04 04:46:56 +0000 |
commit | 4cc240dabbd81a308f06f2717b1942041fe0e205 (patch) | |
tree | 07291c8c2c467fc2ecec9166ed0d8ec1e75631a3 /packet.h | |
parent | 5bf5d67d497ed91c19851db6b904d54003afe67e (diff) |
- markus@cvs.openbsd.org 2001/06/26 17:27:25
[authfd.h authfile.h auth.h auth-options.h bufaux.h buffer.h
canohost.h channels.h cipher.h clientloop.h compat.h compress.h
crc32.h deattack.h dh.h dispatch.h groupaccess.c groupaccess.h
hostfile.h kex.h key.h log.c log.h mac.h misc.c misc.h mpaux.h
packet.h radix.h readconf.h readpass.h rsa.h servconf.h serverloop.h
session.h sftp-common.c sftp-common.h sftp-glob.h sftp-int.h
sshconnect.h ssh-dss.h sshlogin.h sshpty.h ssh-rsa.h sshtty.h
tildexpand.h uidswap.h uuencode.h xmalloc.h]
remove comments from .h, since they are cut&paste from the .c files
and out of sync
Diffstat (limited to 'packet.h')
-rw-r--r-- | packet.h | 232 |
1 files changed, 54 insertions, 178 deletions
@@ -11,186 +11,75 @@ | |||
11 | * called by a name other than "ssh" or "Secure Shell". | 11 | * called by a name other than "ssh" or "Secure Shell". |
12 | */ | 12 | */ |
13 | 13 | ||
14 | /* RCSID("$OpenBSD: packet.h,v 1.24 2001/06/26 06:32:57 itojun Exp $"); */ | 14 | /* RCSID("$OpenBSD: packet.h,v 1.25 2001/06/26 17:27:24 markus Exp $"); */ |
15 | 15 | ||
16 | #ifndef PACKET_H | 16 | #ifndef PACKET_H |
17 | #define PACKET_H | 17 | #define PACKET_H |
18 | 18 | ||
19 | #include <openssl/bn.h> | 19 | #include <openssl/bn.h> |
20 | 20 | ||
21 | /* | 21 | void packet_set_connection(int, int); |
22 | * Sets the socket used for communication. Disables encryption until | 22 | void packet_set_nonblocking(void); |
23 | * packet_set_encryption_key is called. It is permissible that fd_in and | 23 | int packet_get_connection_in(void); |
24 | * fd_out are the same descriptor; in that case it is assumed to be a socket. | 24 | int packet_get_connection_out(void); |
25 | */ | 25 | void packet_close(void); |
26 | void packet_set_connection(int, int); | 26 | void packet_set_encryption_key(const u_char *, u_int, int); |
27 | 27 | void packet_set_protocol_flags(u_int); | |
28 | /* Puts the connection file descriptors into non-blocking mode. */ | 28 | u_int packet_get_protocol_flags(void); |
29 | void packet_set_nonblocking(void); | 29 | void packet_start_compression(int); |
30 | 30 | void packet_set_interactive(int); | |
31 | /* Returns the file descriptor used for input. */ | 31 | int packet_is_interactive(void); |
32 | int packet_get_connection_in(void); | 32 | |
33 | 33 | void packet_start(u_char); | |
34 | /* Returns the file descriptor used for output. */ | 34 | void packet_put_char(int ch); |
35 | int packet_get_connection_out(void); | 35 | void packet_put_int(u_int value); |
36 | 36 | void packet_put_bignum(BIGNUM * value); | |
37 | /* | 37 | void packet_put_bignum2(BIGNUM * value); |
38 | * Closes the connection (both descriptors) and clears and frees internal | 38 | void packet_put_string(const char *buf, u_int len); |
39 | * data structures. | 39 | void packet_put_cstring(const char *str); |
40 | */ | 40 | void packet_put_raw(const char *buf, u_int len); |
41 | void packet_close(void); | 41 | void packet_send(void); |
42 | 42 | ||
43 | /* | 43 | int packet_read(int *payload_len_ptr); |
44 | * Causes any further packets to be encrypted using the given key. The same | 44 | void packet_read_expect(int *payload_len_ptr, int type); |
45 | * key is used for both sending and reception. However, both directions are | 45 | int packet_read_poll(int *packet_len_ptr); |
46 | * encrypted independently of each other. Cipher types are defined in ssh.h. | 46 | void packet_process_incoming(const char *buf, u_int len); |
47 | */ | 47 | |
48 | void | 48 | u_int packet_get_char(void); |
49 | packet_set_encryption_key(const u_char *, u_int, int); | 49 | u_int packet_get_int(void); |
50 | 50 | void packet_get_bignum(BIGNUM * value, int *length_ptr); | |
51 | /* | 51 | void packet_get_bignum2(BIGNUM * value, int *length_ptr); |
52 | * Sets remote side protocol flags for the current connection. This can be | ||
53 | * called at any time. | ||
54 | */ | ||
55 | void packet_set_protocol_flags(u_int); | ||
56 | |||
57 | /* Returns the remote protocol flags set earlier by the above function. */ | ||
58 | u_int packet_get_protocol_flags(void); | ||
59 | |||
60 | /* Enables compression in both directions starting from the next packet. */ | ||
61 | void packet_start_compression(int); | ||
62 | |||
63 | /* | ||
64 | * Informs that the current session is interactive. Sets IP flags for | ||
65 | * optimal performance in interactive use. | ||
66 | */ | ||
67 | void packet_set_interactive(int); | ||
68 | |||
69 | /* Returns true if the current connection is interactive. */ | ||
70 | int packet_is_interactive(void); | ||
71 | |||
72 | /* Starts constructing a packet to send. */ | ||
73 | void packet_start(u_char); | ||
74 | |||
75 | /* Appends a character to the packet data. */ | ||
76 | void packet_put_char(int ch); | ||
77 | |||
78 | /* Appends an integer to the packet data. */ | ||
79 | void packet_put_int(u_int value); | ||
80 | |||
81 | /* Appends an arbitrary precision integer to packet data. */ | ||
82 | void packet_put_bignum(BIGNUM * value); | ||
83 | void packet_put_bignum2(BIGNUM * value); | ||
84 | |||
85 | /* Appends a string to packet data. */ | ||
86 | void packet_put_string(const char *buf, u_int len); | ||
87 | void packet_put_cstring(const char *str); | ||
88 | void packet_put_raw(const char *buf, u_int len); | ||
89 | |||
90 | /* | ||
91 | * Finalizes and sends the packet. If the encryption key has been set, | ||
92 | * encrypts the packet before sending. | ||
93 | */ | ||
94 | void packet_send(void); | ||
95 | |||
96 | /* Waits until a packet has been received, and returns its type. */ | ||
97 | int packet_read(int *payload_len_ptr); | ||
98 | |||
99 | /* | ||
100 | * Waits until a packet has been received, verifies that its type matches | ||
101 | * that given, and gives a fatal error and exits if there is a mismatch. | ||
102 | */ | ||
103 | void packet_read_expect(int *payload_len_ptr, int type); | ||
104 | |||
105 | /* | ||
106 | * Checks if a full packet is available in the data received so far via | ||
107 | * packet_process_incoming. If so, reads the packet; otherwise returns | ||
108 | * SSH_MSG_NONE. This does not wait for data from the connection. | ||
109 | * SSH_MSG_DISCONNECT is handled specially here. Also, SSH_MSG_IGNORE | ||
110 | * messages are skipped by this function and are never returned to higher | ||
111 | * levels. | ||
112 | */ | ||
113 | int packet_read_poll(int *packet_len_ptr); | ||
114 | |||
115 | /* | ||
116 | * Buffers the given amount of input characters. This is intended to be used | ||
117 | * together with packet_read_poll. | ||
118 | */ | ||
119 | void packet_process_incoming(const char *buf, u_int len); | ||
120 | |||
121 | /* Returns a character (0-255) from the packet data. */ | ||
122 | u_int packet_get_char(void); | ||
123 | |||
124 | /* Returns an integer from the packet data. */ | ||
125 | u_int packet_get_int(void); | ||
126 | |||
127 | /* | ||
128 | * Returns an arbitrary precision integer from the packet data. The integer | ||
129 | * must have been initialized before this call. | ||
130 | */ | ||
131 | void packet_get_bignum(BIGNUM * value, int *length_ptr); | ||
132 | void packet_get_bignum2(BIGNUM * value, int *length_ptr); | ||
133 | char *packet_get_raw(int *length_ptr); | 52 | char *packet_get_raw(int *length_ptr); |
53 | char *packet_get_string(u_int *length_ptr); | ||
54 | void packet_disconnect(const char *fmt,...) __attribute__((format(printf, 1, 2))); | ||
55 | void packet_send_debug(const char *fmt,...) __attribute__((format(printf, 1, 2))); | ||
134 | 56 | ||
135 | /* | 57 | void packet_write_poll(void); |
136 | * Returns a string from the packet data. The string is allocated using | 58 | void packet_write_wait(void); |
137 | * xmalloc; it is the responsibility of the calling program to free it when | 59 | int packet_have_data_to_write(void); |
138 | * no longer needed. The length_ptr argument may be NULL, or point to an | 60 | int packet_not_very_much_data_to_write(void); |
139 | * integer into which the length of the string is stored. | ||
140 | */ | ||
141 | char *packet_get_string(u_int *length_ptr); | ||
142 | |||
143 | /* | ||
144 | * Logs the error in syslog using LOG_INFO, constructs and sends a disconnect | ||
145 | * packet, closes the connection, and exits. This function never returns. | ||
146 | * The error message should not contain a newline. The total length of the | ||
147 | * message must not exceed 1024 bytes. | ||
148 | */ | ||
149 | void packet_disconnect(const char *fmt,...) __attribute__((format(printf, 1, 2))); | ||
150 | |||
151 | /* | ||
152 | * Sends a diagnostic message to the other side. This message can be sent at | ||
153 | * any time (but not while constructing another message). The message is | ||
154 | * printed immediately, but only if the client is being executed in verbose | ||
155 | * mode. These messages are primarily intended to ease debugging | ||
156 | * authentication problems. The total length of the message must not exceed | ||
157 | * 1024 bytes. This will automatically call packet_write_wait. If the | ||
158 | * remote side protocol flags do not indicate that it supports SSH_MSG_DEBUG, | ||
159 | * this will do nothing. | ||
160 | */ | ||
161 | void packet_send_debug(const char *fmt,...) __attribute__((format(printf, 1, 2))); | ||
162 | |||
163 | /* Checks if there is any buffered output, and tries to write some of the output. */ | ||
164 | void packet_write_poll(void); | ||
165 | |||
166 | /* Waits until all pending output data has been written. */ | ||
167 | void packet_write_wait(void); | ||
168 | 61 | ||
169 | /* Returns true if there is buffered data to write to the connection. */ | 62 | int packet_connection_is_on_socket(void); |
170 | int packet_have_data_to_write(void); | 63 | int packet_connection_is_ipv4(void); |
64 | int packet_remaining(void); | ||
65 | void packet_send_ignore(int); | ||
66 | void packet_inject_ignore(int); | ||
171 | 67 | ||
172 | /* Returns true if there is not too much data to write to the connection. */ | 68 | void tty_make_modes(int, struct termios *); |
173 | int packet_not_very_much_data_to_write(void); | 69 | void tty_parse_modes(int, int *); |
174 | 70 | ||
175 | /* maximum packet size, requested by client with SSH_CMSG_MAX_PACKET_SIZE */ | ||
176 | extern int max_packet_size; | 71 | extern int max_packet_size; |
177 | int packet_set_maxsize(int); | 72 | int packet_set_maxsize(int); |
178 | #define packet_get_maxsize() max_packet_size | 73 | #define packet_get_maxsize() max_packet_size |
179 | |||
180 | /* Stores tty modes from the fd or tiop into current packet. */ | ||
181 | void tty_make_modes(int, struct termios *); | ||
182 | |||
183 | /* Parses tty modes for the fd from the current packet. */ | ||
184 | void tty_parse_modes(int, int *); | ||
185 | 74 | ||
186 | #define packet_integrity_check(payload_len, expected_len, type) \ | 75 | #define packet_integrity_check(payload_len, expected_len, type) \ |
187 | do { \ | 76 | do { \ |
188 | int _p = (payload_len), _e = (expected_len); \ | 77 | int _p = (payload_len), _e = (expected_len); \ |
189 | if (_p != _e) { \ | 78 | if (_p != _e) { \ |
190 | log("Packet integrity error (%d != %d) at %s:%d", \ | 79 | log("Packet integrity error (%d != %d) at %s:%d", \ |
191 | _p, _e, __FILE__, __LINE__); \ | 80 | _p, _e, __FILE__, __LINE__); \ |
192 | packet_disconnect("Packet integrity error. (%d)", (type)); \ | 81 | packet_disconnect("Packet integrity error. (%d)", (type)); \ |
193 | } \ | 82 | } \ |
194 | } while (0) | 83 | } while (0) |
195 | 84 | ||
196 | #define packet_done() \ | 85 | #define packet_done() \ |
@@ -203,17 +92,4 @@ do { \ | |||
203 | } \ | 92 | } \ |
204 | } while (0) | 93 | } while (0) |
205 | 94 | ||
206 | /* remote host is connected via a socket/ipv4 */ | ||
207 | int packet_connection_is_on_socket(void); | ||
208 | int packet_connection_is_ipv4(void); | ||
209 | |||
210 | /* returns remaining payload bytes */ | ||
211 | int packet_remaining(void); | ||
212 | |||
213 | /* append an ignore message */ | ||
214 | void packet_send_ignore(int); | ||
215 | |||
216 | /* add an ignore message and make sure size (current+ignore) = n*sumlen */ | ||
217 | void packet_inject_ignore(int); | ||
218 | |||
219 | #endif /* PACKET_H */ | 95 | #endif /* PACKET_H */ |