XRootD
Loading...
Searching...
No Matches
XrdHttpTpcPMarkManager.hh
Go to the documentation of this file.
1//------------------------------------------------------------------------------
2// This file is part of XrdHttpTpcTPC
3//
4// Copyright (c) 2023 by European Organization for Nuclear Research (CERN)
5// Author: Cedric Caffy <ccaffy@cern.ch>
6// File Date: Oct 2023
7//------------------------------------------------------------------------------
8// XRootD is free software: you can redistribute it and/or modify
9// it under the terms of the GNU Lesser General Public License as published by
10// the Free Software Foundation, either version 3 of the License, or
11// (at your option) any later version.
12//
13// XRootD is distributed in the hope that it will be useful,
14// but WITHOUT ANY WARRANTY; without even the implied warranty of
15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16// GNU General Public License for more details.
17//
18// You should have received a copy of the GNU Lesser General Public License
19// along with XRootD. If not, see <http://www.gnu.org/licenses/>.
20//------------------------------------------------------------------------------
21#ifndef XROOTD_PMARKMANAGER_HH
22#define XROOTD_PMARKMANAGER_HH
23
24#include "XrdNet/XrdNetPMark.hh"
27#include "XrdNet/XrdNetAddr.hh"
29
30#include <map>
31#include <memory>
32#include <queue>
33
34namespace TPC {
35 enum class TpcType;
36}
37
50namespace XrdHttpTpc
51{
53public:
54
62 class SocketInfo {
63 public:
64 SocketInfo(int fd, const struct sockaddr * sockP);
67 };
68
69 PMarkManager(XrdHttpExtReq &req, const TPC::TpcType type);
70
71 PMarkManager(XrdNetPMark *pmark, int sciTag, const TPC::TpcType type);
72
86 bool connect(int fd, const struct sockaddr * sockP, size_t sockPLen, uint32_t timeout_sec, std::stringstream & err);
87
92 bool isEnabled() const;
93
99 void startTransfer();
100
106 void beginPMarks();
107
114 void endPmark(int fd);
115
116 virtual ~PMarkManager() = default;
117private:
126 void addFd(int fd, const struct sockaddr * sockP);
127
128 // The queue of socket information from which we will create the packet marking handles
129 std::queue<SocketInfo> mSocketInfos;
130 // The map of socket FD and packet marking handles
131 std::map<int,std::unique_ptr<XrdNetPMark::Handle>> mPmarkHandles;
132 // The instance of the packet marking functionality
133 XrdNetPMark *mPmark;
134 // SciTag provided by the user; extracted from the request
135 int mSciTag;
136 // Path to the resource
137 const char *mResource;
138 // Is true when startTransfer(...) has been called
139 bool mTransferWillStart;
140 // Is true if this transfer is a HTTP TPC PULL transfer, false otherwise
141 // by default is true
142 TPC::TpcType mTpcType;
143};
144} // namespace XrdHttpTpc
145
146#endif //XROOTD_PMARKMANAGER_HH
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)
virtual ~PMarkManager()=default