[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/coin0/libhttpserver/master/src/httpserver/http_response.hpp [Back]  [Original]

/*
     This file is part of libhttpserver
     Copyright (C) 2011-2019 Sebastiano Merlino

     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Lesser General Public
     License as published by the Free Software Foundation; either
     version 2.1 of the License, or (at your option) any later version.

     This library is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     Lesser General Public License for more details.

     You should have received a copy of the GNU Lesser General Public
     License along with this library; if not, write to the Free Software
     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301
     USA
*/

#if !defined (_HTTPSERVER_HPP_INSIDE_) && !defined (HTTPSERVER_COMPILATION)
#error "Only  or  can be included directly."
#endif

#ifndef _HTTP_RESPONSE_HPP_
#define _HTTP_RESPONSE_HPP_
#include 
#include 
#include 
#include 
#include 
#include 

#include "httpserver/http_utils.hpp"

struct MHD_Connection;
struct MHD_Response;

namespace httpserver
{

/**
 * Class representing an abstraction for an Http Response. It is used from classes using these apis to send information through http protocol.
**/
class http_response
{
    public:
        http_response():
            response_code(-1)
        {
        }

        explicit http_response(int response_code, const std::string& content_type):
            response_code(response_code)
        {
            this->headers[http::http_utils::http_header_content_type] = content_type;
        }

        /**
         * Copy constructor
         * @param b The http_response object to copy attributes value from.
        **/
        http_response(const http_response& b):
            response_code(b.response_code),
            headers(b.headers),
            footers(b.footers),
            cookies(b.cookies)
        {
        }

        http_response(http_response&& other) noexcept:
            response_code(other.response_code),
            headers(std::move(other.headers)),
            footers(std::move(other.footers)),
            cookies(std::move(other.cookies))
        {
        }

        http_response& operator=(const http_response& b)
        {
            if (this == &b) return *this;

            this->response_code = b.response_code;
            this->headers = b.headers;
            this->footers = b.footers;
            this->cookies = b.cookies;

            return *this;
        }

        http_response& operator=(http_response&& b)
        {
            if (this == &b) return *this;

            this->response_code = b.response_code;
            this->headers = std::move(b.headers);
            this->footers = std::move(b.footers);
            this->cookies = std::move(b.cookies);

            return *this;
        }

        virtual ~http_response()
        {
        }

        /**
         * Method used to get a specified header defined for the response
         * @param key The header identification
         * @return a string representing the value assumed by the header
        **/
        const std::string& get_header(const std::string& key)
        {
            return this->headers[key];
        }

        /**
         * Method used to get a specified footer defined for the response
         * @param key The footer identification
         * @return a string representing the value assumed by the footer
        **/
        const std::string& get_footer(const std::string& key)
        {
            return this->footers[key];
        }

        const std::string& get_cookie(const std::string& key)
        {
            return this->cookies[key];
        }

        /**
         * Method used to get all headers passed with the request.
         * @return a map containing all headers.
        **/
        const std::map& get_headers() const
        {
            return this->headers;
        }

        /**
         * Method used to get all footers passed with the request.
         * @return a map containing all footers.
        **/
        const std::map& get_footers() const
        {
            return this->footers;
        }

        const std::map& get_cookies() const
        {
            return this->cookies;
        }

        /**
         * Method used to get the response code from the response
         * @return The response code
        **/
        int get_response_code() const
        {
            return this->response_code;
        }

        void with_header(const std::string& key, const std::string& value)
        {
            headers[key] = value;
        }

        void with_footer(const std::string& key, const std::string& value)
        {
            footers[key] = value;
        }

        void with_cookie(const std::string& key, const std::string& value)
        {
            cookies[key] = value;
        }

        void shoutCAST();

        virtual MHD_Response* get_raw_response();
        virtual void decorate_response(MHD_Response* response);
        virtual int enqueue_response(MHD_Connection* connection, MHD_Response* response);

    protected:
        std::string content;
        int response_code;

        std::map headers;
        std::map footers;
        std::map cookies;

    	friend std::ostream &operator

Web Proxy Viewer  |  New URL  |  Original Page