#ifndef XRD_CLIENT_ADMIN_H #define XRD_CLIENT_ADMIN_H /******************************************************************************/ /* */ /* X r d C l i e n t A d m i n . h h */ /* */ /* Author: Fabrizio Furano (INFN Padova, 2004) */ /* Adapted from TXNetFile (root.cern.ch) originally done by */ /* Alvise Dorigo, Fabrizio Furano */ /* INFN Padova, 2003 */ /* */ /* 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 UNIX reference admin client for xrootd. // // // ////////////////////////////////////////////////////////////////////////// #include "XrdClient/XrdClientAbs.hh" #include "XrdClient/XrdClientVector.hh" #include "XrdOuc/XrdOucHash.hh" #include "XrdOuc/XrdOucString.hh" typedef XrdClientVector vecString; typedef XrdClientVector vecBool; void joinStrings(XrdOucString &buf, vecString &vs, int startidx = 0, int endidx=-1); struct XrdClientLocate_Info { enum { kXrdcLocNone, kXrdcLocDataServer, kXrdcLocDataServerPending, kXrdcLocManager, kXrdcLocManagerPending } Infotype; bool CanWrite; kXR_char Location[256]; }; class XrdClientAdmin : public XrdClientAbs { XrdOucString fInitialUrl; bool DirList_low(const char *dir, vecString &entries); int LocalLocate(kXR_char *path, XrdClientVector &res, bool writable, int opts, bool all = false); protected: bool CanRedirOnError() { // We deny any redir on error return false; } // To be called after a redirection bool OpenFileWhenRedirected(char *, bool &); public: XrdClientAdmin(const char *url); virtual ~XrdClientAdmin(); bool Connect(); // Some administration functions, see the protocol specs for details bool SysStatX(const char *paths_list, kXR_char *binInfo); bool Stat(const char *fname, long &id, long long &size, long &flags, long &modtime); bool Stat_vfs(const char *fname, int &rwservers, long long &rwfree, int &rwutil, int &stagingservers, long long &stagingfree, int &stagingutil); bool DirList(const char *dir, vecString &entries, bool askallservers=false); struct DirListInfo { XrdOucString fullpath; XrdOucString host; long long size; long id; long flags; long modtime; }; bool DirList(const char *dir, XrdClientVector &dirlistinfo, bool askallservers=false); bool ExistFiles(vecString&, vecBool&); bool ExistDirs(vecString&, vecBool&); // Compute an estimation of the available free space in the given cachefs partition // The estimation can be fooled if multiple servers mount the same network storage bool GetSpaceInfo(const char *logicalname, long long &totspace, long long &totfree, long long &totused, long long &largestchunk); long GetChecksum(kXR_char *path, kXR_char **chksum); // Quickly jump to the former redirector. Useful after having been redirected. void GoBackToRedirector(); bool IsFileOnline(vecString&, vecBool&); bool Mv(const char *fileSrc, const char *fileDest); bool Mkdir(const char *dir, int user, int group, int other); bool Chmod(const char *file, int user, int group, int other); bool Rm(const char *file); bool Rmdir(const char *path); bool Protocol(kXR_int32 &proto, kXR_int32 &kind); bool Prepare(vecString vs, kXR_char opts, kXR_char prty); bool Prepare(const char *paths, kXR_char opts, kXR_char prty); // Gives ONE location of a particular file... if present // if writable is true only a writable location is searched // but, if no writable locations are found, the result is negative but may // propose a non writable one as a bonus bool Locate(kXR_char *path, XrdClientLocate_Info &resp, bool writable=false); // Gives ALL the locations of a particular file... if present bool Locate(kXR_char *path, XrdClientVector &hosts) { return Locate( path, hosts, 0 ); } bool Locate(kXR_char *path, XrdClientVector &hosts, int opts ); bool Truncate(const char *path, long long newsize); UnsolRespProcResult ProcessUnsolicitedMsg(XrdClientUnsolMsgSender *sender, XrdClientMessage *unsolmsg); }; #endif