12 #ifndef ROOT_THttpServer
13 #define ROOT_THttpServer
31 class THttpServer :
public TNamed {
35 THttpTimer *fTimer{
nullptr};
36 TRootSniffer *fSniffer{
nullptr};
37 Bool_t fTerminated{kFALSE};
38 Long_t fMainThrdId{0};
39 Bool_t fOwnThread{kFALSE};
41 Bool_t fOldProcessSignature{kFALSE};
44 TString fTopName{
"ROOT"};
47 std::map<std::string, std::string> fLocations;
49 std::string fDefaultPage;
50 std::string fDefaultPageCont;
51 std::string fDrawPage;
52 std::string fDrawPageCont;
56 std::queue<std::shared_ptr<THttpCallArg>> fArgs;
59 std::vector<std::shared_ptr<THttpWSHandler>> fWSHandlers;
61 virtual void MissedRequest(THttpCallArg *arg);
63 virtual void ProcessRequest(std::shared_ptr<THttpCallArg> arg);
65 virtual void ProcessBatchHolder(std::shared_ptr<THttpCallArg> &arg);
67 virtual void ProcessRequest(THttpCallArg *arg);
69 void StopServerThread();
71 static Bool_t VerifyFilePath(
const char *fname);
74 THttpServer(
const char *engine =
"civetweb:8080");
75 virtual ~THttpServer();
77 Bool_t CreateEngine(
const char *engine);
79 Bool_t IsAnyEngine()
const {
return fEngines.GetSize() > 0; }
82 TRootSniffer *GetSniffer()
const {
return fSniffer; }
84 void SetSniffer(TRootSniffer *sniff);
86 Bool_t IsReadOnly()
const;
88 void SetReadOnly(Bool_t readonly);
94 Bool_t IsTerminated()
const {
return fTerminated; }
98 void SetCors(
const std::string &domain =
"*") { fCors = domain; }
101 Bool_t IsCors()
const {
return !fCors.empty(); }
104 const char *GetCors()
const {
return fCors.c_str(); }
107 void SetTopName(
const char *top) { fTopName = top; }
110 const char *GetTopName()
const {
return fTopName.Data(); }
112 void SetJSROOT(
const char *location);
114 void AddLocation(
const char *prefix,
const char *path);
116 void SetDefaultPage(
const std::string &filename =
"");
118 void SetDrawPage(
const std::string &filename =
"");
120 void SetTimer(Long_t milliSec = 100, Bool_t mode = kTRUE);
122 void CreateServerThread();
125 Bool_t IsFileRequested(
const char *uri, TString &res)
const;
128 Bool_t ExecuteHttp(std::shared_ptr<THttpCallArg> arg);
131 Bool_t SubmitHttp(std::shared_ptr<THttpCallArg> arg, Bool_t can_run_immediately = kFALSE);
134 Int_t ProcessRequests();
137 Bool_t Register(
const char *subfolder, TObject *obj);
140 Bool_t Unregister(TObject *obj);
143 void RegisterWS(std::shared_ptr<THttpWSHandler> ws);
146 void UnregisterWS(std::shared_ptr<THttpWSHandler> ws);
149 std::shared_ptr<THttpWSHandler> FindWS(
const char *name);
152 Bool_t ExecuteWS(std::shared_ptr<THttpCallArg> &arg, Bool_t external_thrd = kFALSE, Bool_t wait_process = kFALSE);
155 void Restrict(
const char *path,
const char *options);
157 Bool_t RegisterCommand(
const char *cmdname,
const char *method,
const char *icon = 0);
159 Bool_t Hide(
const char *fullname, Bool_t hide = kTRUE);
161 Bool_t SetIcon(
const char *fullname,
const char *iconname);
163 Bool_t CreateItem(
const char *fullname,
const char *title);
165 Bool_t SetItemField(
const char *fullname,
const char *name,
const char *value);
167 const char *GetItemField(
const char *fullname,
const char *name);
170 static const char *GetMimeType(
const char *path);
173 static char *ReadFileContent(
const char *filename, Int_t &len);
176 static std::string ReadFileContent(
const std::string &filename);
178 ClassDef(THttpServer, 0)