/* vim:set ts=4 sw=4 sts=4 et cindent: */ /* * nanodc - The ncurses DC++ client * Copyright © 2005-2006 Markus Lindqvist * * 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 2 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * * Contributor(s): * */ #include #include #include #include #include #include #include #include #include namespace modules { typedef struct Table { const char *name; int num; }; static Table stringSettings[] = { { "speed", dcpp::SettingsManager::UPLOAD_SPEED }, { "description", dcpp::SettingsManager::DESCRIPTION }, { "dl_dir", dcpp::SettingsManager::DOWNLOAD_DIRECTORY }, { "email", dcpp::SettingsManager::EMAIL }, { "ext_ip", dcpp::SettingsManager::EXTERNAL_IP }, { "http_proxy", dcpp::SettingsManager::HTTP_PROXY }, { "log_dir", dcpp::SettingsManager::LOG_DIRECTORY }, { "temp_dir", dcpp::SettingsManager::TEMP_DOWNLOAD_DIRECTORY }, { "bind_address", dcpp::SettingsManager::BIND_ADDRESS }, { "socks_server", dcpp::SettingsManager::SOCKS_SERVER }, { "socks_user", dcpp::SettingsManager::SOCKS_USER }, { "socks_password", dcpp::SettingsManager::SOCKS_PASSWORD }, { 0, 0 } }; static Table intSettings[] = { { "connection", dcpp::SettingsManager::INCOMING_CONNECTIONS }, { "tcp_port", dcpp::SettingsManager::TCP_PORT }, { "share_hidden", dcpp::SettingsManager::SHARE_HIDDEN }, { "auto_search", dcpp::SettingsManager::AUTO_SEARCH }, { "buffer_size", dcpp::SettingsManager::BUFFER_SIZE }, { "down_slots", dcpp::SettingsManager::DOWNLOAD_SLOTS }, { "down_speed", dcpp::SettingsManager::MAX_DOWNLOAD_SPEED }, { "up_speed", dcpp::SettingsManager::MIN_UPLOAD_SPEED }, { "socks_port", dcpp::SettingsManager::SOCKS_PORT }, { "socks_resolve", dcpp::SettingsManager::SOCKS_RESOLVE }, { "keep_lists", dcpp::SettingsManager::KEEP_LISTS }, { "compress_transfers", dcpp::SettingsManager::COMPRESS_TRANSFERS }, { "max_compression", dcpp::SettingsManager::MAX_COMPRESSION }, { "anti_frag", dcpp::SettingsManager::ANTI_FRAG}, { "skip_zero_byte", dcpp::SettingsManager::SKIP_ZERO_BYTE }, { "auto_search_auto_match", dcpp::SettingsManager::AUTO_SEARCH_AUTO_MATCH }, { "max_hash_speed", dcpp::SettingsManager::MAX_HASH_SPEED }, { "add_finished", dcpp::SettingsManager::ADD_FINISHED_INSTANTLY }, { "dont_dl_shared", dcpp::SettingsManager::DONT_DL_ALREADY_SHARED }, { "udp_port", dcpp::SettingsManager::UDP_PORT }, { "minislot_size", dcpp::SettingsManager::SET_MINISLOT_SIZE }, { "max_filelist", dcpp::SettingsManager::MAX_FILELIST_SIZE }, { "socket_read_buffer", dcpp::SettingsManager::SOCKET_IN_BUFFER }, { "socket_write_buffer", dcpp::SettingsManager::SOCKET_OUT_BUFFER }, { "refresh_time", dcpp::SettingsManager::AUTO_REFRESH_TIME }, { 0, 0 } }; class DcSet { public: DcSet() { events::add_listener("command dcset", std::tr1::bind(&DcSet::set, this)); events::add_listener("command nick", std::tr1::bind(&DcSet::set_nick, this)); } /** "command nick" event handler. */ void set_nick() { if(events::args() < 1) { core::Log::get()->log("Not enough parameters given"); return; } dcpp::SettingsManager::getInstance()->set(dcpp::SettingsManager::NICK, events::arg(0)); } /** Find enumeration value corresponding the given setting. * @param table table to search from * @param setting name of the setting * @return enumeration value of the given setting or 0 if the setting doesn't exist */ int find_setting(Table *table, const std::string &setting) { for(int i=0; table[i].name; ++i) { if(table[i].name == setting) return table[i].num; } return 0; } /** "command dcset" event handler. */ void set() { bool set = events::args() > 1; std::string var = events::args() > 0 ? events::arg(0) : ""; std::string val = set ? events::arg(1) : ""; int num = find_setting(stringSettings, var); if(num && set) { dcpp::SettingsManager::getInstance()->set((dcpp::SettingsManager::StrSetting)num, val); } else if(num) { val = dcpp::SettingsManager::getInstance()->get((dcpp::SettingsManager::StrSetting)num); } if(num == 0) { num = find_setting(intSettings, var); if(num && set) dcpp::SettingsManager::getInstance()->set((dcpp::SettingsManager::IntSetting)num, val); else if(num) val = utils::to_string(dcpp::SettingsManager::getInstance()->get((dcpp::SettingsManager::IntSetting)num)); } if(num == 0) { core::Log::get()->log("Unknown setting: " + var); } else { core::Log::get()->log(var + " = %21" + val); } } }; } // namespace modules static modules::DcSet initialize;