kernel - Do a better job locking CAM ref counts
[dragonfly.git] / crypto / openssh / opacket.c
blob5970dd3771cc404ac98be4b34c1961152bfeec12
1 /* Written by Markus Friedl. Placed in the public domain. */
3 #include "includes.h"
5 #include "ssherr.h"
6 #include "packet.h"
7 #include "log.h"
9 struct ssh *active_state, *backup_state;
11 /* Map old to new API */
13 void
14 ssh_packet_start(struct ssh *ssh, u_char type)
16 int r;
18 if ((r = sshpkt_start(ssh, type)) != 0)
19 fatal("%s: %s", __func__, ssh_err(r));
22 void
23 ssh_packet_put_char(struct ssh *ssh, int value)
25 u_char ch = value;
26 int r;
28 if ((r = sshpkt_put_u8(ssh, ch)) != 0)
29 fatal("%s: %s", __func__, ssh_err(r));
32 void
33 ssh_packet_put_int(struct ssh *ssh, u_int value)
35 int r;
37 if ((r = sshpkt_put_u32(ssh, value)) != 0)
38 fatal("%s: %s", __func__, ssh_err(r));
41 void
42 ssh_packet_put_int64(struct ssh *ssh, u_int64_t value)
44 int r;
46 if ((r = sshpkt_put_u64(ssh, value)) != 0)
47 fatal("%s: %s", __func__, ssh_err(r));
50 void
51 ssh_packet_put_string(struct ssh *ssh, const void *buf, u_int len)
53 int r;
55 if ((r = sshpkt_put_string(ssh, buf, len)) != 0)
56 fatal("%s: %s", __func__, ssh_err(r));
59 void
60 ssh_packet_put_cstring(struct ssh *ssh, const char *str)
62 int r;
64 if ((r = sshpkt_put_cstring(ssh, str)) != 0)
65 fatal("%s: %s", __func__, ssh_err(r));
68 void
69 ssh_packet_put_raw(struct ssh *ssh, const void *buf, u_int len)
71 int r;
73 if ((r = sshpkt_put(ssh, buf, len)) != 0)
74 fatal("%s: %s", __func__, ssh_err(r));
77 #ifdef WITH_SSH1
78 void
79 ssh_packet_put_bignum(struct ssh *ssh, BIGNUM * value)
81 int r;
83 if ((r = sshpkt_put_bignum1(ssh, value)) != 0)
84 fatal("%s: %s", __func__, ssh_err(r));
86 #endif
88 #ifdef WITH_OPENSSL
89 void
90 ssh_packet_put_bignum2(struct ssh *ssh, BIGNUM * value)
92 int r;
94 if ((r = sshpkt_put_bignum2(ssh, value)) != 0)
95 fatal("%s: %s", __func__, ssh_err(r));
98 # ifdef OPENSSL_HAS_ECC
99 void
100 ssh_packet_put_ecpoint(struct ssh *ssh, const EC_GROUP *curve,
101 const EC_POINT *point)
103 int r;
105 if ((r = sshpkt_put_ec(ssh, point, curve)) != 0)
106 fatal("%s: %s", __func__, ssh_err(r));
108 # endif
109 #endif /* WITH_OPENSSL */
111 void
112 ssh_packet_send(struct ssh *ssh)
114 int r;
116 if ((r = sshpkt_send(ssh)) != 0)
117 fatal("%s: %s", __func__, ssh_err(r));
120 u_int
121 ssh_packet_get_char(struct ssh *ssh)
123 u_char ch;
124 int r;
126 if ((r = sshpkt_get_u8(ssh, &ch)) != 0)
127 fatal("%s: %s", __func__, ssh_err(r));
128 return ch;
131 u_int
132 ssh_packet_get_int(struct ssh *ssh)
134 u_int val;
135 int r;
137 if ((r = sshpkt_get_u32(ssh, &val)) != 0)
138 fatal("%s: %s", __func__, ssh_err(r));
139 return val;
142 u_int64_t
143 ssh_packet_get_int64(struct ssh *ssh)
145 u_int64_t val;
146 int r;
148 if ((r = sshpkt_get_u64(ssh, &val)) != 0)
149 fatal("%s: %s", __func__, ssh_err(r));
150 return val;
153 #ifdef WITH_SSH1
154 void
155 ssh_packet_get_bignum(struct ssh *ssh, BIGNUM * value)
157 int r;
159 if ((r = sshpkt_get_bignum1(ssh, value)) != 0)
160 fatal("%s: %s", __func__, ssh_err(r));
162 #endif
164 #ifdef WITH_OPENSSL
165 void
166 ssh_packet_get_bignum2(struct ssh *ssh, BIGNUM * value)
168 int r;
170 if ((r = sshpkt_get_bignum2(ssh, value)) != 0)
171 fatal("%s: %s", __func__, ssh_err(r));
174 # ifdef OPENSSL_HAS_ECC
175 void
176 ssh_packet_get_ecpoint(struct ssh *ssh, const EC_GROUP *curve, EC_POINT *point)
178 int r;
180 if ((r = sshpkt_get_ec(ssh, point, curve)) != 0)
181 fatal("%s: %s", __func__, ssh_err(r));
183 # endif
184 #endif /* WITH_OPENSSL */
186 void *
187 ssh_packet_get_string(struct ssh *ssh, u_int *length_ptr)
189 int r;
190 size_t len;
191 u_char *val;
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;
200 const void *
201 ssh_packet_get_string_ptr(struct ssh *ssh, u_int *length_ptr)
203 int r;
204 size_t len;
205 const u_char *val;
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;
214 char *
215 ssh_packet_get_cstring(struct ssh *ssh, u_int *length_ptr)
217 int r;
218 size_t len;
219 char *val;
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;
228 /* Old API, that had to be reimplemented */
230 void
231 packet_set_connection(int fd_in, int fd_out)
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__);
238 u_int
239 packet_get_char(void)
241 return (ssh_packet_get_char(active_state));
244 u_int
245 packet_get_int(void)
247 return (ssh_packet_get_int(active_state));
251 packet_read_seqnr(u_int32_t *seqnr)
253 u_char type;
254 int r;
256 if ((r = ssh_packet_read_seqnr(active_state, &type, seqnr)) != 0)
257 sshpkt_fatal(active_state, __func__, r);
258 return type;
262 packet_read_poll_seqnr(u_int32_t *seqnr)
264 u_char type;
265 int r;
267 if ((r = ssh_packet_read_poll_seqnr(active_state, &type, seqnr)))
268 sshpkt_fatal(active_state, __func__, r);
269 return type;
272 void
273 packet_close(void)
275 ssh_packet_close(active_state);
276 active_state = NULL;
279 void
280 packet_process_incoming(const char *buf, u_int len)
282 int r;
284 if ((r = ssh_packet_process_incoming(active_state, buf, len)) != 0)
285 sshpkt_fatal(active_state, __func__, r);
288 void
289 packet_write_wait(void)
291 int r;
293 if ((r = ssh_packet_write_wait(active_state)) != 0)
294 sshpkt_fatal(active_state, __func__, r);
297 void
298 packet_write_poll(void)
300 int r;
302 if ((r = ssh_packet_write_poll(active_state)) != 0)
303 sshpkt_fatal(active_state, __func__, r);
306 void
307 packet_read_expect(int expected_type)
309 int r;
311 if ((r = ssh_packet_read_expect(active_state, expected_type)) != 0)
312 sshpkt_fatal(active_state, __func__, r);
315 void
316 packet_disconnect(const char *fmt, ...)
318 char buf[1024];
319 va_list args;
321 va_start(args, fmt);
322 vsnprintf(buf, sizeof(buf), fmt, args);
323 va_end(args);
324 ssh_packet_disconnect(active_state, "%s", buf);
327 void
328 packet_send_debug(const char *fmt, ...)
330 char buf[1024];
331 va_list args;
333 va_start(args, fmt);
334 vsnprintf(buf, sizeof(buf), fmt, args);
335 va_end(args);
336 ssh_packet_send_debug(active_state, "%s", buf);