Beispiel #1
0
RESPONSE_HEADER_RESULT 
ResponseHeaderBuilder::Build(
	String& OutResponse) const
{
	std::stringstream response; 
	
	response << ProtocolToString(Protocol) << " ";

	//
	// Some codes need special cases
	//
	if (Code == RESPONSE_MOVED ||
		Code == RESPONSE_FOUND)
	{
		if (!RedirectURI.size())
		{
			return RESPONSE_HEADER_NEED_REDIRECT_URI;
		}

		response 
			<< "URI: " 
			<< RedirectURI
			<< HTTP_LINE_ENDING;
	}
	else if (Code == RESPONSE_METHOD)
	{
		if (!RedirectURI.size())
		{
			return RESPONSE_HEADER_NEED_REDIRECT_URI;
		}

		response 
			<< "Method: " 
			<< MethodToString(Method) 
			<< " "
			<< RedirectURI 
			<< HTTP_LINE_ENDING;
	}
	else
	{
		response << Code << " " << ResponseCodeToString(Code) << HTTP_LINE_ENDING;
	}

	//
	// If we require authentication, say as much:
	//
	if (Code == RESPONSE_UNAUTHORISED)
	{
		if (AuthMode == AUTH_NONE)
		{
			return RESPONSE_HEADER_NEED_AUTH_MODE;
		}

		if (!AuthRealm.size())
		{
			return RESPONSE_HEADER_NEED_AUTH_REALM;
		}

		response 
			<< "WWW-Authenticate: " 
			<< AuthModeToString(AuthMode) 
			<< "Realm=\""
			<< AuthRealm 
			<< "\"" 
			<< HTTP_LINE_ENDING;
	}

	//
	// Add the keys
	//
	for (auto pair : m_ExtraLines)
	{
		response << pair.first << ":";
		if (pair.second.size())
			response << " " << pair.second;
		response << HTTP_LINE_ENDING;
	}

	// Terminating line break
	response << HTTP_LINE_ENDING;

	OutResponse = response.str();

	return RESPONSE_HEADER_OK;
}
Beispiel #2
0
    QString HttpResponseHeader::toString() const
    {
        QString str;
        str += QString("HTTP/%1.%2 %3 %4\r\n").arg(major_version).arg(minor_version).arg(response_code).arg(ResponseCodeToString(response_code));

        QMap<QString, QString>::const_iterator itr = fields.begin();
        while (itr != fields.end())
        {
            str += QString("%1: %2\r\n").arg(itr.key()).arg(itr.value());
            itr++;
        }
        str += "\r\n";
        return str;
    }