XRootD
XrdHttpExtHandler.hh
Go to the documentation of this file.
1 //------------------------------------------------------------------------------
2 // This file is part of XrdHTTP: A pragmatic implementation of the
3 // HTTP/WebDAV protocol for the Xrootd framework
4 //
5 // Copyright (c) 2017 by European Organization for Nuclear Research (CERN)
6 // Author: Fabrizio Furano <furano@cern.ch>
7 // File Date: May 2017
8 //------------------------------------------------------------------------------
9 // XRootD is free software: you can redistribute it and/or modify
10 // it under the terms of the GNU Lesser General Public License as published by
11 // the Free Software Foundation, either version 3 of the License, or
12 // (at your option) any later version.
13 //
14 // XRootD is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 // GNU General Public License for more details.
18 //
19 // You should have received a copy of the GNU Lesser General Public License
20 // along with XRootD. If not, see <http://www.gnu.org/licenses/>.
21 //------------------------------------------------------------------------------
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 #ifndef __XRDHTTPEXTHANDLER_H__
34 #define __XRDHTTPEXTHANDLER_H__
35 
36 #include <map>
37 #include <string>
38 
39 #include "XrdNet/XrdNetPMark.hh"
40 
41 class XrdLink;
42 class XrdSecEntity;
43 class XrdHttpReq;
44 class XrdHttpProtocol;
45 
46 // This class summarizes the content of a request, for consumption by an external plugin
48 private:
49  XrdHttpProtocol *prot;
50 
51 public:
53 
54  std::string verb, resource;
55  std::map<std::string, std::string> &headers;
56 
58  long long length;
59 
61 
62  bool tpcForwardCreds = false;
63 
64  int mSciTag;
65 
66  // Get full client identifier
67  void GetClientID(std::string &clid);
68 
69  // A view of the XrdSecEntity associated with the request.
70  const XrdSecEntity &GetSecEntity() const;
71 
73  int BuffgetData(int blen, char **data, bool wait);
74 
76  int SendSimpleResp(int code, const char *desc, const char *header_to_add, const char *body, long long bodylen);
77 
79  // API.
80  int StartChunkedResp(int code, const char *desc, const char *header_to_add);
81 
83  // indicates that this is the last chunk in the response.
84  int ChunkResp(const char *body, long long bodylen);
85 };
86 
87 
91 
92 public:
93 
95  // e.g. applying a prefix matching scheme or whatever
96  virtual bool MatchesPath(const char *verb, const char *path) = 0;
97 
101  virtual int ProcessReq(XrdHttpExtReq &) = 0;
102 
104  virtual int Init(const char *cfgfile) = 0;
105 
106  //------------------------------------------------------------------------------
108  //------------------------------------------------------------------------------
109 
111 
112  //------------------------------------------------------------------------------
114  //------------------------------------------------------------------------------
115 
116  virtual ~XrdHttpExtHandler() {}
117 };
118 
119 /******************************************************************************/
120 /* X r d H t t p G e t E x t H a n d l e r */
121 /******************************************************************************/
122 
123 //------------------------------------------------------------------------------
142 
143 //------------------------------------------------------------------------------
144 
145 class XrdSysError;
146 class XrdOucEnv;
147 
148 #define XrdHttpExtHandlerArgs XrdSysError *eDest, \
149  const char *confg, \
150  const char *parms, \
151  XrdOucEnv *myEnv
152 
154 
155 //------------------------------------------------------------------------------
161 //------------------------------------------------------------------------------
162 
168 #endif
XrdHttpExtHandler * XrdHttpGetExtHandler(XrdHttpExtHandlerArgs)
#define XrdHttpExtHandlerArgs
virtual bool MatchesPath(const char *verb, const char *path)=0
Tells if the incoming path is recognized as one of the paths that have to be processed.
XrdHttpExtHandler()
Constructor.
virtual int ProcessReq(XrdHttpExtReq &)=0
virtual ~XrdHttpExtHandler()
Destructor.
virtual int Init(const char *cfgfile)=0
Initializes the external request handler.
std::string clientdn
std::string clienthost
int ChunkResp(const char *body, long long bodylen)
Send a (potentially partial) body in a chunked response; invoking with NULL body.
XrdHttpExtReq(XrdHttpReq *req, XrdHttpProtocol *pr)
void GetClientID(std::string &clid)
std::map< std::string, std::string > & headers
std::string clientgroups
std::string resource
std::string verb
int StartChunkedResp(int code, const char *desc, const char *header_to_add)
Starts a chunked response; body of request is sent over multiple parts using the SendChunkResp.
XrdNetPMark * pmark
int BuffgetData(int blen, char **data, bool wait)
Get a pointer to data read from the client, valid for up to blen bytes from the buffer....
const XrdSecEntity & GetSecEntity() const
int SendSimpleResp(int code, const char *desc, const char *header_to_add, const char *body, long long bodylen)
Sends a basic response. If the length is < 0 then it is calculated internally.