SNetStorageRPC::SNetStorageRPC(const TConfig& config, TNetStorageFlags default_flags) : m_DefaultFlags(default_flags), m_Config(config) #ifdef NCBI_GRID_XSITE_CONN_SUPPORT , m_AllowXSiteConnections(false) #endif { m_RequestNumber.Set(0); CJsonNode hello(MkStdRequest("HELLO")); hello.SetString("Client", m_Config.client_name); hello.SetString("Service", m_Config.service); if (!m_Config.metadata.empty()) hello.SetString("Metadata", m_Config.metadata); {{ CMutexGuard guard(CNcbiApplication::GetInstanceMutex()); CNcbiApplication* app = CNcbiApplication::Instance(); if (app != NULL) hello.SetString("Application", app->GetProgramExecutablePath()); }} hello.SetString("ProtocolVersion", NST_PROTOCOL_VERSION); m_Service = new SNetServiceImpl("NetStorageAPI", m_Config.client_name, new CNetStorageServerListener(hello, m_Config.err_mode)); m_Service->Init(this, m_Config.service, NULL, kEmptyStr, s_NetStorageConfigSections); }
static void x_SetupUserAgent(SConnNetInfo* net_info) { CNcbiApplication* theApp = CNcbiApplication::Instance(); if (theApp) { string user_agent("User-Agent: "); user_agent += theApp->GetProgramDisplayName(); ConnNetInfo_ExtendUserHeader(net_info, user_agent.c_str()); } }
void SNetStorage::SConfig::Validate(const string& init_string) { SNetStorage::SLimits::Check<SNetStorage::SLimits::SNamespace>(app_domain); if (client_name.empty()) { CNcbiApplication* app = CNcbiApplication::Instance(); if (app != NULL) { string path; CDirEntry::SplitPath(app->GetProgramExecutablePath(), &path, &client_name); if (NStr::EndsWith(path, CDirEntry::GetPathSeparator())) path.erase(path.length() - 1); string parent_dir; CDirEntry::SplitPath(path, NULL, &parent_dir); if (!parent_dir.empty()) { client_name += '-'; client_name += parent_dir; } } } if (client_name.empty()) { NCBI_THROW_FMT(CNetStorageException, eAuthError, "Client name is required."); } switch (default_storage) { case eUndefined: default_storage = !service.empty() ? eNetStorage : !nc_service.empty() ? eNetCache : eNoCreate; break; case eNetStorage: if (service.empty()) { NCBI_THROW_FMT(CNetStorageException, eInvalidArg, init_string << ": 'nst=' parameter is required " "when 'default_storage=nst'"); } break; case eNetCache: if (nc_service.empty()) { NCBI_THROW_FMT(CNetStorageException, eInvalidArg, init_string << ": 'nc=' parameter is required " "when 'default_storage=nc'"); } break; default: /* eNoCreate */ break; } }
void CVDBMgr::x_Init(void) { if ( rc_t rc = VDBManagerMakeRead(x_InitPtr(), 0) ) { *x_InitPtr() = 0; NCBI_THROW2(CSraException, eInitFailed, "Cannot open VDBManager", rc); } uint32_t sdk_ver; if ( rc_t rc = VDBManagerVersion(*this, &sdk_ver) ) { NCBI_THROW2(CSraException, eInitFailed, "Cannot get VDBManager version", rc); } CKNSManager kns_mgr(CVFSManager(*this)); CNcbiOstrstream str; CNcbiApplication* app = CNcbiApplication::Instance(); if ( app ) { str << app->GetAppName() << ": " << app->GetVersion().Print() << "; "; } #if NCBI_PACKAGE str << "Package: " << NCBI_PACKAGE_NAME << ' ' << NCBI_PACKAGE_VERSION << "; "; #endif str << "C++ "; #ifdef NCBI_PRODUCTION_VER str << NCBI_PRODUCTION_VER << "/"; #endif #ifdef NCBI_DEVELOPMENT_VER str << NCBI_DEVELOPMENT_VER; #endif string prefix = CNcbiOstrstreamToString(str); KNSManagerSetUserAgent(kns_mgr, "%s; SRA Toolkit %V", prefix.c_str(), sdk_ver); // redirect VDB log to C++ Toolkit if ( s_GetDiagHandler() ) { KLogInit(); KLogLevelSet(klogDebug); KLogLibHandlerSet(VDBLogWriter, 0); } if ( app ) { string host = app->GetConfig().GetString("CONN", "HTTP_PROXY_HOST", kEmptyStr); int port = app->GetConfig().GetInt("CONN", "HTTP_PROXY_PORT", 0); if ( !host.empty() && port != 0 ) { if ( rc_t rc = KNSManagerSetHTTPProxyPath(kns_mgr, "%s:%d", host.c_str(), port) ) { NCBI_THROW2(CSraException, eInitFailed, "Cannot set KNSManager proxy parameters", rc); } KNSManagerSetHTTPProxyEnabled(kns_mgr, true); } } }
static void s_MacArgMunging(CNcbiApplication& app, int* argcPtr, const char* const** argvPtr, const string& exepath) { // Sometimes on Mac there will be an argument -psn which // will be followed by the Process Serial Number, e.g. -psn_0_13107201 // this is in situations where the application could have no other // arguments like when it is double clicked. // This will mess up argument processing later, so get rid of it. static const char* s_ArgMacPsn = "-psn_"; if (*argcPtr == 2 && NStr::strncmp((*argvPtr)[1], s_ArgMacPsn, strlen(s_ArgMacPsn)) == 0) { --*argcPtr; } if (*argcPtr > 1) return; // Have no arguments from the operating system -- so use the '.args' file // Open the args file. string exedir; CDir::SplitPath(exepath, &exedir); string args_fname = exedir + app.GetProgramDisplayName() + ".args"; CNcbiIfstream in(args_fname.c_str()); if ( !in.good() ) { ERR_POST_X(2, Info << "Mac arguments file not found: " << args_fname); return; } vector<string> v; // remember or fake the executable name. if (*argcPtr > 0) { v.push_back((*argvPtr)[0]); // preserve the original argv[0]. } else { v.push_back(exepath); } // grab the rest of the arguments from the file. // arguments are separated by whitespace. Can be on // more than one line. string arg; while (in >> arg) { v.push_back(arg); } // stash them away in the standard argc and argv places. *argcPtr = v.size(); char** argv = new char*[v.size()]; int c = 0; ITERATE(vector<string>, vp, v) { argv[c++] = strdup(vp->c_str()); }
string NCBI_XNCBI_EXPORT g_GetConfigString(const char* section, const char* variable, const char* env_var_name, const char* default_value) { if ( section && *section ) { CNcbiApplication* app = CNcbiApplication::Instance(); if ( app && app->HasLoadedConfig() ) { const string& value = app->GetConfig().Get(section, variable); if ( !value.empty() ) { #ifdef _DEBUG if ( s_CanDumpConfig() ) { DUMP_CONFIG(15, "NCBI_CONFIG: str variable" " [" << section << "]" " " << variable << " = \"" << value << "\"" " from registry"); } #endif return value; } } } const TXChar* value = s_GetEnv(section, variable, env_var_name); if ( value ) { #ifdef _DEBUG if ( s_CanDumpConfig() ) { if ( section && *section ) { DUMP_CONFIG(16, "NCBI_CONFIG: str variable" " [" << section << "]" " " << variable << " = \"" << value << "\"" " from env var " << s_GetEnvVarName(section, variable, env_var_name)); } else { DUMP_CONFIG(17, "NCBI_CONFIG: str variable" " " << variable << " = \"" << value << "\"" " from env var"); } } #endif return _T_STDSTRING(value); } const char* dvalue = default_value? default_value: ""; #ifdef _DEBUG if ( s_CanDumpConfig() ) { if ( section && *section ) { DUMP_CONFIG(18, "NCBI_CONFIG: str variable" " [" << section << "]" " " << variable << " = \"" << dvalue << "\"" " by default"); } else { DUMP_CONFIG(19, "NCBI_CONFIG: str variable" " " << variable << " = \"" << dvalue << "\"" " by default"); } } #endif return dvalue; }
double NCBI_XNCBI_EXPORT g_GetConfigDouble(const char* section, const char* variable, const char* env_var_name, double default_value) { if ( section && *section ) { CNcbiApplication* app = CNcbiApplication::Instance(); if ( app && app->HasLoadedConfig() ) { const string& str = app->GetConfig().Get(section, variable); if ( !str.empty() ) { try { double value = NStr::StringToDouble(str, NStr::fDecimalPosixOrLocal | NStr::fAllowLeadingSpaces | NStr::fAllowTrailingSpaces); #ifdef _DEBUG if ( s_CanDumpConfig() ) { DUMP_CONFIG(10, "NCBI_CONFIG: double variable" " [" << section << "]" " " << variable << " = " << value << " from registry"); } #endif return value; } catch ( ... ) { // ignored } } } } const TXChar* str = s_GetEnv(section, variable, env_var_name); if ( str && *str ) { try { double value = NStr::StringToDouble(_T_CSTRING(str), NStr::fDecimalPosixOrLocal | NStr::fAllowLeadingSpaces | NStr::fAllowTrailingSpaces); #ifdef _DEBUG if ( s_CanDumpConfig() ) { if ( section && *section ) { DUMP_CONFIG(11, "NCBI_CONFIG: double variable" " [" << section << "]" " " << variable << " = " << value << " from env var " << s_GetEnvVarName(section, variable, env_var_name)); } else { DUMP_CONFIG(12, "NCBI_CONFIG: double variable " " " << variable << " = " << value << " from env var"); } } #endif return value; } catch ( ... ) { // ignored } } double value = default_value; #ifdef _DEBUG if ( s_CanDumpConfig() ) { if ( section && *section ) { DUMP_CONFIG(13, "NCBI_CONFIG: double variable" " [" << section << "]" " " << variable << " = " << value << " by default"); } else { DUMP_CONFIG(14, "NCBI_CONFIG: int variable" " " << variable << " = " << value << " by default"); } } #endif return value; }
int NCBI_XNCBI_EXPORT g_GetConfigInt(const char* section, const char* variable, const char* env_var_name, int default_value) { if ( section && *section ) { CNcbiApplication* app = CNcbiApplication::Instance(); if ( app && app->HasLoadedConfig() ) { const string& str = app->GetConfig().Get(section, variable); if ( !str.empty() ) { try { int value = NStr::StringToInt(str); #ifdef _DEBUG if ( s_CanDumpConfig() ) { DUMP_CONFIG(10, "NCBI_CONFIG: int variable" " [" << section << "]" " " << variable << " = " << value << " from registry"); } #endif return value; } catch ( ... ) { // ignored } } } } const TXChar* str = s_GetEnv(section, variable, env_var_name); if ( str && *str ) { try { int value = NStr::StringToInt(_T_CSTRING(str)); #ifdef _DEBUG if ( s_CanDumpConfig() ) { if ( section && *section ) { DUMP_CONFIG(11, "NCBI_CONFIG: int variable" " [" << section << "]" " " << variable << " = " << value << " from env var " << s_GetEnvVarName(section, variable, env_var_name)); } else { DUMP_CONFIG(12, "NCBI_CONFIG: int variable " " " << variable << " = " << value << " from env var"); } } #endif return value; } catch ( ... ) { // ignored } } int value = default_value; #ifdef _DEBUG if ( s_CanDumpConfig() ) { if ( section && *section ) { DUMP_CONFIG(13, "NCBI_CONFIG: int variable" " [" << section << "]" " " << variable << " = " << value << " by default"); } else { DUMP_CONFIG(14, "NCBI_CONFIG: int variable" " " << variable << " = " << value << " by default"); } } #endif return value; }
bool NCBI_XNCBI_EXPORT g_GetConfigFlag(const char* section, const char* variable, const char* env_var_name, bool default_value) { #ifdef _DEBUG bool is_config_dump = NStr::Equal(section, CONFIG_DUMP_SECTION) && NStr::Equal(variable, CONFIG_DUMP_VARIABLE); #endif if ( section && *section ) { CNcbiApplication* app = CNcbiApplication::Instance(); if ( app && app->HasLoadedConfig() ) { const string& str = app->GetConfig().Get(section, variable); if ( !str.empty() ) { try { bool value = s_StringToBool(str); #ifdef _DEBUG if ( is_config_dump ) { s_ConfigDump = value; } if ( s_CanDumpConfig() ) { DUMP_CONFIG(5, "NCBI_CONFIG: bool variable" " [" << section << "]" " " << variable << " = " << value << " from registry"); } #endif return value; } catch ( ... ) { // ignored } } } } const TXChar* str = s_GetEnv(section, variable, env_var_name); if ( str && *str ) { try { bool value = s_StringToBool(_T_CSTRING(str)); #ifdef _DEBUG if ( is_config_dump ) { s_ConfigDump = value; } if ( s_CanDumpConfig() ) { if ( section && *section ) { DUMP_CONFIG(6, "NCBI_CONFIG: bool variable" " [" << section << "]" " " << variable << " = " << value << " from env var " << s_GetEnvVarName(section, variable, env_var_name)); } else { DUMP_CONFIG(7, "NCBI_CONFIG: bool variable " " " << variable << " = " << value << " from env var"); } } #endif return value; } catch ( ... ) { // ignored } } bool value = default_value; #ifdef _DEBUG if ( is_config_dump ) { s_ConfigDump = value; } if ( s_CanDumpConfig() ) { if ( section && *section ) { DUMP_CONFIG(8, "NCBI_CONFIG: bool variable" " [" << section << "]" " " << variable << " = " << value << " by default"); } else { DUMP_CONFIG(9, "NCBI_CONFIG: bool variable" " " << variable << " = " << value << " by default"); } } #endif return value; }