diff options
Diffstat (limited to 'server/modules.cpp')
-rw-r--r-- | server/modules.cpp | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/server/modules.cpp b/server/modules.cpp new file mode 100644 index 0000000..1f10b90 --- /dev/null +++ b/server/modules.cpp @@ -0,0 +1,50 @@ +// Copyright © 2013 sss +// +// 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +#include "headers.h" + +std::list<service_info> installed_services; + +void load_modules(const char* path) +{ + boost::filesystem::path p (path); + typedef void (*svcs_ptr)(std::list<service_info>&); + typedef void (*init_ptr)(); + std::list<service_info> local_services; + for(boost::filesystem::directory_iterator i = boost::filesystem::directory_iterator(p), end = boost::filesystem::directory_iterator(); i != end; ++i) + { + if(boost::filesystem::is_regular_file(i->path())) + { + init_ptr f = reinterpret_cast<init_ptr>(get_function(boost::filesystem::absolute(i->path()).generic_string().c_str(), "init")); + if(f) + f(); + local_services.clear(); + svcs_ptr svcs = reinterpret_cast<svcs_ptr>(get_function(boost::filesystem::absolute(i->path()).generic_string().c_str(), "get_services")); + if(svcs) + { + svcs(local_services); + if(!local_services.empty()) + installed_services.insert(installed_services.end(), local_services.begin(), local_services.end()); + } + } + } +} + +void load_modules() +{ + if(boost::filesystem::exists("./modules") && boost::filesystem::is_directory("./modules")) + load_modules("./modules"); +} |