#ifndef XRDCPWORKLST_HH #define XRDCPWORKLST_HH /******************************************************************************/ /* */ /* X r d C p W o r k L s t . h h */ /* */ /* Author: Fabrizio Furano (INFN Padova, 2004) */ /* */ /* 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. */ /******************************************************************************/ ////////////////////////////////////////////////////////////////////////// // // // A class implementing a list of cp to do for XrdCp // // // ////////////////////////////////////////////////////////////////////////// #include #include "XrdClient/XrdClientAdmin.hh" #include "XrdClient/XrdClient.hh" #include class XrdSysDir; const char *ServerError(XrdClient *cli); void PrintLastServerError(XrdClient *cli); bool PedanticOpen4Write(XrdClient *cli, kXR_unt16 mode, kXR_unt16 options); //------------------------------------------------------------------------------ // Check if the opaque data provides the file size information and add it // if needed //------------------------------------------------------------------------------ XrdOucString AddSizeHint( const char *dst, off_t size ); class XrdCpWorkLst { vecString fWorkList; uint64_t pSourceSize; // set if the source URL refers to a file int srcPathLen; int fWorkIt; XrdClientAdmin *xrda_src, *xrda_dst; XrdOucString fSrc, fDest; bool fDestIsDir, fSrcIsDir; public: XrdCpWorkLst(); ~XrdCpWorkLst(); // Sets the source path for the file copy int SetSrc(XrdClient **srccli, XrdOucString url, XrdOucString urlopaquedata, bool do_recurse, int newCP=0); // Sets the destination of the file copy int SetDest(XrdClient **xrddest, const char *url, const char *urlopaquedata, kXR_unt16 xrdopenflags, int newCP=0); inline void GetDest(XrdOucString &dest, bool& isdir) { dest = fDest; isdir = fDestIsDir; } inline void GetSrc(XrdOucString &src, bool& isdir) { src = fSrc; isdir = fSrcIsDir; } // Actually builds the worklist int BuildWorkList_xrd(XrdOucString url, XrdOucString opaquedata); int BuildWorkList_loc(XrdSysDir *dir, XrdOucString pat); bool GetCpJob(XrdOucString &src, XrdOucString &dest); }; #endif