cb = s->ctx->info_callback;
s->in_handshake++;
- if (!SSL_in_init(s) || SSL_in_before(s))
- SSL_clear(s);
+ if (!SSL_in_init(s) || SSL_in_before(s)) {
+ if(!SSL_clear(s))
+ return -1;
+ }
for (;;) {
state = s->state;
* 6-8 length > Client Hello message
* 9/10 client_version /
*/
- char buf_space[11];
- char *buf = &(buf_space[0]);
+ unsigned char buf_space[11];
+ unsigned char *buf = &(buf_space[0]);
unsigned char *p, *d, *d_len, *dd;
unsigned int i;
unsigned int csl, sil, cl;
if (n != sizeof buf_space)
return (n); /* n == -1 || n == 0 */
- p = s->packet;
+ p = RECORD_LAYER_get_packet(&s->rlayer);
memcpy(buf, p, n);
*/
type = 2;
- p = s->packet;
+ p = RECORD_LAYER_get_packet(&s->rlayer);
v[0] = p[3]; /* == SSL3_VERSION_MAJOR */
v[1] = p[4];
- /*-
- * An SSLv3/TLSv1 backwards-compatible CLIENT-HELLO in an SSLv2
- * header is sent directly on the wire, not wrapped as a TLS
- * record. It's format is:
- * Byte Content
- * 0-1 msg_length
- * 2 msg_type
- * 3-4 version
- * 5-6 cipher_spec_length
- * 7-8 session_id_length
- * 9-10 challenge_length
- * ... ...
- */
+ /*-
+ * An SSLv3/TLSv1 backwards-compatible CLIENT-HELLO in an SSLv2
+ * header is sent directly on the wire, not wrapped as a TLS
+ * record. It's format is:
+ * Byte Content
+ * 0-1 msg_length
+ * 2 msg_type
+ * 3-4 version
+ * 5-6 cipher_spec_length
+ * 7-8 session_id_length
+ * 9-10 challenge_length
+ * ... ...
+ */
n = ((p[0] & 0x7f) << 8) | p[1];
if (n > (1024 * 4)) {
SSLerr(SSL_F_SSL23_GET_CLIENT_HELLO, SSL_R_RECORD_TOO_LARGE);
if (j <= 0)
return (j);
- ssl3_finish_mac(s, s->packet + 2, s->packet_length - 2);
+ ssl3_finish_mac(s, RECORD_LAYER_get_packet(&s->rlayer) + 2,
+ RECORD_LAYER_get_packet_length(&s->rlayer) - 2);
/* CLIENT-HELLO */
if (s->msg_callback)
- s->msg_callback(0, SSL2_VERSION, 0, s->packet + 2,
- s->packet_length - 2, s, s->msg_callback_arg);
+ s->msg_callback(0, SSL2_VERSION, 0,
+ RECORD_LAYER_get_packet(&s->rlayer) + 2,
+ RECORD_LAYER_get_packet_length(&s->rlayer) - 2, s,
+ s->msg_callback_arg);
- p = s->packet;
+ p = RECORD_LAYER_get_packet(&s->rlayer);
p += 5;
n2s(p, csl);
n2s(p, sil);
n2s(p, cl);
d = (unsigned char *)s->init_buf->data;
- if ((csl + sil + cl + 11) != s->packet_length) { /* We can't have TLS
- * extensions in SSL
- * 2.0 format *
- * Client Hello, can
- * we? Error
- * condition should
- * be * '>'
- * otherweise */
+ if ((csl + sil + cl + 11)
+ != RECORD_LAYER_get_packet_length(&s->rlayer)) {
+ /* We can't have TLS
+ * extensions in SSL
+ * 2.0 format *
+ * Client Hello, can
+ * we? Error
+ * condition should
+ * be * '>'
+ * otherweise */
SSLerr(SSL_F_SSL23_GET_CLIENT_HELLO,
SSL_R_RECORD_LENGTH_MISMATCH);
goto err;
/*
* put the 'n' bytes we have read into the input buffer for SSLv3
*/
- s->rstate = SSL_ST_READ_HEADER;
- s->packet_length = n;
- if (s->s3->rbuf.buf == NULL)
- if (!ssl3_setup_read_buffer(s))
- goto err;
-
- s->packet = &(s->s3->rbuf.buf[0]);
- memcpy(s->packet, buf, n);
- s->s3->rbuf.left = n;
- s->s3->rbuf.offset = 0;
+ if(!RECORD_LAYER_set_data(&s->rlayer, buf, n))
+ goto err;
} else {
- s->packet_length = 0;
- s->s3->rbuf.left = 0;
- s->s3->rbuf.offset = 0;
+ if(!RECORD_LAYER_set_data(&s->rlayer, NULL, 0))
+ goto err;
}
-#if 0 /* ssl3_get_client_hello does this */
- s->client_version = (v[0] << 8) | v[1];
-#endif
s->handshake_func = s->method->ssl_accept;
} else {
/* bad, very bad */