]> git.llucax.com Git - z.facultad/75.42/plaqui.git/blobdiff - Server/src/httpresponse.cpp
Ya anda de nuevo el server. Compila y anda tan (in?)estable como antes, aunque tiene...
[z.facultad/75.42/plaqui.git] / Server / src / httpresponse.cpp
index fb6ba7899bb1fe1c89aceb4381205a918c0a6490..ab26bd3aff5c6a7198ac11cda624ca52a87609a8 100644 (file)
 
 #include "plaqui/server/httpresponse.h"
 #include "plaqui/server/string.h"
 
 #include "plaqui/server/httpresponse.h"
 #include "plaqui/server/string.h"
+#include <sstream>
 #ifdef DEBUG
 #      include <iostream>
 #endif // DEBUG
 
 #ifdef DEBUG
 #      include <iostream>
 #endif // DEBUG
 
-PlaQui::Server::HTTPRequest::~HTTPResponse(void) {
+using namespace std;
+
+namespace PlaQui {
+
+namespace Server {
+
+HTTPResponse::~HTTPResponse(void) {
 #ifdef DEBUG
 #ifdef DEBUG
-       std::cerr << __FILE__ << ": destructor." << std::endl;
+       cerr << __FILE__ << ": destructor." << endl;
 #endif // DEBUG
 }
 
 #endif // DEBUG
 }
 
-PlaQui::Server::HTTPResponse::HTTPResponse(const std::string& version):
-               PlaQui::Server::HTTPMessage(version) {
+HTTPResponse::HTTPResponse(const string& version):
+               HTTPMessage(version) {
 #ifdef DEBUG
 #ifdef DEBUG
-       std::cerr << __FILE__ << ": http_version = " << http_version << std::endl;
+       cerr << __FILE__ << ": version = " << version << endl;
 #endif // DEBUG
 }
 
 /*
 #endif // DEBUG
 }
 
 /*
-PlaQui::Server::HTTPResponse::HTTPResponse(const Serializable& body,
-               const std::string& version):
-               PlaQui::Server::HTTPMessage(body, version) {
+HTTPResponse::HTTPResponse(const Serializable& body,
+               const string& version):
+               HTTPMessage(body, version) {
 #ifdef DEBUG
 #ifdef DEBUG
-       std::cerr << __FILE__ << ": http_version = " << http_version
-               << " | body = " << body.serialize() << std::endl;
+       cerr << __FILE__ << ": http_version = " << http_version
+               << " | body = " << body.serialize() << endl;
 #endif // DEBUG
 }
 
 #endif // DEBUG
 }
 
-PlaQui::Server::HTTPResponse::HTTPResponse(const std::string& uri,
-               const PlaQui::Server::HTTPResponse::HTTPMethod& method,
-               std::string& query, std::string& version):
-               PlaQui::Server::HTTPMessage(body, version) {
+HTTPResponse::HTTPResponse(const string& uri,
+               const HTTPResponse::HTTPMethod& method,
+               string& query, string& version):
+               HTTPMessage(body, version) {
 #ifdef DEBUG
 #ifdef DEBUG
-       std::cerr << __FILE__ << ": http_version = " << http_version
-               << " | body = " << body.serialize() << std::endl;
+       cerr << __FILE__ << ": http_version = " << http_version
+               << " | body = " << body.serialize() << endl;
 #endif // DEBUG
 }
 */
 
 #endif // DEBUG
 }
 */
 
-std::istream& operator>>(std::istream& is, PlaQui::Server::HTTPResponse& req) {
+istream& operator>>(istream& is, HTTPResponse& resp) {
 #ifdef DEBUG
 #ifdef DEBUG
-       std::cerr << __FILE__ << ": operator>>()" << std::endl;
+       cerr << __FILE__ << ": operator>>()" << endl;
 #endif // DEBUG
        char buf[BUFSIZ];
        // Obtengo primera línea (request)
        is.getline(buf, BUFSIZ);
 #ifdef DEBUG
 #endif // DEBUG
        char buf[BUFSIZ];
        // Obtengo primera línea (request)
        is.getline(buf, BUFSIZ);
 #ifdef DEBUG
-       std::cerr << "Recibiendo linea: " << buf << std::endl;
+       cerr << "Recibiendo linea: " << buf << endl;
 #endif // DEBUG
 #endif // DEBUG
-       String line = buf;
+       String line(buf);
        // Si es la primera línea, es el request.
        if (line.to_upper().substr(0, 4) != "HTTP/") {
                // FIXME - poner excepciones lindas.
                throw "Not a HTTP response";
        }
        // Averiguo la versión.
        // Si es la primera línea, es el request.
        if (line.to_upper().substr(0, 4) != "HTTP/") {
                // FIXME - poner excepciones lindas.
                throw "Not a HTTP response";
        }
        // Averiguo la versión.
-       std::string::size_type pos = line.find_first_of(String::SPACE_CHARS, 5);
-       std::string ver = line.substr(5, pos); 
+       string::size_type pos = line.find_first_of(String::SPACE_CHARS, 5);
+       string ver = line.substr(5, pos); 
        if ((ver == "1.1") || (ver == "1.0")) {
        if ((ver == "1.1") || (ver == "1.0")) {
-               version = ver;
+               resp.version = ver;
        } else {
                // FIXME - poner excepciones lindas.
                throw "Invalid HTTP version";
        }
        // Si tiene sólo la versión HTTP, no es válido.
        } else {
                // FIXME - poner excepciones lindas.
                throw "Invalid HTTP version";
        }
        // Si tiene sólo la versión HTTP, no es válido.
-       line = line.substr(pos + 1).trim();
+       line = line.substr(pos + 1);
+       line.trim();
        if (!line.length()) {
                // FIXME - poner excepciones lindas.
                throw "Invalid HTTP response";
        }
        // Si tiene más espacios, tengo la razón (reason).
        pos = line.find_first_of(String::SPACE_CHARS);
        if (!line.length()) {
                // FIXME - poner excepciones lindas.
                throw "Invalid HTTP response";
        }
        // Si tiene más espacios, tengo la razón (reason).
        pos = line.find_first_of(String::SPACE_CHARS);
-       if (pos != std::string::npos) {
-               // Si el resto es un protocolo válido, agrego más variables.
-               String reas = line.substr(pos + 1).trim();
+       if (pos != string::npos) {
+               String r = line.substr(pos + 1);
+               resp.reason = r.trim();
                line = line.substr(0, pos);
        }
        line = line.trim();
                line = line.substr(0, pos);
        }
        line = line.trim();
@@ -109,16 +117,24 @@ std::istream& operator>>(std::istream& is, PlaQui::Server::HTTPResponse& req) {
                // FIXME - poner excepciones lindas.
                throw "Invalid response code";
        }
                // FIXME - poner excepciones lindas.
                throw "Invalid response code";
        }
-       stringstream ss = line; // TODO ver forma mas linda de convertir
-       ss >> status_code;
+       stringstream ss;
+       ss << line; // TODO ver forma mas linda de convertir
+       ss >> resp.status_code;
+       is >> static_cast<HTTPMessage&>(resp);
+       return is;
 }
 
 }
 
-std::ostream& operator<<(std::ostream& os, PlaQui::Server::HTTPResponse& req) {
+ostream& operator<<(ostream& os, const HTTPResponse& resp) {
 #ifdef DEBUG
 #ifdef DEBUG
-       std::cerr << __FILE__ << ": operator<<()" << std::endl;
+       cerr << __FILE__ << ": operator<<()" << endl;
 #endif // DEBUG
 #endif // DEBUG
-       os << "HTTP/" << version << " " << status_code << " " << reason << "\r\l";
+       os << "HTTP/" << resp.version << " " << resp.status_code << " " << resp.reason << "\n\r";
        // TODO ver que este bien el \r\l
        // TODO ver que este bien el \r\l
-       os << *(static_cast<HTTPMessage*>(this));
+       os << static_cast<const HTTPMessage&>(resp);
+       return os;
 }
 
 }
 
+} // namespace Server
+
+} // namespace PlaQui
+