]> git.llucax.com Git - z.facultad/75.42/plaqui.git/blob - Server/src/httpmessage.cpp
2d3a18bca1f5bc09836efbdfc9058cad8b18431e
[z.facultad/75.42/plaqui.git] / Server / src / httpmessage.cpp
1 // vim: set noexpandtab tabstop=4 shiftwidth=4:
2 //----------------------------------------------------------------------------
3 //                                  PlaQui
4 //----------------------------------------------------------------------------
5 // This file is part of PlaQui.
6 //
7 // PlaQui is free software; you can redistribute it and/or modify it under the
8 // terms of the GNU General Public License as published by the Free Software
9 // Foundation; either version 2 of the License, or (at your option) any later
10 // version.
11 //
12 // PlaQui is distributed in the hope that it will be useful, but WITHOUT ANY
13 // WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14 // FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
15 // details.
16 //
17 // You should have received a copy of the GNU General Public License along
18 // with PlaQui; if not, write to the Free Software Foundation, Inc., 59 Temple
19 // Place, Suite 330, Boston, MA  02111-1307  USA
20 //----------------------------------------------------------------------------
21 // Creado:  dom oct 26 22:02:09 ART 2003
22 // Autores: Leandro Lucarella <llucare@fi.uba.ar>
23 //----------------------------------------------------------------------------
24 //
25 // $Id$
26 //
27
28 #include "plaqui/server/httpmessage.h"
29 #include <cstdlib>
30 #ifdef DEBUG
31 #       include <iostream>
32 #endif // DEBUG
33
34 PlaQui::Server::HTTPMessage::~HTTPMessage(void) {
35 #ifdef DEBUG
36         std::cerr << __FILE__ << ": destructor." << std::endl;
37 #endif // DEBUG
38 }
39
40 PlaQui::Server::HTTPMessage::HTTPMessage(const std::string& http_version):
41                 http_version(http_version) {
42 #ifdef DEBUG
43         std::cerr << __FILE__ << ": http_version = " << http_version << std::endl;
44 #endif // DEBUG
45 }
46
47 /*
48 PlaQui::Server::HTTPMessage::HTTPMessage(const std::string& _body,
49                 const std::string& http_version):
50                 http_version(http_version) {
51 #ifdef DEBUG
52         std::cerr << __FILE__ << ": http_version = " << http_version
53                 << " | body = " << body << std::endl;
54 #endif // DEBUG
55         set_body(_body);
56 }
57 */
58
59 void PlaQui::Server::HTTPMessage::set_body(const std::string& _body) {
60         body = _body;
61         if (body.length()) {
62                 stringstream ss; // TODO ver forma mas linda de convertir
63                 ss << body.length();
64                 headers["Content-Length"] = ss.str();
65         }
66 }
67
68 const std::string& PlaQui::Server::HTTPMessage::get_body(void) {
69         return body;
70 }
71
72 istream& operator>>(std::istream& is, PlaQui::Server::HTTPMessage) {
73 #ifdef DEBUG
74         std::cerr << __FILE__ << ": operator>>()" << std::endl;
75 #endif // DEBUG
76         char buf[BUFSIZ];
77         bool is_header = true;
78         stringstream body_ss;
79         while (is.getline(buf, BUFSIZ)) {
80                 std::string sbuf = buf;
81                 if (sbuf.length())
82                         if (is_header) {
83                                 istringstream(buf) >> m.headers;
84                         } else {
85                                 body_ss << buf << std::endl;
86                         }
87                 } else {
88                         if (is_header) {
89                                 is_header = false;
90                         } else {
91                                 body_ss << buf << std::endl;
92                         }
93                 }
94         }
95         // TODO si el body es un serializable, deberia auto deserializarse.
96         body = body_ss.str();
97         return is;
98 }
99
100 ostream& operator<<(std::ostream& os, PlaQui::Server::HTTPMessage) {
101 #ifdef DEBUG
102         std::cerr << __FILE__ << ": operator<<()" << std::endl;
103 #endif // DEBUG
104         return os << headers << "\r\l" // Fin de cabeceras
105                 << body;
106 }
107