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; }
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; }