#include <XrdMpxXml.hh>
Definition at line 35 of file XrdMpxXml.hh.
◆ fmtType
Enumerator |
---|
fmtCGI | |
fmtFlat | |
fmtText | |
fmtXML | |
Definition at line 39 of file XrdMpxXml.hh.
◆ XrdMpxXml()
XrdMpxXml::XrdMpxXml |
( |
fmtType |
ft, |
|
|
bool |
nz = false , |
|
|
bool |
dbg = false |
|
) |
| |
|
inline |
Definition at line 43 of file XrdMpxXml.hh.
44 : fType(ft), Debug(dbg), noZed(nz)
45 {
if (ft ==
fmtCGI) {vSep =
'='; vSfx =
'&';}
46 else {vSep =
' '; vSfx =
'\n';}
References fmtCGI, and fmtText.
◆ ~XrdMpxXml()
XrdMpxXml::~XrdMpxXml |
( |
| ) |
|
|
inline |
◆ Format()
int XrdMpxXml::Format |
( |
const char * |
Host, |
|
|
char * |
ibuff, |
|
|
char * |
obuff |
|
) |
| |
Definition at line 242 of file XrdMpxXml.cc.
244 static const char *Hdr0 =
"<statistics ";
245 static const int H0Len = strlen(Hdr0);
249 VarInfo vHead[] = {{
"tod", 0}, {
"ver", 0}, {
"src", 0}, {
"tos", 0},
250 {
"pgm", 0}, {
"ins", 0}, {
"pid", 0}, {0, 0}};
251 VarInfo vStat[] = {{
"id", 0}, {0, 0}};
252 VarInfo vTail[] = {{
"toe", 0}, {0, 0}};
253 char *lP = ibuff, *oP = obuff, *tP, *vP;
258 if (!(lP = (
char *)index(lP,
'>')))
259 return xmlErr(
"Invalid xml stream: ", ibuff);
265 {
if (*lP ==
'>' || (*lP ==
'<' && *(lP+1) ==
'/')) *lP =
' ';
271 if (!(lP = Data.GetLine()) || strncmp(Hdr0, lP, H0Len))
272 return xmlErr(
"Stream does not start with '<statistics'.");
273 Data.GetToken(); getVars(Data, vHead);
277 for (i = 0; vHead[i].Name; i++)
278 {
if (vHead[i].Data) oP = Add(oP, vHead[i].Name, vHead[i].Data);}
282 if (Host) oP = Add(oP,
"host", Host);
286 if (!Data.GetLine())
return xmlErr(
"Null xml stream after header.");
290 while((tP = Data.GetToken()) && strcmp(tP,
"/statistics"))
292 {
if (!xVar.Pop(strcmp(
"/stats", tP) ? tP+1 : 0))
293 return xmlErr(tP,
"invalid end for ", xVar.Var());
296 {
if (strcmp(
"<stats", tP)) rc = xVar.Push(tP+1);
297 else {getVars(Data, vStat);
298 rc = (vStat[0].Data ? xVar.Push(vStat[0].Data)
301 if (!rc)
return xmlErr(
"Nesting too deep for ", xVar.Var());
303 else {
if ((vP = index(tP,
'<'))) *vP =
'\0';
306 if (*(tP+i) ==
'"') {*(tP+i) =
'\0'; i = 1;}
308 oP = Add(oP, xVar.Var(), tP+i);
310 if (vP != tP) memset(tP,
' ', vP - tP);
315 if (!tP)
return xmlErr(
"Missing '</statistics>' in xml stream.");
316 getVars(Data, vTail);
317 if (vTail[0].Data) oP = Add(oP, vTail[0].Name, vTail[0].Data);
318 if (*(oP-1) ==
'&') oP--;
References XrdOucTokenizer::GetLine(), XrdOucTokenizer::GetToken(), XrdMpxVar::Pop(), XrdMpxVar::Push(), XrdOucTokenizer::RetToken(), and XrdMpxVar::Var().
Referenced by main(), and XrdMpxOut::Run().
The documentation for this class was generated from the following files: