summaryrefslogtreecommitdiff
path: root/cpp/lib/common
diff options
context:
space:
mode:
authorAlan Conway <aconway@apache.org>2007-04-26 16:01:04 +0000
committerAlan Conway <aconway@apache.org>2007-04-26 16:01:04 +0000
commit0a90e5db613b035e15af3b7358205ed1f7960d2c (patch)
treec4b1ec81e60a3b93e414ddf725985d1a9ff5d291 /cpp/lib/common
parent4473eb5d9e9da37e515be063952d284034adbec3 (diff)
downloadqpid-python-0a90e5db613b035e15af3b7358205ed1f7960d2c.tar.gz
Merged revisions 532430 by hand from
https://svn.apache.org/repos/asf/incubator/qpid/branches/trunk/qpid/cpp ------------------------------------------------------------------------ r532430 | aconway | 2007-04-25 14:06:14 -0400 (Wed, 25 Apr 2007) | 10 lines * qpid/CommonOptions.h: - Convenience classs/functions to use boost::program_options. - CommonOptions class for options common to client/broker. * qpid/broker/Broker.h: - Replaced broker::Configuration with class Broker::Options, derived from CommonOptions. * qpidd.cpp: Updated options handling. * qpid/Exception.h: Added strError function to get std::string from errno. ------------------------------------------------------------------------ git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/branches/M2@532787 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/lib/common')
-rw-r--r--cpp/lib/common/CommonOptions.cpp36
-rw-r--r--cpp/lib/common/CommonOptions.h91
-rw-r--r--cpp/lib/common/Exception.cpp8
-rw-r--r--cpp/lib/common/Exception.h4
-rw-r--r--cpp/lib/common/Makefile.am17
5 files changed, 148 insertions, 8 deletions
diff --git a/cpp/lib/common/CommonOptions.cpp b/cpp/lib/common/CommonOptions.cpp
new file mode 100644
index 0000000000..8efb3a6baa
--- /dev/null
+++ b/cpp/lib/common/CommonOptions.cpp
@@ -0,0 +1,36 @@
+/*
+ *
+ * Copyright (c) 2006 The Apache Software Foundation
+ *
+ * Licensed 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 "CommonOptions.h"
+
+namespace qpid {
+
+const int CommonOptions::DEFAULT_PORT=5672;
+
+CommonOptions::CommonOptions() : trace(false), port(DEFAULT_PORT) {}
+
+void CommonOptions::addTo(po::options_description& desc)
+{
+ using namespace po;
+ desc.add_options()
+ ("trace,t", optValue(trace), "Enable debug tracing" )
+ ("port,p", optValue(port,"PORT"), "Use PORT for AMQP connections.");
+}
+
+} // namespace qpid
+
diff --git a/cpp/lib/common/CommonOptions.h b/cpp/lib/common/CommonOptions.h
new file mode 100644
index 0000000000..2a4b9798cd
--- /dev/null
+++ b/cpp/lib/common/CommonOptions.h
@@ -0,0 +1,91 @@
+#ifndef QPID_COMMONOPTIONS_H
+#define QPID_COMMONOPTIONS_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 <boost/program_options.hpp>
+#include <boost/format.hpp>
+
+namespace qpid {
+
+/**@Qpid extensions to boost::program_options */
+namespace program_options {
+
+using namespace boost::program_options;
+
+/** @internal Normally only constructed by optValue() */
+template <class T>
+class OptionValue : public typed_value<T> {
+ public:
+ OptionValue(T& value, const std::string& arg)
+ : typed_value<T>(&value), argName(arg) {}
+ std::string name() const { return argName; }
+ private:
+ std::string argName;
+};
+
+/**
+ * Like boost::program_options::value() with more convenient signature
+ * for updating a value by reference and nicer help formatting.
+ *
+ *@param value displayed as default in help, updated from options.
+ * Must support ostream << operator.
+ *@param arg name for arguments in help.
+ *
+ *@see CommonOptions.cpp for example of use.
+ */
+template<class T>
+value_semantic* optValue(T& value, const char* arg) {
+ std::string val(boost::lexical_cast<std::string>(value));
+ std::string argName(
+ val.empty() ? std::string(arg) :
+ (boost::format("%s (=%s) ") % arg % val).str());
+ return new OptionValue<T>(value, argName);
+}
+
+/**
+ * Like boost::program_options::bool_switch but takes reference, not pointer.
+ */
+inline value_semantic* optValue(bool& value) { return bool_switch(&value); }
+
+} // namespace program_options
+
+namespace po=program_options; // Convenience alias.
+
+/**
+ * Common options for client and broker
+ */
+struct CommonOptions {
+ static const int DEFAULT_PORT;
+
+ CommonOptions();
+
+ bool trace;
+ int port;
+
+ /** Add members to program_options to be updated */
+ void addTo(po::options_description&);
+};
+
+} // namespace qpid
+
+#endif /*!QPID_COMMONOPTIONS_H*/
diff --git a/cpp/lib/common/Exception.cpp b/cpp/lib/common/Exception.cpp
index 0161518011..64d88af1b4 100644
--- a/cpp/lib/common/Exception.cpp
+++ b/cpp/lib/common/Exception.cpp
@@ -19,10 +19,16 @@
*
*/
-#include <Exception.h>
+#include "Exception.h"
+#include <cerrno>
namespace qpid {
+std::string strError(int err) {
+ char buf[512];
+ return std::string(strerror_r(err, buf, sizeof(buf)));
+}
+
Exception::Exception() throw() {}
Exception::Exception(const std::string& str) throw() : whatStr(str) {}
diff --git a/cpp/lib/common/Exception.h b/cpp/lib/common/Exception.h
index f35d427bb0..4e26ad42e3 100644
--- a/cpp/lib/common/Exception.h
+++ b/cpp/lib/common/Exception.h
@@ -29,6 +29,10 @@
namespace qpid
{
+
+/** Get the error message for error number err. */
+std::string strError(int err);
+
/**
* Exception base class for all Qpid exceptions.
*/
diff --git a/cpp/lib/common/Makefile.am b/cpp/lib/common/Makefile.am
index fe05498b97..e90dacb605 100644
--- a/cpp/lib/common/Makefile.am
+++ b/cpp/lib/common/Makefile.am
@@ -44,13 +44,14 @@ framing = framing
gen = $(srcdir)/../../gen
lib_LTLIBRARIES = libqpidcommon.la
-libqpidcommon_la_LIBADD = \
- $(APR_LIBS) \
- $(LIB_DLOPEN) \
- $(LIB_CLOCK_GETTIME)
+libqpidcommon_la_LIBADD = \
+ $(APR_LIBS) \
+ $(LIB_DLOPEN) \
+ $(LIB_CLOCK_GETTIME) \
+ -lboost_program_options
-libqpidcommon_la_LDFLAGS = \
- -version-info \
+libqpidcommon_la_LDFLAGS = \
+ -version-info \
$(LIBTOOL_VERSION_INFO_ARG)
libqpidcommon_la_SOURCES = \
@@ -72,12 +73,13 @@ libqpidcommon_la_SOURCES = \
$(framing)/ProtocolVersionException.cpp \
$(framing)/Value.cpp \
$(gen)/AMQP_ClientProxy.cpp \
- $(gen)/AMQP_HighestVersion.h \
+ $(gen)/AMQP_HighestVersion.h \
$(gen)/AMQP_MethodVersionMap.cpp \
$(gen)/AMQP_ServerProxy.cpp \
Exception.cpp \
ExceptionHolder.cpp \
QpidError.cpp \
+ CommonOptions.cpp \
sys/Runnable.cpp \
sys/Time.cpp
@@ -109,6 +111,7 @@ nobase_pkginclude_HEADERS = \
ExceptionHolder.h \
QpidError.h \
SharedObject.h \
+ CommonOptions.cpp \
sys/Acceptor.h \
sys/AtomicCount.h \
sys/Module.h \