Home | History | Annotate | Download | only in common
      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