1 // 2 // Copyright (C) 2009 The Android Open Source Project 3 // 4 // Licensed under the Apache License, Version 2.0 (the "License"); 5 // you may not use this file except in compliance with the License. 6 // You may obtain a copy of the License at 7 // 8 // http://www.apache.org/licenses/LICENSE-2.0 9 // 10 // Unless required by applicable law or agreed to in writing, software 11 // distributed under the License is distributed on an "AS IS" BASIS, 12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 // See the License for the specific language governing permissions and 14 // limitations under the License. 15 // 16 17 // Implementation of common HTTP related functions. 18 19 #include "update_engine/common/http_common.h" 20 21 #include <cstdlib> 22 23 #include <base/macros.h> 24 25 namespace chromeos_update_engine { 26 27 const char *GetHttpResponseDescription(HttpResponseCode code) { 28 static const struct { 29 HttpResponseCode code; 30 const char* description; 31 } http_response_table[] = { 32 { kHttpResponseOk, "OK" }, 33 { kHttpResponseCreated, "Created" }, 34 { kHttpResponseAccepted, "Accepted" }, 35 { kHttpResponseNonAuthInfo, "Non-Authoritative Information" }, 36 { kHttpResponseNoContent, "No Content" }, 37 { kHttpResponseResetContent, "Reset Content" }, 38 { kHttpResponsePartialContent, "Partial Content" }, 39 { kHttpResponseMultipleChoices, "Multiple Choices" }, 40 { kHttpResponseMovedPermanently, "Moved Permanently" }, 41 { kHttpResponseFound, "Found" }, 42 { kHttpResponseSeeOther, "See Other" }, 43 { kHttpResponseNotModified, "Not Modified" }, 44 { kHttpResponseUseProxy, "Use Proxy" }, 45 { kHttpResponseTempRedirect, "Temporary Redirect" }, 46 { kHttpResponseBadRequest, "Bad Request" }, 47 { kHttpResponseUnauth, "Unauthorized" }, 48 { kHttpResponseForbidden, "Forbidden" }, 49 { kHttpResponseNotFound, "Not Found" }, 50 { kHttpResponseRequestTimeout, "Request Timeout" }, 51 { kHttpResponseInternalServerError, "Internal Server Error" }, 52 { kHttpResponseNotImplemented, "Not Implemented" }, 53 { kHttpResponseServiceUnavailable, "Service Unavailable" }, 54 { kHttpResponseVersionNotSupported, "HTTP Version Not Supported" }, 55 }; 56 57 bool is_found = false; 58 size_t i; 59 for (i = 0; i < arraysize(http_response_table); i++) 60 if ((is_found = (http_response_table[i].code == code))) 61 break; 62 63 return (is_found ? http_response_table[i].description : "(unsupported)"); 64 } 65 66 HttpResponseCode StringToHttpResponseCode(const char *s) { 67 return static_cast<HttpResponseCode>(strtoul(s, nullptr, 10)); 68 } 69 70 71 const char *GetHttpContentTypeString(HttpContentType type) { 72 static const struct { 73 HttpContentType type; 74 const char* str; 75 } http_content_type_table[] = { 76 { kHttpContentTypeTextXml, "text/xml" }, 77 }; 78 79 bool is_found = false; 80 size_t i; 81 for (i = 0; i < arraysize(http_content_type_table); i++) 82 if ((is_found = (http_content_type_table[i].type == type))) 83 break; 84 85 return (is_found ? http_content_type_table[i].str : nullptr); 86 } 87 88 } // namespace chromeos_update_engine 89