summaryrefslogtreecommitdiff
path: root/src/lib/libssl/ssl_clnt.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/lib/libssl/ssl_clnt.c106
1 files changed, 53 insertions, 53 deletions
diff --git a/src/lib/libssl/ssl_clnt.c b/src/lib/libssl/ssl_clnt.c
index f6ca3e7f3c..a1745143f0 100644
--- a/src/lib/libssl/ssl_clnt.c
+++ b/src/lib/libssl/ssl_clnt.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssl_clnt.c,v 1.13 2017/05/06 22:24:57 beck Exp $ */ 1/* $OpenBSD: ssl_clnt.c,v 1.14 2017/05/07 04:22:24 beck Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -193,12 +193,12 @@ ssl3_connect(SSL *s)
193 SSL_clear(s); 193 SSL_clear(s);
194 194
195 for (;;) { 195 for (;;) {
196 state = s->internal->state; 196 state = S3I(s)->hs.state;
197 197
198 switch (s->internal->state) { 198 switch (S3I(s)->hs.state) {
199 case SSL_ST_RENEGOTIATE: 199 case SSL_ST_RENEGOTIATE:
200 s->internal->renegotiate = 1; 200 s->internal->renegotiate = 1;
201 s->internal->state = SSL_ST_CONNECT; 201 S3I(s)->hs.state = SSL_ST_CONNECT;
202 s->ctx->internal->stats.sess_connect_renegotiate++; 202 s->ctx->internal->stats.sess_connect_renegotiate++;
203 /* break */ 203 /* break */
204 case SSL_ST_BEFORE: 204 case SSL_ST_BEFORE:
@@ -239,7 +239,7 @@ ssl3_connect(SSL *s)
239 goto end; 239 goto end;
240 } 240 }
241 241
242 s->internal->state = SSL3_ST_CW_CLNT_HELLO_A; 242 S3I(s)->hs.state = SSL3_ST_CW_CLNT_HELLO_A;
243 s->ctx->internal->stats.sess_connect++; 243 s->ctx->internal->stats.sess_connect++;
244 s->internal->init_num = 0; 244 s->internal->init_num = 0;
245 break; 245 break;
@@ -251,7 +251,7 @@ ssl3_connect(SSL *s)
251 ret = ssl3_client_hello(s); 251 ret = ssl3_client_hello(s);
252 if (ret <= 0) 252 if (ret <= 0)
253 goto end; 253 goto end;
254 s->internal->state = SSL3_ST_CR_SRVR_HELLO_A; 254 S3I(s)->hs.state = SSL3_ST_CR_SRVR_HELLO_A;
255 s->internal->init_num = 0; 255 s->internal->init_num = 0;
256 256
257 /* turn on buffering for the next lot of output */ 257 /* turn on buffering for the next lot of output */
@@ -267,13 +267,13 @@ ssl3_connect(SSL *s)
267 goto end; 267 goto end;
268 268
269 if (s->internal->hit) { 269 if (s->internal->hit) {
270 s->internal->state = SSL3_ST_CR_FINISHED_A; 270 S3I(s)->hs.state = SSL3_ST_CR_FINISHED_A;
271 if (s->internal->tlsext_ticket_expected) { 271 if (s->internal->tlsext_ticket_expected) {
272 /* receive renewed session ticket */ 272 /* receive renewed session ticket */
273 s->internal->state = SSL3_ST_CR_SESSION_TICKET_A; 273 S3I(s)->hs.state = SSL3_ST_CR_SESSION_TICKET_A;
274 } 274 }
275 } else 275 } else
276 s->internal->state = SSL3_ST_CR_CERT_A; 276 S3I(s)->hs.state = SSL3_ST_CR_CERT_A;
277 s->internal->init_num = 0; 277 s->internal->init_num = 0;
278 break; 278 break;
279 279
@@ -285,9 +285,9 @@ ssl3_connect(SSL *s)
285 if (ret == 2) { 285 if (ret == 2) {
286 s->internal->hit = 1; 286 s->internal->hit = 1;
287 if (s->internal->tlsext_ticket_expected) 287 if (s->internal->tlsext_ticket_expected)
288 s->internal->state = SSL3_ST_CR_SESSION_TICKET_A; 288 S3I(s)->hs.state = SSL3_ST_CR_SESSION_TICKET_A;
289 else 289 else
290 s->internal->state = SSL3_ST_CR_FINISHED_A; 290 S3I(s)->hs.state = SSL3_ST_CR_FINISHED_A;
291 s->internal->init_num = 0; 291 s->internal->init_num = 0;
292 break; 292 break;
293 } 293 }
@@ -298,12 +298,12 @@ ssl3_connect(SSL *s)
298 if (ret <= 0) 298 if (ret <= 0)
299 goto end; 299 goto end;
300 if (s->internal->tlsext_status_expected) 300 if (s->internal->tlsext_status_expected)
301 s->internal->state = SSL3_ST_CR_CERT_STATUS_A; 301 S3I(s)->hs.state = SSL3_ST_CR_CERT_STATUS_A;
302 else 302 else
303 s->internal->state = SSL3_ST_CR_KEY_EXCH_A; 303 S3I(s)->hs.state = SSL3_ST_CR_KEY_EXCH_A;
304 } else { 304 } else {
305 skip = 1; 305 skip = 1;
306 s->internal->state = SSL3_ST_CR_KEY_EXCH_A; 306 S3I(s)->hs.state = SSL3_ST_CR_KEY_EXCH_A;
307 } 307 }
308 s->internal->init_num = 0; 308 s->internal->init_num = 0;
309 break; 309 break;
@@ -313,7 +313,7 @@ ssl3_connect(SSL *s)
313 ret = ssl3_get_server_key_exchange(s); 313 ret = ssl3_get_server_key_exchange(s);
314 if (ret <= 0) 314 if (ret <= 0)
315 goto end; 315 goto end;
316 s->internal->state = SSL3_ST_CR_CERT_REQ_A; 316 S3I(s)->hs.state = SSL3_ST_CR_CERT_REQ_A;
317 s->internal->init_num = 0; 317 s->internal->init_num = 0;
318 318
319 /* 319 /*
@@ -331,7 +331,7 @@ ssl3_connect(SSL *s)
331 ret = ssl3_get_certificate_request(s); 331 ret = ssl3_get_certificate_request(s);
332 if (ret <= 0) 332 if (ret <= 0)
333 goto end; 333 goto end;
334 s->internal->state = SSL3_ST_CR_SRVR_DONE_A; 334 S3I(s)->hs.state = SSL3_ST_CR_SRVR_DONE_A;
335 s->internal->init_num = 0; 335 s->internal->init_num = 0;
336 break; 336 break;
337 337
@@ -341,9 +341,9 @@ ssl3_connect(SSL *s)
341 if (ret <= 0) 341 if (ret <= 0)
342 goto end; 342 goto end;
343 if (S3I(s)->tmp.cert_req) 343 if (S3I(s)->tmp.cert_req)
344 s->internal->state = SSL3_ST_CW_CERT_A; 344 S3I(s)->hs.state = SSL3_ST_CW_CERT_A;
345 else 345 else
346 s->internal->state = SSL3_ST_CW_KEY_EXCH_A; 346 S3I(s)->hs.state = SSL3_ST_CW_KEY_EXCH_A;
347 s->internal->init_num = 0; 347 s->internal->init_num = 0;
348 348
349 break; 349 break;
@@ -355,7 +355,7 @@ ssl3_connect(SSL *s)
355 ret = ssl3_send_client_certificate(s); 355 ret = ssl3_send_client_certificate(s);
356 if (ret <= 0) 356 if (ret <= 0)
357 goto end; 357 goto end;
358 s->internal->state = SSL3_ST_CW_KEY_EXCH_A; 358 S3I(s)->hs.state = SSL3_ST_CW_KEY_EXCH_A;
359 s->internal->init_num = 0; 359 s->internal->init_num = 0;
360 break; 360 break;
361 361
@@ -381,13 +381,13 @@ ssl3_connect(SSL *s)
381 * inside the client certificate. 381 * inside the client certificate.
382 */ 382 */
383 if (S3I(s)->tmp.cert_req == 1) { 383 if (S3I(s)->tmp.cert_req == 1) {
384 s->internal->state = SSL3_ST_CW_CERT_VRFY_A; 384 S3I(s)->hs.state = SSL3_ST_CW_CERT_VRFY_A;
385 } else { 385 } else {
386 s->internal->state = SSL3_ST_CW_CHANGE_A; 386 S3I(s)->hs.state = SSL3_ST_CW_CHANGE_A;
387 S3I(s)->change_cipher_spec = 0; 387 S3I(s)->change_cipher_spec = 0;
388 } 388 }
389 if (s->s3->flags & TLS1_FLAGS_SKIP_CERT_VERIFY) { 389 if (s->s3->flags & TLS1_FLAGS_SKIP_CERT_VERIFY) {
390 s->internal->state = SSL3_ST_CW_CHANGE_A; 390 S3I(s)->hs.state = SSL3_ST_CW_CHANGE_A;
391 S3I(s)->change_cipher_spec = 0; 391 S3I(s)->change_cipher_spec = 0;
392 } 392 }
393 393
@@ -399,7 +399,7 @@ ssl3_connect(SSL *s)
399 ret = ssl3_send_client_verify(s); 399 ret = ssl3_send_client_verify(s);
400 if (ret <= 0) 400 if (ret <= 0)
401 goto end; 401 goto end;
402 s->internal->state = SSL3_ST_CW_CHANGE_A; 402 S3I(s)->hs.state = SSL3_ST_CW_CHANGE_A;
403 s->internal->init_num = 0; 403 s->internal->init_num = 0;
404 S3I(s)->change_cipher_spec = 0; 404 S3I(s)->change_cipher_spec = 0;
405 break; 405 break;
@@ -412,9 +412,9 @@ ssl3_connect(SSL *s)
412 goto end; 412 goto end;
413 413
414 if (S3I(s)->next_proto_neg_seen) 414 if (S3I(s)->next_proto_neg_seen)
415 s->internal->state = SSL3_ST_CW_NEXT_PROTO_A; 415 S3I(s)->hs.state = SSL3_ST_CW_NEXT_PROTO_A;
416 else 416 else
417 s->internal->state = SSL3_ST_CW_FINISHED_A; 417 S3I(s)->hs.state = SSL3_ST_CW_FINISHED_A;
418 s->internal->init_num = 0; 418 s->internal->init_num = 0;
419 419
420 s->session->cipher = S3I(s)->hs.new_cipher; 420 s->session->cipher = S3I(s)->hs.new_cipher;
@@ -436,7 +436,7 @@ ssl3_connect(SSL *s)
436 ret = ssl3_send_next_proto(s); 436 ret = ssl3_send_next_proto(s);
437 if (ret <= 0) 437 if (ret <= 0)
438 goto end; 438 goto end;
439 s->internal->state = SSL3_ST_CW_FINISHED_A; 439 S3I(s)->hs.state = SSL3_ST_CW_FINISHED_A;
440 break; 440 break;
441 441
442 case SSL3_ST_CW_FINISHED_A: 442 case SSL3_ST_CW_FINISHED_A:
@@ -448,7 +448,7 @@ ssl3_connect(SSL *s)
448 if (ret <= 0) 448 if (ret <= 0)
449 goto end; 449 goto end;
450 s->s3->flags |= SSL3_FLAGS_CCS_OK; 450 s->s3->flags |= SSL3_FLAGS_CCS_OK;
451 s->internal->state = SSL3_ST_CW_FLUSH; 451 S3I(s)->hs.state = SSL3_ST_CW_FLUSH;
452 452
453 /* clear flags */ 453 /* clear flags */
454 s->s3->flags &= ~SSL3_FLAGS_POP_BUFFER; 454 s->s3->flags &= ~SSL3_FLAGS_POP_BUFFER;
@@ -456,7 +456,7 @@ ssl3_connect(SSL *s)
456 S3I(s)->hs.next_state = SSL_ST_OK; 456 S3I(s)->hs.next_state = SSL_ST_OK;
457 if (s->s3->flags & 457 if (s->s3->flags &
458 SSL3_FLAGS_DELAY_CLIENT_FINISHED) { 458 SSL3_FLAGS_DELAY_CLIENT_FINISHED) {
459 s->internal->state = SSL_ST_OK; 459 S3I(s)->hs.state = SSL_ST_OK;
460 s->s3->flags|=SSL3_FLAGS_POP_BUFFER; 460 s->s3->flags|=SSL3_FLAGS_POP_BUFFER;
461 S3I(s)->delay_buf_pop_ret = 0; 461 S3I(s)->delay_buf_pop_ret = 0;
462 } 462 }
@@ -477,7 +477,7 @@ ssl3_connect(SSL *s)
477 ret = ssl3_get_new_session_ticket(s); 477 ret = ssl3_get_new_session_ticket(s);
478 if (ret <= 0) 478 if (ret <= 0)
479 goto end; 479 goto end;
480 s->internal->state = SSL3_ST_CR_FINISHED_A; 480 S3I(s)->hs.state = SSL3_ST_CR_FINISHED_A;
481 s->internal->init_num = 0; 481 s->internal->init_num = 0;
482 break; 482 break;
483 483
@@ -486,7 +486,7 @@ ssl3_connect(SSL *s)
486 ret = ssl3_get_cert_status(s); 486 ret = ssl3_get_cert_status(s);
487 if (ret <= 0) 487 if (ret <= 0)
488 goto end; 488 goto end;
489 s->internal->state = SSL3_ST_CR_KEY_EXCH_A; 489 S3I(s)->hs.state = SSL3_ST_CR_KEY_EXCH_A;
490 s->internal->init_num = 0; 490 s->internal->init_num = 0;
491 break; 491 break;
492 492
@@ -499,9 +499,9 @@ ssl3_connect(SSL *s)
499 goto end; 499 goto end;
500 500
501 if (s->internal->hit) 501 if (s->internal->hit)
502 s->internal->state = SSL3_ST_CW_CHANGE_A; 502 S3I(s)->hs.state = SSL3_ST_CW_CHANGE_A;
503 else 503 else
504 s->internal->state = SSL_ST_OK; 504 S3I(s)->hs.state = SSL_ST_OK;
505 s->internal->init_num = 0; 505 s->internal->init_num = 0;
506 break; 506 break;
507 507
@@ -512,7 +512,7 @@ ssl3_connect(SSL *s)
512 goto end; 512 goto end;
513 } 513 }
514 s->internal->rwstate = SSL_NOTHING; 514 s->internal->rwstate = SSL_NOTHING;
515 s->internal->state = S3I(s)->hs.next_state; 515 S3I(s)->hs.state = S3I(s)->hs.next_state;
516 break; 516 break;
517 517
518 case SSL_ST_OK: 518 case SSL_ST_OK:
@@ -563,11 +563,11 @@ ssl3_connect(SSL *s)
563 goto end; 563 goto end;
564 } 564 }
565 565
566 if ((cb != NULL) && (s->internal->state != state)) { 566 if ((cb != NULL) && (S3I(s)->hs.state != state)) {
567 new_state = s->internal->state; 567 new_state = S3I(s)->hs.state;
568 s->internal->state = state; 568 S3I(s)->hs.state = state;
569 cb(s, SSL_CB_CONNECT_LOOP, 1); 569 cb(s, SSL_CB_CONNECT_LOOP, 1);
570 s->internal->state = new_state; 570 S3I(s)->hs.state = new_state;
571 } 571 }
572 } 572 }
573 skip = 0; 573 skip = 0;
@@ -591,7 +591,7 @@ ssl3_client_hello(SSL *s)
591 591
592 bufend = (unsigned char *)s->internal->init_buf->data + SSL3_RT_MAX_PLAIN_LENGTH; 592 bufend = (unsigned char *)s->internal->init_buf->data + SSL3_RT_MAX_PLAIN_LENGTH;
593 593
594 if (s->internal->state == SSL3_ST_CW_CLNT_HELLO_A) { 594 if (S3I(s)->hs.state == SSL3_ST_CW_CLNT_HELLO_A) {
595 SSL_SESSION *sess = s->session; 595 SSL_SESSION *sess = s->session;
596 596
597 if (ssl_supported_version_range(s, NULL, &max_version) != 1) { 597 if (ssl_supported_version_range(s, NULL, &max_version) != 1) {
@@ -706,7 +706,7 @@ ssl3_client_hello(SSL *s)
706 706
707 ssl3_handshake_msg_finish(s, p - d); 707 ssl3_handshake_msg_finish(s, p - d);
708 708
709 s->internal->state = SSL3_ST_CW_CLNT_HELLO_B; 709 S3I(s)->hs.state = SSL3_ST_CW_CLNT_HELLO_B;
710 } 710 }
711 711
712 /* SSL3_ST_CW_CLNT_HELLO_B */ 712 /* SSL3_ST_CW_CLNT_HELLO_B */
@@ -2273,7 +2273,7 @@ ssl3_send_client_key_exchange(SSL *s)
2273 2273
2274 memset(&cbb, 0, sizeof(cbb)); 2274 memset(&cbb, 0, sizeof(cbb));
2275 2275
2276 if (s->internal->state == SSL3_ST_CW_KEY_EXCH_A) { 2276 if (S3I(s)->hs.state == SSL3_ST_CW_KEY_EXCH_A) {
2277 alg_k = S3I(s)->hs.new_cipher->algorithm_mkey; 2277 alg_k = S3I(s)->hs.new_cipher->algorithm_mkey;
2278 2278
2279 if ((sess_cert = SSI(s)->sess_cert) == NULL) { 2279 if ((sess_cert = SSI(s)->sess_cert) == NULL) {
@@ -2309,7 +2309,7 @@ ssl3_send_client_key_exchange(SSL *s)
2309 if (!ssl3_handshake_msg_finish_cbb(s, &cbb)) 2309 if (!ssl3_handshake_msg_finish_cbb(s, &cbb))
2310 goto err; 2310 goto err;
2311 2311
2312 s->internal->state = SSL3_ST_CW_KEY_EXCH_B; 2312 S3I(s)->hs.state = SSL3_ST_CW_KEY_EXCH_B;
2313 } 2313 }
2314 2314
2315 /* SSL3_ST_CW_KEY_EXCH_B */ 2315 /* SSL3_ST_CW_KEY_EXCH_B */
@@ -2335,7 +2335,7 @@ ssl3_send_client_verify(SSL *s)
2335 2335
2336 EVP_MD_CTX_init(&mctx); 2336 EVP_MD_CTX_init(&mctx);
2337 2337
2338 if (s->internal->state == SSL3_ST_CW_CERT_VRFY_A) { 2338 if (S3I(s)->hs.state == SSL3_ST_CW_CERT_VRFY_A) {
2339 p = ssl3_handshake_msg_start(s, SSL3_MT_CERTIFICATE_VERIFY); 2339 p = ssl3_handshake_msg_start(s, SSL3_MT_CERTIFICATE_VERIFY);
2340 2340
2341 /* 2341 /*
@@ -2459,7 +2459,7 @@ ssl3_send_client_verify(SSL *s)
2459 goto err; 2459 goto err;
2460 } 2460 }
2461 2461
2462 s->internal->state = SSL3_ST_CW_CERT_VRFY_B; 2462 S3I(s)->hs.state = SSL3_ST_CW_CERT_VRFY_B;
2463 2463
2464 ssl3_handshake_msg_finish(s, n); 2464 ssl3_handshake_msg_finish(s, n);
2465 } 2465 }
@@ -2485,16 +2485,16 @@ ssl3_send_client_certificate(SSL *s)
2485 2485
2486 memset(&cbb, 0, sizeof(cbb)); 2486 memset(&cbb, 0, sizeof(cbb));
2487 2487
2488 if (s->internal->state == SSL3_ST_CW_CERT_A) { 2488 if (S3I(s)->hs.state == SSL3_ST_CW_CERT_A) {
2489 if ((s->cert == NULL) || (s->cert->key->x509 == NULL) || 2489 if ((s->cert == NULL) || (s->cert->key->x509 == NULL) ||
2490 (s->cert->key->privatekey == NULL)) 2490 (s->cert->key->privatekey == NULL))
2491 s->internal->state = SSL3_ST_CW_CERT_B; 2491 S3I(s)->hs.state = SSL3_ST_CW_CERT_B;
2492 else 2492 else
2493 s->internal->state = SSL3_ST_CW_CERT_C; 2493 S3I(s)->hs.state = SSL3_ST_CW_CERT_C;
2494 } 2494 }
2495 2495
2496 /* We need to get a client cert */ 2496 /* We need to get a client cert */
2497 if (s->internal->state == SSL3_ST_CW_CERT_B) { 2497 if (S3I(s)->hs.state == SSL3_ST_CW_CERT_B) {
2498 /* 2498 /*
2499 * If we get an error, we need to 2499 * If we get an error, we need to
2500 * ssl->rwstate=SSL_X509_LOOKUP; return(-1); 2500 * ssl->rwstate=SSL_X509_LOOKUP; return(-1);
@@ -2507,7 +2507,7 @@ ssl3_send_client_certificate(SSL *s)
2507 } 2507 }
2508 s->internal->rwstate = SSL_NOTHING; 2508 s->internal->rwstate = SSL_NOTHING;
2509 if ((i == 1) && (pkey != NULL) && (x509 != NULL)) { 2509 if ((i == 1) && (pkey != NULL) && (x509 != NULL)) {
2510 s->internal->state = SSL3_ST_CW_CERT_B; 2510 S3I(s)->hs.state = SSL3_ST_CW_CERT_B;
2511 if (!SSL_use_certificate(s, x509) || 2511 if (!SSL_use_certificate(s, x509) ||
2512 !SSL_use_PrivateKey(s, pkey)) 2512 !SSL_use_PrivateKey(s, pkey))
2513 i = 0; 2513 i = 0;
@@ -2522,10 +2522,10 @@ ssl3_send_client_certificate(SSL *s)
2522 S3I(s)->tmp.cert_req = 2; 2522 S3I(s)->tmp.cert_req = 2;
2523 2523
2524 /* Ok, we have a cert */ 2524 /* Ok, we have a cert */
2525 s->internal->state = SSL3_ST_CW_CERT_C; 2525 S3I(s)->hs.state = SSL3_ST_CW_CERT_C;
2526 } 2526 }
2527 2527
2528 if (s->internal->state == SSL3_ST_CW_CERT_C) { 2528 if (S3I(s)->hs.state == SSL3_ST_CW_CERT_C) {
2529 if (!ssl3_handshake_msg_start_cbb(s, &cbb, &client_cert, 2529 if (!ssl3_handshake_msg_start_cbb(s, &cbb, &client_cert,
2530 SSL3_MT_CERTIFICATE)) 2530 SSL3_MT_CERTIFICATE))
2531 goto err; 2531 goto err;
@@ -2535,7 +2535,7 @@ ssl3_send_client_certificate(SSL *s)
2535 if (!ssl3_handshake_msg_finish_cbb(s, &cbb)) 2535 if (!ssl3_handshake_msg_finish_cbb(s, &cbb))
2536 goto err; 2536 goto err;
2537 2537
2538 s->internal->state = SSL3_ST_CW_CERT_D; 2538 S3I(s)->hs.state = SSL3_ST_CW_CERT_D;
2539 } 2539 }
2540 2540
2541 /* SSL3_ST_CW_CERT_D */ 2541 /* SSL3_ST_CW_CERT_D */
@@ -2625,7 +2625,7 @@ ssl3_send_next_proto(SSL *s)
2625 2625
2626 memset(&cbb, 0, sizeof(cbb)); 2626 memset(&cbb, 0, sizeof(cbb));
2627 2627
2628 if (s->internal->state == SSL3_ST_CW_NEXT_PROTO_A) { 2628 if (S3I(s)->hs.state == SSL3_ST_CW_NEXT_PROTO_A) {
2629 pad_len = 32 - ((s->internal->next_proto_negotiated_len + 2) % 32); 2629 pad_len = 32 - ((s->internal->next_proto_negotiated_len + 2) % 32);
2630 2630
2631 if (!ssl3_handshake_msg_start_cbb(s, &cbb, &nextproto, 2631 if (!ssl3_handshake_msg_start_cbb(s, &cbb, &nextproto,
@@ -2644,7 +2644,7 @@ ssl3_send_next_proto(SSL *s)
2644 if (!ssl3_handshake_msg_finish_cbb(s, &cbb)) 2644 if (!ssl3_handshake_msg_finish_cbb(s, &cbb))
2645 goto err; 2645 goto err;
2646 2646
2647 s->internal->state = SSL3_ST_CW_NEXT_PROTO_B; 2647 S3I(s)->hs.state = SSL3_ST_CW_NEXT_PROTO_B;
2648 } 2648 }
2649 2649
2650 return (ssl3_handshake_write(s)); 2650 return (ssl3_handshake_write(s));