Lines Matching +full:closed +full:- +full:loop
2 * Copyright 2024-2025 The OpenSSL Project Authors. All Rights Reserved.
29 static size_t nulldata_sz = sizeof(NULL_PAYLOAD) - 1;
44 #define CLIENTCLOSED 0x02 /* closed by the client */
47 #define SERVERCLOSED 0x10 /* closed by the server (us) */
65 int received_from_two; /* workaround for -607 on nghttp3_conn_read_stream on stream 2 */
77 nv->name = (uint8_t *)name; in make_nv()
78 nv->value = (uint8_t *)value; in make_nv()
79 nv->namelen = strlen(name); in make_nv()
80 nv->valuelen = strlen(value); in make_nv()
81 nv->flags = NGHTTP3_NV_FLAG_NONE; in make_nv()
88 char *prior_fileprefix = h3ssl->fileprefix; in init_ids()
90 if (h3ssl->ptr_data != NULL && h3ssl->ptr_data != nulldata) in init_ids()
91 free(h3ssl->ptr_data); in init_ids()
95 ssl_ids = h3ssl->ssl_ids; in init_ids()
98 h3ssl->id_bidi = UINT64_MAX; in init_ids()
101 h3ssl->fileprefix = prior_fileprefix; in init_ids()
106 h3ssl->end_headers_received = 0; in reuse_h3ssl()
107 h3ssl->datadone = 0; in reuse_h3ssl()
108 h3ssl->close_done = 0; in reuse_h3ssl()
109 h3ssl->close_wait = 0; in reuse_h3ssl()
110 h3ssl->done = 0; in reuse_h3ssl()
111 memset(h3ssl->url, '\0', sizeof(h3ssl->url)); in reuse_h3ssl()
112 if (h3ssl->ptr_data != NULL && h3ssl->ptr_data != nulldata) in reuse_h3ssl()
113 free(h3ssl->ptr_data); in reuse_h3ssl()
114 h3ssl->ptr_data = NULL; in reuse_h3ssl()
115 h3ssl->offset_data = 0; in reuse_h3ssl()
116 h3ssl->ldata = 0; in reuse_h3ssl()
124 ssl_ids = h3ssl->ssl_ids; in add_id_status()
155 ssl_ids = h3ssl->ssl_ids; in get_ids_connection()
169 ssl_ids = h3ssl->ssl_ids; in replace_ids_connection()
184 ssl_ids = h3ssl->ssl_ids; in remove_marked_ids()
203 ssl_ids = h3ssl->ssl_ids; in set_id_status()
219 ssl_ids = h3ssl->ssl_ids; in get_id_status()
229 return -1; in get_id_status()
232 /* check that all streams opened by the client are closed */
238 ssl_ids = h3ssl->ssl_ids; in are_all_clientid_closed()
246 printf("are_all_clientid_closed: %llu closed\n", in are_all_clientid_closed()
266 ssl_ids = h3ssl->ssl_ids; in close_all_ids()
296 memset(h3ssl->url, 0, sizeof(h3ssl->url)); in on_recv_header()
299 strncpy(h3ssl->url, "index.html", MAXURL); in on_recv_header()
301 memcpy(h3ssl->url, vvalue.base + 1, len - 1); in on_recv_header()
302 h3ssl->url[len - 1] = '\0'; in on_recv_header()
305 memcpy(h3ssl->url, vvalue.base, len); in on_recv_header()
318 h3ssl->end_headers_received = 1; in on_end_headers()
337 h3ssl->done = 1; in on_end_stream()
363 return -1; in quic_server_read()
365 return -1; in quic_server_read()
368 /* XXX: work around nghttp3_conn_read_stream returning -607 on stream 2 */ in quic_server_read()
369 if (!h3ssl->received_from_two && id != 2) { in quic_server_read()
378 /* chrome returns -607 on stream 2 */ in quic_server_read()
383 h3ssl->received_from_two = 1; in quic_server_read()
386 return -1; in quic_server_read()
407 return -1; in quic_server_h3streams()
459 return -1; in quic_server_h3streams()
466 struct ssl_id *ssl_ids = h3ssl->ssl_ids; in read_from_ssl_ids()
481 item->desc = SSL_as_poll_descriptor(ssl_ids[i].s); in read_from_ssl_ids()
482 item->events = UINT64_MAX; /* TODO adjust to the event we need process */ in read_from_ssl_ids()
483 item->revents = UINT64_MAX; /* TODO adjust to the event we need process */ in read_from_ssl_ids()
503 return -1; /* something is wrong */ in read_from_ssl_ids()
512 h3ssl->new_conn = 0; in read_from_ssl_ids()
513 h3ssl->restart = 0; in read_from_ssl_ids()
514 h3ssl->done = 0; in read_from_ssl_ids()
520 if (item->revents == SSL_POLL_EVENT_NONE) in read_from_ssl_ids()
524 s = item->desc.value.ssl; in read_from_ssl_ids()
527 if (item->revents & SSL_POLL_EVENT_IC) { in read_from_ssl_ids()
528 SSL *conn = SSL_accept_connection(item->desc.value.ssl, 0); in read_from_ssl_ids()
534 ret = -1; in read_from_ssl_ids()
547 h3ssl->id_bidi = UINT64_MAX; in read_from_ssl_ids()
548 h3ssl->has_uni = 0; in read_from_ssl_ids()
553 h3ssl->new_conn = 1; in read_from_ssl_ids()
568 ret = -1; in read_from_ssl_ids()
576 if ((item->revents & SSL_POLL_EVENT_ISB) || in read_from_ssl_ids()
577 (item->revents & SSL_POLL_EVENT_ISU)) { in read_from_ssl_ids()
578 SSL *stream = SSL_accept_stream(item->desc.value.ssl, 0); in read_from_ssl_ids()
583 ret = -1; in read_from_ssl_ids()
590 if (h3ssl->close_wait) { in read_from_ssl_ids()
593 h3ssl->restart = 1; /* Checked in wait_close loop */ in read_from_ssl_ids()
597 if (h3ssl->id_bidi != UINT64_MAX) { in read_from_ssl_ids()
598 set_id_status(h3ssl->id_bidi, TOBEREMOVED, h3ssl); in read_from_ssl_ids()
601 h3ssl->id_bidi = new_id; in read_from_ssl_ids()
603 h3ssl->restart = 1; in read_from_ssl_ids()
609 if (r == -1) { in read_from_ssl_ids()
610 ret = -1; in read_from_ssl_ids()
616 if (item->revents & SSL_POLL_EVENT_ISB) in read_from_ssl_ids()
618 if (item->revents & SSL_POLL_EVENT_ISU) in read_from_ssl_ids()
621 if (item->revents & SSL_POLL_EVENT_OSB) { in read_from_ssl_ids()
627 if (item->revents & SSL_POLL_EVENT_OSU) { in read_from_ssl_ids()
633 if (!h3ssl->has_uni) { in read_from_ssl_ids()
636 if (ret == -1) { in read_from_ssl_ids()
640 h3ssl->has_uni = 1; in read_from_ssl_ids()
644 if (item->revents & SSL_POLL_EVENT_EC) { in read_from_ssl_ids()
647 printf("Connection terminating restart %d\n", h3ssl->restart); in read_from_ssl_ids()
648 if (!h3ssl->close_done) { in read_from_ssl_ids()
649 h3ssl->close_done = 1; in read_from_ssl_ids()
651 h3ssl->done = 1; in read_from_ssl_ids()
656 if (item->revents & SSL_POLL_EVENT_ECD) { in read_from_ssl_ids()
659 h3ssl->done = 1; in read_from_ssl_ids()
664 if (item->revents & SSL_POLL_EVENT_R) { in read_from_ssl_ids()
670 id = SSL_get_stream_id(item->desc.value.ssl); in read_from_ssl_ids()
677 /* check that the other side is closed */ in read_from_ssl_ids()
681 ret = -1; in read_from_ssl_ids()
686 ret = -1; in read_from_ssl_ids()
693 if (r == -1) { in read_from_ssl_ids()
694 ret = -1; in read_from_ssl_ids()
700 if (item->revents & SSL_POLL_EVENT_ER) { in read_from_ssl_ids()
701 /* mark it closed */ in read_from_ssl_ids()
705 id = SSL_get_stream_id(item->desc.value.ssl); in read_from_ssl_ids()
715 if (item->revents & SSL_POLL_EVENT_W) { in read_from_ssl_ids()
719 if (item->revents & SSL_POLL_EVENT_EW) { in read_from_ssl_ids()
724 id = SSL_get_stream_id(item->desc.value.ssl); in read_from_ssl_ids()
728 printf("both sides closed on %llu\n", (unsigned long long)id); in read_from_ssl_ids()
735 if (item->revents != processed_event) { in read_from_ssl_ids()
739 id = SSL_get_stream_id(item->desc.value.ssl); in read_from_ssl_ids()
741 (unsigned long long)item->revents, SSL_POLL_EVENT_W, in read_from_ssl_ids()
754 struct ssl_id *ssl_ids = h3ssl->ssl_ids; in handle_events_from_ids()
757 ssl_ids = h3ssl->ssl_ids; in handle_events_from_ids()
773 if (h3ssl->fileprefix != NULL) in get_file_length()
774 strcat(filename, h3ssl->fileprefix); in get_file_length()
775 strcat(filename, h3ssl->url); in get_file_length()
777 if (strcmp(h3ssl->url, "big") == 0) { in get_file_length()
803 if (h3ssl->fileprefix != NULL) in get_file_data()
804 strcat(filename, h3ssl->fileprefix); in get_file_data()
805 strcat(filename, h3ssl->url); in get_file_data()
810 if (read(fd, res, size) == -1) { in get_file_data()
827 if (h3ssl->datadone) { in step_read_data()
832 printf("step_read_data for %s %zu\n", h3ssl->url, h3ssl->ldata); in step_read_data()
833 if (h3ssl->ldata <= 4096) { in step_read_data()
834 vec[0].base = &(h3ssl->ptr_data[h3ssl->offset_data]); in step_read_data()
835 vec[0].len = h3ssl->ldata; in step_read_data()
836 h3ssl->datadone++; in step_read_data()
839 vec[0].base = &(h3ssl->ptr_data[h3ssl->offset_data]); in step_read_data()
841 if (h3ssl->ldata == INT_MAX) { in step_read_data()
844 h3ssl->offset_data = h3ssl->offset_data + 4096; in step_read_data()
845 h3ssl->ldata = h3ssl->ldata - 4096; in step_read_data()
859 ssl_ids = h3ssl->ssl_ids; in quic_server_write()
882 * a time is accepted in a blocking loop.
885 /* ALPN string for TLS handshake. We pretent h3-29 and h3 */
886 static const unsigned char alpn_ossltest[] = { 5, 'h', '3', '-', '2',
941 int fd = -1; in create_socket()
963 return -1; in create_socket()
966 /* Copied from demos/guide/quic-server-non-block.c */
993 if ((sock = SSL_get_fd(ssl)) == -1) { in wait_for_activity()
995 return -1; in wait_for_activity()
1043 /* Main loop for server to accept QUIC connections. */
1101 if (ret == -1) { in run_quic_server()
1131 if (hassomething == -1) { in run_quic_server()
1140 /* Other side has closed */ in run_quic_server()
1154 if (quic_server_h3streams(h3conn, &h3ssl) == -1) { in run_quic_server()
1170 /* content-type: text/html */ in run_quic_server()
1171 make_nv(&resp[num_nv++], "content-type", "text/html"); in run_quic_server()
1186 make_nv(&resp[num_nv++], "content-type", "image/png"); in run_quic_server()
1188 make_nv(&resp[num_nv++], "content-type", "image/vnd.microsoft.icon"); in run_quic_server()
1190 make_nv(&resp[num_nv++], "content-type", "text/html"); in run_quic_server()
1192 make_nv(&resp[num_nv++], "content-type", "application/octet-stream"); in run_quic_server()
1193 make_nv(&resp[num_nv++], "content-length", slength); in run_quic_server()
1215 if (streamid != -1 && fin) { in run_quic_server()
1233 if (fin && i == sveccnt - 1) in run_quic_server()
1263 /* wait until closed */ in run_quic_server()
1275 if (ret == -1) in run_quic_server()
1283 if (hasnothing == -1) { in run_quic_server()
1309 printf("hasnothing something... DONE other side closed\n"); in run_quic_server()
1318 * Free the streams, then loop again, accepting another connection. in run_quic_server()
1346 int fd = -1; in main()
1370 /* Enter QUIC server connection acceptance loop. */ in main()
1381 if (fd != -1) in main()