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 AddHeader(HttpRequestHeaders::kContentLength
,
45 base::StringPrintf("%" PRIuS
, body
.length()));
46 AddHeader(HttpRequestHeaders::kContentType
, content_type
);
49 std::string
HttpServerResponseInfo::Serialize() const {
50 std::string response
= base::StringPrintf(
51 "HTTP/1.1 %d %s\r\n", status_code_
, GetHttpReasonPhrase(status_code_
));
52 Headers::const_iterator header
;
53 for (header
= headers_
.begin(); header
!= headers_
.end(); ++header
)
54 response
+= header
->first
+ ":" + header
->second
+ "\r\n";
56 return response
+ "\r\n" + body_
;
59 HttpStatusCode
HttpServerResponseInfo::status_code() const {
63 const std::string
& HttpServerResponseInfo::body() const {