X-Git-Url: https://git.llucax.com/z.facultad/75.42/plaqui.git/blobdiff_plain/f27c218d18ebf7198e07249aca1eed625da914fd..9322e49b932d824e5664aa8c0e0f9a41464537b1:/Server/src/httpresponse.cpp?ds=sidebyside diff --git a/Server/src/httpresponse.cpp b/Server/src/httpresponse.cpp index 562dbf9..2ae86a9 100644 --- a/Server/src/httpresponse.cpp +++ b/Server/src/httpresponse.cpp @@ -40,48 +40,55 @@ namespace Server { HTTPResponse::~HTTPResponse(void) { #ifdef DEBUG - cerr << __FILE__ << ": destructor." << endl; + cerr << __FILE__ << "(" << __LINE__ << ")" + << ": destructor." << endl; #endif // DEBUG } -HTTPResponse::HTTPResponse(const string& version): - HTTPMessage(version) { +HTTPResponse::HTTPResponse(const string& body, const string& version): + HTTPMessage(body, version) { #ifdef DEBUG - cerr << __FILE__ << ": version = " << version << endl; + cerr << __FILE__ << "(" << __LINE__ << ")" + << ": body.length = " << body.length() + << " | version = " << version << endl; #endif // DEBUG } HTTPResponse::HTTPResponse(const HTTPError& error): status_code(error.code) { #ifdef DEBUG - cerr << __FILE__ << ": HTTPError(status_code = " << error.code + cerr << __FILE__ << "(" << __LINE__ << ")" + << ": HTTPError(status_code = " << error.code << ", reason = " << HTTPMessage::reason(error.code) << ", desc = " << error.what() << ")" << endl; #endif // DEBUG - set_body(string(""); + set_body(string(""); } HTTPResponse::HTTPResponse(unsigned status_code, const string& body): HTTPMessage(body), status_code(status_code) { #ifdef DEBUG - cerr << __FILE__ << ": status_code = " << status_code + cerr << __FILE__ << "(" << __LINE__ << ")" + << ": status_code = " << status_code << " | body.length = " << body.length() << endl; #endif // DEBUG } istream& operator>>(istream& is, HTTPResponse& resp) - throw (HTTPResponse::Error, ios::failure) { + throw (HTTPResponse::Error, sockerr, ios::failure) { #ifdef DEBUG - cerr << __FILE__ << ": operator>>()" << endl; + cerr << __FILE__ << "(" << __LINE__ << ")" + << ": operator>>()" << endl; #endif // DEBUG char buf[BUFSIZ]; // Obtengo primera línea (request) if (!is.getline(buf, BUFSIZ)) { - // No hay mas líneas. - throw ios::failure("socket closed"); + // Fin de archivo. + throw ios::failure("eof"); } #ifdef DEBUG - cerr << __FILE__ << ":\tRecibiendo linea: " << buf << endl; + cerr << __FILE__ << "(" << __LINE__ << ")" + << ":\tRecibiendo linea: " << buf << endl; #endif // DEBUG String line(buf); // Si es la primera línea, es el request. @@ -90,7 +97,7 @@ istream& operator>>(istream& is, HTTPResponse& resp) } // Averiguo la versión. string::size_type pos = line.find_first_of(String::SPACE_CHARS, 5); - string ver = line.substr(5, pos); + string ver = line.substr(5, pos - 5); if ((ver == "1.1") || (ver == "1.0")) { resp.version = ver; } else { @@ -115,20 +122,18 @@ istream& operator>>(istream& is, HTTPResponse& resp) if (line.length() != 3) { throw HTTPResponse::INVALID_HTTP_RESPONSE_CODE; } - stringstream ss; - ss << line; // TODO ver forma mas linda de convertir - ss >> resp.status_code; + to(line, resp.status_code); is >> static_cast(resp); return is; } -ostream& operator<<(ostream& os, const HTTPResponse& resp) { +ostream& operator<<(ostream& os, const HTTPResponse& resp) throw(sockerr) { #ifdef DEBUG - cerr << __FILE__ << ": operator<<()" << endl; + cerr << __FILE__ << "(" << __LINE__ << ")" + << ": operator<<()" << endl; #endif // DEBUG os << "HTTP/" << resp.version << " " << resp.status_code << " " - << HTTPMessage::reason(resp.status_code) << "\n\r"; - // TODO ver que este bien el \r\l + << HTTPMessage::reason(resp.status_code) << "\r\n"; os << static_cast(resp); return os; }