gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gnurl] 18/282: ngtcp2: Add an error code for QUIC connection errors


From: gnunet
Subject: [gnurl] 18/282: ngtcp2: Add an error code for QUIC connection errors
Date: Wed, 01 Apr 2020 14:28:03 +0200

This is an automated email from the git hooks/post-receive script.

ng0 pushed a commit to branch master
in repository gnurl.

commit cbb5429001084df4e71ebd95dbf748c3c302c9f7
Author: Emil Engler <address@hidden>
AuthorDate: Tue Dec 24 11:17:16 2019 +0100

    ngtcp2: Add an error code for QUIC connection errors
    
    - Add new error code CURLE_QUIC_CONNECT_ERROR for QUIC connection
      errors.
    
    Prior to this change CURLE_FAILED_INIT was used, but that was not
    correct.
    
    Closes https://github.com/curl/curl/pull/4754
---
 docs/libcurl/libcurl-errors.3    |  3 +++
 docs/libcurl/symbols-in-versions |  1 +
 include/curl/curl.h              |  1 +
 lib/strerror.c                   |  3 +++
 lib/vquic/ngtcp2.c               | 26 +++++++++++++-------------
 packages/OS400/curl.inc.in       |  2 ++
 tests/data/test1538              |  3 ++-
 7 files changed, 25 insertions(+), 14 deletions(-)

diff --git a/docs/libcurl/libcurl-errors.3 b/docs/libcurl/libcurl-errors.3
index ac06f27c7..eff6544b6 100644
--- a/docs/libcurl/libcurl-errors.3
+++ b/docs/libcurl/libcurl-errors.3
@@ -259,6 +259,9 @@ An authentication function returned an error.
 .IP "CURLE_HTTP3 (95)"
 A problem was detected in the HTTP/3 layer. This is somewhat generic and can
 be one out of several problems, see the error buffer for details.
+.IP "CURLE_QUIC_CONNECT_ERROR (96)"
+QUIC connection error. This error may be caused by an SSL library error. QUIC
+is the protocol used for HTTP/3 transfers.
 .IP "CURLE_OBSOLETE*"
 These error codes will never be returned. They were used in an old libcurl
 version and are currently unused.
diff --git a/docs/libcurl/symbols-in-versions b/docs/libcurl/symbols-in-versions
index 7a8078557..711d5694b 100644
--- a/docs/libcurl/symbols-in-versions
+++ b/docs/libcurl/symbols-in-versions
@@ -152,6 +152,7 @@ CURLE_URL_MALFORMAT_USER        7.1           7.17.0
 CURLE_USE_SSL_FAILED            7.17.0
 CURLE_WEIRD_SERVER_REPLY        7.51.0
 CURLE_WRITE_ERROR               7.1
+CURLE_QUIC_CONNECT_ERROR        7.69.0
 CURLFILETYPE_DEVICE_BLOCK       7.21.0
 CURLFILETYPE_DEVICE_CHAR        7.21.0
 CURLFILETYPE_DIRECTORY          7.21.0
diff --git a/include/curl/curl.h b/include/curl/curl.h
index ae5545206..7921acfc5 100644
--- a/include/curl/curl.h
+++ b/include/curl/curl.h
@@ -600,6 +600,7 @@ typedef enum {
   CURLE_AUTH_ERROR,              /* 94 - an authentication function returned an
                                     error */
   CURLE_HTTP3,                   /* 95 - An HTTP/3 layer problem */
+  CURLE_QUIC_CONNECT_ERROR,      /* 96 - QUIC connection error */
   CURL_LAST /* never use! */
 } CURLcode;
 
diff --git a/lib/strerror.c b/lib/strerror.c
index a7b761800..1a166bf01 100644
--- a/lib/strerror.c
+++ b/lib/strerror.c
@@ -317,6 +317,9 @@ curl_easy_strerror(CURLcode error)
   case CURLE_HTTP3:
     return "HTTP/3 error";
 
+  case CURLE_QUIC_CONNECT_ERROR:
+    return "QUIC connection error";
+
     /* error codes not used by current libcurl */
   case CURLE_OBSOLETE20:
   case CURLE_OBSOLETE24:
diff --git a/lib/vquic/ngtcp2.c b/lib/vquic/ngtcp2.c
index e97e9e871..d5c430943 100644
--- a/lib/vquic/ngtcp2.c
+++ b/lib/vquic/ngtcp2.c
@@ -574,10 +574,10 @@ CURLcode Curl_quic_connect(struct connectdata *conn,
   qs->version = NGTCP2_PROTO_VER;
   qs->sslctx = quic_ssl_ctx(data);
   if(!qs->sslctx)
-    return CURLE_FAILED_INIT; /* TODO: better return code */
+    return CURLE_QUIC_CONNECT_ERROR;
 
   if(quic_init_ssl(qs))
-    return CURLE_FAILED_INIT; /* TODO: better return code */
+    return CURLE_QUIC_CONNECT_ERROR;
 
   qs->dcid.datalen = NGTCP2_MAX_CIDLEN;
   result = Curl_rand(data, qs->dcid.data, NGTCP2_MAX_CIDLEN);
@@ -595,7 +595,7 @@ CURLcode Curl_quic_connect(struct connectdata *conn,
   rv = getsockname(sockfd, (struct sockaddr *)&qs->local_addr,
                    &qs->local_addrlen);
   if(rv == -1)
-    return CURLE_FAILED_INIT;
+    return CURLE_QUIC_CONNECT_ERROR;
 
   ngtcp2_addr_init(&path.local, (uint8_t *)&qs->local_addr, qs->local_addrlen,
                    NULL);
@@ -609,7 +609,7 @@ CURLcode Curl_quic_connect(struct connectdata *conn,
   rc = ngtcp2_conn_client_new(&qs->qconn, &qs->dcid, &qs->scid, &path, QUICVER,
                               &ng_callbacks, &qs->settings, NULL, qs);
   if(rc)
-    return CURLE_FAILED_INIT; /* TODO: create a QUIC error code */
+    return CURLE_QUIC_CONNECT_ERROR;
 
   ngtcp2_conn_get_local_transport_params(qs->qconn, &params);
   nwrite = ngtcp2_encode_transport_params(
@@ -618,15 +618,15 @@ CURLcode Curl_quic_connect(struct connectdata *conn,
   if(nwrite < 0) {
     failf(data, "ngtcp2_encode_transport_params: %s\n",
           ngtcp2_strerror((int)nwrite));
-    return CURLE_FAILED_INIT;
+    return CURLE_QUIC_CONNECT_ERROR;
   }
 
   if(!SSL_set_quic_transport_params(qs->ssl, paramsbuf, nwrite))
-    return CURLE_FAILED_INIT;
+    return CURLE_QUIC_CONNECT_ERROR;
 
   rc = setup_initial_crypto_context(qs);
   if(rc)
-    return CURLE_FAILED_INIT; /* TODO: better return code */
+    return CURLE_QUIC_CONNECT_ERROR;
 
   return CURLE_OK;
 }
@@ -998,7 +998,7 @@ static int init_ngh3_conn(struct quicsocket *qs)
 
   if(ngtcp2_conn_get_max_local_streams_uni(qs->qconn) < 3) {
     failf(qs->conn->data, "too few available QUIC streams");
-    return CURLE_FAILED_INIT;
+    return CURLE_QUIC_CONNECT_ERROR;
   }
 
   nghttp3_conn_settings_default(&qs->h3settings);
@@ -1015,32 +1015,32 @@ static int init_ngh3_conn(struct quicsocket *qs)
 
   rc = ngtcp2_conn_open_uni_stream(qs->qconn, &ctrl_stream_id, NULL);
   if(rc) {
-    result = CURLE_FAILED_INIT;
+    result = CURLE_QUIC_CONNECT_ERROR;
     goto fail;
   }
 
   rc = nghttp3_conn_bind_control_stream(qs->h3conn, ctrl_stream_id);
   if(rc) {
-    result = CURLE_FAILED_INIT;
+    result = CURLE_QUIC_CONNECT_ERROR;
     goto fail;
   }
 
   rc = ngtcp2_conn_open_uni_stream(qs->qconn, &qpack_enc_stream_id, NULL);
   if(rc) {
-    result = CURLE_FAILED_INIT;
+    result = CURLE_QUIC_CONNECT_ERROR;
     goto fail;
   }
 
   rc = ngtcp2_conn_open_uni_stream(qs->qconn, &qpack_dec_stream_id, NULL);
   if(rc) {
-    result = CURLE_FAILED_INIT;
+    result = CURLE_QUIC_CONNECT_ERROR;
     goto fail;
   }
 
   rc = nghttp3_conn_bind_qpack_streams(qs->h3conn, qpack_enc_stream_id,
                                        qpack_dec_stream_id);
   if(rc) {
-    result = CURLE_FAILED_INIT;
+    result = CURLE_QUIC_CONNECT_ERROR;
     goto fail;
   }
 
diff --git a/packages/OS400/curl.inc.in b/packages/OS400/curl.inc.in
index e5454daa1..a160f1085 100644
--- a/packages/OS400/curl.inc.in
+++ b/packages/OS400/curl.inc.in
@@ -602,6 +602,8 @@
      d                 c                   94
      d  CURLE_HTTP3...
      d                 c                   95
+     d  CURLE_QUIC_CONNECT_ERROR...
+     d                 c                   96
       *
       /if not defined(CURL_NO_OLDIES)
      d  CURLE_URL_MALFORMAT_USER...
diff --git a/tests/data/test1538 b/tests/data/test1538
index c96983061..ea8eddbb8 100644
--- a/tests/data/test1538
+++ b/tests/data/test1538
@@ -128,7 +128,8 @@ e92: Stream error in the HTTP/2 framing layer
 e93: API function called from within callback
 e94: An authentication function returned an error
 e95: HTTP/3 error
-e96: Unknown error
+e96: QUIC connection error
+e97: Unknown error
 m-1: Please call curl_multi_perform() soon
 m0: No error
 m1: Invalid multi handle

-- 
To stop receiving notification emails like this one, please contact
address@hidden.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]