XRootD
XrdTpcPMarkManager.hh
Go to the documentation of this file.
1 //------------------------------------------------------------------------------
2 // This file is part of XrdTpcTPC
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"
25 #include "XrdSec/XrdSecEntity.hh"
26 #include "XrdNet/XrdNetAddrInfo.hh"
27 #include "XrdNet/XrdNetAddr.hh"
29 
30 #include <map>
31 #include <memory>
32 #include <queue>
33 
46 namespace XrdTpc
47 {
48 class PMarkManager {
49 public:
50 
58  class SocketInfo {
59  public:
60  SocketInfo(int fd, const struct sockaddr * sockP);
63  };
64 
66 
80  bool connect(int fd, const struct sockaddr * sockP, size_t sockPLen, uint32_t timeout_sec, std::stringstream & err);
81 
86  bool isEnabled() const;
87 
93  void startTransfer();
94 
100  void beginPMarks();
101 
108  void endPmark(int fd);
109 
110  virtual ~PMarkManager() = default;
111 private:
120  void addFd(int fd, const struct sockaddr * sockP);
121 
122  // The queue of socket information from which we will create the packet marking handles
123  std::queue<SocketInfo> mSocketInfos;
124  // The map of socket FD and packet marking handles
125  std::map<int,std::unique_ptr<XrdNetPMark::Handle>> mPmarkHandles;
126  // The instance of the packet marking functionality
127  XrdNetPMark * mPmark;
128  // The XrdHttpTPC request information
129  XrdHttpExtReq & mReq;
130  // Is true when startTransfer(...) has been called
131  bool mTransferWillStart;
132 };
133 } // namespace XrdTpc
134 
135 #endif //XROOTD_PMARKMANAGER_HH
SocketInfo(int fd, const struct sockaddr *sockP)
virtual ~PMarkManager()=default
bool connect(int fd, const struct sockaddr *sockP, size_t sockPLen, uint32_t timeout_sec, std::stringstream &err)
PMarkManager(XrdHttpExtReq &req)