XRootD
Loading...
Searching...
No Matches
XrdHttpProtocol.cc File Reference
#include "XrdVersion.hh"
#include "Xrd/XrdBuffer.hh"
#include "Xrd/XrdLink.hh"
#include "XProtocol/XProtocol.hh"
#include "XrdOuc/XrdOucStream.hh"
#include "XrdOuc/XrdOucEnv.hh"
#include "XrdOuc/XrdOucGMap.hh"
#include "XrdSys/XrdSysE2T.hh"
#include "XrdSys/XrdSysTimer.hh"
#include "XrdOuc/XrdOucPinLoader.hh"
#include "XrdHttpTrace.hh"
#include "XrdHttpProtocol.hh"
#include <sys/stat.h>
#include "XrdHttpUtils.hh"
#include "XrdHttpSecXtractor.hh"
#include "XrdHttpExtHandler.hh"
#include "XrdTls/XrdTls.hh"
#include "XrdTls/XrdTlsContext.hh"
#include "XrdOuc/XrdOucUtils.hh"
#include "XrdOuc/XrdOucPrivateUtils.hh"
#include <openssl/err.h>
#include <openssl/ssl.h>
#include <vector>
#include <arpa/inet.h>
#include <sstream>
#include <cctype>
#include <fcntl.h>
#include <algorithm>
Include dependency graph for XrdHttpProtocol.cc:

Go to the source code of this file.

Namespaces

namespace  XrdHttpProtoInfo

Macros

#define HTTPS_ALERT(x, y, z)
#define TRACELINK   lp
#define TRACELINK   Link
#define TRACELINK   Link
#define TS_Xeq(x, m)
#define TS_Xeq3(x, m)
#define XRHTTP_TK_GRACETIME   600

Functions

void * BIO_get_data (BIO *bio)
int BIO_get_flags (BIO *bio)
int BIO_get_init (BIO *bio)
int BIO_get_shutdown (BIO *bio)
void BIO_set_data (BIO *bio, void *ptr)
void BIO_set_flags (BIO *bio, int flags)
void BIO_set_init (BIO *bio, int init)
void BIO_set_shutdown (BIO *bio, int shut)
static int BIO_XrdLink_create (BIO *bio)
static long BIO_XrdLink_ctrl (BIO *bio, int cmd, long num, void *ptr)
static int BIO_XrdLink_destroy (BIO *bio)
static int BIO_XrdLink_read (BIO *bio, char *data, size_t datal, size_t *read)
int BIO_XrdLink_write (BIO *bio, const char *data, size_t datal, size_t *written)
static XrdVERSIONINFODEF (compiledVer, XrdHttpProtocolTest, XrdVNUMBER, XrdVERSION)

Variables

static const int XrdHttpProtoInfo::hsmAuto = -1
static const int XrdHttpProtoInfo::hsmMan = 1
static const int XrdHttpProtoInfo::hsmOff = 0
static const int XrdHttpProtoInfo::hsmOn = 1
int XrdHttpProtoInfo::httpsmode = hsmAuto
bool XrdHttpProtoInfo::httpsspec = false
int XrdHttpProtoInfo::tlsCache = XrdTlsContext::scOff
XrdTlsContextXrdHttpProtoInfo::xrdctx = 0
bool XrdHttpProtoInfo::xrdctxVer = false
const char * XrdHttpSecEntityTident = "http"
XrdSysTrace XrdHttpTrace ("http")

Macro Definition Documentation

◆ HTTPS_ALERT

#define HTTPS_ALERT ( x,
y,
z )
Value:
httpsspec = true;\
if (xrdctx && httpsmode == hsmAuto && (z || xrdctx->x509Verify())) \
eDest.Say("Config http." x " overrides the xrd." y " directive.")
static XrdSysError eDest(0,"crypto_")
static const int hsmAuto
XrdTlsContext * xrdctx

Definition at line 980 of file XrdHttpProtocol.cc.

980#define HTTPS_ALERT(x,y,z) httpsspec = true;\
981 if (xrdctx && httpsmode == hsmAuto && (z || xrdctx->x509Verify())) \
982 eDest.Say("Config http." x " overrides the xrd." y " directive.")

◆ TRACELINK [1/3]

#define TRACELINK   lp

Definition at line 220 of file XrdHttpProtocol.cc.

◆ TRACELINK [2/3]

#define TRACELINK   Link

Definition at line 220 of file XrdHttpProtocol.cc.

◆ TRACELINK [3/3]

#define TRACELINK   Link

Definition at line 220 of file XrdHttpProtocol.cc.

◆ TS_Xeq

#define TS_Xeq ( x,
m )
Value:
(!strcmp(x,var)) GoNo = m(Config)

Definition at line 976 of file XrdHttpProtocol.cc.

◆ TS_Xeq3

#define TS_Xeq3 ( x,
m )
Value:
(!strcmp(x,var)) GoNo = m(Config, extHIVec)

Definition at line 978 of file XrdHttpProtocol.cc.

◆ XRHTTP_TK_GRACETIME

#define XRHTTP_TK_GRACETIME   600

Definition at line 58 of file XrdHttpProtocol.cc.

Referenced by XrdHttpProtocol::Process().

Function Documentation

◆ BIO_get_data()

void * BIO_get_data ( BIO * bio)

Definition at line 161 of file XrdHttpProtocol.cc.

161 {
162 return bio->ptr;
163}

Referenced by BIO_XrdLink_destroy(), BIO_XrdLink_read(), and BIO_XrdLink_write().

Here is the caller graph for this function:

◆ BIO_get_flags()

int BIO_get_flags ( BIO * bio)

Definition at line 168 of file XrdHttpProtocol.cc.

168 {
169 return bio->flags;
170}

◆ BIO_get_init()

int BIO_get_init ( BIO * bio)

Definition at line 175 of file XrdHttpProtocol.cc.

175 {
176 return bio->init;
177}

◆ BIO_get_shutdown()

int BIO_get_shutdown ( BIO * bio)

Definition at line 184 of file XrdHttpProtocol.cc.

184 {
185 return bio->shutdown;
186}

Referenced by BIO_XrdLink_ctrl(), and BIO_XrdLink_destroy().

Here is the caller graph for this function:

◆ BIO_set_data()

void BIO_set_data ( BIO * bio,
void * ptr )

Definition at line 164 of file XrdHttpProtocol.cc.

164 {
165 bio->ptr = ptr;
166}

Referenced by BIO_XrdLink_create().

Here is the caller graph for this function:

◆ BIO_set_flags()

void BIO_set_flags ( BIO * bio,
int flags )

Definition at line 172 of file XrdHttpProtocol.cc.

172 {
173 bio->flags = flags;
174}

Referenced by BIO_XrdLink_create(), BIO_XrdLink_destroy(), and Tobase64().

Here is the caller graph for this function:

◆ BIO_set_init()

void BIO_set_init ( BIO * bio,
int init )

Definition at line 178 of file XrdHttpProtocol.cc.

178 {
179 bio->init = init;
180}

Referenced by BIO_XrdLink_create(), and BIO_XrdLink_destroy().

Here is the caller graph for this function:

◆ BIO_set_shutdown()

void BIO_set_shutdown ( BIO * bio,
int shut )

Definition at line 181 of file XrdHttpProtocol.cc.

181 {
182 bio->shutdown = shut;
183}

Referenced by BIO_XrdLink_ctrl().

Here is the caller graph for this function:

◆ BIO_XrdLink_create()

int BIO_XrdLink_create ( BIO * bio)
static

Definition at line 408 of file XrdHttpProtocol.cc.

409{
410
411
412 BIO_set_init(bio, 0);
413 //BIO_set_next(bio, 0);
414 BIO_set_data(bio, NULL);
415 BIO_set_flags(bio, 0);
416
417#if OPENSSL_VERSION_NUMBER < 0x10100000L
418
419 bio->num = 0;
420
421#endif
422
423 return 1;
424}
void BIO_set_init(BIO *bio, int init)
void BIO_set_data(BIO *bio, void *ptr)
void BIO_set_flags(BIO *bio, int flags)

References BIO_set_data(), BIO_set_flags(), and BIO_set_init().

Here is the call graph for this function:

◆ BIO_XrdLink_ctrl()

long BIO_XrdLink_ctrl ( BIO * bio,
int cmd,
long num,
void * ptr )
static

Definition at line 441 of file XrdHttpProtocol.cc.

442{
443 long ret = 1;
444 switch (cmd) {
445 case BIO_CTRL_GET_CLOSE:
446 ret = BIO_get_shutdown(bio);
447 break;
448 case BIO_CTRL_SET_CLOSE:
449 BIO_set_shutdown(bio, (int)num);
450 break;
451 case BIO_CTRL_DUP:
452 case BIO_CTRL_FLUSH:
453 ret = 1;
454 break;
455 default:
456 ret = 0;
457 break;
458 }
459 return ret;
460}
int BIO_get_shutdown(BIO *bio)
void BIO_set_shutdown(BIO *bio, int shut)

References BIO_get_shutdown(), and BIO_set_shutdown().

Here is the call graph for this function:

◆ BIO_XrdLink_destroy()

int BIO_XrdLink_destroy ( BIO * bio)
static

Definition at line 427 of file XrdHttpProtocol.cc.

428{
429 if (bio == NULL) return 0;
430 if (BIO_get_shutdown(bio)) {
431 if (BIO_get_data(bio)) {
432 static_cast<XrdLink*>(BIO_get_data(bio))->Close();
433 }
434 BIO_set_init(bio, 0);
435 BIO_set_flags(bio, 0);
436 }
437 return 1;
438}
void * BIO_get_data(BIO *bio)
CloseImpl< false > Close(Ctx< File > file, uint16_t timeout=0)
Factory for creating CloseImpl objects.

References BIO_get_data(), BIO_get_shutdown(), BIO_set_flags(), and BIO_set_init().

Here is the call graph for this function:

◆ BIO_XrdLink_read()

int BIO_XrdLink_read ( BIO * bio,
char * data,
size_t datal,
size_t * read )
static

Definition at line 367 of file XrdHttpProtocol.cc.

368{
369 if (!data || !bio) {
370 *read = 0;
371 return 0;
372 }
373
374 errno = 0;
375
376 XrdLink *lp = static_cast<XrdLink *>(BIO_get_data(bio));
377 int ret = lp->Recv(data, datal);
378 BIO_clear_retry_flags(bio);
379 if (ret <= 0) {
380 *read = 0;
381 if ((errno == EINTR) || (errno == EINPROGRESS) || (errno == EAGAIN) || (errno == EWOULDBLOCK))
382 BIO_set_retry_read(bio);
383 return ret;
384 }
385 *read = ret;
386}
#define read(a, b, c)
Definition XrdPosix.hh:82

References BIO_get_data(), read, and XrdLink::Recv().

Here is the call graph for this function:

◆ BIO_XrdLink_write()

int BIO_XrdLink_write ( BIO * bio,
const char * data,
size_t datal,
size_t * written )

Definition at line 324 of file XrdHttpProtocol.cc.

325{
326 if (!data || !bio) {
327 *written = 0;
328 return 0;
329 }
330
331 XrdLink *lp=static_cast<XrdLink *>(BIO_get_data(bio));
332
333 errno = 0;
334 int ret = lp->Send(data, datal);
335 BIO_clear_retry_flags(bio);
336 if (ret <= 0) {
337 *written = 0;
338 if ((errno == EINTR) || (errno == EINPROGRESS) || (errno == EAGAIN) || (errno == EWOULDBLOCK))
339 BIO_set_retry_write(bio);
340 return ret;
341 }
342 *written = ret;
343 return 1;
344}

References BIO_get_data(), and XrdLink::Send().

Here is the call graph for this function:

◆ XrdVERSIONINFODEF()

XrdVERSIONINFODEF ( compiledVer ,
XrdHttpProtocolTest ,
XrdVNUMBER ,
XrdVERSION  )
static

Variable Documentation

◆ XrdHttpSecEntityTident

const char* XrdHttpSecEntityTident = "http"

Definition at line 66 of file XrdHttpProtocol.cc.

◆ XrdHttpTrace

XrdSysTrace XrdHttpTrace("http") ( "http" )