#ifndef __XRDCKSASSIST_HH__
#define __XRDCKSASSIST_HH__
/******************************************************************************/
/* */
/* X r d C k s A s s i s t . h h */
/* */
/* (c) 2017 by the Board of Trustees of the Leland Stanford, Jr., University */
/* All Rights Reserved */
/* 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
#include
#include
//------------------------------------------------------------------------------
//! This header file defines linkages to various XRootD checksum assistants.
//! The functions described here are located in libXrdUtils.so.
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//! Generate the extended attribute data for a particular checksum that can
//! be used to set the corresponding checksum attribute variable.
//!
//! @param cstype A null terminated string holding the checksum type
//! (e.g. "adler32", "md5", "sha2", etc).
//! @param csval A null terminated string holding the corresonding
//! checksum value. This must be an ASCII hex representation
//! of the value and must be of appropriate length.
//! @param mtime The subject file's modification time.
//!
//! @return A vector of bytes that should be usedto set the attribute variable.
//! If the size of the vector is zero, then the supplied parameters
//! were incorrect and valid data cannot be generated; errno is:
//! EINVAL - csval length is incorrect for checksum type or
//! contains a non-hex digit.
//! ENAMETOOLONG - checksum type is too long.
//! EOVERFLOW - csval could not be represented in the data.
//------------------------------------------------------------------------------
extern std::vector XrdCksAttrData(const char *cstype,
const char *csval, time_t mtime);
//------------------------------------------------------------------------------
//! Generate the extended attribute variable name for a particular checksum.
//!
//! @param cstype A null terminated string holding the checksum type
//! (e.g. "adler32", "md5", "sha2", etc).
//! @param nspfx Is the namespace prefix to add to the variable name.
//! By default no prefix os used. Certain platforms and/or
//! filesystems require that user attributes start with a
//! particular prefix (e.g. Linux requires 'user.') others
//! do not. If your are going to use the variable name to get
//! or set an attribute you should specify any required
//! prefix. If specified and it does not end with a dot, a
//! dot is automatically added to the nspfx.
//!
//! @return A string holding the variable name that should be used to get or
//! set the extended attribute holding the correspnding checksum. If
//! a null string is returned, the variable could not be generated;
//! errno is set to:
//! ENAMETOOLONG - checksum type is too long.
//------------------------------------------------------------------------------
extern std::string XrdCksAttrName(const char *cstype, const char *nspfx="");
//------------------------------------------------------------------------------
//! Extract th checksum value from checksum extended attribute data.
//!
//! @param cstype A null terminated string holding the checksum type
//! (e.g. "adler32", "md5", "sha2", etc).
//! @param csbuff A pointer to a buffer hlding the checksum data.
//! @param csblen The length of the checksum data (i.e. the length of the
//! retrieved extended attribute).
//!
//! @return A string holding the ASCII hexstring correspoding to the checksum
//! value. If a null string is returned then the checksum data was
//! invalid or did not correspond to the specified checksum type, the
//! errno is set to:
//! EINVAL - the checksum length in csbuff is incorrect.
//! EMSGSIZE - csblen was not the expected value.
//! ENOENT - the specified cstype did not match the one in csbuff.
//! EOVERFLOW - checksum value could not be generated from csbuff.
//------------------------------------------------------------------------------
extern std::string XrdCksAttrValue(const char *cstype,
const char *csbuff, int csblen);
#endif