diff options
author | Stephen D. Huston <shuston@apache.org> | 2008-10-26 01:04:32 +0000 |
---|---|---|
committer | Stephen D. Huston <shuston@apache.org> | 2008-10-26 01:04:32 +0000 |
commit | 04083c21d70aa054ccc82caab4743b2aae0d93c0 (patch) | |
tree | 13820d1543bd9c8229fbe7f6962059b907411283 /cpp | |
parent | 5a36012aa3f1d1aeb26a548089f327e89cddf651 (diff) | |
download | qpid-python-04083c21d70aa054ccc82caab4743b2aae0d93c0.tar.gz |
Refactor duplicated Module-handling from broker/client to common
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@707924 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp')
-rw-r--r-- | cpp/src/Makefile.am | 2 | ||||
-rw-r--r-- | cpp/src/qpid/Modules.cpp | 74 | ||||
-rw-r--r-- | cpp/src/qpid/Modules.h | 43 | ||||
-rw-r--r-- | cpp/src/qpid/client/LoadPlugins.cpp | 72 |
4 files changed, 132 insertions, 59 deletions
diff --git a/cpp/src/Makefile.am b/cpp/src/Makefile.am index 07b7957a8e..a66eda3463 100644 --- a/cpp/src/Makefile.am +++ b/cpp/src/Makefile.am @@ -235,6 +235,7 @@ libqpidcommon_la_SOURCES = \ qpid/Address.cpp \ qpid/DataDir.cpp \ qpid/Exception.cpp \ + qpid/Modules.cpp \ qpid/Options.cpp \ qpid/Plugin.cpp \ qpid/RefCountedBuffer.h \ @@ -414,6 +415,7 @@ nobase_include_HEADERS = \ qpid/Exception.h \ qpid/sys/ExceptionHolder.h \ qpid/amqp_0_10/Exception.h \ + qpid/Modules.h \ qpid/Msg.h \ qpid/Options.h \ qpid/Plugin.h \ diff --git a/cpp/src/qpid/Modules.cpp b/cpp/src/qpid/Modules.cpp new file mode 100644 index 0000000000..9ad328e07d --- /dev/null +++ b/cpp/src/qpid/Modules.cpp @@ -0,0 +1,74 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ + +#include "Modules.h" +#include "Exception.h" +#include "qpid/log/Statement.h" +#include "qpid/sys/Shlib.h" + +#include <boost/filesystem/operations.hpp> +#include <boost/filesystem/path.hpp> + +namespace fs=boost::filesystem; + +namespace qpid { + +ModuleOptions::ModuleOptions(const std::string& defaultModuleDir) + : qpid::Options("Module options"), loadDir(defaultModuleDir), noLoad(false) +{ + addOptions() + ("module-dir", optValue(loadDir, "DIR"), "Load all shareable modules in this directory") + ("load-module", optValue(load, "FILE"), "Specifies additional module(s) to be loaded") + ("no-module-dir", optValue(noLoad), "Don't load modules from module directory"); +} + +void tryShlib(const char* libname, bool noThrow) { + try { + sys::Shlib shlib(libname); + QPID_LOG (info, "Loaded Module: " << libname); + } + catch (const std::exception& /*e*/) { + if (!noThrow) + throw; + } +} + +void loadModuleDir (std::string dirname, bool isDefault) +{ + fs::path dirPath (dirname, fs::native); + + if (!fs::exists (dirPath)) + { + if (isDefault) + return; + throw Exception ("Directory not found: " + dirname); + } + + fs::directory_iterator endItr; + for (fs::directory_iterator itr (dirPath); itr != endItr; ++itr) + { + if (!fs::is_directory(*itr) && + itr->string().find (".so") == itr->string().length() - 3) + tryShlib (itr->string().data(), true); + } +} + +} // namespace qpid diff --git a/cpp/src/qpid/Modules.h b/cpp/src/qpid/Modules.h new file mode 100644 index 0000000000..2a3b24f359 --- /dev/null +++ b/cpp/src/qpid/Modules.h @@ -0,0 +1,43 @@ +#ifndef QPID_MODULES_H +#define QPID_MODULES_H + +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ + +#include "Options.h" +#include <string> +#include <vector> + +namespace qpid { + +struct ModuleOptions : public qpid::Options { + std::string loadDir; + std::vector<std::string> load; + bool noLoad; + ModuleOptions(const std::string& defaultModuleDir); +}; + +void tryShlib(const char* libname, bool noThrow); +void loadModuleDir (std::string dirname, bool isDefault); + +} // namespace qpid + +#endif /*!QPID_MODULES_H*/ diff --git a/cpp/src/qpid/client/LoadPlugins.cpp b/cpp/src/qpid/client/LoadPlugins.cpp index ddfa179c07..b395226859 100644 --- a/cpp/src/qpid/client/LoadPlugins.cpp +++ b/cpp/src/qpid/client/LoadPlugins.cpp @@ -18,78 +18,32 @@ * under the License. * */ -#include "qpid/log/Statement.h" -#include "qpid/log/Options.h" -#include "qpid/log/Logger.h" -#include "qpid/sys/Shlib.h" -#include <boost/filesystem/operations.hpp> -#include <boost/filesystem/path.hpp> - -using namespace qpid; -using namespace qpid::sys; -using namespace qpid::log; -using namespace std; -namespace fs=boost::filesystem; - -struct ModuleOptions : public qpid::Options { - string loadDir; - vector<string> load; - bool noLoad; - ModuleOptions() : qpid::Options("Module options"), loadDir(MODULE_DIR), noLoad(false) - { - addOptions() - ("module-dir", optValue(loadDir, "DIR"), "Load all .so modules in this directory") - ("load-module", optValue(load, "FILE"), "Specifies additional module(s) to be loaded") - ("no-module-dir", optValue(noLoad), "Don't load modules from module directory"); - } -}; - -// TODO: The following is copied from qpidd.cpp - it needs to be common code -void tryShlib(const char* libname, bool noThrow) { - try { - Shlib shlib(libname); - QPID_LOG (info, "Loaded Module: " << libname); - } - catch (const exception& e) { - if (!noThrow) - throw; - } -} - -void loadModuleDir (string dirname, bool isDefault) -{ - fs::path dirPath (dirname, fs::native); - if (!fs::exists (dirPath)) - { - if (isDefault) - return; - throw Exception ("Directory not found: " + dirname); - } +#include "qpid/Modules.h" +#include "qpid/sys/Shlib.h" +#include <string> +#include <vector> +using std::vector; +using std::string; - fs::directory_iterator endItr; - for (fs::directory_iterator itr (dirPath); itr != endItr; ++itr) - { - if (!fs::is_directory(*itr) && - itr->string().find (".so") == itr->string().length() - 3) - tryShlib (itr->string().data(), true); - } -} +namespace { struct LoadtimeInitialise { LoadtimeInitialise() { - ModuleOptions moduleOptions; - string defaultPath (moduleOptions.loadDir); + qpid::ModuleOptions moduleOptions(MODULE_DIR); + string defaultPath (moduleOptions.loadDir); moduleOptions.parse (0, 0, CONF_FILE, true); for (vector<string>::iterator iter = moduleOptions.load.begin(); iter != moduleOptions.load.end(); iter++) - tryShlib (iter->data(), false); + qpid::tryShlib (iter->data(), false); if (!moduleOptions.noLoad) { bool isDefault = defaultPath == moduleOptions.loadDir; - loadModuleDir (moduleOptions.loadDir, isDefault); + qpid::loadModuleDir (moduleOptions.loadDir, isDefault); } } } init; + +} // namespace |