1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "net/server/http_server_response_info.h"
7 #include "base/format_macros.h"
8 #include "base/strings/stringprintf.h"
9 #include "net/http/http_request_headers.h"
13 HttpServerResponseInfo::HttpServerResponseInfo() : status_code_(HTTP_OK
) {}
15 HttpServerResponseInfo::HttpServerResponseInfo(HttpStatusCode status_code
)
16 : status_code_(status_code
) {}
18 HttpServerResponseInfo::~HttpServerResponseInfo() {}
21 HttpServerResponseInfo
HttpServerResponseInfo::CreateFor404() {
22 HttpServerResponseInfo
response(HTTP_NOT_FOUND
);
23 response
.SetBody(std::string(), "text/html");
28 HttpServerResponseInfo
HttpServerResponseInfo::CreateFor500(
29 const std::string
& body
) {
30 HttpServerResponseInfo
response(HTTP_INTERNAL_SERVER_ERROR
);
31 response
.SetBody(body
, "text/html");
35 void HttpServerResponseInfo::AddHeader(const std::string
& name
,
36 const std::string
& value
) {
37 headers_
.push_back(std::make_pair(name
, value
));
40 void HttpServerResponseInfo::SetBody(const std::string
& body
,
41 const std::string
& content_type
) {
42 DCHECK(body_
.empty());
44 SetContentHeaders(body
.length(), content_type
);
47 void HttpServerResponseInfo::SetContentHeaders(
48 size_t content_length
,
49 const std::string
& content_type
) {
50 AddHeader(HttpRequestHeaders::kContentLength
,
51 base::StringPrintf("%" PRIuS
, content_length
));
52 AddHeader(HttpRequestHeaders::kContentType
, content_type
);
55 std::string
HttpServerResponseInfo::Serialize() const {
56 std::string response
= base::StringPrintf(
57 "HTTP/1.1 %d %s\r\n", status_code_
, GetHttpReasonPhrase(status_code_
));
58 Headers::const_iterator header
;
59 for (header
= headers_
.begin(); header
!= headers_
.end(); ++header
)
60 response
+= header
->first
+ ":" + header
->second
+ "\r\n";
62 return response
+ "\r\n" + body_
;
65 HttpStatusCode
HttpServerResponseInfo::status_code() const {
69 const std::string
& HttpServerResponseInfo::body() const {