From 96d408b0bb385e0d68122111acd9c9f3aefea6c1 Mon Sep 17 00:00:00 2001 From: Joel Galenson Date: Tue, 8 Jun 2021 17:53:00 -0700 Subject: Upgrade rust/crates/quiche to 0.9.0 Test: make Change-Id: I438d6a167e6e0bbfe38785ba13c33a285d1c510b --- examples/http3-client.c | 57 ++++++++++++++++++++++++++++++++----------------- 1 file changed, 38 insertions(+), 19 deletions(-) (limited to 'examples/http3-client.c') diff --git a/examples/http3-client.c b/examples/http3-client.c index 8c75309..6b263ff 100644 --- a/examples/http3-client.c +++ b/examples/http3-client.c @@ -65,8 +65,11 @@ static void debug_log(const char *line, void *argp) { static void flush_egress(struct ev_loop *loop, struct conn_io *conn_io) { static uint8_t out[MAX_DATAGRAM_SIZE]; + quiche_send_info send_info; + while (1) { - ssize_t written = quiche_conn_send(conn_io->conn, out, sizeof(out)); + ssize_t written = quiche_conn_send(conn_io->conn, out, sizeof(out), + &send_info); if (written == QUICHE_ERR_DONE) { fprintf(stderr, "done writing\n"); @@ -78,7 +81,10 @@ static void flush_egress(struct ev_loop *loop, struct conn_io *conn_io) { return; } - ssize_t sent = send(conn_io->sock, out, written, 0); + ssize_t sent = sendto(conn_io->sock, out, written, 0, + (struct sockaddr *) &send_info.to, + send_info.to_len); + if (sent != written) { perror("failed to send"); return; @@ -109,7 +115,13 @@ static void recv_cb(EV_P_ ev_io *w, int revents) { static uint8_t buf[65535]; while (1) { - ssize_t read = recv(conn_io->sock, buf, sizeof(buf), 0); + struct sockaddr_storage peer_addr; + socklen_t peer_addr_len = sizeof(peer_addr); + memset(&peer_addr, 0, peer_addr_len); + + ssize_t read = recvfrom(conn_io->sock, buf, sizeof(buf), 0, + (struct sockaddr *) &peer_addr, + &peer_addr_len); if (read < 0) { if ((errno == EWOULDBLOCK) || (errno == EAGAIN)) { @@ -121,7 +133,13 @@ static void recv_cb(EV_P_ ev_io *w, int revents) { return; } - ssize_t done = quiche_conn_recv(conn_io->conn, buf, read); + quiche_recv_info recv_info = { + (struct sockaddr *) &peer_addr, + + peer_addr_len, + }; + + ssize_t done = quiche_conn_recv(conn_io->conn, buf, read, &recv_info); if (done < 0) { fprintf(stderr, "failed to process packet: %zd\n", done); @@ -239,14 +257,18 @@ static void recv_cb(EV_P_ ev_io *w, int revents) { } case QUICHE_H3_EVENT_DATA: { - ssize_t len = quiche_h3_recv_body(conn_io->http3, - conn_io->conn, s, - buf, sizeof(buf)); - if (len <= 0) { - break; + for (;;) { + ssize_t len = quiche_h3_recv_body(conn_io->http3, + conn_io->conn, s, + buf, sizeof(buf)); + + if (len <= 0) { + break; + } + + printf("%.*s", (int) len, buf); } - printf("%.*s", (int) len, buf); break; } @@ -258,7 +280,7 @@ static void recv_cb(EV_P_ ev_io *w, int revents) { case QUICHE_H3_EVENT_DATAGRAM: break; - + case QUICHE_H3_EVENT_GOAWAY: { fprintf(stderr, "got GOAWAY\n"); break; @@ -322,11 +344,6 @@ int main(int argc, char *argv[]) { return -1; } - if (connect(sock, peer->ai_addr, peer->ai_addrlen) < 0) { - perror("failed to connect socket"); - return -1; - } - quiche_config *config = quiche_config_new(0xbabababa); if (config == NULL) { fprintf(stderr, "failed to create config\n"); @@ -338,7 +355,8 @@ int main(int argc, char *argv[]) { sizeof(QUICHE_H3_APPLICATION_PROTOCOL) - 1); quiche_config_set_max_idle_timeout(config, 5000); - quiche_config_set_max_udp_payload_size(config, MAX_DATAGRAM_SIZE); + quiche_config_set_max_recv_udp_payload_size(config, MAX_DATAGRAM_SIZE); + quiche_config_set_max_send_udp_payload_size(config, MAX_DATAGRAM_SIZE); quiche_config_set_initial_max_data(config, 10000000); quiche_config_set_initial_max_stream_data_bidi_local(config, 1000000); quiche_config_set_initial_max_stream_data_bidi_remote(config, 1000000); @@ -366,8 +384,9 @@ int main(int argc, char *argv[]) { return -1; } - quiche_conn *conn = quiche_connect(host, (const uint8_t *) scid, - sizeof(scid), config); + quiche_conn *conn = quiche_connect(host, (const uint8_t*) scid, sizeof(scid), + peer->ai_addr, peer->ai_addrlen, config); + if (conn == NULL) { fprintf(stderr, "failed to create connection\n"); return -1; -- cgit v1.2.3