From 0ec82c104ded01a44ed36d20e25220fa41887fd0 Mon Sep 17 00:00:00 2001 From: Florent Le Coz Date: Fri, 27 Feb 2015 12:18:34 +0100 Subject: Add louloulibs as a submodule --- louloulibs | 1 + 1 file changed, 1 insertion(+) create mode 160000 louloulibs (limited to 'louloulibs/config/config.cpp') diff --git a/louloulibs b/louloulibs new file mode 160000 index 0000000..b6af145 --- /dev/null +++ b/louloulibs @@ -0,0 +1 @@ +Subproject commit b6af145bfb9561a1bb1ecb940f50163c5ce4dbbb -- cgit v1.2.3 From e6569a1090be063f34624474f0d4578f37a169ae Mon Sep 17 00:00:00 2001 From: Florent Le Coz Date: Fri, 27 Feb 2015 12:40:50 +0100 Subject: Only use include_directory() if the directory path is defined --- louloulibs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'louloulibs/config/config.cpp') diff --git a/louloulibs b/louloulibs index b6af145..d6a3724 160000 --- a/louloulibs +++ b/louloulibs @@ -1 +1 @@ -Subproject commit b6af145bfb9561a1bb1ecb940f50163c5ce4dbbb +Subproject commit d6a3724c6a0127a49a9e7adb1090bb7438c8d0f2 -- cgit v1.2.3 From e4c696861d86b62305ca0ec8136e79f147837b94 Mon Sep 17 00:00:00 2001 From: Florent Le Coz Date: Mon, 2 Mar 2015 11:06:40 +0100 Subject: Update louloulibs to last revision --- louloulibs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'louloulibs/config/config.cpp') diff --git a/louloulibs b/louloulibs index d6a3724..5f3a1bb 160000 --- a/louloulibs +++ b/louloulibs @@ -1 +1 @@ -Subproject commit d6a3724c6a0127a49a9e7adb1090bb7438c8d0f2 +Subproject commit 5f3a1bb54df4de5f332282bbdf791bdce07c71c4 -- cgit v1.2.3 From d88ec5fdf10ecb168355bc38dc81d83ff59a0234 Mon Sep 17 00:00:00 2001 From: Florent Le Coz Date: Mon, 2 Mar 2015 11:32:18 +0100 Subject: Update to latest louloulibs revision --- louloulibs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'louloulibs/config/config.cpp') diff --git a/louloulibs b/louloulibs index 5f3a1bb..d0b8695 160000 --- a/louloulibs +++ b/louloulibs @@ -1 +1 @@ -Subproject commit 5f3a1bb54df4de5f332282bbdf791bdce07c71c4 +Subproject commit d0b8695ceb13e0c6d72821fe605de36e494afcdf -- cgit v1.2.3 From c243fea660723eba00b65e639b76d0783cb59064 Mon Sep 17 00:00:00 2001 From: Florent Le Coz Date: Wed, 4 Mar 2015 05:56:44 +0100 Subject: Update to latest louloulibs revision --- louloulibs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'louloulibs/config/config.cpp') diff --git a/louloulibs b/louloulibs index d0b8695..99757a4 160000 --- a/louloulibs +++ b/louloulibs @@ -1 +1 @@ -Subproject commit d0b8695ceb13e0c6d72821fe605de36e494afcdf +Subproject commit 99757a44b49619ff59cae9e6d983a3b7c20c56bf -- cgit v1.2.3 From ad0465b32051e224f6a234f3ed36494905e59cbf Mon Sep 17 00:00:00 2001 From: Florent Le Coz Date: Mon, 20 Apr 2015 20:33:02 +0200 Subject: Decode incoming JIDs local part according to xep 0106 This let users send message to nicks such as Q@CServe.quakenet.org fix #3047 --- louloulibs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'louloulibs/config/config.cpp') diff --git a/louloulibs b/louloulibs index 99757a4..88d2b13 160000 --- a/louloulibs +++ b/louloulibs @@ -1 +1 @@ -Subproject commit 99757a44b49619ff59cae9e6d983a3b7c20c56bf +Subproject commit 88d2b136e5f133f0d0dc01f59449284f663d53ea -- cgit v1.2.3 From 0d706741c6b3a8bdf6b4f8ca0b1ac00cb27bd8b8 Mon Sep 17 00:00:00 2001 From: Florent Le Coz Date: Mon, 20 Apr 2015 20:35:32 +0200 Subject: Update louloulibs submodule to the correct revision --- louloulibs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'louloulibs/config/config.cpp') diff --git a/louloulibs b/louloulibs index 88d2b13..b53ae92 160000 --- a/louloulibs +++ b/louloulibs @@ -1 +1 @@ -Subproject commit 88d2b136e5f133f0d0dc01f59449284f663d53ea +Subproject commit b53ae922f48f1465a7fa61136f65ec39e38a452e -- cgit v1.2.3 From a8225dc54c019788722bda3bda8d55151c1ccdef Mon Sep 17 00:00:00 2001 From: Florent Le Coz Date: Tue, 21 Apr 2015 15:35:10 +0200 Subject: Properly check for connecting or connected status before reconnecting Note, in our context, is_connecting() includes the resolving part as well as the actual connection (if we are using c-ares) fix #3048 --- louloulibs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'louloulibs/config/config.cpp') diff --git a/louloulibs b/louloulibs index b53ae92..6c812cd 160000 --- a/louloulibs +++ b/louloulibs @@ -1 +1 @@ -Subproject commit b53ae922f48f1465a7fa61136f65ec39e38a452e +Subproject commit 6c812cd86e31569db61cac4e30f77e296d207191 -- cgit v1.2.3 From 71fec776c4d7b99b76a44deae6f333d9cffa1496 Mon Sep 17 00:00:00 2001 From: Florent Le Coz Date: Thu, 7 May 2015 17:42:37 +0200 Subject: Update to latest louloulibs fix #3042 --- louloulibs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'louloulibs/config/config.cpp') diff --git a/louloulibs b/louloulibs index 6c812cd..eaa4fbb 160000 --- a/louloulibs +++ b/louloulibs @@ -1 +1 @@ -Subproject commit 6c812cd86e31569db61cac4e30f77e296d207191 +Subproject commit eaa4fbba814b56b4fe7ffb62984fddfbb9280291 -- cgit v1.2.3 From fbeb5af364db54c8a82f5ea30b83df441988ea4b Mon Sep 17 00:00:00 2001 From: Florent Le Coz Date: Wed, 13 May 2015 20:17:43 +0200 Subject: Update to latest louloulibs revision, and add test for hostname validity fix #2694 --- louloulibs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'louloulibs/config/config.cpp') diff --git a/louloulibs b/louloulibs index eaa4fbb..89398b5 160000 --- a/louloulibs +++ b/louloulibs @@ -1 +1 @@ -Subproject commit eaa4fbba814b56b4fe7ffb62984fddfbb9280291 +Subproject commit 89398b5d886744c3812b65195308cae57eca2b53 -- cgit v1.2.3 From 897b281e67dc82700db9fd9c2dedc5e01e5871ee Mon Sep 17 00:00:00 2001 From: Florent Le Coz Date: Wed, 27 May 2015 23:44:23 +0200 Subject: Avoid some potential race conditions by blocking the signals we manage MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit They are atomically unblocked in the ppoll/epoll_pwait calls, avoiding any race condition on the check of the “stop” or “reload” booleans. --- louloulibs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'louloulibs/config/config.cpp') diff --git a/louloulibs b/louloulibs index 89398b5..0f3c118 160000 --- a/louloulibs +++ b/louloulibs @@ -1 +1 @@ -Subproject commit 89398b5d886744c3812b65195308cae57eca2b53 +Subproject commit 0f3c1183e2bf0941ae2bffd3f31577bce4f3001c -- cgit v1.2.3 From e1a7114c8daa10589c830ce972cf461c3540111b Mon Sep 17 00:00:00 2001 From: Florent Le Coz Date: Thu, 28 May 2015 23:42:52 +0200 Subject: louloulibs is directly included, instead of being a submodule Because this is a nightmare to manage --- louloulibs | 1 - louloulibs/config/config.cpp | 122 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 122 insertions(+), 1 deletion(-) delete mode 160000 louloulibs create mode 100644 louloulibs/config/config.cpp (limited to 'louloulibs/config/config.cpp') diff --git a/louloulibs b/louloulibs deleted file mode 160000 index 0f3c118..0000000 --- a/louloulibs +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 0f3c1183e2bf0941ae2bffd3f31577bce4f3001c diff --git a/louloulibs/config/config.cpp b/louloulibs/config/config.cpp new file mode 100644 index 0000000..3e016f4 --- /dev/null +++ b/louloulibs/config/config.cpp @@ -0,0 +1,122 @@ +#include + +#include +#include + +#include + +std::string Config::filename{}; +bool Config::file_must_exist = false; + +std::string Config::get(const std::string& option, const std::string& def) +{ + Config* self = Config::instance().get(); + auto it = self->values.find(option); + + if (it == self->values.end()) + return def; + return it->second; +} + +int Config::get_int(const std::string& option, const int& def) +{ + Config* self = Config::instance().get(); + std::string res = self->get(option, ""); + if (!res.empty()) + return atoi(res.c_str()); + else + return def; +} + +void Config::set(const std::string& option, const std::string& value, bool save) +{ + Config* self = Config::instance().get(); + self->values[option] = value; + if (save) + { + self->save_to_file(); + self->trigger_configuration_change(); + } +} + +void Config::connect(t_config_changed_callback callback) +{ + Config* self = Config::instance().get(); + self->callbacks.push_back(callback); +} + +void Config::close() +{ + Config* self = Config::instance().get(); + self->values.clear(); + Config::instance().reset(); +} + +/** + * Private methods + */ + +void Config::trigger_configuration_change() +{ + std::vector::iterator it; + for (it = this->callbacks.begin(); it < this->callbacks.end(); ++it) + (*it)(); +} + +std::unique_ptr& Config::instance() +{ + static std::unique_ptr instance; + + if (!instance) + { + instance = std::make_unique(); + instance->read_conf(); + } + return instance; +} + +bool Config::read_conf() +{ + std::ifstream file; + file.open(filename.data()); + if (!file.is_open()) + { + if (Config::file_must_exist) + { + perror(("Error while opening file " + filename + " for reading.").c_str()); + file.exceptions(std::ifstream::failbit); + } + return false; + } + + std::string line; + size_t pos; + std::string option; + std::string value; + while (file.good()) + { + std::getline(file, line); + if (line == "" || line[0] == '#') + continue ; + pos = line.find('='); + if (pos == std::string::npos) + continue ; + option = line.substr(0, pos); + value = line.substr(pos+1); + this->values[option] = value; + } + return true; +} + +void Config::save_to_file() const +{ + std::ofstream file(this->filename.data()); + if (file.fail()) + { + std::cerr << "Could not save config file." << std::endl; + return ; + } + for (auto& it: this->values) + file << it.first << "=" << it.second << std::endl; + file.close(); +} -- cgit v1.2.3 From cef238e7002874939cc5e93cd3c29c130623344b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?louiz=E2=80=99?= Date: Wed, 11 May 2016 00:56:49 +0200 Subject: Do not use std::endl for each line when saving the conf file --- louloulibs/config/config.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'louloulibs/config/config.cpp') diff --git a/louloulibs/config/config.cpp b/louloulibs/config/config.cpp index 3e016f4..c785632 100644 --- a/louloulibs/config/config.cpp +++ b/louloulibs/config/config.cpp @@ -117,6 +117,6 @@ void Config::save_to_file() const return ; } for (auto& it: this->values) - file << it.first << "=" << it.second << std::endl; + file << it.first << "=" << it.second << '\n'; file.close(); } -- cgit v1.2.3 From 46ff73662cc94220c5ee962b591c8ee327de6f85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?louiz=E2=80=99?= Date: Tue, 14 Jun 2016 03:02:36 +0200 Subject: Clean the Config module, use static things instead of a stupid singleton --- louloulibs/config/config.cpp | 66 +++++++++++++++----------------------------- 1 file changed, 23 insertions(+), 43 deletions(-) (limited to 'louloulibs/config/config.cpp') diff --git a/louloulibs/config/config.cpp b/louloulibs/config/config.cpp index c785632..967f581 100644 --- a/louloulibs/config/config.cpp +++ b/louloulibs/config/config.cpp @@ -6,22 +6,21 @@ #include std::string Config::filename{}; -bool Config::file_must_exist = false; +std::map Config::values{}; +std::vector Config::callbacks{}; std::string Config::get(const std::string& option, const std::string& def) { - Config* self = Config::instance().get(); - auto it = self->values.find(option); + auto it = Config::values.find(option); - if (it == self->values.end()) + if (it == Config::values.end()) return def; return it->second; } int Config::get_int(const std::string& option, const int& def) { - Config* self = Config::instance().get(); - std::string res = self->get(option, ""); + std::string res = Config::get(option, ""); if (!res.empty()) return atoi(res.c_str()); else @@ -30,65 +29,48 @@ int Config::get_int(const std::string& option, const int& def) void Config::set(const std::string& option, const std::string& value, bool save) { - Config* self = Config::instance().get(); - self->values[option] = value; + Config::values[option] = value; if (save) { - self->save_to_file(); - self->trigger_configuration_change(); + Config::save_to_file(); + Config::trigger_configuration_change(); } } void Config::connect(t_config_changed_callback callback) { - Config* self = Config::instance().get(); - self->callbacks.push_back(callback); + Config::callbacks.push_back(callback); } -void Config::close() +void Config::clear() { - Config* self = Config::instance().get(); - self->values.clear(); - Config::instance().reset(); + Config::values.clear(); } /** * Private methods */ - void Config::trigger_configuration_change() { std::vector::iterator it; - for (it = this->callbacks.begin(); it < this->callbacks.end(); ++it) + for (it = Config::callbacks.begin(); it < Config::callbacks.end(); ++it) (*it)(); } -std::unique_ptr& Config::instance() +bool Config::read_conf(const std::string& name) { - static std::unique_ptr instance; + if (!name.empty()) + Config::filename = name; - if (!instance) - { - instance = std::make_unique(); - instance->read_conf(); - } - return instance; -} - -bool Config::read_conf() -{ - std::ifstream file; - file.open(filename.data()); + std::ifstream file(Config::filename.data()); if (!file.is_open()) { - if (Config::file_must_exist) - { - perror(("Error while opening file " + filename + " for reading.").c_str()); - file.exceptions(std::ifstream::failbit); - } + perror(("Error while opening file " + filename + " for reading.").c_str()); return false; } + Config::clear(); + std::string line; size_t pos; std::string option; @@ -103,20 +85,18 @@ bool Config::read_conf() continue ; option = line.substr(0, pos); value = line.substr(pos+1); - this->values[option] = value; + Config::values[option] = value; } - return true; } -void Config::save_to_file() const +void Config::save_to_file() { - std::ofstream file(this->filename.data()); + std::ofstream file(Config::filename.data()); if (file.fail()) { std::cerr << "Could not save config file." << std::endl; return ; } - for (auto& it: this->values) + for (const auto& it: Config::values) file << it.first << "=" << it.second << '\n'; - file.close(); } -- cgit v1.2.3 From 19bca5c2f2b104d534a7c8be7f61dc48d928cf24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?louiz=E2=80=99?= Date: Tue, 14 Jun 2016 20:08:55 +0200 Subject: Add a missing return bool in Config --- louloulibs/config/config.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'louloulibs/config/config.cpp') diff --git a/louloulibs/config/config.cpp b/louloulibs/config/config.cpp index 967f581..8027d20 100644 --- a/louloulibs/config/config.cpp +++ b/louloulibs/config/config.cpp @@ -87,6 +87,7 @@ bool Config::read_conf(const std::string& name) value = line.substr(pos+1); Config::values[option] = value; } + return true; } void Config::save_to_file() -- cgit v1.2.3 From db503b23e86d1cb390d12298875eb0eaffdbfa3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?louiz=E2=80=99?= Date: Sun, 24 Jul 2016 19:41:01 +0200 Subject: Use log_error instead of cerr --- louloulibs/config/config.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'louloulibs/config/config.cpp') diff --git a/louloulibs/config/config.cpp b/louloulibs/config/config.cpp index 8027d20..417981d 100644 --- a/louloulibs/config/config.cpp +++ b/louloulibs/config/config.cpp @@ -1,9 +1,10 @@ #include +#include -#include +#include #include -#include +#include std::string Config::filename{}; std::map Config::values{}; @@ -22,7 +23,7 @@ int Config::get_int(const std::string& option, const int& def) { std::string res = Config::get(option, ""); if (!res.empty()) - return atoi(res.c_str()); + return std::atoi(res.c_str()); else return def; } @@ -65,7 +66,7 @@ bool Config::read_conf(const std::string& name) std::ifstream file(Config::filename.data()); if (!file.is_open()) { - perror(("Error while opening file " + filename + " for reading.").c_str()); + log_error("Error while opening file ", filename, " for reading: ", strerror(errno)); return false; } @@ -95,7 +96,7 @@ void Config::save_to_file() std::ofstream file(Config::filename.data()); if (file.fail()) { - std::cerr << "Could not save config file." << std::endl; + log_error("Could not save config file."); return ; } for (const auto& it: Config::values) -- cgit v1.2.3