XrdHttpProtocol Class Reference

#include <XrdHttpProtocol.hh>

Inheritance diagram for XrdHttpProtocol:
Inheritance graph
[legend]
Collaboration diagram for XrdHttpProtocol:
Collaboration graph
[legend]

List of all members.

Classes

struct  StaticPreloadInfo
struct  XrdHttpExtHandlerInfo

Public Member Functions

void DoIt ()
 Override from the base class.
XrdProtocolMatch (XrdLink *lp)
 Tells if the oustanding bytes on the socket match this protocol implementation.
int Process (XrdLink *lp)
 Process data incoming from the socket.
void Recycle (XrdLink *lp, int consec, const char *reason)
 Recycle this instance.
int Stats (char *buff, int blen, int do_sync=0)
 Get activity stats.
int doStat (char *fname)
 Perform a Stat request.
int doChksum (const XrdOucString &fname)
 Perform a checksum request.
 XrdHttpProtocol (const XrdHttpProtocol &)
 Ctor, dtors and copy ctor.
XrdHttpProtocol operator= (const XrdHttpProtocol &rhs)
 XrdHttpProtocol (bool imhttps)
 ~XrdHttpProtocol ()
bool isHTTPS ()
 called via https

Static Public Member Functions

static int Configure (char *parms, XrdProtocol_Config *pi)
 Read and apply the configuration.
static void PeriodicUpdate ()
 Handle periodic refresh of the CRLs.

Public Attributes

XrdObject< XrdHttpProtocolProtLink
XrdSecEntity SecEntity
 Authentication area.

Static Public Attributes

static XrdObjectQ
< XrdHttpProtocol
ProtStack

Protected Attributes

XrdLinkLink
 The link we are bound to.
char * Addr_str
XrdXrootd::BridgeBridge
 The Bridge that we use to exercise the xrootd internals.
XrdHttpReq CurrentReq

Static Protected Attributes

static XrdSchedulerSched
static XrdBuffManagerBPool
static XrdSysError eDest
static XrdSecServiceCIA
static XrdOucGMapservGMap
 The instance of the DN mapper. Created only when a valid path is given.
static int hailWait
 Timeout for reading the handshake.
static int readWait
 Timeout for reading data.
static int Port
 Our port.
static char * Port_str
 Our port, as a string.
static int Window
 Windowsize.
static char * sslcert
 OpenSSL stuff.
static char * sslkey
static char * sslcadir
static char * sslcafile
static char * sslcipherfilter
static char * gridmap
 Gridmap file location. The same used by XrdSecGsi.
static bool isRequiredGridmap
static char * secretkey
 The key used to calculate the url hashes.
static int sslverifydepth
 Depth of verification of a certificate chain.
static bool isdesthttps
 True if the redirections must be towards https targets.
static char * listredir
 Url to redirect to in the case a listing is requested.
static bool listdeny
 If true, any form of listing is denied.
static bool selfhttps2http
 If client is HTTPS, self-redirect with HTTP+token.
static bool embeddedstatic
 If true, use the embedded css and icons.
static char * staticredir
static XrdOucHash
< StaticPreloadInfo > * 
staticpreload
static kXR_int32 myRole
 Our role.
static std::map< std::string,
std::string > 
hdr2cgimap
 Rules that turn HTTP headers to cgi tokens in the URL, for internal comsumption.
static int m_bio_type
 Type identifier for our custom BIO objects.
static BIO_METHOD * m_bio_method
 C-style vptr table for our custom BIO objects.

Private Member Functions

int StartSimpleResp (int code, const char *desc, const char *header_to_add, long long bodylen, bool keepalive)
 Start a response back to the client.
int SendData (const char *body, int bodylen)
 Send some generic data to the client.
void Cleanup ()
 Deallocate resources, in order to reutilize an object of this class.
void Reset ()
 Reset values, counters, in order to reutilize an object of this class.
int HandleAuthentication (XrdLink *lp)
int GetVOMSData (XrdLink *lp)
int HandleGridMap (XrdLink *lp)
int getDataOneShot (int blen, bool wait=false)
int BuffAvailable ()
 How many bytes still fit into the buffer in a contiguous way.
int BuffUsed ()
 How many bytes in the buffer.
int BuffFree ()
 How many bytes free in the buffer.
void BuffConsume (int blen)
 Consume some bytes from the buffer.
int BuffgetData (int blen, char **data, bool wait)
 Get a pointer, valid for up to blen bytes from the buffer. Returns the validity.
int BuffgetLine (XrdOucString &dest)
 Copy a full line of text from the buffer into dest. Zero if no line can be found in the buffer.
int SendSimpleResp (int code, const char *desc, const char *header_to_add, const char *body, long long bodylen, bool keepalive)
 Sends a basic response. If the length is < 0 then it is calculated internally.
int StartChunkedResp (int code, const char *desc, const char *header_to_add, bool keepalive)
 Starts a chunked response; body of request is sent over multiple parts using the SendChunkResp.
int ChunkResp (const char *body, long long bodylen)
 Send a (potentially partial) body in a chunked response; invoking with NULL body.
char * GetClientIPStr ()
 Gets a string that represents the IP address of the client. Must be freed.

Static Private Member Functions

static int InitSecurity ()
 Initialization of the ssl security things.
static X509_STORE * PrepareStore ()
 Generate a new cert store.
static BIO * CreateBIO (XrdLink *lp)
 Create a new BIO object from an XrdLink. Returns NULL on failure.
static int Config (const char *fn, XrdOucEnv *myEnv)
 Functions related to the configuration.
static int xtrace (XrdOucStream &Config)
static int xsslcert (XrdOucStream &Config)
static int xsslkey (XrdOucStream &Config)
static int xsecxtractor (XrdOucStream &Config)
static int xexthandler (XrdOucStream &Config, const char *ConfigFN, XrdOucEnv *myEnv)
static int xsslcadir (XrdOucStream &Config)
static int xsslcipherfilter (XrdOucStream &Config)
static int xdesthttps (XrdOucStream &Config)
static int xlistdeny (XrdOucStream &Config)
static int xlistredir (XrdOucStream &Config)
static int xselfhttps2http (XrdOucStream &Config)
static int xembeddedstatic (XrdOucStream &Config)
static int xstaticredir (XrdOucStream &Config)
static int xstaticpreload (XrdOucStream &Config)
static int xgmap (XrdOucStream &Config)
static int xsslcafile (XrdOucStream &Config)
static int xsslverifydepth (XrdOucStream &Config)
static int xsecretkey (XrdOucStream &Config)
static int xheader2cgi (XrdOucStream &Config)
static int LoadSecXtractor (XrdSysError *eDest, const char *libName, const char *libParms)
static int LoadExtHandler (XrdSysError *eDest, const char *libName, const char *configFN, const char *libParms, XrdOucEnv *myEnv, const char *instName)
static XrdHttpExtHandlerFindMatchingExtHandler (const XrdHttpReq &)
static bool ExtHandlerLoaded (const char *handlername)

Private Attributes

int(XrdHttpProtocol::* Resume )()
 The resume function.
XrdBuffermyBuff
 Circular Buffer used to read the request.
char * myBuffStart
 The circular pointers.
char * myBuffEnd
XrdOucString tmpline
 A nice var to hold the current header line.
bool DoingLogin
 Tells that we are just logging in.
long ResumeBytes
 Tells that we are just waiting to have N bytes in the buffer.
SSL * ssl
 Private SSL context.
BIO * sbio
 Private SSL bio.
bool ishttps
 Tells if the client is https.
bool ssldone

Static Private Attributes

static bool isRequiredXtractor
static XrdHttpSecXtractorsecxtractor
static struct
XrdHttpProtocol::XrdHttpExtHandlerInfo 
exthandler [MAX_XRDHTTPEXTHANDLERS]
static int exthandlercnt
static SSL_CTX * sslctx
 Global, static SSL context.
static X509_STORE * verify_store
 Current X509_STORE and associated locks.
static XrdSysRWLock x509_store_lock
static BIO * sslbio_err
 bio to print SSL errors
static XrdCryptoFactorymyCryptoFactory

Friends

class XrdHttpReq
class XrdHttpExtReq

Constructor & Destructor Documentation

XrdHttpProtocol::XrdHttpProtocol ( const XrdHttpProtocol  ) 

Ctor, dtors and copy ctor.

XrdHttpProtocol::XrdHttpProtocol ( bool  imhttps  ) 
XrdHttpProtocol::~XrdHttpProtocol (  )  [inline]

References Cleanup().


Member Function Documentation

int XrdHttpProtocol::BuffAvailable (  )  [private]

How many bytes still fit into the buffer in a contiguous way.

void XrdHttpProtocol::BuffConsume ( int  blen  )  [private]

Consume some bytes from the buffer.

int XrdHttpProtocol::BuffFree (  )  [private]

How many bytes free in the buffer.

int XrdHttpProtocol::BuffgetData ( int  blen,
char **  data,
bool  wait 
) [private]

Get a pointer, valid for up to blen bytes from the buffer. Returns the validity.

int XrdHttpProtocol::BuffgetLine ( XrdOucString dest  )  [private]

Copy a full line of text from the buffer into dest. Zero if no line can be found in the buffer.

int XrdHttpProtocol::BuffUsed (  )  [private]

How many bytes in the buffer.

int XrdHttpProtocol::ChunkResp ( const char *  body,
long long  bodylen 
) [private]

Send a (potentially partial) body in a chunked response; invoking with NULL body.

void XrdHttpProtocol::Cleanup (  )  [private]

Deallocate resources, in order to reutilize an object of this class.

Referenced by ~XrdHttpProtocol().

static int XrdHttpProtocol::Config ( const char *  fn,
XrdOucEnv myEnv 
) [static, private]

Functions related to the configuration.

static int XrdHttpProtocol::Configure ( char *  parms,
XrdProtocol_Config pi 
) [static]

Read and apply the configuration.

static BIO* XrdHttpProtocol::CreateBIO ( XrdLink lp  )  [static, private]

Create a new BIO object from an XrdLink. Returns NULL on failure.

int XrdHttpProtocol::doChksum ( const XrdOucString fname  ) 

Perform a checksum request.

void XrdHttpProtocol::DoIt (  )  [inline, virtual]

Override from the base class.

Implements XrdJob.

References Resume.

int XrdHttpProtocol::doStat ( char *  fname  ) 

Perform a Stat request.

static bool XrdHttpProtocol::ExtHandlerLoaded ( const char *  handlername  )  [static, private]
static XrdHttpExtHandler* XrdHttpProtocol::FindMatchingExtHandler ( const XrdHttpReq  )  [static, private]
char* XrdHttpProtocol::GetClientIPStr (  )  [private]

Gets a string that represents the IP address of the client. Must be freed.

int XrdHttpProtocol::getDataOneShot ( int  blen,
bool  wait = false 
) [private]

Get up to blen bytes from the connection. Put them into mybuff. This primitive, for the way it is used, is not supposed to block

int XrdHttpProtocol::GetVOMSData ( XrdLink lp  )  [private]

After the SSL handshake, retrieve the VOMS info and the various stuff that is needed for autorization

int XrdHttpProtocol::HandleAuthentication ( XrdLink lp  )  [private]

Handle authentication of the client

Returns:
0 if successful, otherwise error
int XrdHttpProtocol::HandleGridMap ( XrdLink lp  )  [private]
static int XrdHttpProtocol::InitSecurity (  )  [static, private]

Initialization of the ssl security things.

bool XrdHttpProtocol::isHTTPS (  )  [inline]

called via https

References ishttps.

static int XrdHttpProtocol::LoadExtHandler ( XrdSysError eDest,
const char *  libName,
const char *  configFN,
const char *  libParms,
XrdOucEnv myEnv,
const char *  instName 
) [static, private]
static int XrdHttpProtocol::LoadSecXtractor ( XrdSysError eDest,
const char *  libName,
const char *  libParms 
) [static, private]
XrdProtocol* XrdHttpProtocol::Match ( XrdLink lp  )  [virtual]

Tells if the oustanding bytes on the socket match this protocol implementation.

Implements XrdProtocol.

XrdHttpProtocol XrdHttpProtocol::operator= ( const XrdHttpProtocol rhs  ) 
static void XrdHttpProtocol::PeriodicUpdate (  )  [static]

Handle periodic refresh of the CRLs.

static X509_STORE* XrdHttpProtocol::PrepareStore (  )  [static, private]

Generate a new cert store.

int XrdHttpProtocol::Process ( XrdLink lp  )  [virtual]

Process data incoming from the socket.

Implements XrdProtocol.

void XrdHttpProtocol::Recycle ( XrdLink lp,
int  consec,
const char *  reason 
) [virtual]

Recycle this instance.

Implements XrdProtocol.

void XrdHttpProtocol::Reset (  )  [private]

Reset values, counters, in order to reutilize an object of this class.

int XrdHttpProtocol::SendData ( const char *  body,
int  bodylen 
) [private]

Send some generic data to the client.

int XrdHttpProtocol::SendSimpleResp ( int  code,
const char *  desc,
const char *  header_to_add,
const char *  body,
long long  bodylen,
bool  keepalive 
) [private]

Sends a basic response. If the length is < 0 then it is calculated internally.

int XrdHttpProtocol::StartChunkedResp ( int  code,
const char *  desc,
const char *  header_to_add,
bool  keepalive 
) [private]

Starts a chunked response; body of request is sent over multiple parts using the SendChunkResp.

int XrdHttpProtocol::StartSimpleResp ( int  code,
const char *  desc,
const char *  header_to_add,
long long  bodylen,
bool  keepalive 
) [private]

Start a response back to the client.

int XrdHttpProtocol::Stats ( char *  buff,
int  blen,
int  do_sync = 0 
) [virtual]

Get activity stats.

Implements XrdProtocol.

static int XrdHttpProtocol::xdesthttps ( XrdOucStream Config  )  [static, private]
static int XrdHttpProtocol::xembeddedstatic ( XrdOucStream Config  )  [static, private]
static int XrdHttpProtocol::xexthandler ( XrdOucStream Config,
const char *  ConfigFN,
XrdOucEnv myEnv 
) [static, private]
static int XrdHttpProtocol::xgmap ( XrdOucStream Config  )  [static, private]
static int XrdHttpProtocol::xheader2cgi ( XrdOucStream Config  )  [static, private]
static int XrdHttpProtocol::xlistdeny ( XrdOucStream Config  )  [static, private]
static int XrdHttpProtocol::xlistredir ( XrdOucStream Config  )  [static, private]
static int XrdHttpProtocol::xsecretkey ( XrdOucStream Config  )  [static, private]
static int XrdHttpProtocol::xsecxtractor ( XrdOucStream Config  )  [static, private]
static int XrdHttpProtocol::xselfhttps2http ( XrdOucStream Config  )  [static, private]
static int XrdHttpProtocol::xsslcadir ( XrdOucStream Config  )  [static, private]
static int XrdHttpProtocol::xsslcafile ( XrdOucStream Config  )  [static, private]
static int XrdHttpProtocol::xsslcert ( XrdOucStream Config  )  [static, private]
static int XrdHttpProtocol::xsslcipherfilter ( XrdOucStream Config  )  [static, private]
static int XrdHttpProtocol::xsslkey ( XrdOucStream Config  )  [static, private]
static int XrdHttpProtocol::xsslverifydepth ( XrdOucStream Config  )  [static, private]
static int XrdHttpProtocol::xstaticpreload ( XrdOucStream Config  )  [static, private]
static int XrdHttpProtocol::xstaticredir ( XrdOucStream Config  )  [static, private]
static int XrdHttpProtocol::xtrace ( XrdOucStream Config  )  [static, private]

Friends And Related Function Documentation

friend class XrdHttpExtReq [friend]
friend class XrdHttpReq [friend]

Member Data Documentation

char* XrdHttpProtocol::Addr_str [protected]

Our IP address, as a string. Please remember that this may not be unique for a given machine, hence we need to keep it here and recompute ad every new connection.

XrdBuffManager* XrdHttpProtocol::BPool [static, protected]

The Bridge that we use to exercise the xrootd internals.

XrdSecService* XrdHttpProtocol::CIA [static, protected]

Area for coordinating request and responses to/from the bridge This also can process HTTP/DAV stuff

Tells that we are just logging in.

XrdSysError XrdHttpProtocol::eDest [static, protected]
bool XrdHttpProtocol::embeddedstatic [static, protected]

If true, use the embedded css and icons.

struct XrdHttpProtocol::XrdHttpExtHandlerInfo XrdHttpProtocol::exthandler[MAX_XRDHTTPEXTHANDLERS] [static, private]
int XrdHttpProtocol::exthandlercnt [static, private]
char* XrdHttpProtocol::gridmap [static, protected]

Gridmap file location. The same used by XrdSecGsi.

int XrdHttpProtocol::hailWait [static, protected]

Timeout for reading the handshake.

std::map< std::string, std::string > XrdHttpProtocol::hdr2cgimap [static, protected]

Rules that turn HTTP headers to cgi tokens in the URL, for internal comsumption.

bool XrdHttpProtocol::isdesthttps [static, protected]

True if the redirections must be towards https targets.

bool XrdHttpProtocol::ishttps [private]

Tells if the client is https.

Referenced by isHTTPS().

bool XrdHttpProtocol::isRequiredGridmap [static, protected]
bool XrdHttpProtocol::isRequiredXtractor [static, private]

The link we are bound to.

bool XrdHttpProtocol::listdeny [static, protected]

If true, any form of listing is denied.

char* XrdHttpProtocol::listredir [static, protected]

Url to redirect to in the case a listing is requested.

BIO_METHOD* XrdHttpProtocol::m_bio_method [static, protected]

C-style vptr table for our custom BIO objects.

int XrdHttpProtocol::m_bio_type [static, protected]

Type identifier for our custom BIO objects.

Circular Buffer used to read the request.

char * XrdHttpProtocol::myBuffEnd [private]

The circular pointers.

kXR_int32 XrdHttpProtocol::myRole [static, protected]

Our role.

int XrdHttpProtocol::Port [static, protected]

Our port.

char* XrdHttpProtocol::Port_str [static, protected]

Our port, as a string.

int XrdHttpProtocol::readWait [static, protected]

Timeout for reading data.

int(XrdHttpProtocol::* XrdHttpProtocol::Resume)() [private]

The resume function.

Referenced by DoIt().

Tells that we are just waiting to have N bytes in the buffer.

BIO* XrdHttpProtocol::sbio [private]

Private SSL bio.

XrdScheduler* XrdHttpProtocol::Sched [static, protected]

Authentication area.

char* XrdHttpProtocol::secretkey [static, protected]

The key used to calculate the url hashes.

bool XrdHttpProtocol::selfhttps2http [static, protected]

If client is HTTPS, self-redirect with HTTP+token.

XrdOucGMap* XrdHttpProtocol::servGMap [static, protected]

The instance of the DN mapper. Created only when a valid path is given.

SSL* XrdHttpProtocol::ssl [private]

Private SSL context.

BIO* XrdHttpProtocol::sslbio_err [static, private]

bio to print SSL errors

char * XrdHttpProtocol::sslcadir [static, protected]
char * XrdHttpProtocol::sslcafile [static, protected]
char* XrdHttpProtocol::sslcert [static, protected]

OpenSSL stuff.

char * XrdHttpProtocol::sslcipherfilter [static, protected]
SSL_CTX* XrdHttpProtocol::sslctx [static, private]

Global, static SSL context.

bool XrdHttpProtocol::ssldone [private]

Flag to tell if the https handshake has finished, in the case of an https connection being established

char * XrdHttpProtocol::sslkey [static, protected]
int XrdHttpProtocol::sslverifydepth [static, protected]

Depth of verification of a certificate chain.

char* XrdHttpProtocol::staticredir [static, protected]

A nice var to hold the current header line.

X509_STORE* XrdHttpProtocol::verify_store [static, private]

Current X509_STORE and associated locks.

int XrdHttpProtocol::Window [static, protected]

Windowsize.


The documentation for this class was generated from the following file:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

Generated on 4 Sep 2020 for xrootd by  doxygen 1.6.1