nxt_openssl.c (833:9258a64a8bf9) nxt_openssl.c (836:ecd3c5bbf7d8)
1
2/*
3 * Copyright (C) Igor Sysoev
4 * Copyright (C) NGINX, Inc.
5 */
6
7#include <nxt_main.h>
8#include <openssl/ssl.h>

--- 489 unchanged lines hidden (view full) ---

498fail:
499
500 nxt_work_queue_add(c->read_work_queue, c->read_state->error_handler,
501 task, c, c->socket.data);
502}
503
504
505nxt_inline void
1
2/*
3 * Copyright (C) Igor Sysoev
4 * Copyright (C) NGINX, Inc.
5 */
6
7#include <nxt_main.h>
8#include <openssl/ssl.h>

--- 489 unchanged lines hidden (view full) ---

498fail:
499
500 nxt_work_queue_add(c->read_work_queue, c->read_state->error_handler,
501 task, c, c->socket.data);
502}
503
504
505nxt_inline void
506nxt_openssl_conn_free(nxt_task_t *task, nxt_openssl_conn_t *tls)
506nxt_openssl_conn_free(nxt_task_t *task, nxt_conn_t *c)
507{
507{
508 nxt_openssl_conn_t *tls;
509
508 nxt_debug(task, "openssl conn free");
509
510 nxt_debug(task, "openssl conn free");
511
510 nxt_free(tls->buffer.start);
512 tls = c->u.tls;
511
513
512 SSL_free(tls->session);
514 if (tls != NULL) {
515 c->u.tls = NULL;
516 nxt_free(tls->buffer.start);
517 SSL_free(tls->session);
518 }
513}
514
515
516static void
517nxt_openssl_conn_handshake(nxt_task_t *task, void *obj, void *data)
518{
519 int ret;
520 nxt_int_t n;
521 nxt_err_t err;
522 nxt_conn_t *c;
523 nxt_work_queue_t *wq;
524 nxt_work_handler_t handler;
525 nxt_openssl_conn_t *tls;
526 const nxt_conn_state_t *state;
527
528 c = obj;
519}
520
521
522static void
523nxt_openssl_conn_handshake(nxt_task_t *task, void *obj, void *data)
524{
525 int ret;
526 nxt_int_t n;
527 nxt_err_t err;
528 nxt_conn_t *c;
529 nxt_work_queue_t *wq;
530 nxt_work_handler_t handler;
531 nxt_openssl_conn_t *tls;
532 const nxt_conn_state_t *state;
533
534 c = obj;
535
536 nxt_debug(task, "openssl conn handshake fd:%d", c->socket.fd);
537
538 if (c->socket.error != 0) {
539 return;
540 }
541
529 tls = c->u.tls;
530
542 tls = c->u.tls;
543
531 nxt_debug(task, "openssl conn handshake: %d", tls->times);
544 if (tls == NULL) {
545 return;
546 }
532
547
548 nxt_debug(task, "openssl conn handshake: %d times", tls->times);
549
533 /* "tls->times == 1" is suitable to run SSL_do_handshake() in job. */
534
535 ret = SSL_do_handshake(tls->session);
536
537 err = (ret <= 0) ? nxt_socket_errno : 0;
538
539 nxt_thread_time_debug_update(task->thread);
540

--- 169 unchanged lines hidden (view full) ---

710 nxt_int_t n;
711 nxt_bool_t quiet, once;
712 nxt_conn_t *c;
713 nxt_openssl_conn_t *tls;
714 nxt_work_handler_t handler;
715
716 c = obj;
717
550 /* "tls->times == 1" is suitable to run SSL_do_handshake() in job. */
551
552 ret = SSL_do_handshake(tls->session);
553
554 err = (ret <= 0) ? nxt_socket_errno : 0;
555
556 nxt_thread_time_debug_update(task->thread);
557

--- 169 unchanged lines hidden (view full) ---

727 nxt_int_t n;
728 nxt_bool_t quiet, once;
729 nxt_conn_t *c;
730 nxt_openssl_conn_t *tls;
731 nxt_work_handler_t handler;
732
733 c = obj;
734
718 nxt_debug(task, "openssl conn shutdown");
735 nxt_debug(task, "openssl conn shutdown fd:%d", c->socket.fd);
719
736
737 if (c->socket.error != 0) {
738 return;
739 }
740
720 c->read_state = NULL;
721 tls = c->u.tls;
741 c->read_state = NULL;
742 tls = c->u.tls;
743
744 if (tls == NULL) {
745 return;
746 }
747
722 s = tls->session;
723
724 if (s == NULL || !tls->handshake) {
725 handler = c->write_state->ready_handler;
726 goto done;
727 }
728
729 mode = SSL_get_shutdown(s);

--- 72 unchanged lines hidden (view full) ---

802 c->socket.error = err;
803 nxt_openssl_conn_error(task, err, "SSL_shutdown(%d) failed",
804 c->socket.fd);
805 handler = c->write_state->error_handler;
806 }
807
808done:
809
748 s = tls->session;
749
750 if (s == NULL || !tls->handshake) {
751 handler = c->write_state->ready_handler;
752 goto done;
753 }
754
755 mode = SSL_get_shutdown(s);

--- 72 unchanged lines hidden (view full) ---

828 c->socket.error = err;
829 nxt_openssl_conn_error(task, err, "SSL_shutdown(%d) failed",
830 c->socket.fd);
831 handler = c->write_state->error_handler;
832 }
833
834done:
835
810 nxt_openssl_conn_free(task, tls);
836 nxt_openssl_conn_free(task, c);
811
812 nxt_work_queue_add(c->write_work_queue, handler, task, c, data);
813}
814
815
816static nxt_int_t
817nxt_openssl_conn_test_error(nxt_task_t *task, nxt_conn_t *c, int ret,
818 nxt_err_t sys_err, nxt_openssl_io_t io)

--- 252 unchanged lines hidden ---
837
838 nxt_work_queue_add(c->write_work_queue, handler, task, c, data);
839}
840
841
842static nxt_int_t
843nxt_openssl_conn_test_error(nxt_task_t *task, nxt_conn_t *c, int ret,
844 nxt_err_t sys_err, nxt_openssl_io_t io)

--- 252 unchanged lines hidden ---