//
// Copyright (C) 2009 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//

// Implementation of common HTTP related functions.

#include "update_engine/common/http_common.h"

#include <cstdlib>

#include <base/macros.h>

namespace chromeos_update_engine {

const char *GetHttpResponseDescription(HttpResponseCode code) {
  static const struct {
    HttpResponseCode code;
    const char* description;
  } http_response_table[] = {
    { kHttpResponseOk,                  "OK" },
    { kHttpResponseCreated,             "Created" },
    { kHttpResponseAccepted,            "Accepted" },
    { kHttpResponseNonAuthInfo,         "Non-Authoritative Information" },
    { kHttpResponseNoContent,           "No Content" },
    { kHttpResponseResetContent,        "Reset Content" },
    { kHttpResponsePartialContent,      "Partial Content" },
    { kHttpResponseMultipleChoices,     "Multiple Choices" },
    { kHttpResponseMovedPermanently,    "Moved Permanently" },
    { kHttpResponseFound,               "Found" },
    { kHttpResponseSeeOther,            "See Other" },
    { kHttpResponseNotModified,         "Not Modified" },
    { kHttpResponseUseProxy,            "Use Proxy" },
    { kHttpResponseTempRedirect,        "Temporary Redirect" },
    { kHttpResponseBadRequest,          "Bad Request" },
    { kHttpResponseUnauth,              "Unauthorized" },
    { kHttpResponseForbidden,           "Forbidden" },
    { kHttpResponseNotFound,            "Not Found" },
    { kHttpResponseRequestTimeout,      "Request Timeout" },
    { kHttpResponseInternalServerError, "Internal Server Error" },
    { kHttpResponseNotImplemented,      "Not Implemented" },
    { kHttpResponseServiceUnavailable,  "Service Unavailable" },
    { kHttpResponseVersionNotSupported, "HTTP Version Not Supported" },
  };

  bool is_found = false;
  size_t i;
  for (i = 0; i < arraysize(http_response_table); i++)
    if ((is_found = (http_response_table[i].code == code)))
      break;

  return (is_found ? http_response_table[i].description : "(unsupported)");
}

HttpResponseCode StringToHttpResponseCode(const char *s) {
  return static_cast<HttpResponseCode>(strtoul(s, nullptr, 10));
}


const char *GetHttpContentTypeString(HttpContentType type) {
  static const struct {
    HttpContentType type;
    const char* str;
  } http_content_type_table[] = {
    { kHttpContentTypeTextXml, "text/xml" },
  };

  bool is_found = false;
  size_t i;
  for (i = 0; i < arraysize(http_content_type_table); i++)
    if ((is_found = (http_content_type_table[i].type == type)))
      break;

  return (is_found ? http_content_type_table[i].str : nullptr);
}

}  // namespace chromeos_update_engine