Webserv
Loading...
Searching...
No Matches
HttpResponse.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <vector>
4#include <map>
5#include <string>
6#include <ostream>
7#include "HttpStatus.hpp"
8
9namespace http {
10
11typedef std::map<std::string, std::string> HeaderMap;
12
26
35public:
37 HttpResponse(Status code, std::string const &httpVersion);
39 HttpResponse const &operator=(HttpResponse const &);
41
42 void setStatus(Status s);
43 void setNoBody();
44 void setBodyInMemory(std::vector<char> const &, std::string const &mimeType);
45 void setBodyFromFile(int fd, size_t size);
46 void setBodyFromFile(int fd, size_t size, std::string const &mimeType);
47 void setBodyFromCgi(int pipe_fd);
48
49 Status getStatus() const;
50 char const *getResponsePhrase() const;
52 HeaderMap const &getHeaders() const;
53 std::string const &getVersion() const;
55 std::string buildHeaders() const;
56
57 union {
59 struct {
60 std::vector<char> *data;
61 size_t sent;
63
65 struct {
66 int fd;
67 size_t totalSize;
68 size_t sent;
70
72 struct {
73 int pipe_fd;
75 };
76
77private:
78 std::string httpVersion_;
82
83 void cleanupBody();
84};
85
86std::ostream &operator<<(std::ostream &o, HttpResponse const &r);
87
88} // namespace http
A data container for an HTTP response.
Definition HttpResponse.hpp:34
size_t totalSize
Definition HttpResponse.hpp:67
struct http::HttpResponse::@156133230111055151163042002230311132204044131367::@373020156377375237067350262063131206103242202302 fileBody
Details for file-based bodies.
HeaderMap headers_
Definition HttpResponse.hpp:80
Status getStatus() const
Definition HttpResponse.cpp:126
char const * getResponsePhrase() const
Definition HttpResponse.cpp:130
HeaderMap & getHeaders()
Definition HttpResponse.cpp:134
size_t sent
Definition HttpResponse.hpp:61
void setBodyFromCgi(int pipe_fd)
Definition HttpResponse.cpp:120
std::vector< char > * data
Definition HttpResponse.hpp:60
void setStatus(Status s)
Definition HttpResponse.cpp:85
int pipe_fd
Definition HttpResponse.hpp:73
HttpResponse()
Definition HttpResponse.cpp:40
Status statusCode_
Definition HttpResponse.hpp:79
BodySourceType getBodyType() const
Definition HttpResponse.cpp:146
void setNoBody()
Definition HttpResponse.cpp:89
void setBodyInMemory(std::vector< char > const &, std::string const &mimeType)
Definition HttpResponse.cpp:97
void setBodyFromFile(int fd, size_t size)
Definition HttpResponse.cpp:106
struct http::HttpResponse::@156133230111055151163042002230311132204044131367::@307023034276377016164376230020354371125244177330 cgiBody
Details for CGI-based bodies.
void cleanupBody()
Definition HttpResponse.cpp:150
HttpResponse const & operator=(HttpResponse const &)
Definition HttpResponse.cpp:62
int fd
Definition HttpResponse.hpp:66
BodySourceType bodyType_
Definition HttpResponse.hpp:81
std::string httpVersion_
Definition HttpResponse.hpp:78
~HttpResponse()
Definition HttpResponse.cpp:81
struct http::HttpResponse::@156133230111055151163042002230311132204044131367::@122176346042124374077104200162363206224374240000 inMemoryBody
Details for in-memory bodies.
std::string buildHeaders() const
Definition HttpResponse.cpp:157
std::string const & getVersion() const
Definition HttpResponse.cpp:142
Definition error_pages.hpp:7
std::ostream & operator<<(std::ostream &o, HttpRequest const &r)
Definition HttpRequest.cpp:25
BodySourceType
Defines the source of the data for an HTTP response body.
Definition HttpResponse.hpp:20
@ BODY_NONE
Definition HttpResponse.hpp:21
@ BODY_FROM_FILE
Definition HttpResponse.hpp:23
@ BODY_FROM_CGI
Definition HttpResponse.hpp:24
@ BODY_IN_MEMORY
Definition HttpResponse.hpp:22
std::map< std::string, std::string > HeaderMap
Definition HttpResponse.hpp:11
Status
Enumeration of common HTTP status codes.
Definition HttpStatus.hpp:9