/* * Baltisot * Copyright (C) 1999-2008 Nicolas "Pixel" Noble * * This program 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. * * This program 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 this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef __HTTPSERV_H__ #define __HTTPSERV_H__ #include #include #include #include #include #include #include #include class HttpResponse : public Base { public: typedef enum { HTTP_200_OK = 200, HTTP_301_PERM_MOVED = 301, HTTP_302_FOUND = 302, HTTP_400_BAD_REQUEST = 400, HTTP_401_UNAUTHORIZED = 401, HTTP_403_FORBIDDEN = 403, HTTP_404_NOT_FOUND = 404, HTTP_500_INTERNAL_ERROR = 500, HTTP_503_SERVICE_UNAVAILABLE = 503, } return_code_t; HttpResponse(); virtual ~HttpResponse(); Task * BuildResponse(Handle * out); void PrepareResponse(Handle * b = 0); bool Prepared(); String mime_type; String location; String domain; String server_name; String file_name; std::vector > cookies; String cookies_path; return_code_t return_code; time_t last_modified; Buffer contents; bool cache; Task * builder; private: String code_to_string(); bool already_prepared; }; #define MAX_MATCHES 64 class HttpRequest : public Base { public: Variables * vars, * headers; String method, uri, login, password; Uint32 lip, dip; int lport, dport; regmatch_t pmatches[MAX_MATCHES]; }; class Action; class HttpServ : public Task { public: HttpServ(Action *, int = 1500, const String & = String("GruiK Server v0.2")) throw (GeneralException); virtual ~HttpServ(); virtual String GetName(); void SetRoot(const String &); protected: virtual int Do() throw (GeneralException); private: Socket Listener; Action * p; String name; int localport; String root; }; extern String endhl, endnl; #include #endif