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