127 lines
2.6 KiB
Raw Normal View History

* This file is a part of CMSLU -- Content Management System like Unix
* and is not publicly distributed
* Copyright (c) 2008, Tomasz Sowa
* All rights reserved.
#ifndef headerfilerequest
#define headerfilerequest
#include <fcgiapp.h>
#include <sstream>
#include <vector>
#include "requesttypes.h"
#include "log.h"
#include "session.h"
#include "getparser.h"
#include "postparser.h"
#include "cookieparser.h"
#include "item.h"
#include "error.h"
struct Request
FCGX_Stream * in, * out, * err;
FCGX_ParamArray env; // defined as 'char **'
enum Method { get, post, none } method;
// headers, page and debug
std::ostringstream headers, page, debug;
GetTable get_table;
PostTable post_table;
CookieTable cookie_table;
// environment variables
// they are not null -- when the server doesn't have such a variable it will be pointing into 'char_empty' which is default '\0'
const char * env_request_method;
const char * env_request_uri;
const char * env_http_cookie;
const char * env_remote_addr;
const char * env_http_host;
// current session
// is set after calling session_manager.SetSession()
Session * session;
// 'done_status' is set if 'done' is different than 'nothing'
Error done_status;
// what to do
enum Result { err_internal, err404, show_dir, show_item, show_item_by_id, add_item, edit_item, del_item, del_item_confirm, confirm, redirect, logout } result; // zamienic na to_do
//Item item; // bedziemy uzywac tego, item_id i item_url_subject wywalic
// current directory e.g. /foo/bar
std::vector<Item> cur_dir_table;
// id of the last directory (bar) or -1
long dir;
// items in the current directory
// maybe without contents?
std::vector<Item> item_table;
// directories in the current directory
std::vector<Item> dir_table;
// this item is used for many purposes such as editing, adding an item etc.
Item item;
// this string is used for many purposes such as redirecting
std::string str;
// for debugging
void PrintGetTable();
void PrintEnv();
void PrintIn();
void Clear();
void SetCookie(const char * name, const char * value);
void SetCookie(const char * name, long value);
bool IsPostVar(const char * var);
std::string & PostVar(const char * var); // with a throw
// item_table[0] -> item
void CopyFirstItem();
void ReadEnvVariables();
void CheckMethod();
void ReadParameters();
void Read();
void SendAll();
// used to set some env_* variables into it, when the server didn't set that variable
// it contains '\0'
const char char_empty;
const char * SetEnvVar(const char * var);
extern Request request;