]> git.llucax.com Git - z.facultad/75.42/plaqui.git/commitdiff
Se corrige el bug al parsear el xml.
authorLeandro Lucarella <llucax@gmail.com>
Sat, 29 Nov 2003 23:11:04 +0000 (23:11 +0000)
committerLeandro Lucarella <llucax@gmail.com>
Sat, 29 Nov 2003 23:11:04 +0000 (23:11 +0000)
Server/include/plaqui/server/response.h
Server/src/controlclient.cpp
Server/src/httpmessage.cpp
Server/src/response.cpp

index 3acd2cdae9b9a2b1c57ccafdcdbe9b21c8c28f95..db0e2055bfe5b52d7d8881cb63d7e647fda9a1ef 100644 (file)
@@ -188,7 +188,8 @@ namespace Server {
                         * Obtiene los datos de la respuesta HTTP desde un texto.
                         */
                        friend std::istream& operator>>(std::istream& is, Response& resp)
-                               /*throw(HTTPResponse::Error, std::ios::failure, sockerr)*/;
+                               throw(HTTPResponse::Error, std::ios::failure, sockerr,
+                                               xmlpp::parse_error);
 
                        /**
                         * Convierte la respuesta HTTP en texto.
index ac8886aa966f8804c3f8450b49b1f1d38fb321c4..a8406754003f12635ef3d236fd9cdede473b0e0a 100644 (file)
@@ -74,7 +74,6 @@ void ControlClient::real_run(void) throw() {
        while (!stop()) {
                Response response;
                try {
-                       //Glib::Mutex::Lock lock(socket_mutex);
                        socket >> response;
                // Si se cerró el socket.
                } catch (const ios::failure& e) {
@@ -84,6 +83,9 @@ void ControlClient::real_run(void) throw() {
                } catch (const sockerr& e) {
                        signal_error().emit(e.serrno(), e.errstr());
                        return;
+               } catch (const xmlpp::parse_error& e) {
+                       signal_error().emit(100001, e.what());
+                       continue;
                // Si hay un error al parsear la respuesta.
                } catch (const HTTPResponse::Error& e) {
 #ifdef DEBUG
index 260fe80fcc8b76b56e6f1bc0fbe015400bfe50d8..b9d0d28cdb845171ae6541719413ed3896fe0f8c 100644 (file)
@@ -85,8 +85,17 @@ istream& operator>>(istream& is, HTTPMessage& m) {
                                streamsize size;
                                to(m.headers["Content-Length"], size);
                                char* const buf2 = new char[size+1];
-                               if (is.readsome(buf2, size)) {
-                                       m.body = buf2;
+                               if (is.readsome(buf2, size) == size) {
+                                       // Agrego fin de string porque el readsome no lo hace.
+                                       buf2[size] = '\0';
+                                       m.set_body(buf2);
+#ifdef DEBUG
+                               } else {
+                               // TODO dar error?
+                                       cerr << __FILE__ << "(" << __LINE__ << ")"
+                                               << ": operator>>() ERROR!!! Caracteres extraidos: "
+                                               << n << endl;
+#endif // DEBUG
                                }
                                delete []buf2;
                        }
index b39aaeae16b82c18e367d59ec64502cd731ea56f..91b44af3dd8bf670ce5f90b16331fe3f54e3d365 100644 (file)
@@ -69,23 +69,14 @@ Response::Response(const string& body, const string& desc, const Code& code):
 }
 
 istream& operator>>(istream& is, Response& resp)
-               /*throw (HTTPResponse::Error, ios::failure, sockerr)*/ {
+               throw (HTTPResponse::Error, ios::failure, sockerr,
+                               xmlpp::parse_error) {
 #ifdef DEBUG
        cerr << __FILE__ << "(" << __LINE__ << ")" << ": operator>>()" << endl;
 #endif // DEBUG
        is >> static_cast<HTTPResponse&>(resp);
        if (resp.get_body().length()) {
-               // TODO parseo XML del body para buscar las cosas basicas de la respuesta.
-               Response::Parser parser(resp);
-               try {
-                       parser.parse_memory(resp.get_body());
-               } catch (const xmlpp::parse_error& e) {
-                       // TODO - ver gravedad.
-#ifdef DEBUG
-                       cerr << __FILE__ << "(" << __LINE__ << ")"
-                               << " : operator>>() error de parseo: " << e.what() << endl;
-#endif // DEBUG
-               }
+               Response::Parser(resp).parse_memory(resp.get_body());
        }
        return is;
 }