src/server/daemon/httplistener.c

changeset 492
07452a54a22b
parent 490
d218607f5a7e
child 494
f7f624cfe80a
equal deleted inserted replaced
491:5454ae7bf86b 492:07452a54a22b
362 listener->session_handler = create_event_session_handler(pool); 362 listener->session_handler = create_event_session_handler(pool);
363 } 363 }
364 listener->nacceptors = conf->nacceptors; 364 listener->nacceptors = conf->nacceptors;
365 listener->port = conf->port; 365 listener->port = conf->port;
366 listener->next = NULL; 366 listener->next = NULL;
367 listener->ssl = NULL; 367 //listener->ssl = NULL;
368 368
369 // create sockets 369 // create sockets
370 listener->server_socket = get_socket(conf, LISTENER_PROTO_IPV4); 370 listener->server_socket = get_socket(conf, LISTENER_PROTO_IPV4);
371 listener->server_socket6 = get_socket(conf, LISTENER_PROTO_IPV6); 371 listener->server_socket6 = get_socket(conf, LISTENER_PROTO_IPV6);
372 if(!listener->server_socket && !listener->server_socket6) { 372 if(!listener->server_socket && !listener->server_socket6) {
593 593
594 ConnectionAddr ca; 594 ConnectionAddr ca;
595 struct sockaddr *ca_ptr; 595 struct sockaddr *ca_ptr;
596 socklen_t ca_length; 596 socklen_t ca_length;
597 ConnectionAddrType addr_type; 597 ConnectionAddrType addr_type;
598 HttpSSL *socket_ssl = NULL;
598 if(acceptor->ipv6) { 599 if(acceptor->ipv6) {
599 server_socket = listener->server_socket6->socket; 600 server_socket = listener->server_socket6->socket;
600 ca_ptr = (struct sockaddr*)&ca.address_v6; 601 ca_ptr = (struct sockaddr*)&ca.address_v6;
601 ca_length = sizeof(ca.address_v6); 602 ca_length = sizeof(ca.address_v6);
602 addr_type = CONN_ADDR_IPV6; 603 addr_type = CONN_ADDR_IPV6;
604 socket_ssl = listener->server_socket6->ssl;
603 } else { 605 } else {
604 server_socket = listener->server_socket->socket; 606 server_socket = listener->server_socket->socket;
605 ca_ptr = (struct sockaddr*)&ca.address_v4; 607 ca_ptr = (struct sockaddr*)&ca.address_v4;
606 ca_length = sizeof(ca.address_v4); 608 ca_length = sizeof(ca.address_v4);
607 addr_type = CONN_ADDR_IPV4; 609 addr_type = CONN_ADDR_IPV4;
610 socket_ssl = listener->server_socket->ssl;
608 } 611 }
609 612
610 log_ereport(LOG_DEBUG, "acceptor: %p listener: %p start", acceptor, acceptor->listener); 613 log_ereport(LOG_DEBUG, "acceptor: %p listener: %p start", acceptor, acceptor->listener);
611 ws_atomic_inc32(acceptors_running); 614 ws_atomic_inc32(acceptors_running);
612 615
644 conn->address = ca; 647 conn->address = ca;
645 conn->addr_type = addr_type; 648 conn->addr_type = addr_type;
646 conn->fd = clientfd; 649 conn->fd = clientfd;
647 conn->listener = ls; 650 conn->listener = ls;
648 conn->ssl_accepted = 0; 651 conn->ssl_accepted = 0;
649 if(ls->ssl) { 652 if(socket_ssl) {
650 // SSL connections are always non-blocking 653 // SSL connections are always non-blocking
651 // set socket non blocking 654 // set socket non blocking
652 int flags; 655 int flags;
653 if((flags = fcntl(conn->fd, F_GETFL, 0)) == -1) { 656 if((flags = fcntl(conn->fd, F_GETFL, 0)) == -1) {
654 flags = 0; 657 flags = 0;
657 log_ereport(LOG_FAILURE, "acceptor: fcntl failed: %s", strerror(errno)); 660 log_ereport(LOG_FAILURE, "acceptor: fcntl failed: %s", strerror(errno));
658 close(clientfd); 661 close(clientfd);
659 free(conn); 662 free(conn);
660 conn = NULL; 663 conn = NULL;
661 } else { 664 } else {
662 SSL *ssl = SSL_new(ls->ssl->sslctx); 665 SSL *ssl = SSL_new(socket_ssl->sslctx);
663 if(ssl) { 666 if(ssl) {
664 SSL_set_fd(ssl, clientfd); 667 SSL_set_fd(ssl, clientfd);
665 668
666 conn->ssl = ssl; 669 conn->ssl = ssl;
667 conn->read = connection_ssl_read; 670 conn->read = connection_ssl_read;

mercurial