Fawkes API  Fawkes Development Version
request_dispatcher.h
1 
2 /***************************************************************************
3  * request_dispatcher.h - Web request dispatcher
4  *
5  * Created: Mon Oct 13 22:44:33 2008
6  * Copyright 2006-2014 Tim Niemueller [www.niemueller.de]
7  ****************************************************************************/
8 
9 /* This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  * GNU Library General Public License for more details.
18  *
19  * Read the full text in the LICENSE.GPL file in the doc directory.
20  */
21 
22 #ifndef __LIBS_WEBVIEW_REQUEST_DISPATCHER_H_
23 #define __LIBS_WEBVIEW_REQUEST_DISPATCHER_H_
24 
25 #include <utils/time/time.h>
26 
27 #include <string>
28 #include <map>
29 #include <stdint.h>
30 #include <memory>
31 
32 #include <microhttpd.h>
33 
34 namespace fawkes {
35 #if 0 /* just to make Emacs auto-indent happy */
36 }
37 #endif
38 
39 class WebRequestProcessor;
40 class WebUrlManager;
41 class WebPageHeaderGenerator;
42 class WebPageFooterGenerator;
43 class StaticWebReply;
44 class DynamicWebReply;
45 class WebUserVerifier;
46 class WebRequest;
47 class WebviewAccessLog;
48 class Mutex;
49 
51 {
52  public:
54  WebPageHeaderGenerator *headergen = 0,
55  WebPageFooterGenerator *footergen = 0);
57 
58  static int process_request_cb(void *callback_data,
59  struct MHD_Connection * connection,
60  const char *url,
61  const char *method,
62  const char *version,
63  const char *upload_data,
64  size_t *upload_data_size,
65  void **session_data);
66 
67  static void request_completed_cb(void *cls,
68  struct MHD_Connection *connection, void **con_cls,
69  enum MHD_RequestTerminationCode toe);
70 
71  static void * uri_log_cb(void *cls, const char *uri);
72 
73  void setup_basic_auth(const char *realm, WebUserVerifier *verifier);
74  void setup_access_log(const char *filename);
75 
76  unsigned int active_requests() const;
78 
79  private:
80  struct MHD_Response * prepare_static_response(StaticWebReply *sreply);
81  int queue_static_reply(struct MHD_Connection * connection, WebRequest *request,
82  StaticWebReply *sreply);
83  int queue_dynamic_reply(struct MHD_Connection * connection, WebRequest *request,
84  DynamicWebReply *sreply);
85  int queue_basic_auth_fail(struct MHD_Connection * connection, WebRequest *request);
86  int process_request(struct MHD_Connection * connection,
87  const char *url, const char *method, const char *version,
88  const char *upload_data, size_t *upload_data_size,
89  void **session_data);
90  void * log_uri(const char *uri);
91 
92  void request_completed(WebRequest *request,
93  MHD_RequestTerminationCode term_code);
94 
95  private:
96  WebUrlManager *__url_manager;
97  WebviewAccessLog *__access_log;
98 
99  std::string __active_baseurl;
100  WebPageHeaderGenerator *__page_header_generator;
101  WebPageFooterGenerator *__page_footer_generator;
102 
103  char *__realm;
104  WebUserVerifier *__user_verifier;
105 
106  unsigned int __active_requests;
107  fawkes::Time *__last_request_completion_time;
108  fawkes::Mutex *__active_requests_mutex;
109 };
110 
111 } // end namespace fawkes
112 
113 #endif
Web request dispatcher.
unsigned int active_requests() const
Get number of active requests.
Fawkes library namespace.
static void request_completed_cb(void *cls, struct MHD_Connection *connection, void **con_cls, enum MHD_RequestTerminationCode toe)
Process request completion.
A class for handling time.
Definition: time.h:91
static int process_request_cb(void *callback_data, struct MHD_Connection *connection, const char *url, const char *method, const char *version, const char *upload_data, size_t *upload_data_size, void **session_data)
Process request callback for libmicrohttpd.
WebRequestDispatcher(WebUrlManager *url_manager, WebPageHeaderGenerator *headergen=0, WebPageFooterGenerator *footergen=0)
Constructor.
void setup_basic_auth(const char *realm, WebUserVerifier *verifier)
Setup basic authentication.
Interface for user verification.
Definition: user_verifier.h:31
Interface for HTML header generator.
Webview access_log writer.
Definition: access_log.h:35
Manage URL mappings.
Definition: url_manager.h:37
Dynamic web reply.
Definition: reply.h:123
Web request meta data carrier.
Definition: request.h:42
Time last_request_completion_time() const
Get time when last request was completed.
Interface for HTML footer generator.
static void * uri_log_cb(void *cls, const char *uri)
Callback for new requests.
void setup_access_log(const char *filename)
Setup access log.
Mutex mutual exclusion lock.
Definition: mutex.h:32
Static web reply.
Definition: reply.h:133