diff --git a/src/inc/msquic_posix.h b/src/inc/msquic_posix.h index 14358e5a7a..6150c108c7 100644 --- a/src/inc/msquic_posix.h +++ b/src/inc/msquic_posix.h @@ -104,6 +104,7 @@ QUIC_INLINE ENUMTYPE &operator ^= (ENUMTYPE &a, ENUMTYPE b) throw() { return (EN #define ERROR_BASE 200000000 // 0xBEBC200 #define TLS_ERROR_BASE 256 + ERROR_BASE // 0xBEBC300 #define CERT_ERROR_BASE 512 + ERROR_BASE // 0xBEBC400 +#define QUIC_NET_DB_ERROR_BASE 1024 + ERROR_BASE // 0xBEBC600 #define QUIC_STATUS_SUCCESS ((QUIC_STATUS)0) // 0 #define QUIC_STATUS_PENDING ((QUIC_STATUS)-2) // -2 @@ -133,6 +134,38 @@ QUIC_INLINE ENUMTYPE &operator ^= (ENUMTYPE &a, ENUMTYPE b) throw() { return (EN #define QUIC_STATUS_ALPN_IN_USE ((QUIC_STATUS)EPROTOTYPE) // 91 (41 on macOS) #define QUIC_STATUS_ADDRESS_NOT_AVAILABLE ((QUIC_STATUS)EADDRNOTAVAIL) // 99 (47 on macOS) +#define NETDB_ERR_CODE_TO_QUIC_STATUS(Alert) (Alert + QUIC_NET_DB_ERROR_BASE) + +# define QUIC_STATUS_BADFLAGS NETDB_ERR_CODE_TO_QUIC_STATUS(EAI_BADFLAGS) // 200001023 +# define QUIC_STATUS_NONAME NETDB_ERR_CODE_TO_QUIC_STATUS(EAI_NONAME) // 200001022 +# define QUIC_STATUS_AGAIN NETDB_ERR_CODE_TO_QUIC_STATUS(EAI_AGAIN) // 200001021 +# define QUIC_STATUS_FAIL NETDB_ERR_CODE_TO_QUIC_STATUS(EAI_FAIL) // 200001020 +# define QUIC_STATUS_FAMILY NETDB_ERR_CODE_TO_QUIC_STATUS(EAI_FAMILY) // 200001018 +# define QUIC_STATUS_SOCKTYPE NETDB_ERR_CODE_TO_QUIC_STATUS(EAI_SOCKTYPE) // 200001017 +# define QUIC_STATUS_SERVICE NETDB_ERR_CODE_TO_QUIC_STATUS(EAI_SERVICE) // 200001016 +# define QUIC_STATUS_MEMORY NETDB_ERR_CODE_TO_QUIC_STATUS(EAI_MEMORY) // 200001014 +# define QUIC_STATUS_SYSTEM NETDB_ERR_CODE_TO_QUIC_STATUS(EAI_SYSTEM) // 200001013 + +// EAI_OVERFLOW is part of POSIX.1-2008 extension +// macOS and some GNU versions do not support it +#ifdef EAI_OVERFLOW +# define QUIC_STATUS_OVERFLOW NETDB_ERR_CODE_TO_QUIC_STATUS(EAI_OVERFLOW) // 200001012 +#endif + +# ifdef __USE_GNU // GNU specific +# define QUIC_STATUS_NODATA NETDB_ERR_CODE_TO_QUIC_STATUS(EAI_NODATA) // 200001019 +# define QUIC_STATUS_ADDRFAMILY NETDB_ERR_CODE_TO_QUIC_STATUS(EAI_ADDRFAMILY) // 200001015 +# define QUIC_STATUS_INPROGRESS NETDB_ERR_CODE_TO_QUIC_STATUS(EAI_INPROGRESS) // 200000924 +# define QUIC_STATUS_CANCELED NETDB_ERR_CODE_TO_QUIC_STATUS(EAI_CANCELED) // 200000923 +# define QUIC_STATUS_NOTCANCELED NETDB_ERR_CODE_TO_QUIC_STATUS(EAI_NOTCANCELED) // 200000922 +# define QUIC_STATUS_ALLDONE NETDB_ERR_CODE_TO_QUIC_STATUS(EAI_ALLDONE) // 200000921 +# define QUIC_STATUS_INTR NETDB_ERR_CODE_TO_QUIC_STATUS(EAI_INTR) // 200000920 +# define QUIC_STATUS_IDN_ENCODE NETDB_ERR_CODE_TO_QUIC_STATUS(EAI_IDN_ENCODE) // 200000919 +# else // macOS specific +# define QUIC_STATUS_BAD_HINTS NETDB_ERR_CODE_TO_QUIC_STATUS(EAI_BADHINTS) +# define QUIC_STATUS_BAD_PROTOCOL NETDB_ERR_CODE_TO_QUIC_STATUS(EAI_PROTOCOL) +# endif + #define QUIC_STATUS_TLS_ALERT(Alert) ((QUIC_STATUS)(0xff & Alert) + TLS_ERROR_BASE) #define QUIC_STATUS_CLOSE_NOTIFY QUIC_STATUS_TLS_ALERT(0) // 0xBEBC300 - Close notify diff --git a/src/inc/msquic_winuser.h b/src/inc/msquic_winuser.h index 7e275679fc..11670bb165 100644 --- a/src/inc/msquic_winuser.h +++ b/src/inc/msquic_winuser.h @@ -120,6 +120,8 @@ #define QUIC_STATUS_STREAM_LIMIT_REACHED ERROR_QUIC_STREAM_LIMIT_REACHED // 0x80410008 #define QUIC_STATUS_ALPN_IN_USE ERROR_QUIC_ALPN_IN_USE // 0x80410009 +#define NETDB_ERR_CODE_TO_QUIC_STATUS(Alert) (Alert) + #define QUIC_STATUS_TLS_ALERT(Alert) (QUIC_TLS_ALERT_HRESULT_PREFIX | (0xff & Alert)) #define QUIC_STATUS_CLOSE_NOTIFY QUIC_STATUS_TLS_ALERT(0) // Close notify diff --git a/src/platform/datapath_unix.c b/src/platform/datapath_unix.c index e85a80b520..5278c4faaa 100644 --- a/src/platform/datapath_unix.c +++ b/src/platform/datapath_unix.c @@ -108,7 +108,6 @@ CxPlatDataPathResolveAddress( ) { UNREFERENCED_PARAMETER(Datapath); - QUIC_STATUS Status = QUIC_STATUS_SUCCESS; ADDRINFO Hints = {0}; ADDRINFO* AddrInfo = NULL; int Result = 0; @@ -155,9 +154,11 @@ CxPlatDataPathResolveAddress( "[%p] Couldn't resolve hostname '%s' to an IP address", Datapath, HostName); - Status = (QUIC_STATUS)Result; Exit: - - return Status; + if(Result != 0) { + return NETDB_ERR_CODE_TO_QUIC_STATUS(Result); + } else { + return QUIC_STATUS_SUCCESS; + } }