]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
quiche: fix build failure
authorNao Yonashiro <owan.orisano@gmail.com>
Fri, 29 Jul 2022 08:43:01 +0000 (17:43 +0900)
committerDaniel Stenberg <daniel@haxx.se>
Tue, 2 Aug 2022 14:49:36 +0000 (16:49 +0200)
Reviewed-by: Alessandro Ghedini
Closes #9223

lib/vquic/quiche.c
lib/vquic/quiche.h

index 9a2b74310a976dac2466cbd77a71b28500b5543c..9ebfdf7a816da45c552a1264a5a7b265ec3b1152 100644 (file)
@@ -258,6 +258,7 @@ CURLcode Curl_quic_connect(struct Curl_easy *data,
   struct quicsocket *qs = &conn->hequic[sockindex];
   char ipbuf[40];
   int port;
+  int rv;
 
 #ifdef DEBUG_QUICHE
   /* initialize debug log callback only once */
@@ -303,8 +304,16 @@ CURLcode Curl_quic_connect(struct Curl_easy *data,
   if(result)
     return result;
 
+  qs->local_addrlen = sizeof(qs->local_addr);
+  rv = getsockname(sockfd, (struct sockaddr *)&qs->local_addr,
+                   &qs->local_addrlen);
+  if(rv == -1)
+    return CURLE_QUIC_CONNECT_ERROR;
+
   qs->conn = quiche_conn_new_with_tls((const uint8_t *) qs->scid,
-                                      sizeof(qs->scid), NULL, 0, addr, addrlen,
+                                      sizeof(qs->scid), NULL, 0,
+                                      (struct sockaddr *)&qs->local_addr,
+                                      qs->local_addrlen, addr, addrlen,
                                       qs->cfg, qs->ssl, false);
   if(!qs->conn) {
     failf(data, "can't create quiche connection");
@@ -478,6 +487,8 @@ static CURLcode process_ingress(struct Curl_easy *data, int sockfd,
 
     recv_info.from = (struct sockaddr *) &from;
     recv_info.from_len = from_len;
+    recv_info.to = (struct sockaddr *) &qs->local_addr;
+    recv_info.to_len = qs->local_addrlen;
 
     recvd = quiche_conn_recv(qs->conn, buf, recvd, &recv_info);
     if(recvd == QUICHE_ERR_DONE)
index de6808945120d265ebf6eda811bebafed8f22ea2..2da65f5f48826c665a2c355be9e6a0b1a5a02a47 100644 (file)
@@ -49,6 +49,8 @@ struct quicsocket {
   SSL_CTX *sslctx;
   SSL *ssl;
   bool h3_recving; /* TRUE when in h3-body-reading state */
+  struct sockaddr_storage local_addr;
+  socklen_t local_addrlen;
 };
 
 #endif