1d059297112922cabb0c674840589be8db821fd9aAdam Langley#ifndef _OPACKET_H 2d059297112922cabb0c674840589be8db821fd9aAdam Langley/* Written by Markus Friedl. Placed in the public domain. */ 3d059297112922cabb0c674840589be8db821fd9aAdam Langley 4d059297112922cabb0c674840589be8db821fd9aAdam Langley/* Map old to new API */ 5d059297112922cabb0c674840589be8db821fd9aAdam Langleyvoid ssh_packet_start(struct ssh *, u_char); 6d059297112922cabb0c674840589be8db821fd9aAdam Langleyvoid ssh_packet_put_char(struct ssh *, int ch); 7d059297112922cabb0c674840589be8db821fd9aAdam Langleyvoid ssh_packet_put_int(struct ssh *, u_int value); 8d059297112922cabb0c674840589be8db821fd9aAdam Langleyvoid ssh_packet_put_int64(struct ssh *, u_int64_t value); 9d059297112922cabb0c674840589be8db821fd9aAdam Langleyvoid ssh_packet_put_bignum(struct ssh *, BIGNUM * value); 10d059297112922cabb0c674840589be8db821fd9aAdam Langleyvoid ssh_packet_put_bignum2(struct ssh *, BIGNUM * value); 11d059297112922cabb0c674840589be8db821fd9aAdam Langleyvoid ssh_packet_put_ecpoint(struct ssh *, const EC_GROUP *, const EC_POINT *); 12d059297112922cabb0c674840589be8db821fd9aAdam Langleyvoid ssh_packet_put_string(struct ssh *, const void *buf, u_int len); 13d059297112922cabb0c674840589be8db821fd9aAdam Langleyvoid ssh_packet_put_cstring(struct ssh *, const char *str); 14d059297112922cabb0c674840589be8db821fd9aAdam Langleyvoid ssh_packet_put_raw(struct ssh *, const void *buf, u_int len); 15d059297112922cabb0c674840589be8db821fd9aAdam Langleyvoid ssh_packet_send(struct ssh *); 16d059297112922cabb0c674840589be8db821fd9aAdam Langley 17d059297112922cabb0c674840589be8db821fd9aAdam Langleyu_int ssh_packet_get_char(struct ssh *); 18d059297112922cabb0c674840589be8db821fd9aAdam Langleyu_int ssh_packet_get_int(struct ssh *); 19d059297112922cabb0c674840589be8db821fd9aAdam Langleyu_int64_t ssh_packet_get_int64(struct ssh *); 20d059297112922cabb0c674840589be8db821fd9aAdam Langleyvoid ssh_packet_get_bignum(struct ssh *, BIGNUM * value); 21d059297112922cabb0c674840589be8db821fd9aAdam Langleyvoid ssh_packet_get_bignum2(struct ssh *, BIGNUM * value); 22d059297112922cabb0c674840589be8db821fd9aAdam Langleyvoid ssh_packet_get_ecpoint(struct ssh *, const EC_GROUP *, EC_POINT *); 23d059297112922cabb0c674840589be8db821fd9aAdam Langleyvoid *ssh_packet_get_string(struct ssh *, u_int *length_ptr); 24d059297112922cabb0c674840589be8db821fd9aAdam Langleychar *ssh_packet_get_cstring(struct ssh *, u_int *length_ptr); 25d059297112922cabb0c674840589be8db821fd9aAdam Langley 26d059297112922cabb0c674840589be8db821fd9aAdam Langley/* don't allow remaining bytes after the end of the message */ 27d059297112922cabb0c674840589be8db821fd9aAdam Langley#define ssh_packet_check_eom(ssh) \ 28d059297112922cabb0c674840589be8db821fd9aAdam Langleydo { \ 29d059297112922cabb0c674840589be8db821fd9aAdam Langley int _len = ssh_packet_remaining(ssh); \ 30d059297112922cabb0c674840589be8db821fd9aAdam Langley if (_len > 0) { \ 31d059297112922cabb0c674840589be8db821fd9aAdam Langley logit("Packet integrity error (%d bytes remaining) at %s:%d", \ 32d059297112922cabb0c674840589be8db821fd9aAdam Langley _len ,__FILE__, __LINE__); \ 33d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_packet_disconnect(ssh, \ 34d059297112922cabb0c674840589be8db821fd9aAdam Langley "Packet integrity error."); \ 35d059297112922cabb0c674840589be8db821fd9aAdam Langley } \ 36d059297112922cabb0c674840589be8db821fd9aAdam Langley} while (0) 37d059297112922cabb0c674840589be8db821fd9aAdam Langley 38d059297112922cabb0c674840589be8db821fd9aAdam Langley/* old API */ 39d059297112922cabb0c674840589be8db821fd9aAdam Langleyvoid packet_close(void); 40d059297112922cabb0c674840589be8db821fd9aAdam Langleyu_int packet_get_char(void); 41d059297112922cabb0c674840589be8db821fd9aAdam Langleyu_int packet_get_int(void); 42d059297112922cabb0c674840589be8db821fd9aAdam Langleyvoid packet_backup_state(void); 43d059297112922cabb0c674840589be8db821fd9aAdam Langleyvoid packet_restore_state(void); 44d059297112922cabb0c674840589be8db821fd9aAdam Langleyvoid packet_set_connection(int, int); 45d059297112922cabb0c674840589be8db821fd9aAdam Langleyint packet_read_seqnr(u_int32_t *); 46d059297112922cabb0c674840589be8db821fd9aAdam Langleyint packet_read_poll_seqnr(u_int32_t *); 47d059297112922cabb0c674840589be8db821fd9aAdam Langleyvoid packet_process_incoming(const char *buf, u_int len); 48d059297112922cabb0c674840589be8db821fd9aAdam Langleyvoid packet_write_wait(void); 49d059297112922cabb0c674840589be8db821fd9aAdam Langleyvoid packet_write_poll(void); 50d059297112922cabb0c674840589be8db821fd9aAdam Langleyvoid packet_read_expect(int expected_type); 51d059297112922cabb0c674840589be8db821fd9aAdam Langley#define packet_set_timeout(timeout, count) \ 52d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_packet_set_timeout(active_state, (timeout), (count)) 53d059297112922cabb0c674840589be8db821fd9aAdam Langley#define packet_connection_is_on_socket() \ 54d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_packet_connection_is_on_socket(active_state) 55d059297112922cabb0c674840589be8db821fd9aAdam Langley#define packet_set_nonblocking() \ 56d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_packet_set_nonblocking(active_state) 57d059297112922cabb0c674840589be8db821fd9aAdam Langley#define packet_get_connection_in() \ 58d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_packet_get_connection_in(active_state) 59d059297112922cabb0c674840589be8db821fd9aAdam Langley#define packet_get_connection_out() \ 60d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_packet_get_connection_out(active_state) 61d059297112922cabb0c674840589be8db821fd9aAdam Langley#define packet_set_protocol_flags(protocol_flags) \ 62d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_packet_set_protocol_flags(active_state, (protocol_flags)) 63d059297112922cabb0c674840589be8db821fd9aAdam Langley#define packet_get_protocol_flags() \ 64d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_packet_get_protocol_flags(active_state) 65d059297112922cabb0c674840589be8db821fd9aAdam Langley#define packet_start_compression(level) \ 66d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_packet_start_compression(active_state, (level)) 67d059297112922cabb0c674840589be8db821fd9aAdam Langley#define packet_set_encryption_key(key, keylen, number) \ 68d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_packet_set_encryption_key(active_state, (key), (keylen), (number)) 69d059297112922cabb0c674840589be8db821fd9aAdam Langley#define packet_start(type) \ 70d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_packet_start(active_state, (type)) 71d059297112922cabb0c674840589be8db821fd9aAdam Langley#define packet_put_char(value) \ 72d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_packet_put_char(active_state, (value)) 73d059297112922cabb0c674840589be8db821fd9aAdam Langley#define packet_put_int(value) \ 74d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_packet_put_int(active_state, (value)) 75d059297112922cabb0c674840589be8db821fd9aAdam Langley#define packet_put_int64(value) \ 76d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_packet_put_int64(active_state, (value)) 77d059297112922cabb0c674840589be8db821fd9aAdam Langley#define packet_put_string( buf, len) \ 78d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_packet_put_string(active_state, (buf), (len)) 79d059297112922cabb0c674840589be8db821fd9aAdam Langley#define packet_put_cstring(str) \ 80d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_packet_put_cstring(active_state, (str)) 81d059297112922cabb0c674840589be8db821fd9aAdam Langley#define packet_put_raw(buf, len) \ 82d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_packet_put_raw(active_state, (buf), (len)) 83d059297112922cabb0c674840589be8db821fd9aAdam Langley#define packet_put_bignum(value) \ 84d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_packet_put_bignum(active_state, (value)) 85d059297112922cabb0c674840589be8db821fd9aAdam Langley#define packet_put_bignum2(value) \ 86d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_packet_put_bignum2(active_state, (value)) 87d059297112922cabb0c674840589be8db821fd9aAdam Langley#define packet_send() \ 88d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_packet_send(active_state) 89d059297112922cabb0c674840589be8db821fd9aAdam Langley#define packet_read() \ 90d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_packet_read(active_state) 91d059297112922cabb0c674840589be8db821fd9aAdam Langley#define packet_get_int64() \ 92d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_packet_get_int64(active_state) 93d059297112922cabb0c674840589be8db821fd9aAdam Langley#define packet_get_bignum(value) \ 94d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_packet_get_bignum(active_state, (value)) 95d059297112922cabb0c674840589be8db821fd9aAdam Langley#define packet_get_bignum2(value) \ 96d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_packet_get_bignum2(active_state, (value)) 97d059297112922cabb0c674840589be8db821fd9aAdam Langley#define packet_remaining() \ 98d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_packet_remaining(active_state) 99d059297112922cabb0c674840589be8db821fd9aAdam Langley#define packet_get_string(length_ptr) \ 100d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_packet_get_string(active_state, (length_ptr)) 101d059297112922cabb0c674840589be8db821fd9aAdam Langley#define packet_get_string_ptr(length_ptr) \ 102d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_packet_get_string_ptr(active_state, (length_ptr)) 103d059297112922cabb0c674840589be8db821fd9aAdam Langley#define packet_get_cstring(length_ptr) \ 104d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_packet_get_cstring(active_state, (length_ptr)) 105d059297112922cabb0c674840589be8db821fd9aAdam Langleyvoid packet_send_debug(const char *, ...) 106d059297112922cabb0c674840589be8db821fd9aAdam Langley __attribute__((format(printf, 1, 2))); 107d059297112922cabb0c674840589be8db821fd9aAdam Langleyvoid packet_disconnect(const char *, ...) 108d059297112922cabb0c674840589be8db821fd9aAdam Langley __attribute__((format(printf, 1, 2))) 109d059297112922cabb0c674840589be8db821fd9aAdam Langley __attribute__((noreturn)); 110d059297112922cabb0c674840589be8db821fd9aAdam Langley#define packet_have_data_to_write() \ 111d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_packet_have_data_to_write(active_state) 112d059297112922cabb0c674840589be8db821fd9aAdam Langley#define packet_not_very_much_data_to_write() \ 113d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_packet_not_very_much_data_to_write(active_state) 114d059297112922cabb0c674840589be8db821fd9aAdam Langley#define packet_set_interactive(interactive, qos_interactive, qos_bulk) \ 115d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_packet_set_interactive(active_state, (interactive), (qos_interactive), (qos_bulk)) 116d059297112922cabb0c674840589be8db821fd9aAdam Langley#define packet_is_interactive() \ 117d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_packet_is_interactive(active_state) 118d059297112922cabb0c674840589be8db821fd9aAdam Langley#define packet_set_maxsize(s) \ 119d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_packet_set_maxsize(active_state, (s)) 120d059297112922cabb0c674840589be8db821fd9aAdam Langley#define packet_inc_alive_timeouts() \ 121d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_packet_inc_alive_timeouts(active_state) 122d059297112922cabb0c674840589be8db821fd9aAdam Langley#define packet_set_alive_timeouts(ka) \ 123d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_packet_set_alive_timeouts(active_state, (ka)) 124d059297112922cabb0c674840589be8db821fd9aAdam Langley#define packet_get_maxsize() \ 125d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_packet_get_maxsize(active_state) 126d059297112922cabb0c674840589be8db821fd9aAdam Langley#define packet_add_padding(pad) \ 127d059297112922cabb0c674840589be8db821fd9aAdam Langley sshpkt_add_padding(active_state, (pad)) 128d059297112922cabb0c674840589be8db821fd9aAdam Langley#define packet_send_ignore(nbytes) \ 129d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_packet_send_ignore(active_state, (nbytes)) 130d059297112922cabb0c674840589be8db821fd9aAdam Langley#define packet_need_rekeying() \ 131d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_packet_need_rekeying(active_state) 132d059297112922cabb0c674840589be8db821fd9aAdam Langley#define packet_set_server() \ 133d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_packet_set_server(active_state) 134d059297112922cabb0c674840589be8db821fd9aAdam Langley#define packet_set_authenticated() \ 135d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_packet_set_authenticated(active_state) 136d059297112922cabb0c674840589be8db821fd9aAdam Langley#define packet_get_input() \ 137d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_packet_get_input(active_state) 138d059297112922cabb0c674840589be8db821fd9aAdam Langley#define packet_get_output() \ 139d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_packet_get_output(active_state) 140d059297112922cabb0c674840589be8db821fd9aAdam Langley#define packet_set_compress_hooks(ctx, allocfunc, freefunc) \ 141d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_packet_set_compress_hooks(active_state, ctx, \ 142d059297112922cabb0c674840589be8db821fd9aAdam Langley allocfunc, freefunc); 143d059297112922cabb0c674840589be8db821fd9aAdam Langley#define packet_check_eom() \ 144d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_packet_check_eom(active_state) 145d059297112922cabb0c674840589be8db821fd9aAdam Langley#define set_newkeys(mode) \ 146d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_set_newkeys(active_state, (mode)) 147d059297112922cabb0c674840589be8db821fd9aAdam Langley#define packet_get_state(m) \ 148d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_packet_get_state(active_state, m) 149d059297112922cabb0c674840589be8db821fd9aAdam Langley#define packet_set_state(m) \ 150d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_packet_set_state(active_state, m) 151d059297112922cabb0c674840589be8db821fd9aAdam Langley#if 0 152d059297112922cabb0c674840589be8db821fd9aAdam Langley#define get_remote_ipaddr() \ 153d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_remote_ipaddr(active_state) 154d059297112922cabb0c674840589be8db821fd9aAdam Langley#endif 155d059297112922cabb0c674840589be8db821fd9aAdam Langley#define packet_get_raw(lenp) \ 156d059297112922cabb0c674840589be8db821fd9aAdam Langley sshpkt_ptr(active_state, lenp) 157d059297112922cabb0c674840589be8db821fd9aAdam Langley#define packet_get_ecpoint(c,p) \ 158d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_packet_get_ecpoint(active_state, c, p) 159d059297112922cabb0c674840589be8db821fd9aAdam Langley#define packet_put_ecpoint(c,p) \ 160d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_packet_put_ecpoint(active_state, c, p) 161d059297112922cabb0c674840589be8db821fd9aAdam Langley#define packet_get_rekey_timeout() \ 162d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_packet_get_rekey_timeout(active_state) 163d059297112922cabb0c674840589be8db821fd9aAdam Langley#define packet_set_rekey_limits(x,y) \ 164d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_packet_set_rekey_limits(active_state, x, y) 165d059297112922cabb0c674840589be8db821fd9aAdam Langley#define packet_get_bytes(x,y) \ 166d059297112922cabb0c674840589be8db821fd9aAdam Langley ssh_packet_get_bytes(active_state, x, y) 167d059297112922cabb0c674840589be8db821fd9aAdam Langley 168d059297112922cabb0c674840589be8db821fd9aAdam Langley#endif /* _OPACKET_H */ 169