]> andersk Git - openssh.git/blame - packet.h
- Merged very large OpenBSD source code reformat
[openssh.git] / packet.h
CommitLineData
8efc0c15 1/*
5260325f 2 *
3 * packet.h
4 *
5 * Author: Tatu Ylonen <ylo@cs.hut.fi>
6 *
7 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
8 * All rights reserved
9 *
10 * Created: Sat Mar 18 02:02:14 1995 ylo
11 *
12 * Interface for the packet protocol functions.
13 *
14 */
8efc0c15 15
16/* RCSID("$Id$"); */
17
18#ifndef PACKET_H
19#define PACKET_H
20
c75a1a66 21#include "config.h"
22
5881cd60 23#ifdef HAVE_OPENSSL
8efc0c15 24#include <openssl/bn.h>
5881cd60 25#endif
26#ifdef HAVE_SSL
27#include <ssl/bn.h>
28#endif
8efc0c15 29
30/* Sets the socket used for communication. Disables encryption until
31 packet_set_encryption_key is called. It is permissible that fd_in
32 and fd_out are the same descriptor; in that case it is assumed to
33 be a socket. */
5260325f 34void packet_set_connection(int fd_in, int fd_out);
8efc0c15 35
36/* Puts the connection file descriptors into non-blocking mode. */
5260325f 37void packet_set_nonblocking(void);
8efc0c15 38
39/* Returns the file descriptor used for input. */
5260325f 40int packet_get_connection_in(void);
8efc0c15 41
42/* Returns the file descriptor used for output. */
5260325f 43int packet_get_connection_out(void);
8efc0c15 44
45/* Closes the connection (both descriptors) and clears and frees
5260325f 46 internal data structures. */
47void packet_close(void);
8efc0c15 48
49/* Causes any further packets to be encrypted using the given key. The same
50 key is used for both sending and reception. However, both directions
51 are encrypted independently of each other. Cipher types are
52 defined in ssh.h. */
5260325f 53void
54packet_set_encryption_key(const unsigned char *key, unsigned int keylen,
55 int cipher_type);
8efc0c15 56
57/* Sets remote side protocol flags for the current connection. This can
58 be called at any time. */
5260325f 59void packet_set_protocol_flags(unsigned int flags);
8efc0c15 60
61/* Returns the remote protocol flags set earlier by the above function. */
62unsigned int packet_get_protocol_flags(void);
63
64/* Enables compression in both directions starting from the next packet. */
5260325f 65void packet_start_compression(int level);
8efc0c15 66
67/* Informs that the current session is interactive. Sets IP flags for optimal
68 performance in interactive use. */
5260325f 69void packet_set_interactive(int interactive, int keepalives);
8efc0c15 70
71/* Returns true if the current connection is interactive. */
5260325f 72int packet_is_interactive(void);
8efc0c15 73
74/* Starts constructing a packet to send. */
5260325f 75void packet_start(int type);
8efc0c15 76
77/* Appends a character to the packet data. */
5260325f 78void packet_put_char(int ch);
8efc0c15 79
80/* Appends an integer to the packet data. */
5260325f 81void packet_put_int(unsigned int value);
8efc0c15 82
83/* Appends an arbitrary precision integer to packet data. */
5260325f 84void packet_put_bignum(BIGNUM * value);
8efc0c15 85
86/* Appends a string to packet data. */
5260325f 87void packet_put_string(const char *buf, unsigned int len);
8efc0c15 88
89/* Finalizes and sends the packet. If the encryption key has been set,
90 encrypts the packet before sending. */
5260325f 91void packet_send(void);
8efc0c15 92
93/* Waits until a packet has been received, and returns its type. */
5260325f 94int packet_read(int *payload_len_ptr);
8efc0c15 95
96/* Waits until a packet has been received, verifies that its type matches
97 that given, and gives a fatal error and exits if there is a mismatch. */
5260325f 98void packet_read_expect(int *payload_len_ptr, int type);
8efc0c15 99
100/* Checks if a full packet is available in the data received so far via
101 packet_process_incoming. If so, reads the packet; otherwise returns
5260325f 102 SSH_MSG_NONE. This does not wait for data from the connection.
103
8efc0c15 104 SSH_MSG_DISCONNECT is handled specially here. Also,
105 SSH_MSG_IGNORE messages are skipped by this function and are never returned
106 to higher levels. */
5260325f 107int packet_read_poll(int *packet_len_ptr);
8efc0c15 108
109/* Buffers the given amount of input characters. This is intended to be
110 used together with packet_read_poll. */
5260325f 111void packet_process_incoming(const char *buf, unsigned int len);
8efc0c15 112
113/* Returns a character (0-255) from the packet data. */
114unsigned int packet_get_char(void);
115
116/* Returns an integer from the packet data. */
117unsigned int packet_get_int(void);
118
119/* Returns an arbitrary precision integer from the packet data. The integer
120 must have been initialized before this call. */
5260325f 121void packet_get_bignum(BIGNUM * value, int *length_ptr);
8efc0c15 122
123/* Returns a string from the packet data. The string is allocated using
124 xmalloc; it is the responsibility of the calling program to free it when
125 no longer needed. The length_ptr argument may be NULL, or point to an
126 integer into which the length of the string is stored. */
5260325f 127char *packet_get_string(unsigned int *length_ptr);
8efc0c15 128
129/* Logs the error in syslog using LOG_INFO, constructs and sends a disconnect
130 packet, closes the connection, and exits. This function never returns.
131 The error message should not contain a newline. The total length of the
132 message must not exceed 1024 bytes. */
5260325f 133void packet_disconnect(const char *fmt,...);
8efc0c15 134
135/* Sends a diagnostic message to the other side. This message
136 can be sent at any time (but not while constructing another message).
137 The message is printed immediately, but only if the client is being
138 executed in verbose mode. These messages are primarily intended to
139 ease debugging authentication problems. The total length of the message
140 must not exceed 1024 bytes. This will automatically call
141 packet_write_wait. If the remote side protocol flags do not indicate
142 that it supports SSH_MSG_DEBUG, this will do nothing. */
5260325f 143void packet_send_debug(const char *fmt,...);
8efc0c15 144
145/* Checks if there is any buffered output, and tries to write some of the
146 output. */
5260325f 147void packet_write_poll(void);
8efc0c15 148
149/* Waits until all pending output data has been written. */
5260325f 150void packet_write_wait(void);
8efc0c15 151
152/* Returns true if there is buffered data to write to the connection. */
5260325f 153int packet_have_data_to_write(void);
8efc0c15 154
155/* Returns true if there is not too much data to write to the connection. */
5260325f 156int packet_not_very_much_data_to_write(void);
8efc0c15 157
9d6b7add 158/* maximum packet size, requested by client with SSH_CMSG_MAX_PACKET_SIZE */
159extern int max_packet_size;
5260325f 160int packet_set_maxsize(int s);
9d6b7add 161#define packet_get_maxsize() max_packet_size
162
8efc0c15 163/* Stores tty modes from the fd into current packet. */
5260325f 164void tty_make_modes(int fd);
8efc0c15 165
166/* Parses tty modes for the fd from the current packet. */
5260325f 167void tty_parse_modes(int fd, int *n_bytes_ptr);
8efc0c15 168
169#define packet_integrity_check(payload_len, expected_len, type) \
170do { \
171 int _p = (payload_len), _e = (expected_len); \
172 if (_p != _e) { \
173 log("Packet integrity error (%d != %d) at %s:%d", \
174 _p, _e, __FILE__, __LINE__); \
175 packet_disconnect("Packet integrity error. (%d)", (type)); \
176 } \
177} while (0)
178
5260325f 179#endif /* PACKET_H */
This page took 0.078045 seconds and 5 git commands to generate.