1 /* 2 * Copyright (c) 2023-2024 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef COMMUNICATIONNETSTACK_HTTP_CLIENT_ERROR_H 17 #define COMMUNICATIONNETSTACK_HTTP_CLIENT_ERROR_H 18 19 #include <string> 20 #include <map> 21 #include <curl/curl.h> 22 23 namespace OHOS { 24 namespace NetStack { 25 namespace HttpClient { 26 enum HttpErrorCode { 27 HTTP_NONE_ERR = 0, 28 HTTP_PERMISSION_DENIED_CODE = 201, 29 HTTP_PARSE_ERROR_CODE = 401, 30 HTTP_ERROR_CODE_BASE = 2300000, 31 HTTP_UNSUPPORTED_PROTOCOL = HTTP_ERROR_CODE_BASE + CURLE_UNSUPPORTED_PROTOCOL, 32 HTTP_FAILED_INIT = HTTP_ERROR_CODE_BASE + CURLE_FAILED_INIT, 33 HTTP_URL_MALFORMAT = HTTP_ERROR_CODE_BASE + CURLE_URL_MALFORMAT, 34 HTTP_COULDNT_RESOLVE_PROXY = HTTP_ERROR_CODE_BASE + CURLE_COULDNT_RESOLVE_PROXY, 35 HTTP_COULDNT_RESOLVE_HOST = HTTP_ERROR_CODE_BASE + CURLE_COULDNT_RESOLVE_HOST, 36 HTTP_COULDNT_CONNECT = HTTP_ERROR_CODE_BASE + CURLE_COULDNT_CONNECT, 37 HTTP_WEIRD_SERVER_REPLY = HTTP_ERROR_CODE_BASE + CURLE_WEIRD_SERVER_REPLY, 38 HTTP_REMOTE_ACCESS_DENIED = HTTP_ERROR_CODE_BASE + CURLE_REMOTE_ACCESS_DENIED, 39 HTTP_HTTP2_ERROR = HTTP_ERROR_CODE_BASE + CURLE_HTTP2, 40 HTTP_PARTIAL_FILE = HTTP_ERROR_CODE_BASE + CURLE_PARTIAL_FILE, 41 HTTP_WRITE_ERROR = HTTP_ERROR_CODE_BASE + CURLE_WRITE_ERROR, 42 HTTP_UPLOAD_FAILED = HTTP_ERROR_CODE_BASE + CURLE_UPLOAD_FAILED, 43 HTTP_READ_ERROR = HTTP_ERROR_CODE_BASE + CURLE_READ_ERROR, 44 HTTP_OUT_OF_MEMORY = HTTP_ERROR_CODE_BASE + CURLE_OUT_OF_MEMORY, 45 HTTP_OPERATION_TIMEDOUT = HTTP_ERROR_CODE_BASE + CURLE_OPERATION_TIMEDOUT, 46 HTTP_POST_ERROR = HTTP_ERROR_CODE_BASE + CURLE_HTTP_POST_ERROR, 47 HTTP_TASK_CANCELED = HTTP_ERROR_CODE_BASE + CURLE_ABORTED_BY_CALLBACK, 48 HTTP_TOO_MANY_REDIRECTS = HTTP_ERROR_CODE_BASE + CURLE_TOO_MANY_REDIRECTS, 49 HTTP_GOT_NOTHING = HTTP_ERROR_CODE_BASE + CURLE_GOT_NOTHING, 50 HTTP_SEND_ERROR = HTTP_ERROR_CODE_BASE + CURLE_SEND_ERROR, 51 HTTP_RECV_ERROR = HTTP_ERROR_CODE_BASE + CURLE_RECV_ERROR, 52 HTTP_SSL_CERTPROBLEM = HTTP_ERROR_CODE_BASE + CURLE_SSL_CERTPROBLEM, 53 HTTP_SSL_CIPHER = HTTP_ERROR_CODE_BASE + CURLE_SSL_CIPHER, 54 HTTP_PEER_FAILED_VERIFICATION = HTTP_ERROR_CODE_BASE + CURLE_PEER_FAILED_VERIFICATION, 55 HTTP_BAD_CONTENT_ENCODING = HTTP_ERROR_CODE_BASE + CURLE_BAD_CONTENT_ENCODING, 56 HTTP_FILESIZE_EXCEEDED = HTTP_ERROR_CODE_BASE + CURLE_FILESIZE_EXCEEDED, 57 HTTP_REMOTE_DISK_FULL = HTTP_ERROR_CODE_BASE + CURLE_REMOTE_DISK_FULL, 58 HTTP_REMOTE_FILE_EXISTS = HTTP_ERROR_CODE_BASE + CURLE_REMOTE_FILE_EXISTS, 59 HTTP_SSL_CACERT_BADFILE = HTTP_ERROR_CODE_BASE + CURLE_SSL_CACERT_BADFILE, 60 HTTP_REMOTE_FILE_NOT_FOUND = HTTP_ERROR_CODE_BASE + CURLE_REMOTE_FILE_NOT_FOUND, 61 HTTP_AUTH_ERROR = HTTP_ERROR_CODE_BASE + CURLE_AUTH_ERROR, 62 HTTP_SSL_PINNEDPUBKEYNOTMATCH = HTTP_ERROR_CODE_BASE + CURLE_SSL_PINNEDPUBKEYNOTMATCH, 63 HTTP_UNKNOWN_OTHER_ERROR = 2300999 64 }; 65 66 class HttpClientError { 67 public: 68 /** 69 * Constructor that initializes the HttpClientError object. 70 */ HttpClientError()71 HttpClientError() : errorCode_(HTTP_NONE_ERR) {} 72 73 /** 74 * Get the error code. 75 * @return Error code of type HttpErrorCode. 76 */ 77 [[nodiscard]] HttpErrorCode GetErrorCode() const; 78 79 /** 80 * Get the error message. 81 * @return Error message string. 82 */ 83 [[nodiscard]] const std::string &GetErrorMessage() const; 84 85 private: 86 friend class HttpClientTask; 87 88 /** 89 * Set the error code. 90 * @param code Error code of type HttpErrorCode. 91 */ 92 void SetErrorCode(HttpErrorCode code); 93 94 /** 95 * Set the CURL result code. 96 * @param result Result code of type CURLcode. 97 */ 98 void SetCURLResult(CURLcode result); 99 100 HttpErrorCode errorCode_; 101 }; 102 } // namespace HttpClient 103 } // namespace NetStack 104 } // namespace OHOS 105 106 #endif // COMMUNICATIONNETSTACK_HTTP_CLIENT_ERROR_H 107