#include <XrdOucPup.hh>
|
static int | Pack (char **buff, const char *data, int dlen=-1) |
|
static int | Pack (char **buff, unsigned int data) |
|
static int | Pack (struct iovec **, const char *, unsigned short &, int dlen) |
|
static int | Pack (struct iovec **, const char *, unsigned short &buff) |
|
static int | Unpack (char **buff, const char *bend, char **data, int &dlen) |
|
|
static const int | MaxLen = 0x7ff |
|
Definition at line 98 of file XrdOucPup.hh.
◆ XrdOucPup()
Definition at line 157 of file XrdOucPup.hh.
158 {eDest = erp, Names = nms;}
◆ ~XrdOucPup()
XrdOucPup::~XrdOucPup |
( |
| ) |
|
|
inline |
◆ Pack() [1/5]
int XrdOucPup::Pack |
( |
char ** |
buff, |
|
|
const char * |
data, |
|
|
int |
dlen = -1 |
|
) |
| |
|
static |
Definition at line 96 of file XrdOucPup.cc.
104 {
if (dlen < 0) dlen = strlen(data)+1;
105 xlen = htons(
static_cast<unsigned short>(dlen));
106 memcpy(bp, &xlen,
sizeof(xlen)); bp +=
sizeof(xlen);
107 memcpy(bp, data, dlen);
109 }
else {*bp++ =
'\0'; *bp++ =
'\0'; dlen = 0;}
112 return dlen+
sizeof(xlen);
◆ Pack() [2/5]
int XrdOucPup::Pack |
( |
char ** |
buff, |
|
|
unsigned int |
data |
|
) |
| |
|
static |
Definition at line 117 of file XrdOucPup.cc.
120 unsigned int netData = htonl(data);
124 {*bp =
static_cast<char>(
PT_int);
125 memcpy(bp+1, &netData,
sizeof(netData));
126 *buff = bp +
sizeof(netData)+1;
127 return sizeof(netData)+1;
130 memcpy(bp, &netData,
sizeof(netData));
131 *buff = bp +
sizeof(netData);
132 return sizeof(netData);
References PT_Inline, PT_int, and PT_Mask.
◆ Pack() [3/5]
int XrdOucPup::Pack |
( |
struct iovec ** |
iovP, |
|
|
const char * |
data, |
|
|
unsigned short & |
buff, |
|
|
int |
dlen |
|
) |
| |
|
static |
Definition at line 76 of file XrdOucPup.cc.
81 struct iovec *vP = *iovP;
83 vP->iov_base = (
char *)&buff; vP->iov_len =
sizeof(buff); vP++;
86 {buff = htons(
static_cast<unsigned short>(dlen));
87 vP->iov_base = (
char *)data; vP->iov_len = dlen; vP++;
88 }
else {buff = 0; dlen = 0;}
91 return dlen+
sizeof(buff);
◆ Pack() [4/5]
int XrdOucPup::Pack |
( |
struct iovec ** |
iovP, |
|
|
const char * |
data, |
|
|
unsigned short & |
buff |
|
) |
| |
|
static |
◆ Pack() [5/5]
int XrdOucPup::Pack |
( |
struct iovec * |
iovP, |
|
|
struct iovec * |
iovE, |
|
|
XrdOucPupArgs * |
pup, |
|
|
char * |
Base, |
|
|
char * |
Work |
|
) |
| |
Definition at line 137 of file XrdOucPup.cc.
140 static char Nil[] = {
PT_char,
'\0'};
141 static const int Sz16 =
sizeof(short) + 1;
142 static const int Sz32 =
sizeof(int) + 1;
143 static const int Sz64 =
sizeof(
long long) + 1;
144 struct iovec *vP = iovP;
147 int Dtype, dlen = 0, TotLen = 0;
149 unsigned long long n64;
153 union {
unsigned long long *B64;
159 do {Base.B08 = (
char **)(base + pP->
Doffs);
164 if (!*Base.B08) {vP->iov_base = Nil; vP->iov_len = 2;
165 vP++; TotLen += 2;
break;
167 dlen = (pP->
Dlen < 0 ? strlen(*Base.B08)+1 : pP->
Dlen);
169 return eMsg(
"string too long packing",
int(pP-pup), pP);
171 return eMsg(
"too many args packing",
int(pP-pup), pP);
172 n16 = htons(
static_cast<unsigned short>(dlen));
173 vP->iov_base = wP; vP->iov_len =
sizeof(n16); vP++;
174 memcpy(wP, &n16,
sizeof(n16)); wP +=
sizeof(n16);
175 vP->iov_base = *Base.B08; vP->iov_len = dlen; vP++;
176 TotLen += dlen +
sizeof(n16);
180 n16 = htons(*Base.B16);
182 memcpy(wP+1, &n16,
sizeof(n16));
183 vP->iov_base = wP; vP->iov_len = Sz16; vP++;
184 wP += Sz16; TotLen += Sz16; dlen =
sizeof(n16);
188 n32 = htonl(*Base.B32);
189 *wP =
static_cast<char>(
PT_int);
190 memcpy(wP+1, &n32,
sizeof(n32));
191 vP->iov_base = wP; vP->iov_len = Sz32; vP++;
192 wP += Sz32; TotLen += Sz32; dlen =
sizeof(n32);
196 h2nll(*Base.B64, n64);
198 memcpy(wP+1, &n64,
sizeof(n64));
199 vP->iov_base = wP; vP->iov_len = Sz64; vP++;
200 wP += Sz64; TotLen += Sz64; dlen =
sizeof(n64);
210 *Base.B08 = (
char *)vP;
228 *Base.B16 = htons(
static_cast<unsigned short>(TotLen));
229 return static_cast<int>(vP-iovP);
232 return static_cast<int>(vP-iovP);
238 }
while(vP < iovE || (vP==iovE && Dtype !=
PT_Skip && (Dtype &
PT_MaskD)));
242 return eMsg(
"arg list too long packing",
int(pP-pup), pup);
References XrdOucPupArgs::Dlen, XrdOucPupArgs::Doffs, XrdOucPupArgs::Dtype, MaxLen, PT_char, PT_Datlen, PT_End, PT_EndFill, PT_Fence, PT_Ignore, PT_int, PT_longlong, PT_MandS, PT_Mark, PT_MaskD, PT_short, PT_Skip, PT_special, and PT_Totlen.
◆ Unpack() [1/2]
int XrdOucPup::Unpack |
( |
char ** |
buff, |
|
|
const char * |
bend, |
|
|
char ** |
data, |
|
|
int & |
dlen |
|
) |
| |
|
static |
◆ Unpack() [2/2]
int XrdOucPup::Unpack |
( |
const char * |
buff, |
|
|
const char * |
bend, |
|
|
XrdOucPupArgs * |
pup, |
|
|
char * |
base |
|
) |
| |
Definition at line 274 of file XrdOucPup.cc.
277 const char *bp = buff, *dp;
279 int dlen = 0, Dtype, Aok = 0, Done = 0;
280 union {
unsigned long long b64;
283 unsigned char b08;} Temp;
285 union {
unsigned long long *B64;
292 {Base.B08 = (
char **)(base+uP->
Doffs);
304 {
if (bp == bend && Aok) {Done = 1; uP--;
break;}
305 return eMsg(
"buffer overrun unpacking",
int(uP-pup), uP);
308 {memcpy(&Temp.b16, bp,
sizeof(
unsigned short));
309 dlen =
static_cast<int>(ntohs(Temp.b16));
310 bp +=
sizeof(
unsigned short);
313 return eMsg(
"buffer overrun unpacking",
int(uP-pup), uP);
314 else *Base.B08 = (
char *)bp;
315 else if (!Aok)
break;
318 Dtype =
static_cast<int>(*bp &
PT_MaskT);
319 if ((
unsigned char)Dtype != uP->
Dtype)
320 return eMsg(
"arg/data mismatch unpacking",
int(uP-pup), uP);
321 if (!(dlen = (*bp &
PT_MaskB)>>3)) dlen =
sizeof(
unsigned short);
324 return eMsg(
"buffer overrun unpacking",
int(uP-pup), uP);
325 memcpy(&Temp.b64, dp, dlen);
329 {
case PT_short: *Base.B16 = ntohs(Temp.b16);
break;
331 case PT_int: *Base.B32 = ntohl(Temp.b32);
break;
333 case PT_longlong: *Base.B64 = ntohll(Temp.b64);
break;
344 return static_cast<int>(uP-pup);
345 return eMsg(
"missing arg unpacking",
int(uP-pup), uP);
References XrdOucPupArgs::Doffs, XrdOucPupArgs::Dtype, PT_char, PT_Datlen, PT_End, PT_EndFill, PT_Fence, PT_Inline, PT_int, PT_longlong, PT_MaskB, PT_MaskD, PT_MaskT, and PT_short.
◆ MaxLen
const int XrdOucPup::MaxLen = 0x7ff |
|
static |
The documentation for this class was generated from the following files: