Logo ROOT   6.16/01
Reference Guide
THttpServer.h
Go to the documentation of this file.
1// $Id$
2// Author: Sergey Linev 21/12/2013
3
4/*************************************************************************
5 * Copyright (C) 1995-2013, Rene Brun and Fons Rademakers. *
6 * All rights reserved. *
7 * *
8 * For the licensing terms see $ROOTSYS/LICENSE. *
9 * For the list of contributors see $ROOTSYS/README/CREDITS. *
10 *************************************************************************/
11
12#ifndef ROOT_THttpServer
13#define ROOT_THttpServer
14
15#include "TObject.h"
16#include "TList.h"
17#include "TNamed.h"
18#include "THttpCallArg.h"
19
20#include <mutex>
21#include <map>
22#include <string>
23#include <memory>
24#include <queue>
25#include <thread>
26
27class THttpEngine;
28class THttpTimer;
29class TRootSniffer;
30
31class THttpServer : public TNamed {
32
33protected:
34 TList fEngines; ///<! engines which runs http server
35 THttpTimer *fTimer{nullptr}; ///<! timer used to access main thread
36 TRootSniffer *fSniffer{nullptr}; ///<! sniffer provides access to ROOT objects hierarchy
37 Bool_t fTerminated{kFALSE}; ///<! termination flag, disables all requests processing
38 Long_t fMainThrdId{0}; ///<! id of the thread for processing requests
39 Bool_t fOwnThread{kFALSE}; ///<! true when specialized thread allocated for processing requests
40 std::thread fThrd; ///<! own thread
41
42 TString fJSROOTSYS; ///<! location of local JSROOT files
43 TString fTopName{"ROOT"}; ///<! name of top folder, default - "ROOT"
44 TString fJSROOT; ///<! location of external JSROOT files
45
46 std::map<std::string, std::string> fLocations; ///<! list of local directories, which could be accessed via server
47
48 std::string fDefaultPage; ///<! file name for default page name
49 std::string fDefaultPageCont; ///<! content of default html page
50 std::string fDrawPage; ///<! file name for drawing of single element
51 std::string fDrawPageCont; ///<! content of draw html page
52 std::string fCors; ///<! CORS: sets Access-Control-Allow-Origin header for ProcessRequest responses
53
54 std::mutex fMutex; ///<! mutex to protect list with arguments
55 TList fCallArgs; ///<! submitted arguments (deprecated)
56 std::queue<std::shared_ptr<THttpCallArg>> fArgs; ///<! submitted arguments
57
58 std::mutex fWSMutex; ///<! mutex to protect WS handler lists
59 std::vector<std::shared_ptr<THttpWSHandler>> fWSHandlers; ///<! list of WS handlers
60
61 virtual void MissedRequest(THttpCallArg *arg);
62
63 virtual void ProcessRequest(std::shared_ptr<THttpCallArg> arg);
64
65 virtual void ProcessBatchHolder(std::shared_ptr<THttpCallArg> &arg);
66
67 virtual void ProcessRequest(THttpCallArg *arg);
68
69 void StopServerThread();
70
71 static Bool_t VerifyFilePath(const char *fname);
72
73public:
74 THttpServer(const char *engine = "civetweb:8080");
75 virtual ~THttpServer();
76
77 Bool_t CreateEngine(const char *engine);
78
79 Bool_t IsAnyEngine() const { return fEngines.GetSize() > 0; }
80
81 /** returns pointer on objects sniffer */
82 TRootSniffer *GetSniffer() const { return fSniffer; }
83
84 void SetSniffer(TRootSniffer *sniff);
85
86 Bool_t IsReadOnly() const;
87
88 void SetReadOnly(Bool_t readonly);
89
90 /** set termination flag, no any further requests will be processed */
91 void SetTerminate();
92
93 /** returns kTRUE, if server was terminated */
94 Bool_t IsTerminated() const { return fTerminated; }
95
96 /** Enable CORS header to ProcessRequests() responses
97 * Specified location (typically "*") add as "Access-Control-Allow-Origin" header */
98 void SetCors(const std::string &domain = "*") { fCors = domain; }
99
100 /** Returns kTRUE if CORS was configured */
101 Bool_t IsCors() const { return !fCors.empty(); }
102
103 /** Returns specified CORS domain */
104 const char *GetCors() const { return fCors.c_str(); }
105
106 /** set name of top item in objects hierarchy */
107 void SetTopName(const char *top) { fTopName = top; }
108
109 /** returns name of top item in objects hierarchy */
110 const char *GetTopName() const { return fTopName.Data(); }
111
112 void SetJSROOT(const char *location);
113
114 void AddLocation(const char *prefix, const char *path);
115
116 void SetDefaultPage(const std::string &filename = "");
117
118 void SetDrawPage(const std::string &filename = "");
119
120 void SetTimer(Long_t milliSec = 100, Bool_t mode = kTRUE);
121
122 void CreateServerThread();
123
124 /** Check if file is requested, thread safe */
125 Bool_t IsFileRequested(const char *uri, TString &res) const;
126
127 /** Execute HTTP request */
128 Bool_t ExecuteHttp(THttpCallArg *arg) _R__DEPRECATED_618("Please use ExecuteHttp(std::shared_ptr<THttpCallArg>)");
129
130 /** Execute HTTP request */
131 Bool_t ExecuteHttp(std::shared_ptr<THttpCallArg> arg);
132
133 /** Submit HTTP request */
134 Bool_t SubmitHttp(THttpCallArg *arg, Bool_t can_run_immediately = kFALSE, Bool_t ownership = kFALSE) _R__DEPRECATED_618("Please use SubmitHttp(std::shared_ptr<THttpCallArg>,bool)");
135
136 /** Submit HTTP request */
137 Bool_t SubmitHttp(std::shared_ptr<THttpCallArg> arg, Bool_t can_run_immediately = kFALSE);
138
139 /** Process submitted requests, must be called from appropriate thread */
140 Int_t ProcessRequests();
141
142 /** Register object in subfolder */
143 Bool_t Register(const char *subfolder, TObject *obj);
144
145 /** Unregister object */
146 Bool_t Unregister(TObject *obj);
147
148 /** Register WS handler*/
149 void RegisterWS(std::shared_ptr<THttpWSHandler> ws);
150
151 /** Unregister WS handler*/
152 void UnregisterWS(std::shared_ptr<THttpWSHandler> ws);
153
154 /** Find web-socket handler with given name */
155 std::shared_ptr<THttpWSHandler> FindWS(const char *name);
156
157 /** Execute WS request */
158 Bool_t ExecuteWS(std::shared_ptr<THttpCallArg> &arg, Bool_t external_thrd = kFALSE, Bool_t wait_process = kFALSE);
159
160 /** Restrict access to specified object */
161 void Restrict(const char *path, const char *options);
162
163 Bool_t RegisterCommand(const char *cmdname, const char *method, const char *icon = 0);
164
165 Bool_t Hide(const char *fullname, Bool_t hide = kTRUE);
166
167 Bool_t SetIcon(const char *fullname, const char *iconname);
168
169 Bool_t CreateItem(const char *fullname, const char *title);
170
171 Bool_t SetItemField(const char *fullname, const char *name, const char *value);
172
173 const char *GetItemField(const char *fullname, const char *name);
174
175 /** Guess mime type base on file extension */
176 static const char *GetMimeType(const char *path);
177
178 /** Reads content of file from the disk */
179 static char *ReadFileContent(const char *filename, Int_t &len);
180
181 /** Reads content of file from the disk, use std::string in return value */
182 static std::string ReadFileContent(const std::string &filename);
183
184 ClassDef(THttpServer, 0) // HTTP server for ROOT analysis
185};
186
187#endif
#define _R__DEPRECATED_618(REASON)
Definition: RConfig.hxx:500
int Int_t
Definition: RtypesCore.h:41
const Bool_t kFALSE
Definition: RtypesCore.h:88
long Long_t
Definition: RtypesCore.h:50
bool Bool_t
Definition: RtypesCore.h:59
const Bool_t kTRUE
Definition: RtypesCore.h:87
#define ClassDef(name, id)
Definition: Rtypes.h:324
virtual Int_t GetSize() const
Return the capacity of the collection, i.e.
Definition: TCollection.h:182
Bool_t IsReadOnly() const
returns read-only mode
TString fJSROOT
! location of external JSROOT files
Definition: THttpServer.h:44
virtual void ProcessRequest(std::shared_ptr< THttpCallArg > arg)
Process single http request Depending from requested path and filename different actions will be perf...
const char * GetTopName() const
returns name of top item in objects hierarchy
Definition: THttpServer.h:110
void SetTimer(Long_t milliSec=100, Bool_t mode=kTRUE)
create timer which will invoke ProcessRequests() function periodically Timer is required to perform a...
virtual void ProcessBatchHolder(std::shared_ptr< THttpCallArg > &arg)
Process special http request for root_batch_holder.js script This kind of requests used to hold web b...
std::vector< std::shared_ptr< THttpWSHandler > > fWSHandlers
! list of WS handlers
Definition: THttpServer.h:59
virtual ~THttpServer()
destructor delete all http engines and sniffer
void SetTerminate()
set termination flag, no any further requests will be processed
virtual void MissedRequest(THttpCallArg *arg)
Method called when THttpServer cannot process request By default such requests replied with 404 code ...
Bool_t fOwnThread
! true when specialized thread allocated for processing requests
Definition: THttpServer.h:39
void SetSniffer(TRootSniffer *sniff)
Set TRootSniffer to the server Server takes ownership over sniffer.
Bool_t IsFileRequested(const char *uri, TString &res) const
Check if file is requested, thread safe.
const char * GetCors() const
Returns specified CORS domain.
Definition: THttpServer.h:104
std::thread fThrd
! own thread
Definition: THttpServer.h:40
void StopServerThread()
Stop server thread Normally called shortly before http server destructor.
TString fTopName
! name of top folder, default - "ROOT"
Definition: THttpServer.h:43
TRootSniffer * fSniffer
! sniffer provides access to ROOT objects hierarchy
Definition: THttpServer.h:36
void SetDrawPage(const std::string &filename="")
Set file name of HTML page, delivered by the server when objects drawing page is requested from the b...
THttpServer(const char *engine="civetweb:8080")
constructor
void AddLocation(const char *prefix, const char *path)
add files location, which could be used in the server one could map some system folder to the server ...
Bool_t IsAnyEngine() const
Definition: THttpServer.h:79
std::map< std::string, std::string > fLocations
! list of local directories, which could be accessed via server
Definition: THttpServer.h:46
TList fCallArgs
! submitted arguments (deprecated)
Definition: THttpServer.h:55
Long_t fMainThrdId
! id of the thread for processing requests
Definition: THttpServer.h:38
std::string fCors
! CORS: sets Access-Control-Allow-Origin header for ProcessRequest responses
Definition: THttpServer.h:52
Bool_t IsTerminated() const
returns kTRUE, if server was terminated
Definition: THttpServer.h:94
TString fJSROOTSYS
! location of local JSROOT files
Definition: THttpServer.h:42
TList fEngines
! engines which runs http server
Definition: THttpServer.h:34
void SetCors(const std::string &domain="*")
Enable CORS header to ProcessRequests() responses Specified location (typically "*") add as "Access-C...
Definition: THttpServer.h:98
Bool_t IsCors() const
Returns kTRUE if CORS was configured.
Definition: THttpServer.h:101
std::queue< std::shared_ptr< THttpCallArg > > fArgs
! submitted arguments
Definition: THttpServer.h:56
void SetDefaultPage(const std::string &filename="")
Set file name of HTML page, delivered by the server when http address is opened in the browser.
void CreateServerThread()
Creates special thread to process all requests, directed to http server.
std::string fDrawPageCont
! content of draw html page
Definition: THttpServer.h:51
THttpTimer * fTimer
! timer used to access main thread
Definition: THttpServer.h:35
std::mutex fWSMutex
! mutex to protect WS handler lists
Definition: THttpServer.h:58
Bool_t CreateEngine(const char *engine)
factory method to create different http engines At the moment two engine kinds are supported: civetwe...
std::string fDrawPage
! file name for drawing of single element
Definition: THttpServer.h:50
std::string fDefaultPageCont
! content of default html page
Definition: THttpServer.h:49
static Bool_t VerifyFilePath(const char *fname)
Checked that filename does not contains relative path below current directory Used to prevent access ...
void SetReadOnly(Bool_t readonly)
Set read-only mode for the server (default on) In read-only server is not allowed to change any ROOT ...
void SetJSROOT(const char *location)
Set location of JSROOT to use with the server One could specify address like: https://root....
std::mutex fMutex
! mutex to protect list with arguments
Definition: THttpServer.h:54
std::string fDefaultPage
! file name for default page name
Definition: THttpServer.h:48
TRootSniffer * GetSniffer() const
returns pointer on objects sniffer
Definition: THttpServer.h:82
Bool_t fTerminated
! termination flag, disables all requests processing
Definition: THttpServer.h:37
void SetTopName(const char *top)
set name of top item in objects hierarchy
Definition: THttpServer.h:107
A doubly linked list.
Definition: TList.h:44
The TNamed class is the base class for all named ROOT classes.
Definition: TNamed.h:29
Mother of all ROOT objects.
Definition: TObject.h:37
Basic string class.
Definition: TString.h:131
const char * Data() const
Definition: TString.h:364
RooCmdArg Restrict(const char *catName, const char *stateNameList)
void ws()
Definition: ws.C:63