void setup(cppcms::json::value const &v) { ip=v.get("ip","0.0.0.0"); port=v.get<int>("port"); threads=v.get("threads",booster::thread::hardware_concurrency()); int items = v.get("cache.limit",-1); if(items!=-1){ cache = cppcms::impl::thread_cache_factory(items); } gc=v.get("session.gc",10); std::string stor = v.get("session.storage",""); if(!stor.empty()) { if(stor == "files") { std::string dir = v.get("session.dir",""); #ifdef CPPCMS_WIN_NATIVE sessions.reset(new cppcms::sessions::session_file_storage_factory(dir)); #else sessions.reset(new cppcms::sessions::session_file_storage_factory(dir,threads,1,false)); #endif } else if(stor == "memory") { sessions.reset(new cppcms::sessions::session_memory_storage_factory()); } else if(stor == "external") { std::string so = v.get<std::string>("session.shared_object",""); std::string module = v.get<std::string>("session.module",""); std::string entry_point = v.get<std::string>("session.entry_point","sessions_generator"); if(so.empty() && module.empty()) throw cppcms::cppcms_error( "session.storage=external " "and neither session.shared_object " "nor session.module is defined"); if(!so.empty() && !module.empty()) throw cppcms::cppcms_error( "both session.shared_object " "and session.module are defined"); if(so.empty()) { so = booster::shared_object::name(module); } std::string error; if(!plugin.open(so,error)) { throw cppcms::cppcms_error("sessions_pool: failed to load shared object " + so + ": " + error); } cppcms::sessions::cppcms_session_storage_generator_type f=0; plugin.symbol(f,entry_point); sessions.reset(f(v.find("session.settings"))); } else throw cppcms::cppcms_error("Unknown session.storage:"+stor); } if(!sessions && !cache) { throw cppcms::cppcms_error("Neither cache.limit nor session.storage is defined"); } }
bool DataFile::get(cppcms::json::value& v, const std::string& storage, const std::string& key) { std::stringstream ss; BOOSTER_LOG(debug,__FUNCTION__) << "storage(" << storage << "), key(" << key << ")"; if (storage.empty() || key.empty()) { BOOSTER_LOG(error,__FUNCTION__) << "storage/key are empty"; return false; } if (!tools::data::load(storage, v)) { BOOSTER_LOG(error,__FUNCTION__) << "Can`t load storage"; return false; } v = v.find(key); if (v.is_undefined()) return false; return true; }