/************************************************************************* * UrBackup - Client/Server backup system * Copyright (C) 2011 Martin Raiber * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . **************************************************************************/ #include "../stringtools.h" #include std::vector getSettingsList(void) { std::vector ret; ret.push_back(L"update_freq_incr"); ret.push_back(L"update_freq_full"); ret.push_back(L"update_freq_image_full"); ret.push_back(L"update_freq_image_incr"); ret.push_back(L"max_file_incr"); ret.push_back(L"min_file_incr"); ret.push_back(L"max_file_full"); ret.push_back(L"min_file_full"); ret.push_back(L"min_image_incr"); ret.push_back(L"max_image_incr"); ret.push_back(L"min_image_full"); ret.push_back(L"max_image_full"); ret.push_back(L"startup_backup_delay"); ret.push_back(L"backup_window"); ret.push_back(L"exclude_files"); ret.push_back(L"computername"); ret.push_back(L"default_dirs"); return ret; } #ifndef CLIENT_ONLY #include "server_settings.h" #include "../Interface/Server.h" std::vector ServerSettings::g_settings; IMutex *ServerSettings::g_mutex=NULL; void ServerSettings::init_mutex(void) { if(g_mutex==NULL) g_mutex=Server->createMutex(); } ServerSettings::ServerSettings(IDatabase *db, int pClientid) : clientid(pClientid) { { IScopedLock lock(g_mutex); g_settings.push_back(this); } settings_default=Server->createDBSettingsReader(db, "settings", "SELECT value FROM settings WHERE key=? AND clientid=0"); if(clientid!=-1) { settings_client=Server->createDBSettingsReader(db, "settings", "SELECT value FROM settings WHERE key=? AND clientid="+nconvert(clientid)); } else { settings_client=NULL; } update(); do_update=false; } ServerSettings::~ServerSettings(void) { Server->destroy(settings_default); if(settings_client!=NULL) { Server->destroy(settings_client); } { IScopedLock lock(g_mutex); for(size_t i=0;idoUpdate(); } } void ServerSettings::update(void) { readSettingsDefault(); if(settings_client!=NULL) { readSettingsClient(); } } void ServerSettings::doUpdate(void) { do_update=true; } SSettings *ServerSettings::getSettings(void) { if(do_update) { do_update=false; update(); } return &settings; } void ServerSettings::readSettingsDefault(void) { settings.update_freq_incr=settings_default->getValue("update_freq_incr", 5*60*60); settings.update_freq_full=settings_default->getValue("update_freq_full", 30*24*60*60); settings.update_freq_image_incr=settings_default->getValue("update_freq_image_incr", 7*24*60*60); settings.update_freq_image_full=settings_default->getValue("update_freq_image_full", 60*24*60*60); settings.max_file_incr=settings_default->getValue("max_file_incr", 100); settings.min_file_incr=settings_default->getValue("min_file_incr", 40); settings.max_file_full=settings_default->getValue("max_file_full", 10); settings.min_file_full=settings_default->getValue("min_file_full", 2); settings.min_image_incr=settings_default->getValue("min_image_incr", 4); settings.max_image_incr=settings_default->getValue("max_image_incr", 30); settings.min_image_full=settings_default->getValue("min_image_full", 2); settings.max_image_full=settings_default->getValue("max_image_full", 5); settings.no_images=(settings_default->getValue("no_images", "false")=="true"); settings.overwrite=false; settings.allow_overwrite=(settings_default->getValue("allow_overwrite", "true")=="true"); settings.backupfolder=settings_default->getValue(L"backupfolder", L"C:\\urbackup"); settings.backupfolder_uncompr=settings_default->getValue(L"backupfolder_uncompr", settings.backupfolder); settings.client_overwrite=true; settings.autoshutdown=false; settings.startup_backup_delay=settings_default->getValue("startup_backup_delay", 0); settings.autoupdate_clients=(settings_default->getValue("autoupdate_clients", "true")=="true"); settings.backup_window=settings_default->getValue("backup_window", "1-7/0-24"); settings.max_active_clients=settings_default->getValue("max_active_clients", 100); settings.max_sim_backups=settings_default->getValue("max_sim_backups", 10); settings.exclude_files=settings_default->getValue(L"exclude_files", L""); settings.default_dirs=settings_default->getValue(L"default_dirs", L""); } void ServerSettings::readSettingsClient(void) { std::string stmp=settings_client->getValue("client_overwrite", ""); if(!stmp.empty()) settings.client_overwrite=(stmp=="true"); if(!settings.client_overwrite) return; int tmp=settings_client->getValue("update_freq_incr", -1); if(tmp!=-1) settings.update_freq_incr=tmp; tmp=settings_client->getValue("update_freq_full", -1); if(tmp!=-1) settings.update_freq_full=tmp; tmp=settings_client->getValue("update_freq_image_incr", -1); if(tmp!=-1) settings.update_freq_image_incr=tmp; tmp=settings_client->getValue("update_freq_image_full", -1); if(tmp!=-1) settings.update_freq_image_full=tmp; tmp=settings_client->getValue("max_file_incr", -1); if(tmp!=-1) settings.max_file_incr=tmp; tmp=settings_client->getValue("min_file_incr", -1); if(tmp!=-1) settings.min_file_incr=tmp; tmp=settings_client->getValue("max_file_full", -1); if(tmp!=-1) settings.max_file_full=tmp; tmp=settings_client->getValue("min_file_full", -1); if(tmp!=-1) settings.min_file_full=tmp; tmp=settings_client->getValue("min_image_incr", -1); if(tmp!=-1) settings.min_image_incr=tmp; tmp=settings_client->getValue("max_image_incr", -1); if(tmp!=-1) settings.max_image_incr=tmp; tmp=settings_client->getValue("min_image_full", -1); if(tmp!=-1) settings.min_image_full=tmp; tmp=settings_client->getValue("max_image_full", -1); if(tmp!=-1) settings.max_image_full=tmp; tmp=settings_client->getValue("startup_backup_delay", -1); if(tmp!=-1) settings.startup_backup_delay=tmp; stmp=settings_client->getValue("backup_window", ""); if(!stmp.empty()) settings.backup_window=stmp; std::wstring swtmp=settings_client->getValue(L"computername", L""); if(!swtmp.empty()) settings.computername=swtmp; swtmp=settings_client->getValue(L"exclude_files", L""); if(!swtmp.empty()) settings.exclude_files=swtmp; swtmp=settings_client->getValue(L"default_dirs", L""); if(!swtmp.empty()) settings.default_dirs=swtmp; stmp=settings_client->getValue("overwrite", ""); if(!stmp.empty()) settings.overwrite=(stmp=="true"); if(!settings.overwrite) return; stmp=settings_client->getValue("allow_overwrite", ""); if(!stmp.empty()) settings.allow_overwrite=(stmp=="true"); } std::vector ServerSettings::getBackupWindow(void) { std::string window=getSettings()->backup_window; std::vector toks; Tokenize(window, toks, ";"); std::vector ret; for(size_t i=0;i dow_toks; Tokenize(f_o, dow_toks, ","); std::vector time_toks; Tokenize(b_o, time_toks, ","); for(size_t l=0;l7 || stop<1 || stop>7) { ret.clear(); return ret; } for(size_t o=0;o7) { ret.clear(); return ret; } for(size_t o=0;o