192 const char *clID, *at;
193 char *questSrc, *questLfn, *questDst;
195 bool isIPv4, doMon =
Cfg.tpcMon != 0;
203 gettimeofday(&monInfo.
begT, 0);
209 {gettimeofday(&monInfo.
endT, 0);
210 if ((questSrc = index(Job->Info.Key,
'?'))) *questSrc = 0;
211 monInfo.
srcURL = Job->Info.Key;
212 if ((questLfn = index(Job->Info.Lfn,
'?'))) *questLfn = 0;
213 monInfo.
dstURL = Job->Info.Lfn;
215 if (Job->Info.Str) monInfo.
strm = Job->Info.Str;
218 clID = Job->Info.Org;
219 if (clID && (at = index(clID,
'@')) && !index(at+1,
'.'))
222 {snprintf(clBuff,
sizeof(clBuff),
"%s%s", clID, dName);
228 if ((questDst = index(Job->Info.Dst,
'?'))) *questDst = 0;
230 if (questDst) *questDst =
'?';
231 Cfg.tpcMon->Report(monInfo);
232 if (questLfn) *questLfn =
'?';
233 if (questSrc) *questSrc =
'?';
236 Job = Job->Done(
this, eRec, rc);
284 const char *Args[6], *eVec[6], **envArg;
285 char *lP, *Colon, *cksVal, sBuff[8], *
tident = Job->Info.Org;
286 char *Quest = index(Job->Info.Key,
'?');
291 if (cFile.Path && (rc = ExportCreds(cFile.Path)))
292 {strcpy(eRec,
"Copy failed; unable to pass credentials.");
299 {
if (Quest) *Quest = 0;
300 OfsEroute.Say(Pname,
tident,
" copying ",Job->Info.Key,
" to ",Job->Info.Dst);
301 if (Quest) *Quest =
'?';
306 cksVal = (Job->Info.Cks ? Job->Info.Cks :
Cfg.cksType);
308 {Args[aNum++] =
"-C";
309 Args[aNum++] = cksVal;
315 {sprintf(sBuff,
"%d",
static_cast<int>(Job->Info.Str));
317 Args[aNum++] = sBuff;
322 Args[aNum++] = Job->Info.Key;
323 Args[aNum++] = Job->Info.Dst;
328 snprintf(tidBuff,
sizeof(tidBuff),
"XRD_TIDENT=%s",
tident);
337 {snprintf(sprBuff,
sizeof(sprBuff),
"XRDTPC_SPROT=%s", Job->Info.Spr);
345 {snprintf(tprBuff,
sizeof(tprBuff),
"XRDTPC_TPROT=%s", Job->Info.Tpr);
353 {snprintf(rpxBuff,
sizeof(rpxBuff),
"XRD_CPTARGET=%s", Job->Info.Rpx);
359 if (cFile.Path) eVec[i++] = cFile.pEnv;
364 if ((rc = Prog.Run(&JobStream, Args, aNum, envArg)))
365 {strcpy(eRec,
"Copy failed; unable to start job.");
366 OfsEroute.Emsg(
"TPC", Job->Info.Org, Job->Info.Lfn, eRec);
375 while((lP = JobStream.GetLine()))
376 {
if (!strcmp(lP,
"!-!IPv4")) isIPv4 =
true;
377 if ((Colon = index(lP,
':')) && *(Colon+1) ==
' ')
378 {strncpy(eRec, Colon+2,
sizeof(eRec)-1);
379 eRec[
sizeof(eRec)-1] = 0;
386 if ((rc = Prog.RunDone(JobStream)) < 0) rc = -rc;
387 DEBUG(Pname <<
"ended with rc=" <<rc);
391 if (rc && !(*eRec)) sprintf(eRec,
"Copy failed with return code %d", rc);
397 {
OfsEroute.Emsg(
"TPC", Job->Info.Org, Job->Info.Lfn, eRec);
399 }
else Job->Info.Success();