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