314{
315 char appInfo[128], clIP[INET6_ADDRSTRLEN+2], svIP[INET6_ADDRSTRLEN+2];
316 int clPort, svPort;
317 char clType, svType;
318 bool fdok = false, odok = false;
319
320
321
323 else snprintf(appInfo,
sizeof(appInfo),ffApp,
sizeof(appInfo)-20,
appName);
324
325
326
328
329
330
331
332
333
335 if (clPort < 0)
336 {
eDest->
Emsg(
"PMarkFF", clPort,
"get peer information.");
337 return false;
338 }
339
341 if (svPort < 0)
342 {
eDest->
Emsg(
"PMarkFF", clPort,
"get self information.");
343 return false;
344 }
345
346
347
349
350
351
354 if (!urSad)
eDest->
Emsg(
"PMarkFF",
"unable to get origin address.");
355 else {char buff[1024];
358 mySad->
v4.sin_port = htons(
static_cast<uint16_t
>(
ffPortO));
359 snprintf(buff,
sizeof(buff),
"%s:%d", clIP,
ffPortO);
360 oDest = strdup(buff);
361 odok = true;
362 }
363 }
364
365
366
367 if (!fdok && !odok) return false;
368
369
370
371
372 char utcBuff[40], bseg0[512];
373 int len0 = snprintf(bseg0,
sizeof(bseg0), ffFmt0,
myHostName,
374 getUTC(utcBuff, sizeof(utcBuff)));
375 if (len0 >= (int)sizeof(bseg0))
376 {
eDest->
Emsg(
"PMarkFF",
"invalid json; bseg0 truncated.");
377 return false;
378 }
379
380 ffHdr = strdup(bseg0);
381
382 char bseg1[256];
383 int len1 = snprintf(bseg1,
sizeof(bseg1), ffFmt1,
eCode,
aCode, appInfo);
384 if (len1 >= (int)sizeof(bseg1))
385 {
eDest->
Emsg(
"PMarkFF",
"invalid json; bseg1 truncated.");
386 return false;
387 }
388
389 char bseg2[256];
390 int len2 = snprintf(bseg2, sizeof(bseg2), ffFmt2,
391 clType, svIP, clIP, svPort, clPort);
392 if (len2 >= (int)sizeof(bseg2))
393 {
eDest->
Emsg(
"PMarkFF",
"invalid json; cl bseg2 truncated.");
394 return false;
395 }
396
397 ffTailsz = len1 + len2;
398 ffTail = (char *)malloc(ffTailsz + 1);
399 strcpy(ffTail, bseg1);
400 strcpy(ffTail+len1, bseg2);
401
402
403
404 fdOK = fdok;
405 odOK = odok;
406 return Emit("start", utcBuff, "");
407}
static XrdSysError eDest(0,"crypto_")
const XrdNetSockAddr * NetAddr()
static int GetSokInfo(int fd, char *theAddr, int theALen, char &theType)
int Emsg(const char *esfx, int ecode, const char *text1, const char *text2=0)