summaryrefslogtreecommitdiff
path: root/cpp/include
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/include')
-rw-r--r--cpp/include/qpid/messaging/Address.h62
-rw-r--r--cpp/include/qpid/messaging/Filter.h48
-rw-r--r--cpp/include/qpid/messaging/Message.h2
-rw-r--r--cpp/include/qpid/messaging/Session.h16
-rw-r--r--cpp/include/qpid/messaging/Variant.h4
5 files changed, 58 insertions, 74 deletions
diff --git a/cpp/include/qpid/messaging/Address.h b/cpp/include/qpid/messaging/Address.h
index e66c52f4c2..f232af5d56 100644
--- a/cpp/include/qpid/messaging/Address.h
+++ b/cpp/include/qpid/messaging/Address.h
@@ -22,33 +22,71 @@
*
*/
#include <string>
+#include "qpid/Exception.h"
+#include "qpid/messaging/Variant.h"
#include "qpid/client/ClientImportExport.h"
#include <ostream>
namespace qpid {
-namespace client {
-}
-
namespace messaging {
+struct InvalidAddress : public qpid::Exception
+{
+ InvalidAddress(const std::string& msg);
+};
+
+struct MalformedAddress : public qpid::Exception
+{
+ MalformedAddress(const std::string& msg);
+};
+
+class AddressImpl;
+
/**
* Represents an address to which messages can be sent and from which
* messages can be received. Often a simple name is sufficient for
- * this. However this struct allows the type of address to be
- * specified allowing more sophisticated treatment if necessary.
+ * this, however this can be augmented with a subject pattern and
+ * options.
+ *
+ * All parts of an address can be specified in a string of the
+ * following form:
+ *
+ * <address> [ / <subject> ] [ { <key> : <value> , ... } ]
+ *
+ * Here the <address> is a simple name for the addressed entity and
+ * <subject> is a subject or subject pattern for messages sent to or
+ * received from this address. The options are specified as a series
+ * of key value pairs enclosed in curly brackets (denoting a map).
*/
-struct Address
+class Address
{
- std::string value;
- std::string type;
-
+ public:
QPID_CLIENT_EXTERN Address();
QPID_CLIENT_EXTERN Address(const std::string& address);
- QPID_CLIENT_EXTERN Address(const std::string& address, const std::string& type);
- QPID_CLIENT_EXTERN operator const std::string&() const;
- QPID_CLIENT_EXTERN const std::string& toStr() const;
+ QPID_CLIENT_EXTERN Address(const std::string& name, const std::string& subject,
+ const Variant::Map& options, const std::string& type = "");
+ QPID_CLIENT_EXTERN Address(const Address& address);
+ QPID_CLIENT_EXTERN ~Address();
+ Address& operator=(const Address&);
+ QPID_CLIENT_EXTERN const std::string& getName() const;
+ QPID_CLIENT_EXTERN void setName(const std::string&);
+ QPID_CLIENT_EXTERN const std::string& getSubject() const;
+ QPID_CLIENT_EXTERN void setSubject(const std::string&);
+ QPID_CLIENT_EXTERN bool hasSubject() const;
+ QPID_CLIENT_EXTERN const Variant::Map& getOptions() const;
+ QPID_CLIENT_EXTERN Variant::Map& getOptions();
+ QPID_CLIENT_EXTERN void setOptions(const Variant::Map&);
+
+ QPID_CLIENT_EXTERN std::string getType() const;
+ QPID_CLIENT_EXTERN void setType(const std::string&);
+
+ QPID_CLIENT_EXTERN const Variant& getOption(const std::string& key) const;
+
+ QPID_CLIENT_EXTERN std::string toStr() const;
QPID_CLIENT_EXTERN operator bool() const;
QPID_CLIENT_EXTERN bool operator !() const;
+ private:
+ AddressImpl* impl;
};
QPID_CLIENT_EXTERN std::ostream& operator<<(std::ostream& out, const Address& address);
diff --git a/cpp/include/qpid/messaging/Filter.h b/cpp/include/qpid/messaging/Filter.h
deleted file mode 100644
index 5cd844cf73..0000000000
--- a/cpp/include/qpid/messaging/Filter.h
+++ /dev/null
@@ -1,48 +0,0 @@
-#ifndef QPID_MESSAGING_FILTER_H
-#define QPID_MESSAGING_FILTER_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 <string>
-#include <vector>
-#include "qpid/client/ClientImportExport.h"
-
-namespace qpid {
-namespace client {
-}
-
-namespace messaging {
-
-struct Filter
-{
- std::string type;
- std::vector<std::string> patterns;
-
- QPID_CLIENT_EXTERN Filter(std::string type, std::string pattern);
- QPID_CLIENT_EXTERN Filter(std::string type, std::string pattern1, std::string pattern2);
-
- static QPID_CLIENT_EXTERN const std::string WILDCARD;
- static QPID_CLIENT_EXTERN const std::string EXACT_MATCH;
-};
-
-}} // namespace qpid::messaging
-
-#endif /*!QPID_MESSAGING_FILTER_H*/
diff --git a/cpp/include/qpid/messaging/Message.h b/cpp/include/qpid/messaging/Message.h
index 4477d5a2e9..1acccecad0 100644
--- a/cpp/include/qpid/messaging/Message.h
+++ b/cpp/include/qpid/messaging/Message.h
@@ -32,7 +32,7 @@ namespace client {
namespace messaging {
-struct Address;
+class Address;
class Codec;
struct MessageImpl;
diff --git a/cpp/include/qpid/messaging/Session.h b/cpp/include/qpid/messaging/Session.h
index 979e27adae..4e3f950ef3 100644
--- a/cpp/include/qpid/messaging/Session.h
+++ b/cpp/include/qpid/messaging/Session.h
@@ -24,7 +24,7 @@
#include "qpid/client/ClientImportExport.h"
#include "qpid/client/Handle.h"
#include "qpid/sys/Time.h"
-#include "Variant.h"
+#include <string>
namespace qpid {
namespace client {
@@ -35,8 +35,7 @@ template <class> class PrivateImplRef;
namespace messaging {
-struct Address;
-struct Filter;
+class Address;
class Message;
class MessageListener;
class Sender;
@@ -90,13 +89,10 @@ class Session : public qpid::client::Handle<SessionImpl>
QPID_CLIENT_EXTERN Message fetch(qpid::sys::Duration timeout=qpid::sys::TIME_INFINITE);
QPID_CLIENT_EXTERN bool dispatch(qpid::sys::Duration timeout=qpid::sys::TIME_INFINITE);
- QPID_CLIENT_EXTERN Sender createSender(const Address& address, const VariantMap& options = VariantMap());
- QPID_CLIENT_EXTERN Sender createSender(const std::string& address, const VariantMap& options = VariantMap());
-
- QPID_CLIENT_EXTERN Receiver createReceiver(const Address& address, const VariantMap& options = VariantMap());
- QPID_CLIENT_EXTERN Receiver createReceiver(const Address& address, const Filter& filter, const VariantMap& options = VariantMap());
- QPID_CLIENT_EXTERN Receiver createReceiver(const std::string& address, const VariantMap& options = VariantMap());
- QPID_CLIENT_EXTERN Receiver createReceiver(const std::string& address, const Filter& filter, const VariantMap& options = VariantMap());
+ QPID_CLIENT_EXTERN Sender createSender(const Address& address);
+ QPID_CLIENT_EXTERN Sender createSender(const std::string& address);
+ QPID_CLIENT_EXTERN Receiver createReceiver(const Address& address);
+ QPID_CLIENT_EXTERN Receiver createReceiver(const std::string& address);
QPID_CLIENT_EXTERN Address createTempQueue(const std::string& baseName = std::string());
private:
diff --git a/cpp/include/qpid/messaging/Variant.h b/cpp/include/qpid/messaging/Variant.h
index 1e51914794..c63138178b 100644
--- a/cpp/include/qpid/messaging/Variant.h
+++ b/cpp/include/qpid/messaging/Variant.h
@@ -30,9 +30,6 @@
#include "qpid/client/ClientImportExport.h"
namespace qpid {
-namespace client {
-}
-
namespace messaging {
/**
@@ -93,6 +90,7 @@ class Variant
QPID_CLIENT_EXTERN ~Variant();
QPID_CLIENT_EXTERN VariantType getType() const;
+ QPID_CLIENT_EXTERN bool isVoid() const;
QPID_CLIENT_EXTERN Variant& operator=(bool);
QPID_CLIENT_EXTERN Variant& operator=(uint8_t);