-// vim: set noexpandtab tabstop=4 shiftwidth=4:
-//----------------------------------------------------------------------------
-// PlaQui
-//----------------------------------------------------------------------------
-// This file is part of PlaQui.
-//
-// PlaQui is free software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the Free Software
-// Foundation; either version 2 of the License, or (at your option) any later
-// version.
-//
-// PlaQui is distributed in the hope that it will be useful, but WITHOUT ANY
-// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
-// details.
-//
-// You should have received a copy of the GNU General Public License along
-// with PlaQui; if not, write to the Free Software Foundation, Inc., 59 Temple
-// Place, Suite 330, Boston, MA 02111-1307 USA
-//----------------------------------------------------------------------------
-// Creado: dom oct 19 16:41:15 ART 2003
-// Autores: Leandro Lucarella <llucare@fi.uba.ar>
-//----------------------------------------------------------------------------
-//
-// $Id$
-//
-
-#include "plaqui/server/request.h"
-#include "plaqui/server/string.h"
-#include <sstream>
-#include <cctype>
-#include <algorithm>
-#ifdef DEBUG
-# include <iostream>
-#endif // DEBUG
-
-const std::string
-PlaQui::Server::Request::CHARS_DIGIT = "0123456789";
-
-const std::string
-PlaQui::Server::Request::CHARS_LOWALPHA = "abcdefghijklmnopqrstuvwxyz";
-
-const std::string
-PlaQui::Server::Request::CHARS_UPALPHA = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
-
-const std::string
-PlaQui::Server::Request::CHARS_ALPHA = CHARS_LOWALPHA + CHARS_UPALPHA;
-
-const std::string
-PlaQui::Server::Request::CHARS_ALPHANUM = CHARS_DIGIT + CHARS_ALPHA;
-
-const std::string
-PlaQui::Server::Request::CHARS_RESERVED = ";/?:@&=+$,";
-
-const std::string
-PlaQui::Server::Request::CHARS_MARK = "-_.!~*'()";
-
-const std::string
-PlaQui::Server::Request::CHARS_UNRESERVED = CHARS_ALPHANUM + CHARS_MARK;
-
-const std::string
-PlaQui::Server::Request::CHARS_HEX = CHARS_DIGIT + std::string("abcdefABCDEF");
-
-PlaQui::Server::Request::~Request(void) {
-}
-
-void PlaQui::Server::Request::set_request(const std::string& req,
- const std::string& host, unsigned port) {
-#ifdef DEBUG
- std::cerr << __FILE__ << ": req = " << req << " | host = " << host
- << " | port = " << port << std::endl;
-#endif // DEBUG
- String request(req);
- (*this)["REMOTE_HOST"] = host;
- std::stringstream ss;
- ss << port;
- (*this)["REMOTE_PORT"] = ss.str();
- // Parseo el GET de forma rudimentaria.
- if (request.length() < 3) {
- // FIXME - poner excepciones lindas.
- throw "HTTP/1.1 501 Method Not Implemented";
- }
- // Averiguo método.
- std::string::size_type pos = request.find_first_of(String::SPACE_CHARS);
- String method = request.substr(0, pos);
- if ((method.to_upper() == "GET") || (method.to_upper() == "POST")) {
- (*this)["REQUEST_METHOD"] = method;
- } else {
- // FIXME - poner excepciones lindas.
- throw "HTTP/1.1 501 Method Not Implemented";
- }
- // Si tiene sólo el método, no es válido.
- request = request.substr(pos + 1);
- request.trim();
- if (!request.length()) {
- // FIXME - poner excepciones lindas.
- throw "HTTP/1.1 400 Bad Request";
- }
- // Si tiene más espacios, tengo la URI y el protocolo (o un error).
- pos = request.find_first_of(String::SPACE_CHARS);
- if (pos != std::string::npos) {
- // Si el resto es un protocolo válido, agrego más variables.
- String protocol = request.substr(pos + 1);
- protocol = protocol.trim();
- if ((String(protocol).to_upper() == "HTTP/1.0")
- || (String(protocol).to_upper() == "HTTP/1.1")) {
- (*this)["SERVER_PROTOCOL"] = protocol;
- // Si no es un error.
- } else {
- // FIXME - poner excepciones lindas.
- throw "HTTP/1.1 400 Bad Request";
- }
- request = request.substr(0, pos);
- }
- // Agrego la URI y sus derivados.
- if (!request.length() || (request[0] != '/')) {
- // FIXME || request.find_first_not_of(";/?:@&=+$,")) {
- // FIXME - poner excepciones lindas.
- throw "HTTP/1.1 400 Bad Request";
- }
- (*this)["REQUEST_URI"] = request;
- // Si tiene un query string.
- pos = request.find("?");
- if (pos != std::string::npos) {
- (*this)["QUERY_STRING"] = request.substr(pos + 1);
- // No tiene query string.
- } else {
- (*this)["QUERY_STRING"] = "";
- }
- (*this)["SCRIPT_NAME"] = request.substr(0, pos);
-}
-
-void PlaQui::Server::Request::parse_header(const std::string& header) {
-#ifdef DEBUG
- std::cerr << __FILE__ << ": header = " << header << std::endl;
-#endif // DEBUG
-
-}
-