XrdClientEnv.cc

Go to the documentation of this file.
00001 //////////////////////////////////////////////////////////////////////////
00002 //                                                                      //
00003 // XrdClientEnv                                                         // 
00004 //                                                                      //
00005 // Author: Fabrizio Furano (INFN Padova, 2004)                          //
00006 // Adapted from TXNetFile (root.cern.ch) originally done by             //
00007 //  Alvise Dorigo, Fabrizio Furano                                      //
00008 //          INFN Padova, 2003                                           //
00009 //                                                                      //
00010 // Singleton used to handle the default parameter values                //
00011 //                                                                      //
00012 //////////////////////////////////////////////////////////////////////////
00013 
00014 #include "XrdSys/XrdSysHeaders.hh"
00015 #include "XrdClient/XrdClientConst.hh"
00016 #include "XrdClient/XrdClientEnv.hh"
00017 #include <string>
00018 #include <algorithm>
00019 #include <ctype.h>
00020 
00021 XrdClientEnv *XrdClientEnv::fgInstance = 0;
00022 
00023 XrdClientEnv *XrdClientEnv::Instance() {
00024    // Create unique instance
00025 
00026    if (!fgInstance) {
00027       fgInstance = new XrdClientEnv;
00028       if (!fgInstance) {
00029          std::cerr << "XrdClientEnv::Instance: fatal - couldn't create XrdClientEnv" << std::endl;
00030          abort();
00031       }
00032    }
00033    return fgInstance;
00034 }
00035 
00036 //_____________________________________________________________________________
00037 XrdClientEnv::XrdClientEnv() {
00038    // Constructor
00039    fOucEnv   = new XrdOucEnv();
00040    fShellEnv = new XrdOucEnv();
00041 
00042    PutInt(NAME_CONNECTTIMEOUT, DFLT_CONNECTTIMEOUT);
00043    PutInt(NAME_REQUESTTIMEOUT, DFLT_REQUESTTIMEOUT);
00044    PutInt(NAME_MAXREDIRECTCOUNT, DFLT_MAXREDIRECTCOUNT);
00045    PutInt(NAME_DEBUG, DFLT_DEBUG);
00046    PutInt(NAME_RECONNECTWAIT, DFLT_RECONNECTWAIT);
00047    PutInt(NAME_REDIRCNTTIMEOUT, DFLT_REDIRCNTTIMEOUT);
00048    PutInt(NAME_FIRSTCONNECTMAXCNT, DFLT_FIRSTCONNECTMAXCNT);
00049    PutInt(NAME_READCACHESIZE, DFLT_READCACHESIZE);
00050    PutInt(NAME_READCACHEBLKREMPOLICY, DFLT_READCACHEBLKREMPOLICY);
00051    PutInt(NAME_READAHEADSIZE, DFLT_READAHEADSIZE);
00052    PutInt(NAME_MULTISTREAMCNT, DFLT_MULTISTREAMCNT);
00053    PutInt(NAME_DFLTTCPWINDOWSIZE, DFLT_DFLTTCPWINDOWSIZE);
00054    PutInt(NAME_DATASERVERCONN_TTL, DFLT_DATASERVERCONN_TTL);
00055    PutInt(NAME_LBSERVERCONN_TTL, DFLT_LBSERVERCONN_TTL);
00056    PutInt(NAME_PURGEWRITTENBLOCKS, DFLT_PURGEWRITTENBLOCKS);
00057    PutInt(NAME_READAHEADSTRATEGY, DFLT_READAHEADSTRATEGY);
00058    PutInt(NAME_READTRIMBLKSZ, DFLT_READTRIMBLKSZ);
00059    PutInt(NAME_TRANSACTIONTIMEOUT, DFLT_TRANSACTIONTIMEOUT);
00060    PutInt(NAME_REMUSEDCACHEBLKS, DFLT_REMUSEDCACHEBLKS);
00061 
00062    ImportInt( NAME_CONNECTTIMEOUT );
00063    ImportInt( NAME_REQUESTTIMEOUT );
00064    ImportInt( NAME_MAXREDIRECTCOUNT );
00065    ImportInt( NAME_DEBUG );
00066    ImportInt( NAME_RECONNECTWAIT );
00067    ImportInt( NAME_REDIRCNTTIMEOUT );
00068    ImportInt( NAME_FIRSTCONNECTMAXCNT );
00069    ImportInt( NAME_READCACHESIZE );
00070    ImportInt( NAME_READCACHEBLKREMPOLICY );
00071    ImportInt( NAME_READAHEADSIZE );
00072    ImportInt( NAME_MULTISTREAMCNT );
00073    ImportInt( NAME_DFLTTCPWINDOWSIZE );
00074    ImportInt( NAME_DATASERVERCONN_TTL );
00075    ImportInt( NAME_LBSERVERCONN_TTL );
00076    ImportInt( NAME_PURGEWRITTENBLOCKS );
00077    ImportInt( NAME_READAHEADSTRATEGY );
00078    ImportInt( NAME_READTRIMBLKSZ );
00079    ImportInt( NAME_TRANSACTIONTIMEOUT );
00080    ImportInt( NAME_REMUSEDCACHEBLKS );
00081 }
00082 
00083 //------------------------------------------------------------------------------
00084 // Import a string variable from the shell environment
00085 //------------------------------------------------------------------------------
00086 bool XrdClientEnv::ImportStr( const char *varname )
00087 {
00088   std::string name = "XRD_";
00089   name += varname;
00090   std::transform( name.begin(), name.end(), name.begin(), ::toupper );
00091 
00092   char *value;
00093   if( !XrdOucEnv::Import( name.c_str(), value ) )
00094      return false;
00095 
00096   fShellEnv->Put( varname, value );
00097   return true;
00098 }
00099 
00100 //------------------------------------------------------------------------------
00101 // Import an int variable from the shell environment
00102 //------------------------------------------------------------------------------
00103 bool XrdClientEnv::ImportInt( const char *varname )
00104 {
00105   std::string name = "XRD_";
00106   name += varname;
00107   std::transform( name.begin(), name.end(), name.begin(), ::toupper );
00108 
00109   long value;
00110   if( !XrdOucEnv::Import( name.c_str(), value ) )
00111      return false;
00112 
00113   fShellEnv->PutInt( varname, value );
00114   return true;
00115 }
00116 
00117 //------------------------------------------------------------------------------
00118 // Get a string from the shell environment
00119 //------------------------------------------------------------------------------
00120 const char *XrdClientEnv::ShellGet(const char *varname)
00121 {
00122   XrdSysMutexHelper m( fMutex );
00123   const char *res = fShellEnv->Get( varname );
00124   if( res )
00125     return res;
00126 
00127   res = fOucEnv->Get( varname );
00128   return res;
00129 }
00130 
00131 //------------------------------------------------------------------------------
00132 // Get an integer from the shell environment
00133 //------------------------------------------------------------------------------
00134 long XrdClientEnv::ShellGetInt(const char *varname)
00135 {
00136   XrdSysMutexHelper m( fMutex );
00137   const char *res = fShellEnv->Get( varname );
00138 
00139   if( res )
00140     return fShellEnv->GetInt( varname );
00141 
00142   return fOucEnv->GetInt( varname );
00143 }
00144 
00145 
00146 //_____________________________________________________________________________
00147 XrdClientEnv::~XrdClientEnv() {
00148    // Destructor
00149    delete fOucEnv;
00150    delete fShellEnv;
00151    delete fgInstance;
00152 
00153    fgInstance = 0;
00154 }

Generated on Tue Jul 5 14:46:18 2011 for ROOT_528-00b_version by  doxygen 1.5.1