1/* 2 * nghttp3 3 * 4 * Copyright (c) 2019 nghttp3 contributors 5 * 6 * Permission is hereby granted, free of charge, to any person obtaining 7 * a copy of this software and associated documentation files (the 8 * "Software"), to deal in the Software without restriction, including 9 * without limitation the rights to use, copy, modify, merge, publish, 10 * distribute, sublicense, and/or sell copies of the Software, and to 11 * permit persons to whom the Software is furnished to do so, subject to 12 * the following conditions: 13 * 14 * The above copyright notice and this permission notice shall be 15 * included in all copies or substantial portions of the Software. 16 * 17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 18 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 19 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 20 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 21 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 22 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 23 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 24 */ 25#include "nghttp3_err.h" 26 27const char *nghttp3_strerror(int liberr) { 28 switch (liberr) { 29 case NGHTTP3_ERR_INVALID_ARGUMENT: 30 return "ERR_INVALID_ARGUMENT"; 31 case NGHTTP3_ERR_NOBUF: 32 return "ERR_NOBUF"; 33 case NGHTTP3_ERR_INVALID_STATE: 34 return "ERR_INVALID_STATE"; 35 case NGHTTP3_ERR_WOULDBLOCK: 36 return "ERR_WOULDBLOCK"; 37 case NGHTTP3_ERR_STREAM_IN_USE: 38 return "ERR_STREAM_IN_USE"; 39 case NGHTTP3_ERR_MALFORMED_HTTP_HEADER: 40 return "ERR_MALFORMED_HTTP_HEADER"; 41 case NGHTTP3_ERR_REMOVE_HTTP_HEADER: 42 return "ERR_REMOVE_HTTP_HEADER"; 43 case NGHTTP3_ERR_MALFORMED_HTTP_MESSAGING: 44 return "ERR_MALFORMED_HTTP_MESSAGING"; 45 case NGHTTP3_ERR_QPACK_FATAL: 46 return "ERR_QPACK_FATAL"; 47 case NGHTTP3_ERR_QPACK_HEADER_TOO_LARGE: 48 return "ERR_QPACK_HEADER_TOO_LARGE"; 49 case NGHTTP3_ERR_STREAM_NOT_FOUND: 50 return "ERR_STREAM_NOT_FOUND"; 51 case NGHTTP3_ERR_CONN_CLOSING: 52 return "ERR_CONN_CLOSING"; 53 case NGHTTP3_ERR_STREAM_DATA_OVERFLOW: 54 return "ERR_STREAM_DATA_OVERFLOW"; 55 case NGHTTP3_ERR_QPACK_DECOMPRESSION_FAILED: 56 return "ERR_QPACK_DECOMPRESSION_FAILED"; 57 case NGHTTP3_ERR_QPACK_ENCODER_STREAM_ERROR: 58 return "ERR_QPACK_ENCODER_STREAM_ERROR"; 59 case NGHTTP3_ERR_QPACK_DECODER_STREAM_ERROR: 60 return "ERR_QPACK_DECODER_STREAM_ERROR"; 61 case NGHTTP3_ERR_H3_FRAME_UNEXPECTED: 62 return "ERR_H3_FRAME_UNEXPECTED"; 63 case NGHTTP3_ERR_H3_FRAME_ERROR: 64 return "ERR_H3_FRAME_ERROR"; 65 case NGHTTP3_ERR_H3_MISSING_SETTINGS: 66 return "ERR_H3_MISSING_SETTINGS"; 67 case NGHTTP3_ERR_H3_INTERNAL_ERROR: 68 return "ERR_H3_INTERNAL_ERROR"; 69 case NGHTTP3_ERR_H3_CLOSED_CRITICAL_STREAM: 70 return "ERR_CLOSED_CRITICAL_STREAM"; 71 case NGHTTP3_ERR_H3_GENERAL_PROTOCOL_ERROR: 72 return "ERR_H3_GENERAL_PROTOCOL_ERROR"; 73 case NGHTTP3_ERR_H3_ID_ERROR: 74 return "ERR_H3_ID_ERROR"; 75 case NGHTTP3_ERR_H3_SETTINGS_ERROR: 76 return "ERR_H3_SETTINGS_ERROR"; 77 case NGHTTP3_ERR_H3_STREAM_CREATION_ERROR: 78 return "ERR_H3_STREAM_CREATION_ERROR"; 79 case NGHTTP3_ERR_NOMEM: 80 return "ERR_NOMEM"; 81 case NGHTTP3_ERR_CALLBACK_FAILURE: 82 return "ERR_CALLBACK_FAILURE"; 83 default: 84 return "(unknown)"; 85 } 86} 87 88uint64_t nghttp3_err_infer_quic_app_error_code(int liberr) { 89 switch (liberr) { 90 case 0: 91 return NGHTTP3_H3_NO_ERROR; 92 case NGHTTP3_ERR_QPACK_DECOMPRESSION_FAILED: 93 return NGHTTP3_QPACK_DECOMPRESSION_FAILED; 94 case NGHTTP3_ERR_QPACK_ENCODER_STREAM_ERROR: 95 return NGHTTP3_QPACK_ENCODER_STREAM_ERROR; 96 case NGHTTP3_ERR_QPACK_DECODER_STREAM_ERROR: 97 return NGHTTP3_QPACK_DECODER_STREAM_ERROR; 98 case NGHTTP3_ERR_H3_FRAME_UNEXPECTED: 99 return NGHTTP3_H3_FRAME_UNEXPECTED; 100 case NGHTTP3_ERR_H3_FRAME_ERROR: 101 return NGHTTP3_H3_FRAME_ERROR; 102 case NGHTTP3_ERR_H3_MISSING_SETTINGS: 103 return NGHTTP3_H3_MISSING_SETTINGS; 104 case NGHTTP3_ERR_H3_INTERNAL_ERROR: 105 case NGHTTP3_ERR_NOMEM: 106 case NGHTTP3_ERR_CALLBACK_FAILURE: 107 return NGHTTP3_H3_INTERNAL_ERROR; 108 case NGHTTP3_ERR_H3_CLOSED_CRITICAL_STREAM: 109 return NGHTTP3_H3_CLOSED_CRITICAL_STREAM; 110 case NGHTTP3_ERR_H3_GENERAL_PROTOCOL_ERROR: 111 return NGHTTP3_H3_GENERAL_PROTOCOL_ERROR; 112 case NGHTTP3_ERR_H3_ID_ERROR: 113 return NGHTTP3_H3_ID_ERROR; 114 case NGHTTP3_ERR_H3_SETTINGS_ERROR: 115 return NGHTTP3_H3_SETTINGS_ERROR; 116 case NGHTTP3_ERR_H3_STREAM_CREATION_ERROR: 117 return NGHTTP3_H3_STREAM_CREATION_ERROR; 118 case NGHTTP3_ERR_MALFORMED_HTTP_HEADER: 119 case NGHTTP3_ERR_MALFORMED_HTTP_MESSAGING: 120 return NGHTTP3_H3_MESSAGE_ERROR; 121 default: 122 return NGHTTP3_H3_GENERAL_PROTOCOL_ERROR; 123 } 124} 125 126int nghttp3_err_is_fatal(int liberr) { return liberr < NGHTTP3_ERR_FATAL; } 127