]> git.llucax.com Git - z.facultad/75.42/plaqui.git/commitdiff
Ya anda de nuevo el server. Compila y anda tan (in?)estable como antes, aunque tiene...
authorLeandro Lucarella <llucax@gmail.com>
Sat, 8 Nov 2003 01:13:21 +0000 (01:13 +0000)
committerLeandro Lucarella <llucax@gmail.com>
Sat, 8 Nov 2003 01:13:21 +0000 (01:13 +0000)
Server/include/plaqui/server/httpmessage.h
Server/include/plaqui/server/httprequest.h
Server/src/controlserver.cpp
Server/src/httpheaders.cpp
Server/src/httpmessage.cpp
Server/tests/server_test.cpp

index b188e19b5bb508b46694833b5dd75e34878e5df7..938f9ad0e4aeeed50223749c906cff0232bd65d0 100644 (file)
@@ -45,13 +45,13 @@ namespace Server {
                        /// Cuerpo del mensaje.
                        std::string body;
 
-               protected:
+               protected: // TODO hacer privados con get() y set() ???
+
+               public:
 
                        /// Version HTTP.
                        std::string version;
 
-               public:
-
                        /// Cabeceras HTTP.
                        HTTPHeaders headers;
 
index 92c6de70fe1c54ad368b9978aeab5dbdb7586404..44b45a9c590f25447dc4e0a91f6b1aa32603973b 100644 (file)
@@ -78,9 +78,12 @@ namespace Server {
 
                // Atributos.
 
-               protected:
+               protected: // TODO hacer privados con get() y set() ???
+
+               public:
 
                        /// Método HTTP.
+                       /// @todo TODO - convertirlo a string? Hace todo más fácil (y más ineficiente :)
                        HTTPMethod method;
 
                        /// URI.
index 144d236e2b967140c28aa4b05ad0da38b63909af..5d67502766e73a4bc98f309c55110279f1d40bc6 100644 (file)
@@ -59,7 +59,21 @@ void ControlServer::real_run(void) {
        //char buf[BUFSIZ];
        while (!stop) {
                HTTPRequest request;
-               socket >> request;
+               try {
+                       socket >> request;
+               } catch (const char* e) {
+                       cerr << "Error: " << e << endl;
+                       stop = true;
+                       continue;
+               } catch (string e) {
+                       cerr << "Error: " << e << endl;
+                       stop = true;
+                       continue;
+               } catch (...) {
+                       cerr << "Error desconocido!" << endl;
+                       stop = true;
+                       continue;
+               }
                // TODO agregar las verificaciones de abajo a HTTPRequest y padres.
 /*
                // Primera línea no vacía (que debe ser el request).
@@ -124,9 +138,13 @@ Accept-Ranges: bytes
                response_xml << "    </head>" << endl;
                response_xml << "    <body>" << endl;
                response_xml << "        <h1>PlaQui</h1>" << endl;
-               response_xml << "        <p>versión 0.2</p>" << endl;
+               response_xml << "        <p>versión 0.3</p>" << endl;
                response_xml << "        <h2>Pedido HTTP</h2>" << endl;
                response_xml << "        <ul>" << endl;
+               response_xml << "           <li><b>Versión:</b> " << request.version << endl;
+               response_xml << "           <li><b>Método:</b> " << (request.method ? "POST" : "GET") << endl;
+               response_xml << "           <li><b>URI:</b> " << request.uri << endl;
+               response_xml << "           <li><b>Query:</b> " << request.query << endl;
                for (HTTPHeaders::const_iterator i = request.headers.begin();
                                i != request.headers.end(); i++) {
                        response_xml << "           <li><b>" << i->first << ":</b> "
index 8ebb3a7eac0b10c8f29fe4558ef95e94ed013617..65d5adcc2c9466ccf17f1ea6e8dc929eda77bba1 100644 (file)
@@ -54,9 +54,13 @@ istream& operator>>(istream& is, HTTPHeaders& h) {
        string::size_type pos = sbuf.find(":");
        if (pos == string::npos) {
                // FIXME poner mejores excepciones.
-               throw "Wrong header";
+               throw string("Wrong header: ") + sbuf;
        }
        h[sbuf.substr(0, pos)] = String(sbuf.substr(pos + 1)).trim();
+#ifdef DEBUG
+       cerr << __FILE__ << "    " << sbuf.substr(0, pos) << " = "
+               << h[sbuf.substr(0, pos)] << endl;
+#endif // DEBUG
        return is;
 }
 
index 685fa69ad92b9e8912da6927f00cbbfc80c36ac5..cfdd89404fab55f58f07ed292250a912e0accee2 100644 (file)
@@ -25,6 +25,7 @@
 // $Id$
 //
 
+#include "plaqui/server/string.h"
 #include "plaqui/server/httpmessage.h"
 #include <sstream>
 #include <cstdlib>
@@ -82,27 +83,36 @@ istream& operator>>(istream& is, HTTPMessage& m) {
 #endif // DEBUG
        char buf[BUFSIZ];
        bool is_header = true;
-       stringstream body_ss;
+       // TODO body
+       // Para hacer que reciba bien el body hay que chequear la cabecera
+       // Content-length, si queda tiempo lo haré...
+       //stringstream body_ss;
        while (is.getline(buf, BUFSIZ)) {
-               string sbuf = buf;
+               String sbuf(buf);
+               sbuf.trim();
                if (sbuf.length()) {
                        if (is_header) {
                                stringstream ss;
-                               ss << buf;
+                               ss << sbuf;
                                ss >> m.headers;
-                       } else {
-                               body_ss << buf << endl;
-                       }
+                       }// else { TODO body
+                       //      body_ss << sbuf << endl;
+                       //}
                } else {
                        if (is_header) {
+                               // TODO body
+                               // Ver si tiene un Content-Length para saber si esperamos body.
+                               // Si no esperamos body, no hay que hacer otro is.getline()
+                               // porque se queda esperando forever.
                                is_header = false;
-                       } else {
-                               body_ss << buf << endl;
-                       }
+                               break;
+                       }// else { TODO body
+                       //      body_ss << sbuf << endl;
+                       //}
                }
        }
-       // TODO si el body es un serializable, deberia auto deserializarse.
-       m.body = body_ss.str();
+       // TODO body
+       //m.body = body_ss.str();
        return is;
 }
 
index 1927af4fb518a0f17a0bd3120ebe7b9e206e3a72..f9989b5573bca730c86355351feb8459bd11cbf4 100644 (file)
@@ -56,9 +56,17 @@ int main(int argc, char* argv[]) {
        // Inicializa threads.
        Glib::thread_init();
 
+       try {
        // Corre el server.
        Server server(port);
        server.run(false);
+       } catch (const char* e) {
+               cerr << "Error: " << e << endl;
+       } catch (exception e) {
+               cerr << "Error: " << e.what() << endl;
+       } catch (...) {
+               cerr << "Error desconocido!" << endl;
+       }
 
        return 0;
 }