36 : mPmark(req.pmark), mSciTag(req.mSciTag), mResource(req.resource.c_str()), mTransferWillStart(false), mTpcType(tpcType) {}
39 : mPmark(pmark), mSciTag(sciTag), mResource(NULL), mTransferWillStart(false), mTpcType(tpcType) {}
41 void PMarkManager::addFd(
int fd,
const struct sockaddr * sockP) {
44 mSocketInfos.emplace(fd, sockP);
48 bool PMarkManager::connect(
int fd,
const struct sockaddr *sockP,
size_t sockPLen, uint32_t timeout_sec, std::stringstream &err) {
63 return mPmark && (mSciTag >= 0);
67 mTransferWillStart =
true;
71 if(mSocketInfos.empty()) {
75 if(mPmarkHandles.empty()) {
78 ss <<
"scitag.flow=" << mSciTag
90 <<
"&" <<
"pmark.appname=" << ((mTpcType ==
TPC::TpcType::Pull) ?
"http-put" :
"http-get");
92 auto pmark = mPmark->
Begin(sockInfo.
client, mResource, ss.str().c_str(),
"http-tpc");
96 mPmarkHandles.emplace(sockInfo.
client.
addrInfo->
SockFD(),std::unique_ptr<XrdNetPMark::Handle>(pmark));
100 auto pmarkHandleItor = mPmarkHandles.begin();
101 while(!mSocketInfos.empty()) {
103 auto pmark = mPmark->
Begin(*sockInfo.
client.
addrInfo, *(pmarkHandleItor->second),
nullptr);
110 mPmarkHandles.emplace(fd, std::unique_ptr<XrdNetPMark::Handle>(pmark));
118 mPmarkHandles.erase(fd);
SocketInfo(int fd, const struct sockaddr *sockP)
bool connect(int fd, const struct sockaddr *sockP, size_t sockPLen, uint32_t timeout_sec, std::stringstream &err)
PMarkManager(XrdHttpExtReq &req, const TPC::TpcType type)
const char * Set(const char *hSpec, int pNum=PortInSpec)
virtual Handle * Begin(XrdSecEntity &Client, const char *path=0, const char *cgi=0, const char *app=0)=0
static bool ConnectWithTimeout(int sockfd, const struct sockaddr *clientAddr, size_t clientAddrLen, uint32_t timeout_sec, std::stringstream &errMsg)
XrdNetAddrInfo * addrInfo
Entity's connection details.