X-Git-Url: http://andersk.mit.edu/gitweb/openssh.git/blobdiff_plain/00e6dd70396e47ac54e68685b8e215b92ea4d1fc..1d3c30dbe232d224145556c245d27d1be1e01a1e:/packet.h diff --git a/packet.h b/packet.h index 1b81e435..e5432714 100644 --- a/packet.h +++ b/packet.h @@ -1,31 +1,22 @@ /* - * - * packet.h - * * Author: Tatu Ylonen - * * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland * All rights reserved - * - * Created: Sat Mar 18 02:02:14 1995 ylo - * * Interface for the packet protocol functions. - * + * + * As far as I am concerned, the code I have written for this software + * can be used freely for any purpose. Any derived versions of this + * software must be clearly marked as such, and if the derived work is + * incompatible with the protocol description in the RFC file, it must be + * called by a name other than "ssh" or "Secure Shell". */ -/* RCSID("$Id$"); */ +/* RCSID("$OpenBSD: packet.h,v 1.21 2001/02/28 21:27:47 markus Exp $"); */ #ifndef PACKET_H #define PACKET_H -#include "config.h" - -#ifdef HAVE_OPENSSL #include -#endif -#ifdef HAVE_SSL -#include -#endif /* * Sets the socket used for communication. Disables encryption until @@ -54,18 +45,18 @@ void packet_close(void); * key is used for both sending and reception. However, both directions are * encrypted independently of each other. Cipher types are defined in ssh.h. */ -void -packet_set_encryption_key(const unsigned char *key, unsigned int keylen, +void +packet_set_encryption_key(const u_char *key, u_int keylen, int cipher_type); /* * Sets remote side protocol flags for the current connection. This can be * called at any time. */ -void packet_set_protocol_flags(unsigned int flags); +void packet_set_protocol_flags(u_int flags); /* Returns the remote protocol flags set earlier by the above function. */ -unsigned int packet_get_protocol_flags(void); +u_int packet_get_protocol_flags(void); /* Enables compression in both directions starting from the next packet. */ void packet_start_compression(int level); @@ -74,7 +65,7 @@ void packet_start_compression(int level); * Informs that the current session is interactive. Sets IP flags for * optimal performance in interactive use. */ -void packet_set_interactive(int interactive, int keepalives); +void packet_set_interactive(int interactive); /* Returns true if the current connection is interactive. */ int packet_is_interactive(void); @@ -86,13 +77,16 @@ void packet_start(int type); void packet_put_char(int ch); /* Appends an integer to the packet data. */ -void packet_put_int(unsigned int value); +void packet_put_int(u_int value); /* Appends an arbitrary precision integer to packet data. */ void packet_put_bignum(BIGNUM * value); +void packet_put_bignum2(BIGNUM * value); /* Appends a string to packet data. */ -void packet_put_string(const char *buf, unsigned int len); +void packet_put_string(const char *buf, u_int len); +void packet_put_cstring(const char *str); +void packet_put_raw(const char *buf, u_int len); /* * Finalizes and sends the packet. If the encryption key has been set, @@ -123,19 +117,21 @@ int packet_read_poll(int *packet_len_ptr); * Buffers the given amount of input characters. This is intended to be used * together with packet_read_poll. */ -void packet_process_incoming(const char *buf, unsigned int len); +void packet_process_incoming(const char *buf, u_int len); /* Returns a character (0-255) from the packet data. */ -unsigned int packet_get_char(void); +u_int packet_get_char(void); /* Returns an integer from the packet data. */ -unsigned int packet_get_int(void); +u_int packet_get_int(void); /* * Returns an arbitrary precision integer from the packet data. The integer * must have been initialized before this call. */ void packet_get_bignum(BIGNUM * value, int *length_ptr); +void packet_get_bignum2(BIGNUM * value, int *length_ptr); +char *packet_get_raw(int *length_ptr); /* * Returns a string from the packet data. The string is allocated using @@ -143,7 +139,7 @@ void packet_get_bignum(BIGNUM * value, int *length_ptr); * no longer needed. The length_ptr argument may be NULL, or point to an * integer into which the length of the string is stored. */ -char *packet_get_string(unsigned int *length_ptr); +char *packet_get_string(u_int *length_ptr); /* * Logs the error in syslog using LOG_INFO, constructs and sends a disconnect @@ -151,7 +147,7 @@ char *packet_get_string(unsigned int *length_ptr); * The error message should not contain a newline. The total length of the * message must not exceed 1024 bytes. */ -void packet_disconnect(const char *fmt,...) __attribute__((format(printf, 1, 2)));; +void packet_disconnect(const char *fmt,...) __attribute__((format(printf, 1, 2))); /* * Sends a diagnostic message to the other side. This message can be sent at @@ -163,7 +159,7 @@ void packet_disconnect(const char *fmt,...) __attribute__((format(printf, 1, * remote side protocol flags do not indicate that it supports SSH_MSG_DEBUG, * this will do nothing. */ -void packet_send_debug(const char *fmt,...) __attribute__((format(printf, 1, 2)));; +void packet_send_debug(const char *fmt,...) __attribute__((format(printf, 1, 2))); /* Checks if there is any buffered output, and tries to write some of the output. */ void packet_write_poll(void); @@ -198,4 +194,30 @@ do { \ } \ } while (0) +#define packet_done() \ +do { \ + int _len = packet_remaining(); \ + if (_len > 0) { \ + log("Packet integrity error (%d bytes remaining) at %s:%d", \ + _len ,__FILE__, __LINE__); \ + packet_disconnect("Packet integrity error."); \ + } \ +} while (0) + +/* remote host is connected via a socket/ipv4 */ +int packet_connection_is_on_socket(void); +int packet_connection_is_ipv4(void); + +/* enable SSH2 packet format */ +void packet_set_ssh2_format(void); + +/* returns remaining payload bytes */ +int packet_remaining(void); + +/* append an ignore message */ +void packet_send_ignore(int nbytes); + +/* add an ignore message and make sure size (current+ignore) = n*sumlen */ +void packet_inject_ignore(int sumlen); + #endif /* PACKET_H */