dmpspserverresponse.cpp 2.7 KB
/**************************************************************************
* file:              dmpspserverresponse.cpp

* Author:            wanzhongping
* Date:              2021-01-14 18:14:57
* Email:             zhongpingw@chinadci.com
* copyright:         广州城市信息研究所有限公司
***************************************************************************/
#include "dmpspserverresponse.h"
#include "dmplogger.h"
#include <boost/format.hpp>

DmpSpServerResponse::DmpSpServerResponse(SP_HttpResponse* response)
{
    sp_response_ = response;
    clear();
    setHeader("Access-Control-Allow-Origin","*");
    setHeader("Access-Control-Allow-Headers","Origin, Content-Type, Cookie,X-CSRF-TOKEN, Accept,Authorization");
    setHeader("Access-Control-Allow-Methods","GET, POST, PATCH, PUT, OPTIONS");
    setHeader("Access-Control-Allow-Credentials","true");
}

void DmpSpServerResponse::setHeader(const std::string &key, const std::string &value)
{
    sp_response_->addHeader(key.c_str(), value.c_str());
}

void DmpSpServerResponse::removeHeader(const std::string &key)
{
    sp_response_->removeHeader(key.c_str());
}

std::string DmpSpServerResponse::header(const std::string &key) const
{
    return sp_response_->getHeaderValue(key.c_str());
}

ParameterMap DmpSpServerResponse::headers() const
{
    ParameterMap headers;
    for(int i = 0; i < sp_response_->getHeaderCount(); i++) {
		headers[sp_response_->getHeaderName(i)] = sp_response_->getHeaderValue(i);
	}
    return headers;
}

int DmpSpServerResponse::statusCode() const 
{
    return sp_response_->getStatusCode();
}
void DmpSpServerResponse::setStatusCode(int code)
{
    sp_response_->setStatusCode(code);
}

void DmpSpServerResponse::write(const std::string data)
{
    sp_response_->appendContent(data.c_str(),data.size());
}
void DmpSpServerResponse::writeJson(const std::string data)
{
    removeHeader("Content-Type");
    setHeader("Content-Type", "text/json;charset=utf-8");
    write(data);
}
void DmpSpServerResponse::writeHtml(const std::string data)
{
    removeHeader("Content-Type");
    setHeader("Content-Type", "text/html;charset=utf-8");
    write(data);
}
void DmpSpServerResponse::writeContent(const void * content, int length)
{
    sp_response_->appendContent(content, length);
}

void DmpSpServerResponse::sendError(int code, const std::string &message)
{
    removeHeader("Content-Type");
    setHeader("Content-Type", "text/html;charset=utf-8");
    setStatusCode(code);
    write(message);
}

void DmpSpServerResponse::clear()
{
    for(int i=0; i< sp_response_->getHeaderCount(); i++)
    {
        sp_response_->removeHeader(i);
    }
}