#ifndef __SFS_GPFILE_H__
#define __SFS_GPFILE_H__
/******************************************************************************/
/* */
/* X r d S f s G P F i l e . h h */
/* */
/* (c) 2019 by the Board of Trustees of the Leland Stanford, Jr., University */
/* Produced by Andrew Hanushevsky for Stanford University under contract */
/* DE-AC02-76-SFO0515 with the Department of Energy */
/* */
/* This file is part of the XRootD software suite. */
/* */
/* XRootD is free software: you can redistribute it and/or modify it under */
/* the terms of the GNU Lesser General Public License as published by the */
/* Free Software Foundation, either version 3 of the License, or (at your */
/* option) any later version. */
/* */
/* XRootD is distributed in the hope that it will be useful, but WITHOUT */
/* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */
/* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public */
/* License for more details. */
/* */
/* You should have received a copy of the GNU Lesser General Public License */
/* along with XRootD in a file called COPYING.LESSER (LGPL license) and file */
/* COPYING (GPL license). If not, see . */
/* */
/* The copyright holder's institutional names and contributor's names may not */
/* be used to endorse or promote products derived from this software without */
/* specific prior written permission of the institution or contributor. */
/******************************************************************************/
#include
class XrdSfsGPInfo;
class XrdSfsGPFile
{
public:
uint16_t opts; //!< Options as defined below
static const uint16_t delegate = 0x0008; //!< Use delegation
static const uint16_t keepErr = 0x0004; //!< Keep file after request failure
static const uint16_t mkPath = 0x0002; //!< Create destination path.
static const uint16_t replace = 0x0001; //!< Replace existing file
static const uint16_t useTLS = 0x0080; //!< Use TLS for the data path
static const uint16_t verCKS = 0x0040; //!< Verify checksum after transfer
uint16_t rsvd1;
uint8_t pingsec; //!< Seconds between calls to Update() (0 -> no calls)
uint8_t sources; //!< Number of parallel sources (0 -> default)
uint8_t streams; //!< Number of parallel streams (0 -> default)
uint8_t rsvd2;
union {
XrdSfsGPInfo *gpfInfo; //!< Can be used by the implementation
uint32_t gpfID; //!< Can be used by the implementation
};
const char *src; //!< get: full URL, put: local path
const char *dst; //!< get: local path, put: full URL
const char *lclCGI; //!< The CGI, if any, for the local path.
const char *csType; //!< Checksum type
const char *csVal; //!< Checksum value as a hex string
const char *tident; //!< Trace identifier
void *rsvd3; //!< Reserved field
//-----------------------------------------------------------------------------
//! Indicate the request has finished.
//!
//! @param rc - the final return code. A value of zero indicates success.
//! A non-zero value should be the errno value corresponding
//! to the reason for the failure.
//! @param emsg - An optional message further explaining the reason for the
//! failure (highly recommended).
//!
//! No value is returned but this object is deleted and no references
//! to the object should exist after return is made.
//-----------------------------------------------------------------------------
virtual void Finished(int rc, const char *emsg=0) = 0;
//-----------------------------------------------------------------------------
//! Provide request status. Only recursive locks should be held, if any.
//!
//! @param state - One of the enums listed indicating the request state.
//! @param cpct - Percentage (0 to 100) of completion.
//! @param bytes - Number of bytes processed in the indicated state.
//-----------------------------------------------------------------------------
enum GPFState {gpfPend = 0, //!< Request is pending
gpfXfr, //!< Request is transfering data
gpfCSV //!< Request is doing checksum validation
};
virtual void Status(GPFState state, uint32_t cpct, uint64_t bytes) = 0;
//-----------------------------------------------------------------------------
//! Constructor and Destructor
//-----------------------------------------------------------------------------
XrdSfsGPFile(const char *tid="")
: opts(0), rsvd1(0),
pingsec(0), sources(0), streams(0), rsvd2(0),
gpfInfo(0), src(0), dst(0), lclCGI(0),
csType(0), csVal(0), tident(tid), rsvd3(0) {}
virtual ~XrdSfsGPFile() {}
};
#endif