XRootD
XrdXrootdGSReal.hh
Go to the documentation of this file.
1 #ifndef __XRDXROOTDGSREAL_HH_
2 #define __XRDXROOTDGSREAL_HH_
3 /******************************************************************************/
4 /* */
5 /* X r d X r o o t d G S R e a l . h h */
6 /* */
7 /* (c) 2019 by the Board of Trustees of the Leland Stanford, Jr., University */
8 /* All Rights Reserved */
9 /* Produced by Andrew Hanushevsky for Stanford University under contract */
10 /* DE-AC02-76-SFO0515 with the Department of Energy */
11 /* */
12 /* This file is part of the XRootD software suite. */
13 /* */
14 /* XRootD is free software: you can redistribute it and/or modify it under */
15 /* the terms of the GNU Lesser General Public License as published by the */
16 /* Free Software Foundation, either version 3 of the License, or (at your */
17 /* option) any later version. */
18 /* */
19 /* XRootD is distributed in the hope that it will be useful, but WITHOUT */
20 /* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */
21 /* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public */
22 /* License for more details. */
23 /* */
24 /* You should have received a copy of the GNU Lesser General Public License */
25 /* along with XRootD in a file called COPYING.LESSER (LGPL license) and file */
26 /* COPYING (GPL license). If not, see <http://www.gnu.org/licenses/>. */
27 /* */
28 /* The copyright holder's institutional names and contributor's names may not */
29 /* be used to endorse or promote products derived from this software without */
30 /* specific prior written permission of the institution or contributor. */
31 /******************************************************************************/
32 
33 #include "Xrd/XrdJob.hh"
34 #include "XrdSys/XrdSysPthread.hh"
38 
39 //-----------------------------------------------------------------------------
43 //-----------------------------------------------------------------------------
44 
45 class XrdNetMsg;
46 class XrdSysError;
47 
48 class XrdXrootdGSReal : public XrdJob, public XrdXrootdGStream,
50 {
51 public:
52 
53 void DoIt(); // XrdJob override
54 
55 void Flush();
56 
57 uint32_t GetDictID(const char *text, bool isPath=false);
58 
59 bool HasHdr();
60 
61 void Ident();
62 
63 bool Insert(const char *data, int dlen);
64 
65 bool Insert(int dlen);
66 
67 char *Reserve(int dlen);
68 
69 int SetAutoFlush(int afsec);
70 
71 int Space();
72 
73 //-----------------------------------------------------------------------------
79 //-----------------------------------------------------------------------------
80 
81  static const int fmtNone = 0;
82  static const int fmtBin = 1;
83  static const int fmtCgi = 2;
84  static const int fmtJson = 3;
85 
86  static const int hdrNone = 0;
87  static const int hdrNorm = 1;
88  static const int hdrSite = 2;
89  static const int hdrHost = 3;
90  static const int hdrInst = 4;
91  static const int hdrFull = 5;
92 
93  static const int optNoID = 0x01;
94 
95  struct GSParms {const char *pin;
96  const char *dest;
97  int Mode;
98  int maxL;
99  int flsT;
101  char Opt;
102  char Fmt;
103  char Hdr;
104  };
105 
106  XrdXrootdGSReal(const GSParms &gsParms, bool &aOK);
107 
108 //-----------------------------------------------------------------------------
110 //-----------------------------------------------------------------------------
111 
113 
114 private:
115 
116 
117 void AutoFlush();
118 void Expel(int dlen);
119 int hdrBIN(const GSParms &gs);
120 int hdrCGI(const GSParms &gs, char *buff, int blen);
121 int hdrJSN(const GSParms &gs, char *buff, int blen);
122 
123 struct HdrInfo
124  {char *pseq;
125  char *tbeg;
126  char *tend;
127  } hInfo;
128 
129 char *dictHdr;
130 char *idntHdr0;
131 char *idntHdr1;
132 int idntHsz1;
133 int pSeq;
134 int pSeqID; // For ident records
135 int pSeqDID; // For dict records
136 XrdSysRecMutex gMutex;
137 XrdNetMsg *udpDest;
138 XrdXrootdMonGS *binHdr;
139 char *udpBuffer;
140 char *udpBFirst;
141 char *udpBNext;
142 char *udpBEnd;
143 int tBeg;
144 int tEnd;
145 int rsvbytes;
146 int monType;
147 int afTime;
148 bool afRunning;
149 bool isCGI;
150 
152 };
153 #endif
unsigned char kXR_char
Definition: XPtypes.hh:65
Definition: XrdJob.hh:43
uint32_t GetDictID(const char *text, bool isPath=false)
char * Reserve(int dlen)
static const int hdrNone
Format as JSON info.
kXR_char Type
the specific G-Stream identifier
const char * dest
Destination for records.
static const int hdrInst
Include site, host, port, inst.
~XrdXrootdGSReal()
Destructor. Normally, this object is never deleted.
int SetAutoFlush(int afsec)
static const int fmtBin
Do not include info.
XrdXrootdGSReal(const GSParms &gsParms, bool &aOK)
static const int fmtJson
Format as CGI info.
int maxL
Maximum packet length (default 32K)
static const int hdrSite
Include site.
int flsT
Flush time (default from monitor)
const char * pin
the plugin name.
static const int hdrHost
Include site, host.
char Fmt
How to handle the records.
static const int optNoID
Don't send ident records.
bool Insert(const char *data, int dlen)
int Mode
the monitor type for send routing.
static const int hdrNorm
Include standard header.
static const int fmtNone
static const int fmtCgi
Format as binary info.
static const int hdrFull
Include site, host, port, inst, pgm.