00001
00002
00003
00004
00005
00006
00008 #ifndef CPPCMS_HTTP_CONTEXT_H
00009 #define CPPCMS_HTTP_CONTEXT_H
00010
00011 #include <cppcms/defs.h>
00012 #include <booster/hold_ptr.h>
00013 #include <booster/intrusive_ptr.h>
00014 #include <booster/shared_ptr.h>
00015 #include <booster/enable_shared_from_this.h>
00016 #include <booster/callback.h>
00017 #include <locale>
00018
00019 namespace cppcms {
00020
00021 class service;
00022 class application;
00023 class cache_interface;
00024 class session_interface;
00025 namespace json { class value; }
00026 namespace impl { namespace cgi { class connection; } }
00027
00031 namespace http {
00032 class request;
00033 class response;
00034
00043
00044 class CPPCMS_API context :
00045 public booster::noncopyable,
00046 public booster::enable_shared_from_this<context>
00047 {
00048 public:
00050
00051 context(booster::shared_ptr<impl::cgi::connection> conn);
00052 ~context();
00053 impl::cgi::connection &connection();
00054 void run();
00055
00057
00061 http::request &request();
00062
00066 http::response &response();
00067
00071 json::value const &settings();
00072
00076 cache_interface &cache();
00077
00086 session_interface &session();
00087
00091 std::locale locale();
00092
00097 void locale(std::locale const &new_locale);
00098
00104 void locale(std::string const &name);
00105
00109 cppcms::service &service();
00110
00114 std::string skin();
00115
00119 void skin(std::string const &name);
00120
00121
00122 typedef enum {
00123 operation_completed,
00124 operation_aborted
00125 } completion_type;
00126
00127 typedef booster::callback<void(completion_type)> handler;
00128
00134 void complete_response();
00135
00141 void async_complete_response();
00142
00150
00151 void async_flush_output(handler const &h);
00152
00164 void async_on_peer_reset(booster::callback<void()> const &h);
00165 private:
00166 void on_request_ready(bool error);
00167 static void dispatch(booster::intrusive_ptr<application> app,std::string url,bool syncronous);
00168 void try_restart(bool e);
00169 booster::shared_ptr<context> self();
00170
00171 struct _data;
00172 booster::hold_ptr<_data> d;
00173 booster::shared_ptr<impl::cgi::connection> conn_;
00174 };
00175
00176 }
00177
00178 };
00179
00180 #endif