#ifndef _XRC_URLSET_H
#define _XRC_URLSET_H
/******************************************************************************/
/* */
/* X r d C l i e n t U r l S e t . h h */
/* */
/* Author: Fabrizio Furano (INFN Padova, 2004) */
/* Adapted from TXNetFile (root.cern.ch) originally done by */
/* Alvise Dorigo, Fabrizio Furano, INFN Padova, 2003 */
/* Revised by G. Ganis, CERN, June 2005 */
/* */
/* 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 container for multiple urls to be resolved through DNS aliases //
// //
//////////////////////////////////////////////////////////////////////////
#include "XrdClient/XrdClientConst.hh"
#include "XrdClient/XrdClientVector.hh"
#include "XrdOuc/XrdOucString.hh"
using namespace std;
class XrdClientUrlInfo;
typedef XrdClientVector UrlArray;
//
// Manages a set of XrdClientUrlInfo objects and provides a set
// of utilities to resolve multiple addresses from the dns
// and to pick urls sequentially and randomly an url
//
class XrdClientUrlSet {
private:
UrlArray fUrlArray;
UrlArray fTmpUrlArray;
XrdOucString fPathName;
bool fIsValid;
unsigned int fSeed;
void CheckPort(int &port);
void ConvertDNSAlias(UrlArray& urls, XrdOucString proto,
XrdOucString host, XrdOucString file);
double GetRandom(int seed = 0);
public:
XrdClientUrlSet(XrdOucString urls);
~XrdClientUrlSet();
// Returns the final resolved list of servers
XrdOucString GetServers();
// Gets the subsequent Url, the one after the last given
XrdClientUrlInfo *GetNextUrl();
// From the remaining urls we pick a random one. Without reinsert.
// i.e. while there are not considered urls, never pick an already seen one
XrdClientUrlInfo *GetARandomUrl();
// Given a seed, use that to pick an url
// the effect will be that, given the same list, the same seed will pick the same url
XrdClientUrlInfo *GetARandomUrl(unsigned int seed);
void Rewind();
void ShowUrls();
void EraseUrl(XrdClientUrlInfo *url);
// Returns the number of urls
int Size() { return fUrlArray.GetSize(); }
// Returns the pathfile extracted from the CTOR's argument
XrdOucString GetFile() { return fPathName; }
bool IsValid() { return fIsValid; } // Spot malformations
};
#endif