#ifndef PLAQUI_HTTPREQUEST_H
#define PLAQUI_HTTPREQUEST_H
-#include "httpmessage.h"
+#include "plaqui/server/httperror.h"
+#include "plaqui/server/httpmessage.h"
+#include <socket++/sockstream.h>
#include <string>
+#include <istream>
+#include <ostream>
namespace PlaQui {
/// Pedido HTTP.
class HTTPRequest: public HTTPMessage {
+ /////////////////////////////////////////////////////////////////////
// Constantes.
protected:
/// Caracteres no hexa para URIs (RFC 2396).
static const std::string CHARS_HEX;
+ /////////////////////////////////////////////////////////////////////
// Tipos.
public:
/// Tipo de métodos HTTP reconocidos.
typedef enum {GET, POST} HTTPMethod;
+ /////////////////////////////////////////////////////////////////////
// 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.
/// Query string.
std::string query;
+ /////////////////////////////////////////////////////////////////////
// Métodos.
public:
HTTPRequest(const std::string& uri = "/",
const HTTPMethod& method = GET,
const std::string& query = "",
- const std::string& http = "1.1");
+ const std::string& body = "",
+ const std::string& version = "1.1");
+
+ /**
+ * Obtiene el método como un string.
+ */
+ std::string method_str(void) const;
/**
* Obtiene los datos del pedido HTTP desde un texto.
*/
- friend std::istream& operator>>(std::istream& is,
- const HTTPRequest& req);
+ friend std::istream& operator>>(std::istream& is, HTTPRequest& req)
+ throw(HTTPError, sockerr, std::ios::failure);
/**
* Convierte el pedido HTTP en texto.
*/
friend std::ostream& operator<<(std::ostream& os,
- const HTTPRequest& req);
+ const HTTPRequest& req) throw(sockerr);
};