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_CLEARTEXT_NOT_PERMITTED = 2300997, 64 HTTP_UNKNOWN_OTHER_ERROR = 2300999 65 }; 66 67 class HttpClientError { 68 public: 69 /** 70 * Constructor that initializes the HttpClientError object. 71 */ HttpClientError()72 HttpClientError() : errorCode_(HTTP_NONE_ERR) {} 73 74 /** 75 * Get the error code. 76 * @return Error code of type HttpErrorCode. 77 */ 78 [[nodiscard]] HttpErrorCode GetErrorCode() const; 79 80 /** 81 * Get the error message. 82 * @return Error message string. 83 */ 84 [[nodiscard]] const std::string &GetErrorMessage() const; 85 86 private: 87 friend class HttpClientTask; 88 89 /** 90 * Set the error code. 91 * @param code Error code of type HttpErrorCode. 92 */ 93 void SetErrorCode(HttpErrorCode code); 94 95 /** 96 * Set the CURL result code. 97 * @param result Result code of type CURLcode. 98 */ 99 void SetCURLResult(CURLcode result); 100 101 HttpErrorCode errorCode_; 102 }; 103 } // namespace HttpClient 104 } // namespace NetStack 105 } // namespace OHOS 106 107 #endif // COMMUNICATIONNETSTACK_HTTP_CLIENT_ERROR_H 108