opacket.c revision 295367
1/* Written by Markus Friedl. Placed in the public domain. */ 2 3#include "includes.h" 4 5#include "ssherr.h" 6#include "packet.h" 7#include "log.h" 8 9struct ssh *active_state, *backup_state; 10 11/* Map old to new API */ 12 13void 14ssh_packet_start(struct ssh *ssh, u_char type) 15{ 16 int r; 17 18 if ((r = sshpkt_start(ssh, type)) != 0) 19 fatal("%s: %s", __func__, ssh_err(r)); 20} 21 22void 23ssh_packet_put_char(struct ssh *ssh, int value) 24{ 25 u_char ch = value; 26 int r; 27 28 if ((r = sshpkt_put_u8(ssh, ch)) != 0) 29 fatal("%s: %s", __func__, ssh_err(r)); 30} 31 32void 33ssh_packet_put_int(struct ssh *ssh, u_int value) 34{ 35 int r; 36 37 if ((r = sshpkt_put_u32(ssh, value)) != 0) 38 fatal("%s: %s", __func__, ssh_err(r)); 39} 40 41void 42ssh_packet_put_int64(struct ssh *ssh, u_int64_t value) 43{ 44 int r; 45 46 if ((r = sshpkt_put_u64(ssh, value)) != 0) 47 fatal("%s: %s", __func__, ssh_err(r)); 48} 49 50void 51ssh_packet_put_string(struct ssh *ssh, const void *buf, u_int len) 52{ 53 int r; 54 55 if ((r = sshpkt_put_string(ssh, buf, len)) != 0) 56 fatal("%s: %s", __func__, ssh_err(r)); 57} 58 59void 60ssh_packet_put_cstring(struct ssh *ssh, const char *str) 61{ 62 int r; 63 64 if ((r = sshpkt_put_cstring(ssh, str)) != 0) 65 fatal("%s: %s", __func__, ssh_err(r)); 66} 67 68void 69ssh_packet_put_raw(struct ssh *ssh, const void *buf, u_int len) 70{ 71 int r; 72 73 if ((r = sshpkt_put(ssh, buf, len)) != 0) 74 fatal("%s: %s", __func__, ssh_err(r)); 75} 76 77#ifdef WITH_SSH1 78void 79ssh_packet_put_bignum(struct ssh *ssh, BIGNUM * value) 80{ 81 int r; 82 83 if ((r = sshpkt_put_bignum1(ssh, value)) != 0) 84 fatal("%s: %s", __func__, ssh_err(r)); 85} 86#endif 87 88#ifdef WITH_OPENSSL 89void 90ssh_packet_put_bignum2(struct ssh *ssh, BIGNUM * value) 91{ 92 int r; 93 94 if ((r = sshpkt_put_bignum2(ssh, value)) != 0) 95 fatal("%s: %s", __func__, ssh_err(r)); 96} 97 98# ifdef OPENSSL_HAS_ECC 99void 100ssh_packet_put_ecpoint(struct ssh *ssh, const EC_GROUP *curve, 101 const EC_POINT *point) 102{ 103 int r; 104 105 if ((r = sshpkt_put_ec(ssh, point, curve)) != 0) 106 fatal("%s: %s", __func__, ssh_err(r)); 107} 108# endif 109#endif /* WITH_OPENSSL */ 110 111void 112ssh_packet_send(struct ssh *ssh) 113{ 114 int r; 115 116 if ((r = sshpkt_send(ssh)) != 0) 117 fatal("%s: %s", __func__, ssh_err(r)); 118} 119 120u_int 121ssh_packet_get_char(struct ssh *ssh) 122{ 123 u_char ch; 124 int r; 125 126 if ((r = sshpkt_get_u8(ssh, &ch)) != 0) 127 fatal("%s: %s", __func__, ssh_err(r)); 128 return ch; 129} 130 131u_int 132ssh_packet_get_int(struct ssh *ssh) 133{ 134 u_int val; 135 int r; 136 137 if ((r = sshpkt_get_u32(ssh, &val)) != 0) 138 fatal("%s: %s", __func__, ssh_err(r)); 139 return val; 140} 141 142u_int64_t 143ssh_packet_get_int64(struct ssh *ssh) 144{ 145 u_int64_t val; 146 int r; 147 148 if ((r = sshpkt_get_u64(ssh, &val)) != 0) 149 fatal("%s: %s", __func__, ssh_err(r)); 150 return val; 151} 152 153#ifdef WITH_SSH1 154void 155ssh_packet_get_bignum(struct ssh *ssh, BIGNUM * value) 156{ 157 int r; 158 159 if ((r = sshpkt_get_bignum1(ssh, value)) != 0) 160 fatal("%s: %s", __func__, ssh_err(r)); 161} 162#endif 163 164#ifdef WITH_OPENSSL 165void 166ssh_packet_get_bignum2(struct ssh *ssh, BIGNUM * value) 167{ 168 int r; 169 170 if ((r = sshpkt_get_bignum2(ssh, value)) != 0) 171 fatal("%s: %s", __func__, ssh_err(r)); 172} 173 174# ifdef OPENSSL_HAS_ECC 175void 176ssh_packet_get_ecpoint(struct ssh *ssh, const EC_GROUP *curve, EC_POINT *point) 177{ 178 int r; 179 180 if ((r = sshpkt_get_ec(ssh, point, curve)) != 0) 181 fatal("%s: %s", __func__, ssh_err(r)); 182} 183# endif 184#endif /* WITH_OPENSSL */ 185 186void * 187ssh_packet_get_string(struct ssh *ssh, u_int *length_ptr) 188{ 189 int r; 190 size_t len; 191 u_char *val; 192 193 if ((r = sshpkt_get_string(ssh, &val, &len)) != 0) 194 fatal("%s: %s", __func__, ssh_err(r)); 195 if (length_ptr != NULL) 196 *length_ptr = (u_int)len; 197 return val; 198} 199 200const void * 201ssh_packet_get_string_ptr(struct ssh *ssh, u_int *length_ptr) 202{ 203 int r; 204 size_t len; 205 const u_char *val; 206 207 if ((r = sshpkt_get_string_direct(ssh, &val, &len)) != 0) 208 fatal("%s: %s", __func__, ssh_err(r)); 209 if (length_ptr != NULL) 210 *length_ptr = (u_int)len; 211 return val; 212} 213 214char * 215ssh_packet_get_cstring(struct ssh *ssh, u_int *length_ptr) 216{ 217 int r; 218 size_t len; 219 char *val; 220 221 if ((r = sshpkt_get_cstring(ssh, &val, &len)) != 0) 222 fatal("%s: %s", __func__, ssh_err(r)); 223 if (length_ptr != NULL) 224 *length_ptr = (u_int)len; 225 return val; 226} 227 228/* Old API, that had to be reimplemented */ 229 230void 231packet_set_connection(int fd_in, int fd_out) 232{ 233 active_state = ssh_packet_set_connection(active_state, fd_in, fd_out); 234 if (active_state == NULL) 235 fatal("%s: ssh_packet_set_connection failed", __func__); 236} 237 238void 239packet_backup_state(void) 240{ 241 ssh_packet_backup_state(active_state, backup_state); 242} 243 244void 245packet_restore_state(void) 246{ 247 ssh_packet_restore_state(active_state, backup_state); 248} 249 250u_int 251packet_get_char(void) 252{ 253 return (ssh_packet_get_char(active_state)); 254} 255 256u_int 257packet_get_int(void) 258{ 259 return (ssh_packet_get_int(active_state)); 260} 261 262int 263packet_read_seqnr(u_int32_t *seqnr) 264{ 265 u_char type; 266 int r; 267 268 if ((r = ssh_packet_read_seqnr(active_state, &type, seqnr)) != 0) 269 sshpkt_fatal(active_state, __func__, r); 270 return type; 271} 272 273int 274packet_read_poll_seqnr(u_int32_t *seqnr) 275{ 276 u_char type; 277 int r; 278 279 if ((r = ssh_packet_read_poll_seqnr(active_state, &type, seqnr))) 280 sshpkt_fatal(active_state, __func__, r); 281 return type; 282} 283 284void 285packet_close(void) 286{ 287 ssh_packet_close(active_state); 288 active_state = NULL; 289} 290 291void 292packet_process_incoming(const char *buf, u_int len) 293{ 294 int r; 295 296 if ((r = ssh_packet_process_incoming(active_state, buf, len)) != 0) 297 sshpkt_fatal(active_state, __func__, r); 298} 299 300void 301packet_write_wait(void) 302{ 303 int r; 304 305 if ((r = ssh_packet_write_wait(active_state)) != 0) 306 sshpkt_fatal(active_state, __func__, r); 307} 308 309void 310packet_write_poll(void) 311{ 312 int r; 313 314 if ((r = ssh_packet_write_poll(active_state)) != 0) 315 sshpkt_fatal(active_state, __func__, r); 316} 317 318void 319packet_read_expect(int expected_type) 320{ 321 int r; 322 323 if ((r = ssh_packet_read_expect(active_state, expected_type)) != 0) 324 sshpkt_fatal(active_state, __func__, r); 325} 326 327void 328packet_disconnect(const char *fmt, ...) 329{ 330 char buf[1024]; 331 va_list args; 332 333 va_start(args, fmt); 334 vsnprintf(buf, sizeof(buf), fmt, args); 335 va_end(args); 336 ssh_packet_disconnect(active_state, "%s", buf); 337} 338 339void 340packet_send_debug(const char *fmt, ...) 341{ 342 char buf[1024]; 343 va_list args; 344 345 va_start(args, fmt); 346 vsnprintf(buf, sizeof(buf), fmt, args); 347 va_end(args); 348 ssh_packet_send_debug(active_state, "%s", buf); 349} 350