00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
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
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
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
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
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
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
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
00149 delete fOucEnv;
00150 delete fShellEnv;
00151 delete fgInstance;
00152
00153 fgInstance = 0;
00154 }