264 buffHold() : P(0), bP(0) {}
265 ~buffHold() {
if (P) free(P);
if (bP)
delete bP;}
267 static const int iovNum = 3;
268 struct iovec
iov[iovNum];
271 const char *sigBuff, *payload = thedata;
272 unsigned char secHash[SHA256_DIGEST_LENGTH];
273 int sigSize, n, newSize, rc, paysize = 0;
279 mySeq = htonll(mySeq);
286 if (!payload) payload = ((
char *)&thereq) +
sizeof(
ClientRequest);
293 iov[0].iov_base = (
char *)&mySeq;
294 iov[0].iov_len =
sizeof(mySeq);
295 iov[1].iov_base = (
char *)&thereq;
297 if (n < 3) nodata =
true;
298 else {
iov[2].iov_base = (
char *)payload;
299 iov[2].iov_len = paysize;
304 if (!GetSHA2(secHash,
iov, n))
return -EDOM;
309 {rc = authProt->
Encrypt((
const char *)secHash,
sizeof(secHash),&myReq.bP);
310 if (rc < 0)
return rc;
311 sigSize = myReq.bP->size;
312 sigBuff = myReq.bP->buffer;
314 sigSize =
sizeof(secHash);
315 sigBuff = (
char *)secHash;
322 if (!myReq.P)
return -ENOMEM;
327 memcpy(&(myReq.P->secReq.header.streamid ), thereq.
header.
streamid,
328 sizeof(myReq.P->secReq.header.streamid));
330 sizeof(myReq.P->secReq.sigver.expectrid));
331 myReq.P->secReq.sigver.seqno = mySeq;
332 if (nodata) myReq.P->secReq.sigver.flags |=
kXR_nodata;
333 myReq.P->secReq.sigver.dlen = htonl(sigSize);
337 memcpy(&(myReq.P->secSig), sigBuff, sigSize);
341 newreq = &(myReq.P->secReq); myReq.P = 0;