i2pd/core/util/HTTP.h

105 lines
1.9 KiB
C
Raw Normal View History

#ifndef _HTTP_H__
#define _HTTP_H__
#include <string>
#include <map>
2015-09-17 12:47:16 +03:00
#include <sstream>
namespace i2p {
namespace util {
namespace http {
class Request {
2015-09-06 19:51:19 +03:00
void parseRequestLine(const std::string& line);
2015-09-06 19:51:19 +03:00
void parseHeaderLine(const std::string& line);
2015-09-17 12:47:16 +03:00
void parseHeader(std::stringstream& ss);
void setIsComplete();
public:
2015-09-06 21:34:50 +03:00
Request() = default;
2015-09-06 21:34:50 +03:00
Request(const std::string& data);
2015-09-06 19:51:19 +03:00
std::string getMethod() const;
std::string getUri() const;
std::string getHost() const;
int getPort() const;
/**
* @throw std::out_of_range if no such header exists
*/
std::string getHeader(const std::string& name) const;
2015-09-07 13:31:57 +03:00
std::string getContent() const;
2015-09-17 12:47:16 +03:00
bool hasData() const;
bool isComplete() const;
void clear();
void update(const std::string& data);
private:
2015-09-17 12:47:16 +03:00
std::string header_part;
std::string method;
std::string uri;
std::string host;
2015-09-07 13:31:57 +03:00
std::string content;
int port;
std::map<std::string, std::string> headers;
2015-09-17 12:47:16 +03:00
bool has_data;
bool has_header;
bool is_complete;
};
2015-09-06 19:51:19 +03:00
class Response {
public:
2015-09-06 21:34:50 +03:00
Response() = default;
2015-09-06 19:51:19 +03:00
2015-09-06 21:34:50 +03:00
Response(int status, const std::string& content = "");
2015-09-06 19:51:19 +03:00
/**
* @note overrides existing header values with the same name
*/
void setHeader(const std::string& name, const std::string& value);
std::string toString() const;
/**
* @return the message associated with the satus of this response, or the
* empty string if the status number is invalid
*/
std::string getStatusMessage() const;
2015-09-06 21:34:50 +03:00
void setContentLength();
2015-09-06 19:51:19 +03:00
private:
int status;
2015-09-06 21:34:50 +03:00
std::string content;
2015-09-06 19:51:19 +03:00
std::map<std::string, std::string> headers;
};
2015-09-17 12:47:16 +03:00
/**
* Handle server side includes.
*/
std::string preprocessContent(const std::string& content, const std::string& path);
/**
* @return the MIME type based on the extension of the given filename
*/
std::string getMimeType(const std::string& filename);
}
}
}
#endif // _HTTP_H__