GSI Object Oriented Online Offline (Go4)  GO4-6.3.0
TGo4HttpProxy.h
Go to the documentation of this file.
1 // $Id$
2 //-----------------------------------------------------------------------
3 // The GSI Online Offline Object Oriented (Go4) Project
4 // Experiment Data Processing at EE department, GSI
5 //-----------------------------------------------------------------------
6 // Copyright (C) 2000- GSI Helmholtzzentrum fuer Schwerionenforschung GmbH
7 // Planckstr. 1, 64291 Darmstadt, Germany
8 // Contact: http://go4.gsi.de
9 //-----------------------------------------------------------------------
10 // This software can be used under the license agreements as stated
11 // in Go4License.txt file which is part of the distribution.
12 //-----------------------------------------------------------------------
13 
14 #ifndef TGO4HTTPPROXY_H
15 #define TGO4HTTPPROXY_H
16 
17 #include "TGo4ServerProxy.h"
18 
19 #include "TXMLEngine.h"
20 
21 #include <QNetworkAccessManager>
22 #include <QNetworkReply>
23 
24 class TGo4HttpProxy;
25 class TGo4HttpAccess;
26 class TGo4ObjectManager;
27 
29 class QHttpProxy : public QObject {
30  Q_OBJECT
31 
32  friend class TGo4HttpProxy;
33  friend class TGo4HttpAccess;
34 
35  protected:
36  QNetworkAccessManager qnam;
37  QNetworkReply *fHReply{nullptr};
38  TGo4HttpProxy *fProxy{nullptr};
39 
40  public slots:
41  void httpFinished();
42  void httpHReqError(QNetworkReply::NetworkError);
43  void authenticationRequiredSlot(QNetworkReply *, QAuthenticator *);
44 
45  void updateRatemeter();
46  void updateHierarchy();
47 
49 
50  public:
51 
53  virtual ~QHttpProxy();
54 
55  void StartRequest(const char *url);
56 };
57 
58 // -----------------------------------------------------------------------------------
59 
60 class TGo4HttpAccess : public QObject, public TGo4Access {
61 
62  Q_OBJECT
63 
64  protected:
65  TGo4HttpProxy *fProxy{nullptr};
66  XMLNodePointer_t fNode{nullptr};
67  TString fUrlPath;
68  // Request kind. Can be:
69  // 0 - h.xml request,
70  // 1 - root.bin request,
71  // 2 - dabc get.xml request,
72  // 3 - dabc get.xml history requests
73  // 4 - parameter status request
74  // 5 - sample tree
75  // 6 - analysis status request
76  Int_t fKind{0};
77  TString fNameAttr;
78  TString fKindAttr;
79  TString fExtraArg;
80  TGo4ObjectManager *fReceiver{nullptr};
81  TString fRecvPath;
82  QNetworkReply *fReply{nullptr};
83 
84  public slots:
85  void httpFinished();
86  void httpError(QNetworkReply::NetworkError);
87 
88  public:
89 
90  TGo4HttpAccess(TGo4HttpProxy *proxy, XMLNodePointer_t node, Int_t kind = 1, const char *extra_arg = nullptr);
91 
92  virtual ~TGo4HttpAccess() { }
93 
94  Bool_t IsRemote() const override { return kTRUE; }
95 
96  Bool_t CanGetObject() const override { return kFALSE; }
97 
98  Bool_t GetObject(TObject *&obj, Bool_t &owner) const override { return kFALSE; }
99 
100  TClass *GetObjectClass() const override;
101 
102  const char *GetObjectName() const override;
103 
104  const char *GetObjectClassName() const override;
105 
106  Int_t AssignObjectTo(TGo4ObjectManager *rcv, const char *path) override;
107 
108 };
109 
110 // -----------------------------------------------------------------------------------
111 
114 
115  friend class QHttpProxy;
116  friend class TGo4HttpAccess;
117 
118  protected:
119  TXMLEngine *fXML{nullptr};
120  XMLDocPointer_t fxHierarchy{nullptr};
122  Int_t fRateCnt{0};
123  Int_t fStatusCnt{0};
124  Int_t fDebugCnt{0};
125  Bool_t fbAnalysisRunning{kFALSE};
126  TString fUserName;
127  TString fPassword;
128  Bool_t fConnected{kFALSE};
129  QNetworkReply *fRegularReq{nullptr};
130  Int_t fShutdownCnt{0};
131 
132  void GetHReply(QByteArray& res);
133 
134  XMLNodePointer_t FindItem(const char *name, XMLNodePointer_t curr = nullptr) const;
135 
136  TString MakeUrlPath(XMLNodePointer_t item);
137 
138  void ProcessUpdateTimer();
139 
140  void ProcessRegularMultiRequest(Bool_t finished = kFALSE);
141 
142  Bool_t ServerHasRestrict() const;
143 
144  Bool_t ServerHasMulti();
145 
146  Bool_t SubmitURL(const char *path, Int_t waitres = -1);
147 
148  Bool_t PostObject(const char *prefix, TObject *obj, Int_t waitres = -1, Bool_t destroy_after = kTRUE);
149 
150  Bool_t CheckUserName(const char *expects, Bool_t dflt = kFALSE) const;
151 
152  Bool_t CheckShutdown(Bool_t force = kFALSE);
153 
154  TGo4HttpAccess* SubmitRequest(const char *itemname, Int_t kind, TGo4Slot *tgtslot, const char *extra_arg = nullptr);
155 
156  public:
157  TGo4HttpProxy();
158  virtual ~TGo4HttpProxy();
159 
160  void SetAccount(const char *username, const char *passwd);
161 
162  Bool_t Connect(const char *nodename);
163  Bool_t UpdateHierarchy(Bool_t sync = kTRUE);
164 
165  void Initialize(TGo4Slot *slot) override;
166  void Finalize(TGo4Slot *slot) override {}
167 
168  Bool_t HasSublevels() const override;
169  std::unique_ptr<TGo4Access> ProvideAccess(const char *name) override;
170  TGo4LevelIter *MakeIter() override;
171 
172  Int_t GetObjectKind() const override { return TGo4Access::kndFolder; }
173  const char *GetContainedClassName() const override { return ClassName(); }
174  TObject *GetAssignedObject() override { return this; }
175  const char *GetContainedObjectInfo() override;
176  Int_t GetObjectSizeInfo() const override { return -1; }
177 
178  void WriteData(TGo4Slot *slot, TDirectory *dir, Bool_t onlyobjs) override;
179  void ReadData(TGo4Slot *slot, TDirectory *dir) override;
180 
181  void Update(TGo4Slot *slot, Bool_t strong) override;
182 
183  TString FindCommand(const char *name) override;
184  Int_t NumCommandArgs(const char *name) override;
185  Bool_t SubmitCommand(const char *name, Int_t waitres = -1, const char *arg1 = nullptr, const char *arg2 = nullptr, const char *arg3 = nullptr) override;
186 
187  const char *GetUserName() const override { return fUserName.Data(); }
188 
189  Bool_t IsAnalysisServer() const override { return kTRUE; }
190  Bool_t IsGo4Analysis() const override;
191  Bool_t IsConnected() const override { return fConnected; }
192  Bool_t IsViewer() const override { return CheckUserName("observer", kFALSE); }
193  Bool_t IsController() const override { return CheckUserName("controller", kFALSE); }
194  Bool_t IsAdministrator() const override { return CheckUserName("admin", kTRUE); }
195 
196  Bool_t CanSubmitObjects() const override;
197  void RequestAnalysisSettings() override;
198  void SubmitAnalysisSettings() override;
199  void CloseAnalysisSettings() override;
200 
201  Bool_t NamesListReceived() const override;
202  Bool_t RefreshNamesList() override;
203  Bool_t DelayedRefreshNamesList(Int_t delay_sec) override;
204 
205  Bool_t IsAnalysisRunning() const override { return fbAnalysisRunning; }
206  void StartAnalysis() override;
207  void StopAnalysis() override;
208 
209  Bool_t RequestObjectStatus(const char *objectname, TGo4Slot *tgtslot) override;
210 
211  Bool_t UpdateAnalysisObject(const char *objectname, TObject *obj) override;
212 
213  void ClearAllAnalysisObjects() override;
214  void ClearAnalysisObject(const char *fullpath) override;
215 
216  void RemoteTreeDraw(const char *treename,
217  const char *varexp,
218  const char *cutcond,
219  const char *hname) override;
220 
221  void RequestEventStatus(const char *evname, Bool_t astree, TGo4Slot *tgtslot) override;
222 
223  void RemotePrintEvent(const char *evname,
224  Int_t evnumber,
225  Int_t subid,
226  Bool_t ishex,
227  Bool_t islong) override;
228 
229  void ChageObjectProtection(const char *fullpath, const char *flags) override;
230 
231  void RemoveObjectFromAnalysis(const char *fullpath) override;
232 
233  void ExecuteLine(const char *line) override;
234 
235  void PrintDynListEntry(const char *fullpath) override;
236 
237  void LoadConfigFile(const char *fname) override;
238  void SaveConfigFile(const char *fname) override;
239 
240  void WriteAutoSave(const char *fname,
241  Int_t complevel,
242  Bool_t overwrite) override;
243 
244  void ResetDebugOutputRequests() override;
245 
246  void DisconnectAnalysis(Int_t waittime = 30, Bool_t servershutdown = kFALSE) override;
247 
248 
249 };
250 
251 #endif
TGo4HttpProxy * fProxy
used only to receive hierarchy
Definition: TGo4HttpProxy.h:38
TString fPassword
user name and password -
Bool_t IsRemote() const override
Definition: TGo4HttpProxy.h:94
void Finalize(TGo4Slot *slot) override
QNetworkAccessManager qnam
Definition: TGo4HttpProxy.h:36
Bool_t IsController() const override
TString fRecvPath
Definition: TGo4HttpProxy.h:81
TString fNameAttr
Definition: TGo4HttpProxy.h:77
Bool_t IsAnalysisRunning() const override
Bool_t IsAnalysisServer() const override
void authenticationRequiredSlot(QNetworkReply *, QAuthenticator *)
virtual ~QHttpProxy()
QHttpProxy(TGo4HttpProxy *p)
void updateRatemeter()
TObject * GetAssignedObject() override
void httpFinished()
Bool_t IsConnected() const override
Int_t GetObjectSizeInfo() const override
void StartRequest(const char *url)
TString fExtraArg
Definition: TGo4HttpProxy.h:79
virtual ~TGo4HttpAccess()
Definition: TGo4HttpProxy.h:92
QHttpProxy fComm
pointer on dabc::Hierarchy class
void httpHReqError(QNetworkReply::NetworkError)
Bool_t GetObject(TObject *&obj, Bool_t &owner) const override
Definition: TGo4HttpProxy.h:98
void regularRequestFinished()
TString fKindAttr
Definition: TGo4HttpProxy.h:78
QNetworkReply * fHReply
central manager of network requests
Definition: TGo4HttpProxy.h:37
TString fUserName
friend class TGo4HttpAccess
Definition: TGo4HttpProxy.h:33
const char * GetContainedClassName() const override
friend class TGo4HttpProxy
Definition: TGo4HttpProxy.h:32
Bool_t IsAdministrator() const override
Bool_t CanGetObject() const override
Definition: TGo4HttpProxy.h:96
void updateHierarchy()
Bool_t IsViewer() const override
Int_t GetObjectKind() const override
const char * GetUserName() const override
TString fUrlPath
Definition: TGo4HttpProxy.h:67