// $Id$
//
+#include "plaqui/server/httperror.h"
+#include "plaqui/server/httpmessage.h"
#include "plaqui/server/httpheaders.h"
#include "plaqui/server/string.h"
//#include <cstdlib>
HTTPHeaders::~HTTPHeaders(void) {
#ifdef DEBUG
- cerr << __FILE__ << ": destructor." << endl;
+ cerr << __FILE__ << "(" << __LINE__ << ")"
+ << ": destructor." << endl;
#endif // DEBUG
}
-istream& operator>>(istream& is, HTTPHeaders& h) {
+istream& operator>>(istream& is, HTTPHeaders& h)
+ throw(HTTPError, sockerr, ios::failure) {
#ifdef DEBUG
- cerr << __FILE__ << ": operator>>()" << endl;
+ cerr << __FILE__ << "(" << __LINE__ << ")"
+ << ": operator>>()" << endl;
#endif // DEBUG
char buf[BUFSIZ];
- is.getline(buf, BUFSIZ);
+ // Fin del stream, no había cabeceras.
+ if (!is.getline(buf, BUFSIZ)) {
+ throw ios::failure("eof");
+ }
string sbuf = buf;
string::size_type pos = sbuf.find(":");
if (pos == string::npos) {
// FIXME poner mejores excepciones.
- throw string("Wrong header: ") + sbuf;
+ throw HTTPError(HTTPMessage::BAD_REQUEST, sbuf + ": No es una cabecera válida.");
}
h[sbuf.substr(0, pos)] = String(sbuf.substr(pos + 1)).trim();
#ifdef DEBUG
- cerr << __FILE__ << " " << sbuf.substr(0, pos) << " = "
+ cerr << __FILE__ << "(" << __LINE__ << ")"
+ << " " << sbuf.substr(0, pos) << " = "
<< h[sbuf.substr(0, pos)] << endl;
#endif // DEBUG
return is;
}
-ostream& operator<<(ostream& os, const HTTPHeaders& h) {
+ostream& operator<<(ostream& os, const HTTPHeaders& h) throw(sockerr) {
#ifdef DEBUG
- cerr << __FILE__ << ": operator<<()" << endl;
+ cerr << __FILE__ << "(" << __LINE__ << ")"
+ << ": operator<<()" << endl;
#endif // DEBUG
for (HTTPHeaders::const_iterator i = h.begin();
i != h.end(); ++i) {
- os << i->first << ": " << i->second << "\n\r";
+ os << i->first << ": " << i->second << "\r\n";
}
return os;
}