• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /freebsd-13-stable/contrib/libevent/

Lines Matching defs:bev_ssl

366 put_error(struct bufferevent_openssl *bev_ssl, unsigned long err)
368 if (bev_ssl->n_errors == NUM_ERRORS)
375 bev_ssl->errors[bev_ssl->n_errors++] = (ev_uint32_t) err;
382 start_reading(struct bufferevent_openssl *bev_ssl)
384 if (bev_ssl->underlying) {
385 bufferevent_unsuspend_read_(bev_ssl->underlying,
389 struct bufferevent *bev = &bev_ssl->bev.bev;
392 if (r == 0 && bev_ssl->read_blocked_on_write)
403 start_writing(struct bufferevent_openssl *bev_ssl)
406 if (bev_ssl->underlying) {
407 if (bev_ssl->write_blocked_on_read) {
408 bufferevent_unsuspend_read_(bev_ssl->underlying,
412 struct bufferevent *bev = &bev_ssl->bev.bev;
414 if (!r && bev_ssl->write_blocked_on_read)
422 stop_reading(struct bufferevent_openssl *bev_ssl)
424 if (bev_ssl->write_blocked_on_read)
426 if (bev_ssl->underlying) {
427 bufferevent_suspend_read_(bev_ssl->underlying,
430 struct bufferevent *bev = &bev_ssl->bev.bev;
436 stop_writing(struct bufferevent_openssl *bev_ssl)
438 if (bev_ssl->read_blocked_on_write)
440 if (bev_ssl->underlying) {
441 bufferevent_unsuspend_read_(bev_ssl->underlying,
444 struct bufferevent *bev = &bev_ssl->bev.bev;
450 set_rbow(struct bufferevent_openssl *bev_ssl)
452 if (!bev_ssl->underlying)
453 stop_reading(bev_ssl);
454 bev_ssl->read_blocked_on_write = 1;
455 return start_writing(bev_ssl);
459 set_wbor(struct bufferevent_openssl *bev_ssl)
461 if (!bev_ssl->underlying)
462 stop_writing(bev_ssl);
463 bev_ssl->write_blocked_on_read = 1;
464 return start_reading(bev_ssl);
468 clear_rbow(struct bufferevent_openssl *bev_ssl)
470 struct bufferevent *bev = &bev_ssl->bev.bev;
472 bev_ssl->read_blocked_on_write = 0;
474 stop_writing(bev_ssl);
476 r = start_reading(bev_ssl);
482 clear_wbor(struct bufferevent_openssl *bev_ssl)
484 struct bufferevent *bev = &bev_ssl->bev.bev;
486 bev_ssl->write_blocked_on_read = 0;
488 stop_reading(bev_ssl);
490 r = start_writing(bev_ssl);
495 conn_closed(struct bufferevent_openssl *bev_ssl, int when, int errcode, int ret)
504 if (SSL_get_shutdown(bev_ssl->ssl) & SSL_RECEIVED_SHUTDOWN)
532 put_error(bev_ssl, err);
535 if (dirty_shutdown && bev_ssl->allow_dirty_shutdown)
538 stop_reading(bev_ssl);
539 stop_writing(bev_ssl);
543 bufferevent_run_eventcb_(&bev_ssl->bev.bev, event, 0);
547 init_bio_counts(struct bufferevent_openssl *bev_ssl)
551 wbio = SSL_get_wbio(bev_ssl->ssl);
552 bev_ssl->counts.n_written = wbio ? BIO_number_written(wbio) : 0;
553 rbio = SSL_get_rbio(bev_ssl->ssl);
554 bev_ssl->counts.n_read = rbio ? BIO_number_read(rbio) : 0;
558 decrement_buckets(struct bufferevent_openssl *bev_ssl)
560 unsigned long num_w = BIO_number_written(SSL_get_wbio(bev_ssl->ssl));
561 unsigned long num_r = BIO_number_read(SSL_get_rbio(bev_ssl->ssl));
563 unsigned long w = num_w - bev_ssl->counts.n_written;
564 unsigned long r = num_r - bev_ssl->counts.n_read;
566 bufferevent_decrement_write_buckets_(&bev_ssl->bev, w);
568 bufferevent_decrement_read_buckets_(&bev_ssl->bev, r);
569 bev_ssl->counts.n_written = num_w;
570 bev_ssl->counts.n_read = num_r;
580 do_read(struct bufferevent_openssl *bev_ssl, int n_to_read) {
582 struct bufferevent *bev = &bev_ssl->bev.bev;
588 if (bev_ssl->bev.read_suspended)
591 atmost = bufferevent_get_read_max_(&bev_ssl->bev);
600 if (bev_ssl->bev.read_suspended)
603 r = SSL_read(bev_ssl->ssl, space[i].iov_base, space[i].iov_len);
606 if (bev_ssl->read_blocked_on_write)
607 if (clear_rbow(bev_ssl) < 0)
611 decrement_buckets(bev_ssl);
613 int err = SSL_get_error(bev_ssl->ssl, r);
618 if (bev_ssl->read_blocked_on_write)
619 if (clear_rbow(bev_ssl) < 0)
625 if (!bev_ssl->read_blocked_on_write)
626 if (set_rbow(bev_ssl) < 0)
630 conn_closed(bev_ssl, BEV_EVENT_READING, err, r);
640 if (bev_ssl->underlying)
650 do_write(struct bufferevent_openssl *bev_ssl, int atmost)
653 struct bufferevent *bev = &bev_ssl->bev.bev;
658 if (bev_ssl->last_write > 0)
659 atmost = bev_ssl->last_write;
661 atmost = bufferevent_get_write_max_(&bev_ssl->bev);
670 if (bev_ssl->bev.write_suspended)
680 r = SSL_write(bev_ssl->ssl, space[i].iov_base,
684 if (bev_ssl->write_blocked_on_read)
685 if (clear_wbor(bev_ssl) < 0)
688 bev_ssl->last_write = -1;
689 decrement_buckets(bev_ssl);
691 int err = SSL_get_error(bev_ssl->ssl, r);
696 if (bev_ssl->write_blocked_on_read)
697 if (clear_wbor(bev_ssl) < 0)
699 bev_ssl->last_write = space[i].iov_len;
704 if (!bev_ssl->write_blocked_on_read)
705 if (set_wbor(bev_ssl) < 0)
707 bev_ssl->last_write = space[i].iov_len;
710 conn_closed(bev_ssl, BEV_EVENT_WRITING, err, r);
711 bev_ssl->last_write = -1;
720 if (bev_ssl->underlying)
781 consider_reading(struct bufferevent_openssl *bev_ssl)
787 while (bev_ssl->write_blocked_on_read) {
788 r = do_write(bev_ssl, WRITE_FRAME);
792 if (bev_ssl->write_blocked_on_read)
795 n_to_read = bytes_to_read(bev_ssl);
798 r = do_read(bev_ssl, n_to_read);
804 if (bev_ssl->bev.read_suspended)
815 n_to_read = SSL_pending(bev_ssl->ssl);
827 * potentially not read any more from bev_ssl->underlying
831 if (!n_to_read && bev_ssl->underlying)
832 n_to_read = bytes_to_read(bev_ssl);
836 struct bufferevent *bev = &bev_ssl->bev.bev;
841 if (!bev_ssl->underlying) {
843 if (bev_ssl->bev.read_suspended ||
844 !(bev_ssl->bev.bev.enabled & EV_READ)) {
845 event_del(&bev_ssl->bev.bev.ev_read);
851 consider_writing(struct bufferevent_openssl *bev_ssl)
854 struct evbuffer *output = bev_ssl->bev.bev.output;
858 while (bev_ssl->read_blocked_on_write) {
859 r = do_read(bev_ssl, 1024); /* XXXX 1024 is a hack */
861 struct bufferevent *bev = &bev_ssl->bev.bev;
868 if (bev_ssl->read_blocked_on_write)
870 if (bev_ssl->underlying) {
871 target = bev_ssl->underlying->output;
872 wm = &bev_ssl->underlying->wm_write;
874 while ((bev_ssl->bev.bev.enabled & EV_WRITE) &&
875 (! bev_ssl->bev.write_suspended) &&
883 r = do_write(bev_ssl, n_to_write);
888 if (!bev_ssl->underlying) {
890 event_del(&bev_ssl->bev.bev.ev_write);
891 } else if (bev_ssl->bev.write_suspended ||
892 !(bev_ssl->bev.bev.enabled & EV_WRITE)) {
894 event_del(&bev_ssl->bev.bev.ev_write);
902 struct bufferevent_openssl *bev_ssl = ctx;
903 consider_reading(bev_ssl);
909 struct bufferevent_openssl *bev_ssl = ctx;
910 consider_writing(bev_ssl);
916 struct bufferevent_openssl *bev_ssl = ctx;
920 if (bev_ssl->allow_dirty_shutdown)
935 bufferevent_run_eventcb_(&bev_ssl->bev.bev, event, 0);
941 struct bufferevent_openssl *bev_ssl = ptr;
942 bufferevent_incref_and_lock_(&bev_ssl->bev.bev);
944 bufferevent_run_eventcb_(&bev_ssl->bev.bev,
947 consider_reading(bev_ssl);
949 bufferevent_decref_and_unlock_(&bev_ssl->bev.bev);
955 struct bufferevent_openssl *bev_ssl = ptr;
956 bufferevent_incref_and_lock_(&bev_ssl->bev.bev);
958 bufferevent_run_eventcb_(&bev_ssl->bev.bev,
961 consider_writing(bev_ssl);
963 bufferevent_decref_and_unlock_(&bev_ssl->bev.bev);
967 be_openssl_auto_fd(struct bufferevent_openssl *bev_ssl, int fd)
969 if (!bev_ssl->underlying) {
970 struct bufferevent *bev = &bev_ssl->bev.bev;
979 set_open_callbacks(struct bufferevent_openssl *bev_ssl, evutil_socket_t fd)
981 if (bev_ssl->underlying) {
982 bufferevent_setcb(bev_ssl->underlying,
984 bev_ssl);
987 struct bufferevent *bev = &bev_ssl->bev.bev;
1000 be_openssl_readeventcb, bev_ssl);
1003 be_openssl_writeeventcb, bev_ssl);
1015 do_handshake(struct bufferevent_openssl *bev_ssl)
1019 switch (bev_ssl->state) {
1027 r = SSL_do_handshake(bev_ssl->ssl);
1030 decrement_buckets(bev_ssl);
1033 int fd = event_get_fd(&bev_ssl->bev.bev.ev_read);
1035 bev_ssl->state = BUFFEREVENT_SSL_OPEN;
1036 set_open_callbacks(bev_ssl, fd); /* XXXX handle failure */
1038 bufferevent_enable(&bev_ssl->bev.bev, bev_ssl->bev.bev.enabled);
1039 bufferevent_run_eventcb_(&bev_ssl->bev.bev,
1043 int err = SSL_get_error(bev_ssl->ssl, r);
1047 stop_reading(bev_ssl);
1048 return start_writing(bev_ssl);
1050 stop_writing(bev_ssl);
1051 return start_reading(bev_ssl);
1053 conn_closed(bev_ssl, BEV_EVENT_READING, err, r);
1062 struct bufferevent_openssl *bev_ssl = ctx;
1063 do_handshake(bev_ssl);/* XXX handle failure */
1069 struct bufferevent_openssl *bev_ssl = ptr;
1071 bufferevent_incref_and_lock_(&bev_ssl->bev.bev);
1073 bufferevent_run_eventcb_(&bev_ssl->bev.bev, BEV_EVENT_TIMEOUT, 0);
1075 do_handshake(bev_ssl);/* XXX handle failure */
1076 bufferevent_decref_and_unlock_(&bev_ssl->bev.bev);
1080 set_handshake_callbacks(struct bufferevent_openssl *bev_ssl, evutil_socket_t fd)
1082 if (bev_ssl->underlying) {
1083 bufferevent_setcb(bev_ssl->underlying,
1086 bev_ssl);
1091 if (bufferevent_setfd(bev_ssl->underlying, fd))
1094 return do_handshake(bev_ssl);
1096 struct bufferevent *bev = &bev_ssl->bev.bev;
1105 be_openssl_handshakeeventcb, bev_ssl);
1108 be_openssl_handshakeeventcb, bev_ssl);
1118 struct bufferevent_openssl *bev_ssl = upcast(bev);
1119 if (!bev_ssl)
1121 if (SSL_renegotiate(bev_ssl->ssl) < 0)
1123 bev_ssl->state = BUFFEREVENT_SSL_CONNECTING;
1124 if (set_handshake_callbacks(bev_ssl, be_openssl_auto_fd(bev_ssl, -1)) < 0)
1126 if (!bev_ssl->underlying)
1127 return do_handshake(bev_ssl);
1135 struct bufferevent_openssl *bev_ssl = arg;
1139 if (cbinfo->n_added && bev_ssl->state == BUFFEREVENT_SSL_OPEN) {
1141 r = bufferevent_add_event_(&bev_ssl->bev.bev.ev_write,
1142 &bev_ssl->bev.bev.timeout_write);
1144 if (bev_ssl->underlying)
1145 consider_writing(bev_ssl);
1155 struct bufferevent_openssl *bev_ssl = upcast(bev);
1159 r1 = start_reading(bev_ssl);
1161 r2 = start_writing(bev_ssl);
1163 if (bev_ssl->underlying) {
1170 consider_reading(bev_ssl);
1172 consider_writing(bev_ssl);
1180 struct bufferevent_openssl *bev_ssl = upcast(bev);
1183 stop_reading(bev_ssl);
1185 stop_writing(bev_ssl);
1187 if (bev_ssl->underlying) {
1199 struct bufferevent_openssl *bev_ssl = upcast(bev);
1201 if (bev_ssl->bev.options & BEV_OPT_CLOSE_ON_FREE) {
1202 if (bev_ssl->underlying) {
1203 if (BEV_UPCAST(bev_ssl->underlying)->refcnt < 2) {
1207 bufferevent_free(bev_ssl->underlying);
1210 // bev_ssl->underlying = NULL;
1214 if (bev_ssl->underlying) {
1215 if (bev_ssl->underlying->errorcb == be_openssl_eventcb)
1216 bufferevent_setcb(bev_ssl->underlying,
1218 bufferevent_unsuspend_read_(bev_ssl->underlying,
1227 struct bufferevent_openssl *bev_ssl = upcast(bev);
1229 if (bev_ssl->bev.options & BEV_OPT_CLOSE_ON_FREE) {
1230 if (! bev_ssl->underlying) {
1232 BIO *bio = SSL_get_wbio(bev_ssl->ssl);
1238 SSL_free(bev_ssl->ssl);
1245 struct bufferevent_openssl *bev_ssl = upcast(bev);
1247 if (bev_ssl->underlying) {
1263 be_openssl_set_fd(struct bufferevent_openssl *bev_ssl,
1266 bev_ssl->state = state;
1270 SSL_set_accept_state(bev_ssl->ssl);
1271 if (set_handshake_callbacks(bev_ssl, fd) < 0)
1275 SSL_set_connect_state(bev_ssl->ssl);
1276 if (set_handshake_callbacks(bev_ssl, fd) < 0)
1280 if (set_open_callbacks(bev_ssl, fd) < 0)
1294 struct bufferevent_openssl *bev_ssl = upcast(bev);
1297 if (!bev_ssl->underlying) {
1300 SSL_set_bio(bev_ssl->ssl, bio, bio);
1303 if (!(bio = BIO_new_bufferevent(bev_ssl->underlying, 0)))
1305 SSL_set_bio(bev_ssl->ssl, bio, bio);
1308 return be_openssl_set_fd(bev_ssl, bev_ssl->old_state, data->fd);
1310 if (bev_ssl->underlying) {
1311 data->fd = event_get_fd(&bev_ssl->underlying->ev_read);
1317 data->ptr = bev_ssl->underlying;
1328 struct bufferevent_openssl *bev_ssl = upcast(bufev);
1329 if (!bev_ssl)
1331 return bev_ssl->ssl;
1342 struct bufferevent_openssl *bev_ssl = NULL;
1349 if (!(bev_ssl = mm_calloc(1, sizeof(struct bufferevent_openssl))))
1352 bev_p = &bev_ssl->bev;
1362 bev_ssl->underlying = underlying;
1363 bev_ssl->ssl = ssl;
1365 bev_ssl->outbuf_cb = evbuffer_add_cb(bev_p->bev.output,
1366 be_openssl_outbuf_cb, bev_ssl);
1369 bufferevent_enable_locking_(&bev_ssl->bev.bev, NULL);
1372 bufferevent_init_generic_timeout_cbs_(&bev_ssl->bev.bev);
1376 bev_ssl->old_state = state;
1377 bev_ssl->last_write = -1;
1379 init_bio_counts(bev_ssl);
1381 fd = be_openssl_auto_fd(bev_ssl, fd);
1382 if (be_openssl_set_fd(bev_ssl, state, fd))
1393 return &bev_ssl->bev.bev;
1395 if (bev_ssl)
1396 bufferevent_free(&bev_ssl->bev.bev);
1468 struct bufferevent_openssl *bev_ssl;
1470 bev_ssl = upcast(bev);
1471 if (bev_ssl)
1472 allow_dirty_shutdown = bev_ssl->allow_dirty_shutdown;
1481 struct bufferevent_openssl *bev_ssl;
1483 bev_ssl = upcast(bev);
1484 if (bev_ssl)
1485 bev_ssl->allow_dirty_shutdown = !!allow_dirty_shutdown;
1493 struct bufferevent_openssl *bev_ssl;
1495 bev_ssl = upcast(bev);
1496 if (bev_ssl && bev_ssl->n_errors) {
1497 err = bev_ssl->errors[--bev_ssl->n_errors];