diff options
author | Stephen D. Huston <shuston@apache.org> | 2009-02-27 18:34:26 +0000 |
---|---|---|
committer | Stephen D. Huston <shuston@apache.org> | 2009-02-27 18:34:26 +0000 |
commit | a2ff4d04c0958a19859f7a621d641aa10e2bdea7 (patch) | |
tree | b69d1955de0482b52aea3d260c30ae49ba00d6b3 | |
parent | f977ae07c2770e59a30bcd7b6b632c0c34492754 (diff) | |
download | qpid-python-a2ff4d04c0958a19859f7a621d641aa10e2bdea7.tar.gz |
Apply code and generator patches from QPID-1673. Adds import/export decl to allow building DLLs on Windows.
git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/qpid-1673@748631 13f79535-47bb-0310-9956-ffa450edef68
75 files changed, 752 insertions, 620 deletions
diff --git a/qpid/cpp/rubygen/framing.0-10/MethodBodyDefaultVisitor.rb b/qpid/cpp/rubygen/framing.0-10/MethodBodyDefaultVisitor.rb index 92bd10c9dd..3bacdbd812 100755 --- a/qpid/cpp/rubygen/framing.0-10/MethodBodyDefaultVisitor.rb +++ b/qpid/cpp/rubygen/framing.0-10/MethodBodyDefaultVisitor.rb @@ -30,13 +30,14 @@ class MethodBodyDefaultVisitorGen < CppGen def generate() h_file(@filename) { include "qpid/framing/MethodBodyConstVisitor" + include "qpid/CommonImportExport.h" namespace(@namespace) { genl "class AMQMethodBody;" cpp_class(@classname, "public MethodBodyConstVisitor") { genl "public:" genl "virtual void defaultVisit(const AMQMethodBody&) = 0;" @amqp.methods_.each { |m| - genl "virtual void visit(const #{m.body_name}&);" } + genl "QPID_COMMON_EXTERN virtual void visit(const #{m.body_name}&);" } }}} cpp_file(@filename) { diff --git a/qpid/cpp/rubygen/framing.0-10/OperationsInvoker.rb b/qpid/cpp/rubygen/framing.0-10/OperationsInvoker.rb index b751f61d36..6e3b79e51e 100755 --- a/qpid/cpp/rubygen/framing.0-10/OperationsInvoker.rb +++ b/qpid/cpp/rubygen/framing.0-10/OperationsInvoker.rb @@ -74,7 +74,7 @@ class OperationsInvokerGen < CppGen public genl("Invoker(#{target}& target_) : target(target_) {}") genl "using MethodBodyDefaultVisitor::visit;" - methods.each { |m| genl "void visit(const #{m.body_name}& body);" } + methods.each { |m| genl "QPID_COMMON_EXTERN void visit(const #{m.body_name}& body);" } } end @@ -82,6 +82,7 @@ class OperationsInvokerGen < CppGen h_file(@filename) { include "qpid/framing/#{@ops}" include "qpid/framing/Invoker.h" + include "qpid/CommonImportExport.h" namespace("qpid::framing") { # AMQP_*Operations invoker. methods=@amqp.classes.map { |c| visit_methods(c).to_a }.flatten diff --git a/qpid/cpp/rubygen/framing.0-10/Proxy.rb b/qpid/cpp/rubygen/framing.0-10/Proxy.rb index 97d0df7c58..7e11d62d9b 100755 --- a/qpid/cpp/rubygen/framing.0-10/Proxy.rb +++ b/qpid/cpp/rubygen/framing.0-10/Proxy.rb @@ -44,7 +44,7 @@ public: static #{cname}& get(#{@classname}& proxy) { return proxy.get#{cname}(); } EOS methods_on(c, @chassis).each { |m| - genl "virtual void #{m.cppname}(#{m.signature.join(",\n ")});" + genl "QPID_COMMON_EXTERN virtual void #{m.cppname}(#{m.signature.join(",\n ")});" genl }} end @@ -66,10 +66,12 @@ EOS include "qpid/framing/Array.h" include "qpid/framing/amqp_types.h" include "qpid/framing/amqp_structs.h" + include "qpid/CommonImportExport.h" + namespace("qpid::framing") { cpp_class(@classname, "public Proxy") { public - genl "#{@classname}(FrameHandler& out);" + genl "QPID_COMMON_EXTERN #{@classname}(FrameHandler& out);" genl @amqp.classes.each { |c| inner_class_decl(c) diff --git a/qpid/cpp/rubygen/framing.0-10/Session.rb b/qpid/cpp/rubygen/framing.0-10/Session.rb index 5dd2a91a56..709491e42e 100644 --- a/qpid/cpp/rubygen/framing.0-10/Session.rb +++ b/qpid/cpp/rubygen/framing.0-10/Session.rb @@ -55,9 +55,9 @@ module SyncAsync def decl_ctor_opeq() genl - genl "#{@classname}();" - genl "#{@classname}(const #{@version_base}& other);" - genl "#{@classname}& operator=(const #{@version_base}& other);" + genl "QPID_CLIENT_EXTERN #{@classname}();" + genl "QPID_CLIENT_EXTERN #{@classname}(const #{@version_base}& other);" + genl "QPID_CLIENT_EXTERN #{@classname}& operator=(const #{@version_base}& other);" end def defn_ctor_opeq(inline="") @@ -138,6 +138,7 @@ class SessionNoKeywordGen < CppGen def generate() h_file(@file) { include "qpid/client/#{@version_base}.h" + include "qpid/client/ClientImportExport.h" namespace(@namespace) { doxygen_comment { genl "AMQP #{@amqp.version} #{sync_adjective} session API." @@ -151,7 +152,7 @@ class SessionNoKeywordGen < CppGen genl doxygen(m) args=m.sig_c_default.join(", ") - genl "#{m.return_type(@async)} #{m.session_function}(#{args});" + genl "QPID_CLIENT_EXTERN #{m.return_type(@async)} #{m.session_function}(#{args});" } } }} @@ -229,6 +230,7 @@ class SessionGen < CppGen h_file(@fqclass.file) { include @fqbase.file include "qpid/client/arg" + include "qpid/client/ClientImportExport" namespace("qpid::client") { # Doxygen comment. doxygen_comment { diff --git a/qpid/cpp/rubygen/framing.0-10/constants.rb b/qpid/cpp/rubygen/framing.0-10/constants.rb index d07c84e63a..fa2031b0ce 100755 --- a/qpid/cpp/rubygen/framing.0-10/constants.rb +++ b/qpid/cpp/rubygen/framing.0-10/constants.rb @@ -142,7 +142,7 @@ EOS enum = @amqp.class_(class_name).domain(domain_name).enum enum.choices.each { |c| declare_exception(c, base, class_name, enum) unless c.name == "normal" } genl - genl "sys::ExceptionHolder create#{base}(int code, const std::string& text);" + genl "QPID_COMMON_EXTERN sys::ExceptionHolder create#{base}(int code, const std::string& text);" end def create_exception(class_name, domain_name, base, invalid) @@ -165,6 +165,7 @@ EOS include "qpid/Exception" include "qpid/sys/ExceptionHolder" include "enum" + include "qpid/CommonImportExport.h" namespace(@namespace) { declare_exceptions("execution", "error-code", "SessionException") declare_exceptions("connection", "close-code", "ConnectionException") diff --git a/qpid/cpp/rubygen/framing.0-10/structs.rb b/qpid/cpp/rubygen/framing.0-10/structs.rb index a68e1afb1e..8ea8a91172 100644 --- a/qpid/cpp/rubygen/framing.0-10/structs.rb +++ b/qpid/cpp/rubygen/framing.0-10/structs.rb @@ -351,15 +351,15 @@ EOS end def declare_packed_accessors(f) - genl "void set#{f.name.caps}(#{f.cpptype.param} _#{f.cppname});"; - genl "#{f.cpptype.ret} get#{f.name.caps}() const;" + genl "QPID_COMMON_EXTERN void set#{f.name.caps}(#{f.cpptype.param} _#{f.cppname});"; + genl "QPID_COMMON_EXTERN #{f.cpptype.ret} get#{f.name.caps}() const;" if (f.cpptype.name == "FieldTable") - genl "#{f.cpptype.name}& get#{f.name.caps}();" + genl "QPID_COMMON_EXTERN #{f.cpptype.name}& get#{f.name.caps}();" end if (f.type_ != "bit") #extra 'accessors' for packed fields: - genl "bool has#{f.name.caps}() const;" - genl "void clear#{f.name.caps}Flag();" + genl "QPID_COMMON_EXTERN bool has#{f.name.caps}() const;" + genl "QPID_COMMON_EXTERN void clear#{f.name.caps}Flag();" end end @@ -399,6 +399,7 @@ EOS #include <ostream> #include "qpid/framing/amqp_types_full.h" +#include "qpid/CommonImportExport.h" namespace qpid { namespace framing { @@ -438,17 +439,17 @@ EOS methodbody_extra_defs(s) end if (s.kind_of? AmqpStruct) - indent {genl "friend std::ostream& operator<<(std::ostream&, const #{classname}&);" } + indent {genl "QPID_COMMON_EXTERN friend std::ostream& operator<<(std::ostream&, const #{classname}&);" } end gen <<EOS - void encode(Buffer&) const; - void decode(Buffer&, uint32_t=0); - void encodeStructBody(Buffer&) const; - void decodeStructBody(Buffer&, uint32_t=0); - uint32_t encodedSize() const; - uint32_t bodySize() const; - void print(std::ostream& out) const; + QPID_COMMON_EXTERN void encode(Buffer&) const; + QPID_COMMON_EXTERN void decode(Buffer&, uint32_t=0); + QPID_COMMON_EXTERN void encodeStructBody(Buffer&) const; + QPID_COMMON_EXTERN void decodeStructBody(Buffer&, uint32_t=0); + QPID_COMMON_EXTERN uint32_t encodedSize() const; + QPID_COMMON_EXTERN uint32_t bodySize() const; + QPID_COMMON_EXTERN void print(std::ostream& out) const; }; /* class #{classname} */ }} diff --git a/qpid/cpp/src/Makefile.am b/qpid/cpp/src/Makefile.am index 5d50756ec1..57c6c4cca7 100644 --- a/qpid/cpp/src/Makefile.am +++ b/qpid/cpp/src/Makefile.am @@ -715,7 +715,9 @@ nobase_include_HEADERS = \ qpid/sys/Time.h \ qpid/sys/Timer.h \ qpid/sys/TimeoutHandler.h \ - qpid/sys/uuid.h + qpid/sys/uuid.h \ + qpid/CommonImportExport.h \ + qpid/client/ClientImportExport.h # Force build of qpidd during dist phase so help2man will work. dist-hook: $(BUILT_SOURCES) diff --git a/qpid/cpp/src/qpid/Address.h b/qpid/cpp/src/qpid/Address.h index 9669985165..a5a4345ba3 100755 --- a/qpid/cpp/src/qpid/Address.h +++ b/qpid/cpp/src/qpid/Address.h @@ -20,7 +20,7 @@ */ #include "qpid/sys/IntegerTypes.h" - +#include "qpid/CommonImportExport.h" #include <boost/variant.hpp> #include <iosfwd> #include <string> @@ -31,12 +31,12 @@ namespace qpid { /** TCP address of a broker - host:port */ struct TcpAddress { static const uint16_t DEFAULT_PORT=5672; - explicit TcpAddress(const std::string& host_=std::string(),uint16_t port_=DEFAULT_PORT); + QPID_COMMON_EXTERN explicit TcpAddress(const std::string& host_=std::string(),uint16_t port_=DEFAULT_PORT); std::string host; uint16_t port; }; bool operator==(const TcpAddress& x, const TcpAddress& y); -std::ostream& operator<<(std::ostream& os, const TcpAddress& a); +QPID_COMMON_EXTERN std::ostream& operator<<(std::ostream& os, const TcpAddress& a); /**@internal Not a real address type, this is a placeholder to * demonstrate and validate multi-protocol Urls for unit tests and diff --git a/qpid/cpp/src/qpid/CommonImportExport.h b/qpid/cpp/src/qpid/CommonImportExport.h new file mode 100644 index 0000000000..47872646d9 --- /dev/null +++ b/qpid/cpp/src/qpid/CommonImportExport.h @@ -0,0 +1,33 @@ +#ifndef QPID_COMMON_IMPORT_EXPORT_H +#define QPID_COMMON_IMPORT_EXPORT_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. + */ + +#if defined(WIN32) && !defined(QPID_DECLARE_STATIC) +#if defined(COMMON_EXPORT) +#define QPID_COMMON_EXTERN __declspec(dllexport) +#else +#define QPID_COMMON_EXTERN __declspec(dllimport) +#endif +#else +#define QPID_COMMON_EXTERN +#endif + +#endif diff --git a/qpid/cpp/src/qpid/DataDir.h b/qpid/cpp/src/qpid/DataDir.h index 6b45d8747b..dfdd498cbc 100644 --- a/qpid/cpp/src/qpid/DataDir.h +++ b/qpid/cpp/src/qpid/DataDir.h @@ -24,6 +24,7 @@ #include <string> #include <memory> #include "qpid/sys/LockFile.h" +#include "qpid/CommonImportExport.h" namespace qpid { @@ -38,8 +39,8 @@ class DataDir public: - DataDir (std::string path); - ~DataDir (); + QPID_COMMON_EXTERN DataDir (std::string path); + QPID_COMMON_EXTERN ~DataDir (); bool isEnabled() { return enabled; } const std::string& getPath() { return dirPath; } diff --git a/qpid/cpp/src/qpid/Exception.h b/qpid/cpp/src/qpid/Exception.h index 86bf8fbc4a..0b0bc33e93 100644 --- a/qpid/cpp/src/qpid/Exception.h +++ b/qpid/cpp/src/qpid/Exception.h @@ -27,7 +27,7 @@ #include "qpid/framing/enum.h" #include "qpid/sys/StrError.h" #include "qpid/Msg.h" - +#include "qpid/CommonImportExport.h" #include <memory> #include <string> #include <errno.h> @@ -41,11 +41,11 @@ namespace qpid class Exception : public std::exception { public: - explicit Exception(const std::string& message=std::string()) throw(); - virtual ~Exception() throw(); - virtual const char* what() const throw(); // prefix: message - virtual std::string getMessage() const; // Unprefixed message - virtual std::string getPrefix() const; // Prefix + QPID_COMMON_EXTERN explicit Exception(const std::string& message=std::string()) throw(); + QPID_COMMON_EXTERN virtual ~Exception() throw(); + QPID_COMMON_EXTERN virtual const char* what() const throw(); // prefix: message + QPID_COMMON_EXTERN virtual std::string getMessage() const; // Unprefixed message + QPID_COMMON_EXTERN virtual std::string getPrefix() const; // Prefix private: std::string message; @@ -77,8 +77,8 @@ struct ConnectionException : public Exception { }; struct ClosedException : public Exception { - ClosedException(const std::string& msg=std::string()); - std::string getPrefix() const; + QPID_COMMON_EXTERN ClosedException(const std::string& msg=std::string()); + QPID_COMMON_EXTERN std::string getPrefix() const; }; /** diff --git a/qpid/cpp/src/qpid/Modules.h b/qpid/cpp/src/qpid/Modules.h index 2a3b24f359..ce06dd0ef6 100644 --- a/qpid/cpp/src/qpid/Modules.h +++ b/qpid/cpp/src/qpid/Modules.h @@ -25,6 +25,7 @@ #include "Options.h" #include <string> #include <vector> +#include "qpid/CommonImportExport.h" namespace qpid { @@ -32,11 +33,11 @@ struct ModuleOptions : public qpid::Options { std::string loadDir; std::vector<std::string> load; bool noLoad; - ModuleOptions(const std::string& defaultModuleDir); + QPID_COMMON_EXTERN ModuleOptions(const std::string& defaultModuleDir); }; -void tryShlib(const char* libname, bool noThrow); -void loadModuleDir (std::string dirname, bool isDefault); +QPID_COMMON_EXTERN void tryShlib(const char* libname, bool noThrow); +QPID_COMMON_EXTERN void loadModuleDir (std::string dirname, bool isDefault); } // namespace qpid diff --git a/qpid/cpp/src/qpid/Options.h b/qpid/cpp/src/qpid/Options.h index cb86d27241..aa55f6ecea 100644 --- a/qpid/cpp/src/qpid/Options.h +++ b/qpid/cpp/src/qpid/Options.h @@ -29,7 +29,7 @@ #include <iterator> #include <algorithm> #include <string> - +#include "qpid/CommonImportExport.h" namespace qpid { namespace po=boost::program_options; @@ -37,7 +37,7 @@ namespace po=boost::program_options; ///@internal -std::string prettyArg(const std::string&, const std::string&); +QPID_COMMON_EXTERN std::string prettyArg(const std::string&, const std::string&); /** @internal Normally only constructed by optValue() */ template <class T> @@ -192,24 +192,20 @@ options_description_less_easy_init #endif - - - - struct Options : public po::options_description { struct Exception : public qpid::Exception { Exception(const std::string& msg) : qpid::Exception(msg) {} }; - Options(const std::string& name=std::string()); + QPID_COMMON_EXTERN Options(const std::string& name=std::string()); /** * Parses options from argc/argv, environment variables and config file. * Note the filename argument can reference an options variable that * is updated by argc/argv or environment variable parsing. */ - void parse(int argc, char const* const* argv, + QPID_COMMON_EXTERN void parse(int argc, char const* const* argv, const std::string& configfile=std::string(), bool allowUnknown = false); @@ -242,7 +238,7 @@ struct Options : public po::options_description { * Standard options for configuration */ struct CommonOptions : public Options { - CommonOptions(const std::string& name=std::string(), + QPID_COMMON_EXTERN CommonOptions(const std::string& name=std::string(), const std::string& configfile=std::string()); bool help; bool version; diff --git a/qpid/cpp/src/qpid/Plugin.h b/qpid/cpp/src/qpid/Plugin.h index 50d8e01227..913152f9e1 100644 --- a/qpid/cpp/src/qpid/Plugin.h +++ b/qpid/cpp/src/qpid/Plugin.h @@ -24,6 +24,7 @@ #include <boost/noncopyable.hpp> #include <boost/function.hpp> #include <vector> +#include "qpid/CommonImportExport.h" /**@file Generic plug-in framework. */ @@ -46,10 +47,10 @@ class Plugin : private boost::noncopyable { { public: /** Calls finalize() if not already called. */ - virtual ~Target(); + QPID_COMMON_EXTERN virtual ~Target(); /** Run all the finalizers */ - void finalize(); + QPID_COMMON_EXTERN void finalize(); /** Add a function to run when finalize() is called */ void addFinalizer(const boost::function<void()>&); @@ -65,9 +66,9 @@ class Plugin : private boost::noncopyable { * member variable in a library so it is registered during * initialization when the library is loaded. */ - Plugin(); + QPID_COMMON_EXTERN Plugin(); - virtual ~Plugin(); + QPID_COMMON_EXTERN virtual ~Plugin(); /** * Configuration options for the plugin. @@ -76,7 +77,7 @@ class Plugin : private boost::noncopyable { * @return An options group or 0 for no options. Default returns 0. * Plugin retains ownership of return value. */ - virtual Options* getOptions(); + QPID_COMMON_EXTERN virtual Options* getOptions(); /** * Initialize Plugin functionality on a Target, called before @@ -101,16 +102,16 @@ class Plugin : private boost::noncopyable { /** List of registered Plugin objects. * Caller must not delete plugin pointers. */ - static const Plugins& getPlugins(); + QPID_COMMON_EXTERN static const Plugins& getPlugins(); /** Call earlyInitialize() on all registered plugins */ - static void earlyInitAll(Target&); + QPID_COMMON_EXTERN static void earlyInitAll(Target&); /** Call initialize() on all registered plugins */ - static void initializeAll(Target&); + QPID_COMMON_EXTERN static void initializeAll(Target&); /** For each registered plugin, add plugin.getOptions() to opts. */ - static void addOptions(Options& opts); + QPID_COMMON_EXTERN static void addOptions(Options& opts); }; } // namespace qpid diff --git a/qpid/cpp/src/qpid/SessionId.h b/qpid/cpp/src/qpid/SessionId.h index 291c42a2bb..318782ecd3 100644 --- a/qpid/cpp/src/qpid/SessionId.h +++ b/qpid/cpp/src/qpid/SessionId.h @@ -24,6 +24,7 @@ #include <boost/operators.hpp> #include <string> +#include <qpid/CommonImportExport.h> namespace qpid { @@ -42,16 +43,16 @@ class SessionId : boost::totally_ordered1<SessionId> { std::string userId; std::string name; public: - SessionId(const std::string& userId=std::string(), const std::string& name=std::string()); + QPID_COMMON_EXTERN SessionId(const std::string& userId=std::string(), const std::string& name=std::string()); std::string getUserId() const { return userId; } std::string getName() const { return name; } - bool operator<(const SessionId&) const ; - bool operator==(const SessionId& id) const; + QPID_COMMON_EXTERN bool operator<(const SessionId&) const ; + QPID_COMMON_EXTERN bool operator==(const SessionId& id) const; // Convert to a string std::string str() const; }; -std::ostream& operator<<(std::ostream&, const SessionId&); +QPID_COMMON_EXTERN std::ostream& operator<<(std::ostream&, const SessionId&); } // namespace qpid diff --git a/qpid/cpp/src/qpid/SessionState.h b/qpid/cpp/src/qpid/SessionState.h index bf4ff6d326..f12cc7b4d8 100644 --- a/qpid/cpp/src/qpid/SessionState.h +++ b/qpid/cpp/src/qpid/SessionState.h @@ -31,6 +31,7 @@ #include <boost/range/iterator_range.hpp> #include <vector> #include <iosfwd> +#include <qpid/CommonImportExport.h> namespace qpid { using framing::SequenceNumber; @@ -38,16 +39,16 @@ using framing::SequenceSet; /** A point in the session. Points to command id + offset */ struct SessionPoint : boost::totally_ordered1<SessionPoint> { - SessionPoint(SequenceNumber command = 0, uint64_t offset = 0); + QPID_COMMON_EXTERN SessionPoint(SequenceNumber command = 0, uint64_t offset = 0); SequenceNumber command; uint64_t offset; /** Advance past frame f */ - void advance(const framing::AMQFrame& f); + QPID_COMMON_EXTERN void advance(const framing::AMQFrame& f); - bool operator<(const SessionPoint&) const; - bool operator==(const SessionPoint&) const; + QPID_COMMON_EXTERN bool operator<(const SessionPoint&) const; + QPID_COMMON_EXTERN bool operator==(const SessionPoint&) const; }; std::ostream& operator<<(std::ostream&, const SessionPoint&); @@ -78,14 +79,14 @@ class SessionState { typedef boost::iterator_range<ReplayList::iterator> ReplayRange; struct Configuration { - Configuration(size_t flush=1024*1024, size_t hard=0); + QPID_COMMON_EXTERN Configuration(size_t flush=1024*1024, size_t hard=0); size_t replayFlushLimit; // Flush when the replay list >= N bytes. 0 disables. size_t replayHardLimit; // Kill session if replay list > N bytes. 0 disables. }; - SessionState(const SessionId& =SessionId(), const Configuration& =Configuration()); + QPID_COMMON_EXTERN SessionState(const SessionId& =SessionId(), const Configuration& =Configuration()); - virtual ~SessionState(); + QPID_COMMON_EXTERN virtual ~SessionState(); bool hasState() const; @@ -100,78 +101,78 @@ class SessionState { // ==== Functions for sender state. /** Record frame f for replay. Should not be called during replay. */ - virtual void senderRecord(const framing::AMQFrame& f); + QPID_COMMON_EXTERN virtual void senderRecord(const framing::AMQFrame& f); /** @return true if we should send flush for confirmed and completed commands. */ - virtual bool senderNeedFlush() const; + QPID_COMMON_EXTERN virtual bool senderNeedFlush() const; /** Called when flush for confirmed and completed commands is sent to peer. */ - virtual void senderRecordFlush(); + QPID_COMMON_EXTERN virtual void senderRecordFlush(); /** True if we should reply to the next incoming completed command */ - virtual bool senderNeedKnownCompleted() const; + QPID_COMMON_EXTERN virtual bool senderNeedKnownCompleted() const; /** Called when knownCompleted is sent to peer. */ - virtual void senderRecordKnownCompleted(); + QPID_COMMON_EXTERN virtual void senderRecordKnownCompleted(); /** Called when the peer confirms up to comfirmed. */ - virtual void senderConfirmed(const SessionPoint& confirmed); + QPID_COMMON_EXTERN virtual void senderConfirmed(const SessionPoint& confirmed); /** Called when the peer indicates commands completed */ - virtual void senderCompleted(const SequenceSet& commands); + QPID_COMMON_EXTERN virtual void senderCompleted(const SequenceSet& commands); /** Point from which the next new (not replayed) data will be sent. */ - virtual SessionPoint senderGetCommandPoint(); + QPID_COMMON_EXTERN virtual SessionPoint senderGetCommandPoint(); /** Set of outstanding incomplete commands */ - virtual SequenceSet senderGetIncomplete() const; + QPID_COMMON_EXTERN virtual SequenceSet senderGetIncomplete() const; /** Point from which we can replay. */ - virtual SessionPoint senderGetReplayPoint() const; + QPID_COMMON_EXTERN virtual SessionPoint senderGetReplayPoint() const; /** Peer expecting commands from this point. *@return Range of frames to be replayed. */ - virtual ReplayRange senderExpected(const SessionPoint& expected); + QPID_COMMON_EXTERN virtual ReplayRange senderExpected(const SessionPoint& expected); // ==== Functions for receiver state /** Set the command point. */ - virtual void receiverSetCommandPoint(const SessionPoint& point); + QPID_COMMON_EXTERN virtual void receiverSetCommandPoint(const SessionPoint& point); /** Returns true if frame should be be processed, false if it is a duplicate. */ - virtual bool receiverRecord(const framing::AMQFrame& f); + QPID_COMMON_EXTERN virtual bool receiverRecord(const framing::AMQFrame& f); /** Command completed locally */ - virtual void receiverCompleted(SequenceNumber command, bool cumulative=false); + QPID_COMMON_EXTERN virtual void receiverCompleted(SequenceNumber command, bool cumulative=false); /** Peer has indicated commands are known completed */ - virtual void receiverKnownCompleted(const SequenceSet& commands); + QPID_COMMON_EXTERN virtual void receiverKnownCompleted(const SequenceSet& commands); /** True if the next completed control should set the timely-reply argument * to request a knonw-completed response. */ - virtual bool receiverNeedKnownCompleted() const; + QPID_COMMON_EXTERN virtual bool receiverNeedKnownCompleted() const; /** Get the incoming command point */ - virtual const SessionPoint& receiverGetExpected() const; + QPID_COMMON_EXTERN virtual const SessionPoint& receiverGetExpected() const; /** Get the received high-water-mark, may be > getExpected() during replay */ - virtual const SessionPoint& receiverGetReceived() const; + QPID_COMMON_EXTERN virtual const SessionPoint& receiverGetReceived() const; /** Completed received commands that the peer may not know about. */ - virtual const SequenceSet& receiverGetUnknownComplete() const; + QPID_COMMON_EXTERN virtual const SequenceSet& receiverGetUnknownComplete() const; /** Incomplete received commands. */ - virtual const SequenceSet& receiverGetIncomplete() const; + QPID_COMMON_EXTERN virtual const SequenceSet& receiverGetIncomplete() const; /** ID of the command currently being handled. */ - virtual SequenceNumber receiverGetCurrent() const; + QPID_COMMON_EXTERN virtual SequenceNumber receiverGetCurrent() const; /** Set the state variables, used to create a session that will resume * from some previously established point. */ - virtual void setState( + QPID_COMMON_EXTERN virtual void setState( const SequenceNumber& replayStart, const SequenceNumber& sendCommandPoint, const SequenceSet& sentIncomplete, diff --git a/qpid/cpp/src/qpid/StringUtils.h b/qpid/cpp/src/qpid/StringUtils.h index 3120e43334..4130fae017 100644 --- a/qpid/cpp/src/qpid/StringUtils.h +++ b/qpid/cpp/src/qpid/StringUtils.h @@ -22,6 +22,8 @@ * */ +#include "qpid/CommonImportExport.h" + #include <string> #include <vector> @@ -31,12 +33,12 @@ namespace qpid { * Split 'in' into words using delimiters in 'delims' and put * resulting strings into 'out' vector. */ -void split(std::vector<std::string>& out, const std::string& in, const std::string& delims); +QPID_COMMON_EXTERN void split(std::vector<std::string>& out, const std::string& in, const std::string& delims); /** * Split 'in' into words using delimiters in 'delims' and return the * resulting strings in a vector. */ -std::vector<std::string> split(const std::string& in, const std::string& delims); +QPID_COMMON_EXTERN std::vector<std::string> split(const std::string& in, const std::string& delims); } // namespace qpid diff --git a/qpid/cpp/src/qpid/Url.h b/qpid/cpp/src/qpid/Url.h index 07ca46e70c..353eac28f3 100644 --- a/qpid/cpp/src/qpid/Url.h +++ b/qpid/cpp/src/qpid/Url.h @@ -25,10 +25,11 @@ #include <vector> #include <new> #include <ostream> +#include "qpid/CommonImportExport.h" namespace qpid { -std::ostream& operator<<(std::ostream& os, const TcpAddress& a); +QPID_COMMON_EXTERN std::ostream& operator<<(std::ostream& os, const TcpAddress& a); /** An AMQP URL contains a list of addresses */ struct Url : public std::vector<Address> { @@ -38,12 +39,12 @@ struct Url : public std::vector<Address> { /** Url with local IP address(es), may be more than one address * on a multi-homed host. */ - static Url getIpAddressesUrl(uint16_t port); + QPID_COMMON_EXTERN static Url getIpAddressesUrl(uint16_t port); struct Invalid : public Exception { Invalid(const std::string& s); }; /** Convert to string form. */ - std::string str() const; + QPID_COMMON_EXTERN std::string str() const; /** Empty URL. */ Url() {} @@ -62,14 +63,14 @@ struct Url : public std::vector<Address> { Url& operator=(const std::string& s) { parse(s); return *this; } /** Throw Invalid if the URL does not contain any addresses. */ - void throwIfEmpty() const; + QPID_COMMON_EXTERN void throwIfEmpty() const; /** Replace contents with parsed URL as defined in * https://wiki.108.redhat.com/jira/browse/AMQP-95 *@exception Invalid if the url is invalid. */ - void parse(const char* url); - void parse(const std::string& url) { parse(url.c_str()); } + QPID_COMMON_EXTERN void parse(const char* url); + QPID_COMMON_EXTERN void parse(const std::string& url) { parse(url.c_str()); } /** Replace contesnts with parsed URL as defined in * https://wiki.108.redhat.com/jira/browse/AMQP-95 @@ -84,8 +85,8 @@ struct Url : public std::vector<Address> { inline bool operator==(const Url& a, const Url& b) { return a.str()==b.str(); } inline bool operator!=(const Url& a, const Url& b) { return a.str()!=b.str(); } -std::ostream& operator<<(std::ostream& os, const Url& url); -std::istream& operator>>(std::istream& is, Url& url); +QPID_COMMON_EXTERN std::ostream& operator<<(std::ostream& os, const Url& url); +QPID_COMMON_EXTERN std::istream& operator>>(std::istream& is, Url& url); } // namespace qpid diff --git a/qpid/cpp/src/qpid/amqp_0_10/Connection.h b/qpid/cpp/src/qpid/amqp_0_10/Connection.h index 743a7de3aa..b317eed967 100644 --- a/qpid/cpp/src/qpid/amqp_0_10/Connection.h +++ b/qpid/cpp/src/qpid/amqp_0_10/Connection.h @@ -27,6 +27,7 @@ #include "qpid/sys/ConnectionInputHandler.h" #include "qpid/sys/ConnectionOutputHandler.h" #include "qpid/sys/Mutex.h" +#include "qpid/CommonImportExport.h" #include <boost/intrusive_ptr.hpp> #include <memory> #include <deque> @@ -56,8 +57,8 @@ class Connection : public sys::ConnectionCodec, size_t buffered; public: - Connection(sys::OutputControl&, const std::string& id, bool isClient); - void setInputHandler(std::auto_ptr<sys::ConnectionInputHandler> c); + QPID_COMMON_EXTERN Connection(sys::OutputControl&, const std::string& id, bool isClient); + QPID_COMMON_EXTERN void setInputHandler(std::auto_ptr<sys::ConnectionInputHandler> c); size_t decode(const char* buffer, size_t size); size_t encode(const char* buffer, size_t size); bool isClosed() const; diff --git a/qpid/cpp/src/qpid/amqp_0_10/SessionHandler.h b/qpid/cpp/src/qpid/amqp_0_10/SessionHandler.h index d7af7dd6c7..0b158ec2b4 100644 --- a/qpid/cpp/src/qpid/amqp_0_10/SessionHandler.h +++ b/qpid/cpp/src/qpid/amqp_0_10/SessionHandler.h @@ -26,6 +26,7 @@ #include "qpid/framing/AMQP_AllProxy.h" #include "qpid/framing/AMQP_AllOperations.h" #include "qpid/SessionState.h" +#include "qpid/CommonImportExport.h" namespace qpid { @@ -43,8 +44,8 @@ class SessionHandler : public framing::AMQP_AllOperations::SessionHandler, public framing::FrameHandler::InOutHandler { public: - SessionHandler(framing::FrameHandler* out=0, uint16_t channel=0); - ~SessionHandler(); + QPID_COMMON_EXTERN SessionHandler(framing::FrameHandler* out=0, uint16_t channel=0); + QPID_COMMON_EXTERN ~SessionHandler(); void setChannel(uint16_t ch) { channel = ch; } uint16_t getChannel() const { return channel.get(); } @@ -55,35 +56,35 @@ class SessionHandler : public framing::AMQP_AllOperations::SessionHandler, virtual framing::FrameHandler* getInHandler() = 0; // Non-protocol methods, called locally to initiate some action. - void sendDetach(); - void sendCompletion(); - void sendAttach(bool force); - void sendTimeout(uint32_t t); - void sendFlush(); - void markReadyToSend();//TODO: only needed for inter-broker bridge; cleanup + QPID_COMMON_EXTERN void sendDetach(); + QPID_COMMON_EXTERN void sendCompletion(); + QPID_COMMON_EXTERN void sendAttach(bool force); + QPID_COMMON_EXTERN void sendTimeout(uint32_t t); + QPID_COMMON_EXTERN void sendFlush(); + QPID_COMMON_EXTERN void markReadyToSend();//TODO: only needed for inter-broker bridge; cleanup /** True if the handler is ready to send and receive */ bool ready() const; // Protocol methods - void attach(const std::string& name, bool force); - void attached(const std::string& name); - void detach(const std::string& name); - void detached(const std::string& name, uint8_t code); - - void requestTimeout(uint32_t t); - void timeout(uint32_t t); - - void commandPoint(const framing::SequenceNumber& id, uint64_t offset); - void expected(const framing::SequenceSet& commands, const framing::Array& fragments); - void confirmed(const framing::SequenceSet& commands,const framing::Array& fragments); - void completed(const framing::SequenceSet& commands, bool timelyReply); - void knownCompleted(const framing::SequenceSet& commands); - void flush(bool expected, bool confirmed, bool completed); - void gap(const framing::SequenceSet& commands); + QPID_COMMON_EXTERN void attach(const std::string& name, bool force); + QPID_COMMON_EXTERN void attached(const std::string& name); + QPID_COMMON_EXTERN void detach(const std::string& name); + QPID_COMMON_EXTERN void detached(const std::string& name, uint8_t code); + + QPID_COMMON_EXTERN void requestTimeout(uint32_t t); + QPID_COMMON_EXTERN void timeout(uint32_t t); + + QPID_COMMON_EXTERN void commandPoint(const framing::SequenceNumber& id, uint64_t offset); + QPID_COMMON_EXTERN void expected(const framing::SequenceSet& commands, const framing::Array& fragments); + QPID_COMMON_EXTERN void confirmed(const framing::SequenceSet& commands,const framing::Array& fragments); + QPID_COMMON_EXTERN void completed(const framing::SequenceSet& commands, bool timelyReply); + QPID_COMMON_EXTERN void knownCompleted(const framing::SequenceSet& commands); + QPID_COMMON_EXTERN void flush(bool expected, bool confirmed, bool completed); + QPID_COMMON_EXTERN void gap(const framing::SequenceSet& commands); protected: - virtual void invoke(const framing::AMQMethodBody& m); + QPID_COMMON_EXTERN virtual void invoke(const framing::AMQMethodBody& m); virtual void setState(const std::string& sessionName, bool force) = 0; virtual void channelException(framing::session::DetachCode code, const std::string& msg) = 0; @@ -94,9 +95,9 @@ class SessionHandler : public framing::AMQP_AllOperations::SessionHandler, virtual void readyToSend() {} virtual void readyToReceive() {} - virtual void handleDetach(); - virtual void handleIn(framing::AMQFrame&); - virtual void handleOut(framing::AMQFrame&); + QPID_COMMON_EXTERN virtual void handleDetach(); + QPID_COMMON_EXTERN virtual void handleIn(framing::AMQFrame&); + QPID_COMMON_EXTERN virtual void handleOut(framing::AMQFrame&); framing::ChannelHandler channel; framing::AMQP_AllProxy::Session peer; diff --git a/qpid/cpp/src/qpid/client/ClientImportExport.h b/qpid/cpp/src/qpid/client/ClientImportExport.h new file mode 100644 index 0000000000..0e6e5660d6 --- /dev/null +++ b/qpid/cpp/src/qpid/client/ClientImportExport.h @@ -0,0 +1,33 @@ +#ifndef QPID_CLIENT_IMPORT_EXPORT_H +#define QPID_CLIENT_IMPORT_EXPORT_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. + */ + +#if defined(WIN32) && !defined(QPID_DECLARE_STATIC) +#if defined(CLIENT_EXPORT) +#define QPID_CLIENT_EXTERN __declspec(dllexport) +#else +#define QPID_CLIENT_EXTERN __declspec(dllimport) +#endif +#else +#define QPID_CLIENT_EXTERN +#endif + +#endif diff --git a/qpid/cpp/src/qpid/client/Connection.h b/qpid/cpp/src/qpid/client/Connection.h index 03631ef56f..846ac33790 100644 --- a/qpid/cpp/src/qpid/client/Connection.h +++ b/qpid/cpp/src/qpid/client/Connection.h @@ -24,6 +24,7 @@ #include <map> #include <string> #include "qpid/client/Session.h" +#include "qpid/client/ClientImportExport.h" namespace qpid { @@ -58,9 +59,9 @@ class Connection * Creates a connection object, but does not open the connection. * @see open() */ - Connection(); + QPID_CLIENT_EXTERN Connection(); - ~Connection(); + QPID_CLIENT_EXTERN ~Connection(); /** * Opens a connection to a broker. @@ -79,7 +80,7 @@ class Connection * hosts, where implemented(!), provide namespace partitioning * within a single broker). */ - void open(const std::string& host, int port = 5672, + QPID_CLIENT_EXTERN void open(const std::string& host, int port = 5672, const std::string& uid = "guest", const std::string& pwd = "guest", const std::string& virtualhost = "/", uint16_t maxFrameSize=65535); @@ -101,7 +102,7 @@ class Connection * hosts, where implemented(!), provide namespace partitioning * within a single broker). */ - void open(const Url& url, + QPID_CLIENT_EXTERN void open(const Url& url, const std::string& uid = "guest", const std::string& pwd = "guest", const std::string& virtualhost = "/", uint16_t maxFrameSize=65535); @@ -116,14 +117,14 @@ class Connection * @param settings used for any settings not provided by the URL. * Settings provided by the url (e.g. host, port) are ignored. */ - void open(const Url& url, const ConnectionSettings& settings); + QPID_CLIENT_EXTERN void open(const Url& url, const ConnectionSettings& settings); /** * Opens a connection to a broker. * * @param the settings to use (host, port etc). @see ConnectionSettings. */ - void open(const ConnectionSettings& settings); + QPID_CLIENT_EXTERN void open(const ConnectionSettings& settings); /** * Close the connection. @@ -131,7 +132,7 @@ class Connection * Any further use of this connection (without reopening it) will * not succeed. */ - void close(); + QPID_CLIENT_EXTERN void close(); /** * Create a new session on this connection. Sessions allow @@ -174,23 +175,23 @@ class Connection * If the name is empty (the default) then a unique name will be * chosen using a Universally-unique identifier (UUID) algorithm. */ - Session newSession(const std::string& name=std::string(), uint32_t timeoutSeconds = 0); + QPID_CLIENT_EXTERN Session newSession(const std::string& name=std::string(), uint32_t timeoutSeconds = 0); /** * Resume a suspended session. A session may be resumed * on a different connection to the one that created it. */ - void resume(Session& session); + QPID_CLIENT_EXTERN void resume(Session& session); - bool isOpen() const; + QPID_CLIENT_EXTERN bool isOpen() const; - std::vector<Url> getKnownBrokers(); - void registerFailureCallback ( boost::function<void ()> fn ); + QPID_CLIENT_EXTERN std::vector<Url> getKnownBrokers(); + QPID_CLIENT_EXTERN void registerFailureCallback ( boost::function<void ()> fn ); /** * Return the set of client negotiated settings */ - const ConnectionSettings& getNegotiatedSettings(); + QPID_CLIENT_EXTERN const ConnectionSettings& getNegotiatedSettings(); friend class ConnectionAccess; ///<@internal friend class SessionBase_0_10; ///<@internal diff --git a/qpid/cpp/src/qpid/client/ConnectionSettings.h b/qpid/cpp/src/qpid/client/ConnectionSettings.h index f60b11a4ab..71fef219b4 100644 --- a/qpid/cpp/src/qpid/client/ConnectionSettings.h +++ b/qpid/cpp/src/qpid/client/ConnectionSettings.h @@ -25,6 +25,7 @@ #include "qpid/Options.h" #include "qpid/log/Options.h" #include "qpid/Url.h" +#include "qpid/client/ClientImportExport.h" #include <iostream> #include <exception> @@ -42,14 +43,14 @@ namespace client { */ struct ConnectionSettings { - ConnectionSettings(); - virtual ~ConnectionSettings(); + QPID_CLIENT_EXTERN ConnectionSettings(); + QPID_CLIENT_EXTERN virtual ~ConnectionSettings(); /** * Allows socket to be configured; default only sets tcp-nodelay * based on the flag set. Can be overridden. */ - virtual void configureSocket(qpid::sys::Socket&) const; + QPID_CLIENT_EXTERN virtual void configureSocket(qpid::sys::Socket&) const; /** * The protocol used for the connection (defaults to 'tcp') diff --git a/qpid/cpp/src/qpid/client/FailoverManager.h b/qpid/cpp/src/qpid/client/FailoverManager.h index 8b6eeda8a1..bef5e18840 100644 --- a/qpid/cpp/src/qpid/client/FailoverManager.h +++ b/qpid/cpp/src/qpid/client/FailoverManager.h @@ -27,6 +27,7 @@ #include "qpid/Exception.h" #include "qpid/client/AsyncSession.h" #include "qpid/sys/Monitor.h" +#include "qpid/client/ClientImportExport.h" #include <vector> namespace qpid { @@ -84,7 +85,7 @@ class FailoverManager * to edit or reorder the list of urls to which reconnection is * attempted */ - FailoverManager(const ConnectionSettings& settings, ReconnectionStrategy* strategy = 0); + QPID_CLIENT_EXTERN FailoverManager(const ConnectionSettings& settings, ReconnectionStrategy* strategy = 0); /** * Return the current connection if open or attept to reconnect to * the specified list of urls. If no list is specified the list of @@ -95,15 +96,15 @@ class FailoverManager * If the full list is tried and all attempts fail, * CannotConnectException is thrown. */ - Connection& connect(std::vector<Url> brokers = std::vector<Url>()); + QPID_CLIENT_EXTERN Connection& connect(std::vector<Url> brokers = std::vector<Url>()); /** * Return the current connection whether open or not */ - Connection& getConnection(); + QPID_CLIENT_EXTERN Connection& getConnection(); /** * Close the current connection */ - void close(); + QPID_CLIENT_EXTERN void close(); /** * Reliably execute the specified command. This involves creating * a session on which to carry out the work of the command, @@ -116,7 +117,7 @@ class FailoverManager * on failover to ensure they continue to use the same logical * connection. */ - void execute(Command&); + QPID_CLIENT_EXTERN void execute(Command&); private: enum State {IDLE, CONNECTING, CANT_CONNECT}; diff --git a/qpid/cpp/src/qpid/client/Handle.h b/qpid/cpp/src/qpid/client/Handle.h index 4fd82b7646..d8b822d0f9 100644 --- a/qpid/cpp/src/qpid/client/Handle.h +++ b/qpid/cpp/src/qpid/client/Handle.h @@ -22,6 +22,8 @@ * */ +#include "qpid/client/ClientImportExport.h" + namespace qpid { namespace client { @@ -34,23 +36,23 @@ template <class T> class HandlePrivate; */ template <class T> class Handle { public: - ~Handle(); - Handle(const Handle&); - Handle& operator=(const Handle&); + QPID_CLIENT_EXTERN ~Handle(); + QPID_CLIENT_EXTERN Handle(const Handle&); + QPID_CLIENT_EXTERN Handle& operator=(const Handle&); /**@return true if handle is valid, i.e. not null. */ - bool isValid() const { return impl; } + QPID_CLIENT_EXTERN bool isValid() const { return impl; } /**@return true if handle is null. It is an error to call any function on a null handle. */ - bool isNull() const { return !impl; } + QPID_CLIENT_EXTERN bool isNull() const { return !impl; } - operator bool() const { return impl; } - bool operator !() const { return impl; } + QPID_CLIENT_EXTERN operator bool() const { return impl; } + QPID_CLIENT_EXTERN bool operator !() const { return impl; } - void swap(Handle<T>&); + QPID_CLIENT_EXTERN void swap(Handle<T>&); protected: - Handle(T* =0); + QPID_CLIENT_EXTERN Handle(T* =0); T* impl; friend class HandlePrivate<T>; diff --git a/qpid/cpp/src/qpid/client/Message.h b/qpid/cpp/src/qpid/client/Message.h index 3f932efd8b..235e20f97d 100644 --- a/qpid/cpp/src/qpid/client/Message.h +++ b/qpid/cpp/src/qpid/client/Message.h @@ -25,6 +25,7 @@ #include "qpid/client/Session.h" #include "qpid/framing/MessageTransferBody.h" #include "qpid/framing/TransferContent.h" +#include "qpid/client/ClientImportExport.h" namespace qpid { namespace client { @@ -111,7 +112,7 @@ public: *@param data Data for the message body. *@param routingKey Passed to the exchange that routes the message. */ - Message(const std::string& data=std::string(), + QPID_CLIENT_EXTERN Message(const std::string& data=std::string(), const std::string& routingKey=std::string()); /** The destination of messages sent to the broker is the exchange @@ -119,26 +120,26 @@ public: * the delivery tag identifyig the local subscription (often this * is the name of the subscribed queue.) */ - std::string getDestination() const; + QPID_CLIENT_EXTERN std::string getDestination() const; /** Check the redelivered flag. */ - bool isRedelivered() const; + QPID_CLIENT_EXTERN bool isRedelivered() const; /** Set the redelivered flag. */ - void setRedelivered(bool redelivered); + QPID_CLIENT_EXTERN void setRedelivered(bool redelivered); /** Get a modifyable reference to the message headers. */ - framing::FieldTable& getHeaders(); + QPID_CLIENT_EXTERN framing::FieldTable& getHeaders(); /** Get a non-modifyable reference to the message headers. */ - const framing::FieldTable& getHeaders() const; + QPID_CLIENT_EXTERN const framing::FieldTable& getHeaders() const; ///@internal - const framing::MessageTransferBody& getMethod() const; + QPID_CLIENT_EXTERN const framing::MessageTransferBody& getMethod() const; ///@internal - const framing::SequenceNumber& getId() const; + QPID_CLIENT_EXTERN const framing::SequenceNumber& getId() const; /**@internal for incoming messages */ - Message(const framing::FrameSet& frameset); + QPID_CLIENT_EXTERN Message(const framing::FrameSet& frameset); private: //method and id are only set for received messages: diff --git a/qpid/cpp/src/qpid/client/MessageListener.h b/qpid/cpp/src/qpid/client/MessageListener.h index 75aad6521b..b86aa10c54 100644 --- a/qpid/cpp/src/qpid/client/MessageListener.h +++ b/qpid/cpp/src/qpid/client/MessageListener.h @@ -19,6 +19,7 @@ * */ #include <string> +#include "qpid/client/ClientImportExport.h" #ifndef _MessageListener_ #define _MessageListener_ @@ -85,7 +86,7 @@ namespace client { class MessageListener{ public: - virtual ~MessageListener(); + QPID_CLIENT_EXTERN virtual ~MessageListener(); /** Called for each message arriving from the broker. Override * in your own subclass to process messages. diff --git a/qpid/cpp/src/qpid/client/MessageReplayTracker.h b/qpid/cpp/src/qpid/client/MessageReplayTracker.h index 45b16fb704..280cbae4a5 100644 --- a/qpid/cpp/src/qpid/client/MessageReplayTracker.h +++ b/qpid/cpp/src/qpid/client/MessageReplayTracker.h @@ -23,7 +23,7 @@ */ #include "AsyncSession.h" #include "Message.h" - +#include "qpid/client/ClientImportExport.h" #include <list> #include <string> @@ -37,13 +37,13 @@ namespace client { class MessageReplayTracker { public: - MessageReplayTracker(uint flushInterval); - void send(const Message& message, const std::string& destination = ""); - void init(AsyncSession session); - void replay(AsyncSession session); - void setFlushInterval(uint interval); - uint getFlushInterval(); - void checkCompletion(); + QPID_CLIENT_EXTERN MessageReplayTracker(uint flushInterval); + QPID_CLIENT_EXTERN void send(const Message& message, const std::string& destination = ""); + QPID_CLIENT_EXTERN void init(AsyncSession session); + QPID_CLIENT_EXTERN void replay(AsyncSession session); + QPID_CLIENT_EXTERN void setFlushInterval(uint interval); + QPID_CLIENT_EXTERN uint getFlushInterval(); + QPID_CLIENT_EXTERN void checkCompletion(); template <class F> void foreach(F& f) { for (std::list<ReplayRecord>::const_iterator i = buffer.begin(); i != buffer.end(); i++) { diff --git a/qpid/cpp/src/qpid/client/SessionBase_0_10.h b/qpid/cpp/src/qpid/client/SessionBase_0_10.h index 091c977053..3ae21936f6 100644 --- a/qpid/cpp/src/qpid/client/SessionBase_0_10.h +++ b/qpid/cpp/src/qpid/client/SessionBase_0_10.h @@ -33,6 +33,7 @@ #include "qpid/client/SessionImpl.h" #include "qpid/client/TypedResult.h" #include "qpid/shared_ptr.h" +#include "qpid/client/ClientImportExport.h" #include <string> namespace qpid { @@ -65,19 +66,19 @@ class SessionBase_0_10 { typedef framing::TransferContent DefaultContent; ///@internal - SessionBase_0_10(); - ~SessionBase_0_10(); + QPID_CLIENT_EXTERN SessionBase_0_10(); + QPID_CLIENT_EXTERN ~SessionBase_0_10(); /** Get the next message frame-set from the session. */ - framing::FrameSet::shared_ptr get(); + QPID_CLIENT_EXTERN framing::FrameSet::shared_ptr get(); /** Get the session ID */ - SessionId getId() const; + QPID_CLIENT_EXTERN SessionId getId() const; /** Close the session. * A session is automatically closed when all handles to it are destroyed. */ - void close(); + QPID_CLIENT_EXTERN void close(); /** * Synchronize the session: sync() waits until all commands issued @@ -88,25 +89,25 @@ class SessionBase_0_10 { * AsyncSession::executionSync() directly in the unusual event * that you want to do an asynchronous sync. */ - void sync(); + QPID_CLIENT_EXTERN void sync(); /** Set the timeout for this session. */ - uint32_t timeout(uint32_t seconds); + QPID_CLIENT_EXTERN uint32_t timeout(uint32_t seconds); /** Suspend the session - detach it from its connection */ - void suspend(); + QPID_CLIENT_EXTERN void suspend(); /** Resume a suspended session with a new connection */ - void resume(Connection); + QPID_CLIENT_EXTERN void resume(Connection); /** Get the channel associated with this session */ - uint16_t getChannel() const; + QPID_CLIENT_EXTERN uint16_t getChannel() const; - Execution& getExecution(); - void flush(); - void markCompleted(const framing::SequenceSet& ids, bool notifyPeer); - void markCompleted(const framing::SequenceNumber& id, bool cumulative, bool notifyPeer); - void sendCompletion(); + QPID_CLIENT_EXTERN Execution& getExecution(); + QPID_CLIENT_EXTERN void flush(); + QPID_CLIENT_EXTERN void markCompleted(const framing::SequenceSet& ids, bool notifyPeer); + QPID_CLIENT_EXTERN void markCompleted(const framing::SequenceNumber& id, bool cumulative, bool notifyPeer); + QPID_CLIENT_EXTERN void sendCompletion(); protected: boost::shared_ptr<SessionImpl> impl; diff --git a/qpid/cpp/src/qpid/client/Subscription.h b/qpid/cpp/src/qpid/client/Subscription.h index 47bb5d42a5..4a3b9a5098 100644 --- a/qpid/cpp/src/qpid/client/Subscription.h +++ b/qpid/cpp/src/qpid/client/Subscription.h @@ -26,6 +26,7 @@ #include "qpid/client/SubscriptionSettings.h" #include "qpid/client/Handle.h" #include "qpid/client/Message.h" +#include "qpid/client/ClientImportExport.h" namespace qpid { namespace client { @@ -39,74 +40,74 @@ class SubscriptionManager; */ class Subscription : public Handle<SubscriptionImpl> { public: - Subscription(SubscriptionImpl* si=0) : Handle<SubscriptionImpl>(si) {} + QPID_CLIENT_EXTERN Subscription(SubscriptionImpl* si=0) : Handle<SubscriptionImpl>(si) {} /** The name of the subsctription, used as the "destination" for messages from the broker. * Usually the same as the queue name but can be set differently. */ - std::string getName() const; + QPID_CLIENT_EXTERN std::string getName() const; /** Name of the queue this subscription subscribes to */ - std::string getQueue() const; + QPID_CLIENT_EXTERN std::string getQueue() const; /** Get the flow control and acknowledgement settings for this subscription */ - const SubscriptionSettings& getSettings() const; + QPID_CLIENT_EXTERN const SubscriptionSettings& getSettings() const; /** Set the flow control parameters */ - void setFlowControl(const FlowControl&); + QPID_CLIENT_EXTERN void setFlowControl(const FlowControl&); /** Automatically acknowledge (acquire and accept) batches of n messages. * You can disable auto-acknowledgement by setting n=0, and use acquire() and accept() * to manually acquire and accept messages. */ - void setAutoAck(unsigned int n); + QPID_CLIENT_EXTERN void setAutoAck(unsigned int n); /** Get the set of ID's for messages received by this subscription but not yet acquired. * This will always be empty if getSettings().acquireMode=ACQUIRE_MODE_PRE_ACQUIRED */ - SequenceSet getUnacquired() const; + QPID_CLIENT_EXTERN SequenceSet getUnacquired() const; /** Get the set of ID's for messages received by this subscription but not yet accepted. */ - SequenceSet getUnaccepted() const; + QPID_CLIENT_EXTERN SequenceSet getUnaccepted() const; /** Acquire messageIds and remove them from the unacquired set. * oAdd them to the unaccepted set if getSettings().acceptMode == ACCEPT_MODE_EXPLICIT. */ - void acquire(const SequenceSet& messageIds); + QPID_CLIENT_EXTERN void acquire(const SequenceSet& messageIds); /** Accept messageIds and remove them from the unaccepted set. *@pre messageIds is a subset of getUnaccepted() */ - void accept(const SequenceSet& messageIds); + QPID_CLIENT_EXTERN void accept(const SequenceSet& messageIds); /** Release messageIds and remove them from the unaccepted set. *@pre messageIds is a subset of getUnaccepted() */ - void release(const SequenceSet& messageIds); + QPID_CLIENT_EXTERN void release(const SequenceSet& messageIds); /* Acquire a single message */ - void acquire(const Message& m) { acquire(SequenceSet(m.getId())); } + QPID_CLIENT_EXTERN void acquire(const Message& m) { acquire(SequenceSet(m.getId())); } /* Accept a single message */ - void accept(const Message& m) { accept(SequenceSet(m.getId())); } + QPID_CLIENT_EXTERN void accept(const Message& m) { accept(SequenceSet(m.getId())); } /* Release a single message */ - void release(const Message& m) { release(SequenceSet(m.getId())); } + QPID_CLIENT_EXTERN void release(const Message& m) { release(SequenceSet(m.getId())); } /** Get the session associated with this subscription */ - Session getSession() const; + QPID_CLIENT_EXTERN Session getSession() const; /** Get the subscription manager associated with this subscription */ - SubscriptionManager& getSubscriptionManager() const; + QPID_CLIENT_EXTERN SubscriptionManager& getSubscriptionManager() const; /** Cancel the subscription. */ - void cancel(); + QPID_CLIENT_EXTERN void cancel(); /** Grant the specified amount of message credit */ - void grantMessageCredit(uint32_t); + QPID_CLIENT_EXTERN void grantMessageCredit(uint32_t); /** Grant the specified amount of byte credit */ - void grantByteCredit(uint32_t); + QPID_CLIENT_EXTERN void grantByteCredit(uint32_t); friend class SubscriptionManager; }; diff --git a/qpid/cpp/src/qpid/client/SubscriptionImpl.h b/qpid/cpp/src/qpid/client/SubscriptionImpl.h index 74fbacb951..e2b970ce05 100644 --- a/qpid/cpp/src/qpid/client/SubscriptionImpl.h +++ b/qpid/cpp/src/qpid/client/SubscriptionImpl.h @@ -30,6 +30,7 @@ #include "qpid/framing/SequenceSet.h" #include "qpid/sys/Mutex.h" #include "qpid/RefCounted.h" +#include "qpid/client/ClientImportExport.h" #include <memory> namespace qpid { @@ -39,62 +40,62 @@ class SubscriptionManager; class SubscriptionImpl : public RefCounted, public MessageListener { public: - SubscriptionImpl(SubscriptionManager&, const std::string& queue, + QPID_CLIENT_EXTERN SubscriptionImpl(SubscriptionManager&, const std::string& queue, const SubscriptionSettings&, const std::string& name, MessageListener* =0); /** The name of the subsctription, used as the "destination" for messages from the broker. * Usually the same as the queue name but can be set differently. */ - std::string getName() const; + QPID_CLIENT_EXTERN std::string getName() const; /** Name of the queue this subscription subscribes to */ - std::string getQueue() const; + QPID_CLIENT_EXTERN std::string getQueue() const; /** Get the flow control and acknowledgement settings for this subscription */ - const SubscriptionSettings& getSettings() const; + QPID_CLIENT_EXTERN const SubscriptionSettings& getSettings() const; /** Set the flow control parameters */ - void setFlowControl(const FlowControl&); + QPID_CLIENT_EXTERN void setFlowControl(const FlowControl&); /** Automatically acknowledge (acquire and accept) batches of n messages. * You can disable auto-acknowledgement by setting n=0, and use acquire() and accept() * to manually acquire and accept messages. */ - void setAutoAck(size_t n); + QPID_CLIENT_EXTERN void setAutoAck(size_t n); /** Get the set of ID's for messages received by this subscription but not yet acquired. * This will always be empty if acquireMode=ACQUIRE_MODE_PRE_ACQUIRED */ - SequenceSet getUnacquired() const; + QPID_CLIENT_EXTERN SequenceSet getUnacquired() const; /** Get the set of ID's for messages acquired by this subscription but not yet accepted. */ - SequenceSet getUnaccepted() const; + QPID_CLIENT_EXTERN SequenceSet getUnaccepted() const; /** Acquire messageIds and remove them from the un-acquired set for the session. */ - void acquire(const SequenceSet& messageIds); + QPID_CLIENT_EXTERN void acquire(const SequenceSet& messageIds); /** Accept messageIds and remove them from the un-accepted set for the session. */ - void accept(const SequenceSet& messageIds); + QPID_CLIENT_EXTERN void accept(const SequenceSet& messageIds); /** Release messageIds and remove them from the un-accepted set for the session. */ - void release(const SequenceSet& messageIds); + QPID_CLIENT_EXTERN void release(const SequenceSet& messageIds); /** Get the session associated with this subscription */ - Session getSession() const; + QPID_CLIENT_EXTERN Session getSession() const; /** Get the subscription manager associated with this subscription */ - SubscriptionManager& getSubscriptionManager() const; + QPID_CLIENT_EXTERN SubscriptionManager& getSubscriptionManager() const; /** Send subscription request and issue appropriate flow control commands. */ - void subscribe(); + QPID_CLIENT_EXTERN void subscribe(); /** Cancel the subscription. */ - void cancel(); + QPID_CLIENT_EXTERN void cancel(); /** Grant specified credit for this subscription **/ - void grantCredit(framing::message::CreditUnit unit, uint32_t value); + QPID_CLIENT_EXTERN void grantCredit(framing::message::CreditUnit unit, uint32_t value); - void received(Message&); + QPID_CLIENT_EXTERN void received(Message&); /** * Set up demux diversion for messages sent to this subscription @@ -104,7 +105,7 @@ class SubscriptionImpl : public RefCounted, public MessageListener { * Cancel any demux diversion that may have been setup for this * subscription */ - void cancelDiversion(); + QPID_CLIENT_EXTERN void cancelDiversion(); private: diff --git a/qpid/cpp/src/qpid/client/SubscriptionManager.h b/qpid/cpp/src/qpid/client/SubscriptionManager.h index 6b45092931..91ad2b6d56 100644 --- a/qpid/cpp/src/qpid/client/SubscriptionManager.h +++ b/qpid/cpp/src/qpid/client/SubscriptionManager.h @@ -30,6 +30,7 @@ #include <qpid/client/LocalQueue.h> #include <qpid/client/Subscription.h> #include <qpid/sys/Runnable.h> +#include <qpid/client/ClientImportExport.h> #include <set> #include <sstream> @@ -97,7 +98,7 @@ class SubscriptionManager : public sys::Runnable { public: /** Create a new SubscriptionManager associated with a session */ - SubscriptionManager(const Session& session); + QPID_CLIENT_EXTERN SubscriptionManager(const Session& session); /** * Subscribe a MessagesListener to receive messages from queue. @@ -110,7 +111,7 @@ class SubscriptionManager : public sys::Runnable *@param settings settings for the subscription. *@param name unique destination name for the subscription, defaults to queue name. */ - Subscription subscribe(MessageListener& listener, + QPID_CLIENT_EXTERN Subscription subscribe(MessageListener& listener, const std::string& queue, const SubscriptionSettings& settings, const std::string& name=std::string()); @@ -125,7 +126,7 @@ class SubscriptionManager : public sys::Runnable *@param name unique destination name for the subscription, defaults to queue name. * If not specified, the queue name is used. */ - Subscription subscribe(LocalQueue& localQueue, + QPID_CLIENT_EXTERN Subscription subscribe(LocalQueue& localQueue, const std::string& queue, const SubscriptionSettings& settings, const std::string& name=std::string()); @@ -141,7 +142,7 @@ class SubscriptionManager : public sys::Runnable *@param name unique destination name for the subscription, defaults to queue name. * If not specified, the queue name is used. */ - Subscription subscribe(MessageListener& listener, + QPID_CLIENT_EXTERN Subscription subscribe(MessageListener& listener, const std::string& queue, const std::string& name=std::string()); @@ -154,7 +155,7 @@ class SubscriptionManager : public sys::Runnable *@param name unique destination name for the subscription, defaults to queue name. * If not specified, the queue name is used. */ - Subscription subscribe(LocalQueue& localQueue, + QPID_CLIENT_EXTERN Subscription subscribe(LocalQueue& localQueue, const std::string& queue, const std::string& name=std::string()); @@ -164,53 +165,53 @@ class SubscriptionManager : public sys::Runnable *@param timeout wait up this timeout for a message to appear. *@return true if result was set, false if no message available after timeout. */ - bool get(Message& result, const std::string& queue, sys::Duration timeout=0); + QPID_CLIENT_EXTERN bool get(Message& result, const std::string& queue, sys::Duration timeout=0); /** Get a single message from a queue. *@param timeout wait up this timeout for a message to appear. *@return message from the queue. *@throw Exception if the timeout is exceeded. */ - Message get(const std::string& queue, sys::Duration timeout=sys::TIME_INFINITE); + QPID_CLIENT_EXTERN Message get(const std::string& queue, sys::Duration timeout=sys::TIME_INFINITE); /** Get a subscription by name. *@throw Exception if not found. */ - Subscription getSubscription(const std::string& name) const; + QPID_CLIENT_EXTERN Subscription getSubscription(const std::string& name) const; /** Cancel a subscription. See also: Subscription.cancel() */ - void cancel(const std::string& name); + QPID_CLIENT_EXTERN void cancel(const std::string& name); /** Deliver messages in the current thread until stop() is called. * Only one thread may be running in a SubscriptionManager at a time. * @see run */ - void run(); + QPID_CLIENT_EXTERN void run(); /** Start a new thread to deliver messages. * Only one thread may be running in a SubscriptionManager at a time. * @see start */ - void start(); + QPID_CLIENT_EXTERN void start(); /** * Wait for the thread started by a call to start() to complete. */ - void wait(); + QPID_CLIENT_EXTERN void wait(); /** If set true, run() will stop when all subscriptions * are cancelled. If false, run will only stop when stop() * is called. True by default. */ - void setAutoStop(bool set=true); + QPID_CLIENT_EXTERN void setAutoStop(bool set=true); /** Stop delivery. Causes run() to return, or the thread started with start() to exit. */ - void stop(); + QPID_CLIENT_EXTERN void stop(); static const uint32_t UNLIMITED=0xFFFFFFFF; /** Set the flow control for a subscription. */ - void setFlowControl(const std::string& name, const FlowControl& flow); + QPID_CLIENT_EXTERN void setFlowControl(const std::string& name, const FlowControl& flow); /** Set the flow control for a subscription. *@param name: name of the subscription. @@ -218,22 +219,22 @@ class SubscriptionManager : public sys::Runnable *@param bytes: byte credit. *@param window: if true use window-based flow control. */ - void setFlowControl(const std::string& name, uint32_t messages, uint32_t bytes, bool window=true); + QPID_CLIENT_EXTERN void setFlowControl(const std::string& name, uint32_t messages, uint32_t bytes, bool window=true); /** Set the default settings for subscribe() calls that don't * include a SubscriptionSettings parameter. */ - void setDefaultSettings(const SubscriptionSettings& s) { defaultSettings = s; } + QPID_CLIENT_EXTERN void setDefaultSettings(const SubscriptionSettings& s) { defaultSettings = s; } /** Get the default settings for subscribe() calls that don't * include a SubscriptionSettings parameter. */ - const SubscriptionSettings& getDefaultSettings() const { return defaultSettings; } + QPID_CLIENT_EXTERN const SubscriptionSettings& getDefaultSettings() const { return defaultSettings; } /** Get the default settings for subscribe() calls that don't * include a SubscriptionSettings parameter. */ - SubscriptionSettings& getDefaultSettings() { return defaultSettings; } + QPID_CLIENT_EXTERN SubscriptionSettings& getDefaultSettings() { return defaultSettings; } /** * Set the default flow control settings for subscribe() calls @@ -243,7 +244,7 @@ class SubscriptionManager : public sys::Runnable *@param bytes: byte credit. *@param window: if true use window-based flow control. */ - void setFlowControl(uint32_t messages, uint32_t bytes, bool window=true) { + QPID_CLIENT_EXTERN void setFlowControl(uint32_t messages, uint32_t bytes, bool window=true) { defaultSettings.flowControl = FlowControl(messages, bytes, window); } @@ -251,16 +252,16 @@ class SubscriptionManager : public sys::Runnable *Set the default accept-mode for subscribe() calls that don't *include a SubscriptionSettings parameter. */ - void setAcceptMode(AcceptMode mode) { defaultSettings.acceptMode = mode; } + QPID_CLIENT_EXTERN void setAcceptMode(AcceptMode mode) { defaultSettings.acceptMode = mode; } /** * Set the default acquire-mode subscribe()s that don't specify SubscriptionSettings. */ - void setAcquireMode(AcquireMode mode) { defaultSettings.acquireMode = mode; } + QPID_CLIENT_EXTERN void setAcquireMode(AcquireMode mode) { defaultSettings.acquireMode = mode; } - void registerFailoverHandler ( boost::function<void ()> fh ); + QPID_CLIENT_EXTERN void registerFailoverHandler ( boost::function<void ()> fh ); - Session getSession() const; + QPID_CLIENT_EXTERN Session getSession() const; private: mutable sys::Mutex lock; diff --git a/qpid/cpp/src/qpid/framing/AMQBody.h b/qpid/cpp/src/qpid/framing/AMQBody.h index 9e66b9738f..60ac2d3b7e 100644 --- a/qpid/cpp/src/qpid/framing/AMQBody.h +++ b/qpid/cpp/src/qpid/framing/AMQBody.h @@ -26,6 +26,7 @@ #include "qpid/framing/BodyFactory.h" #include <boost/intrusive_ptr.hpp> #include <ostream> +#include "qpid/CommonImportExport.h" namespace qpid { namespace framing { @@ -48,7 +49,7 @@ struct AMQBodyConstVisitor { class AMQBody : public RefCounted { public: AMQBody() {} - virtual ~AMQBody(); + QPID_COMMON_EXTERN virtual ~AMQBody(); // Make AMQBody copyable even though RefCounted. AMQBody(const AMQBody&) : RefCounted() {} @@ -71,7 +72,7 @@ class AMQBody : public RefCounted { virtual boost::intrusive_ptr<AMQBody> clone() const = 0; }; -std::ostream& operator<<(std::ostream& out, const AMQBody& body) ; +QPID_COMMON_EXTERN std::ostream& operator<<(std::ostream& out, const AMQBody& body) ; enum BodyTypes { METHOD_BODY = 1, diff --git a/qpid/cpp/src/qpid/framing/AMQContentBody.h b/qpid/cpp/src/qpid/framing/AMQContentBody.h index a81cf36168..9606ae5ec5 100644 --- a/qpid/cpp/src/qpid/framing/AMQContentBody.h +++ b/qpid/cpp/src/qpid/framing/AMQContentBody.h @@ -21,6 +21,7 @@ #include "amqp_types.h" #include "AMQBody.h" #include "Buffer.h" +#include "qpid/CommonImportExport.h" #ifndef _AMQContentBody_ #define _AMQContentBody_ @@ -33,18 +34,18 @@ class AMQContentBody : public AMQBody string data; public: - AMQContentBody(); - AMQContentBody(const string& data); + QPID_COMMON_EXTERN AMQContentBody(); + QPID_COMMON_EXTERN AMQContentBody(const string& data); inline virtual ~AMQContentBody(){} - inline uint8_t type() const { return CONTENT_BODY; }; - inline const string& getData() const { return data; } - inline string& getData() { return data; } - uint32_t encodedSize() const; - void encode(Buffer& buffer) const; - void decode(Buffer& buffer, uint32_t size); - void print(std::ostream& out) const; - void accept(AMQBodyConstVisitor& v) const { v.visit(*this); } - boost::intrusive_ptr<AMQBody> clone() const { return BodyFactory::copy(*this); } + QPID_COMMON_EXTERN inline uint8_t type() const { return CONTENT_BODY; }; + QPID_COMMON_EXTERN inline const string& getData() const { return data; } + QPID_COMMON_EXTERN inline string& getData() { return data; } + QPID_COMMON_EXTERN uint32_t encodedSize() const; + QPID_COMMON_EXTERN void encode(Buffer& buffer) const; + QPID_COMMON_EXTERN void decode(Buffer& buffer, uint32_t size); + QPID_COMMON_EXTERN void print(std::ostream& out) const; + QPID_COMMON_EXTERN void accept(AMQBodyConstVisitor& v) const { v.visit(*this); } + QPID_COMMON_EXTERN boost::intrusive_ptr<AMQBody> clone() const { return BodyFactory::copy(*this); } }; } diff --git a/qpid/cpp/src/qpid/framing/AMQFrame.h b/qpid/cpp/src/qpid/framing/AMQFrame.h index 028d0c1d8a..cf384e61e8 100644 --- a/qpid/cpp/src/qpid/framing/AMQFrame.h +++ b/qpid/cpp/src/qpid/framing/AMQFrame.h @@ -29,6 +29,7 @@ #include "qpid/sys/LatencyMetric.h" #include <boost/intrusive_ptr.hpp> #include <boost/cast.hpp> +#include "qpid/CommonImportExport.h" namespace qpid { namespace framing { @@ -36,15 +37,15 @@ namespace framing { class AMQFrame : public AMQDataBlock, public sys::LatencyMetricTimestamp { public: - AMQFrame(const boost::intrusive_ptr<AMQBody>& b=0); - AMQFrame(const AMQBody& b); - ~AMQFrame(); + QPID_COMMON_EXTERN AMQFrame(const boost::intrusive_ptr<AMQBody>& b=0); + QPID_COMMON_EXTERN AMQFrame(const AMQBody& b); + QPID_COMMON_EXTERN ~AMQFrame(); ChannelId getChannel() const { return channel; } void setChannel(ChannelId c) { channel = c; } - AMQBody* getBody(); - const AMQBody* getBody() const; + QPID_COMMON_EXTERN AMQBody* getBody(); + QPID_COMMON_EXTERN const AMQBody* getBody() const; AMQMethodBody* getMethod() { return getBody()->getMethod(); } const AMQMethodBody* getMethod() const { return getBody()->getMethod(); } @@ -59,9 +60,9 @@ class AMQFrame : public AMQDataBlock, public sys::LatencyMetricTimestamp return boost::polymorphic_downcast<const T*>(getBody()); } - void encode(Buffer& buffer) const; - bool decode(Buffer& buffer); - uint32_t encodedSize() const; + QPID_COMMON_EXTERN void encode(Buffer& buffer) const; + QPID_COMMON_EXTERN bool decode(Buffer& buffer); + QPID_COMMON_EXTERN uint32_t encodedSize() const; // 0-10 terminology: first/last frame (in segment) first/last segment (in assembly) @@ -88,7 +89,7 @@ class AMQFrame : public AMQDataBlock, public sys::LatencyMetricTimestamp void setEos(bool isEos) { eos = isEos; } static uint16_t DECODE_SIZE_MIN; - static uint32_t frameOverhead(); + QPID_COMMON_EXTERN static uint32_t frameOverhead(); /** Must point to at least DECODE_SIZE_MIN bytes of data */ static uint16_t decodeSize(char* data); @@ -109,7 +110,7 @@ class AMQFrame : public AMQDataBlock, public sys::LatencyMetricTimestamp uint64_t clusterId; // Used to identify frames in a clustered broekr. }; -std::ostream& operator<<(std::ostream&, const AMQFrame&); +QPID_COMMON_EXTERN std::ostream& operator<<(std::ostream&, const AMQFrame&); }} // namespace qpid::framing diff --git a/qpid/cpp/src/qpid/framing/AMQHeaderBody.h b/qpid/cpp/src/qpid/framing/AMQHeaderBody.h index 9846544949..b8099f2e51 100644 --- a/qpid/cpp/src/qpid/framing/AMQHeaderBody.h +++ b/qpid/cpp/src/qpid/framing/AMQHeaderBody.h @@ -26,6 +26,7 @@ #include "Buffer.h" #include "qpid/framing/DeliveryProperties.h" #include "qpid/framing/MessageProperties.h" +#include "qpid/CommonImportExport.h" #include <iostream> #include <boost/optional.hpp> @@ -83,12 +84,12 @@ public: inline uint8_t type() const { return HEADER_BODY; } - uint32_t encodedSize() const; - void encode(Buffer& buffer) const; - void decode(Buffer& buffer, uint32_t size); - uint64_t getContentLength() const; - void print(std::ostream& out) const; - void accept(AMQBodyConstVisitor&) const; + QPID_COMMON_EXTERN uint32_t encodedSize() const; + QPID_COMMON_EXTERN void encode(Buffer& buffer) const; + QPID_COMMON_EXTERN void decode(Buffer& buffer, uint32_t size); + QPID_COMMON_EXTERN uint64_t getContentLength() const; + QPID_COMMON_EXTERN void print(std::ostream& out) const; + QPID_COMMON_EXTERN void accept(AMQBodyConstVisitor&) const; template <class T> T* get(bool create) { boost::optional<T>& p=properties.OptProps<T>::props; diff --git a/qpid/cpp/src/qpid/framing/AMQHeartbeatBody.h b/qpid/cpp/src/qpid/framing/AMQHeartbeatBody.h index 3fb41c128e..5d3f633576 100644 --- a/qpid/cpp/src/qpid/framing/AMQHeartbeatBody.h +++ b/qpid/cpp/src/qpid/framing/AMQHeartbeatBody.h @@ -21,6 +21,7 @@ #include "amqp_types.h" #include "AMQBody.h" #include "Buffer.h" +#include "qpid/CommonImportExport.h" #ifndef _AMQHeartbeatBody_ #define _AMQHeartbeatBody_ @@ -31,12 +32,12 @@ namespace framing { class AMQHeartbeatBody : public AMQBody { public: - virtual ~AMQHeartbeatBody(); + QPID_COMMON_EXTERN virtual ~AMQHeartbeatBody(); inline uint32_t encodedSize() const { return 0; } inline uint8_t type() const { return HEARTBEAT_BODY; } inline void encode(Buffer& ) const {} inline void decode(Buffer& , uint32_t /*size*/) {} - virtual void print(std::ostream& out) const; + QPID_COMMON_EXTERN virtual void print(std::ostream& out) const; void accept(AMQBodyConstVisitor& v) const { v.visit(*this); } boost::intrusive_ptr<AMQBody> clone() const { return BodyFactory::copy(*this); } }; diff --git a/qpid/cpp/src/qpid/framing/AMQMethodBody.h b/qpid/cpp/src/qpid/framing/AMQMethodBody.h index cc7489ddd9..a38726b0fc 100644 --- a/qpid/cpp/src/qpid/framing/AMQMethodBody.h +++ b/qpid/cpp/src/qpid/framing/AMQMethodBody.h @@ -25,7 +25,7 @@ #include "AMQBody.h" #include "qpid/framing/ProtocolVersion.h" #include "qpid/shared_ptr.h" - +#include "qpid/CommonImportExport.h" #include <ostream> #include <assert.h> @@ -40,7 +40,7 @@ class MethodBodyConstVisitor; class AMQMethodBody : public AMQBody { public: AMQMethodBody() {} - virtual ~AMQMethodBody(); + QPID_COMMON_EXTERN virtual ~AMQMethodBody(); virtual void accept(MethodBodyConstVisitor&) const = 0; diff --git a/qpid/cpp/src/qpid/framing/AccumulatedAck.h b/qpid/cpp/src/qpid/framing/AccumulatedAck.h index ea78b797e0..e221aff9db 100644 --- a/qpid/cpp/src/qpid/framing/AccumulatedAck.h +++ b/qpid/cpp/src/qpid/framing/AccumulatedAck.h @@ -27,6 +27,7 @@ #include <ostream> #include "SequenceNumber.h" #include "SequenceNumberSet.h" +#include "qpid/CommonImportExport.h" namespace qpid { namespace framing { @@ -67,8 +68,8 @@ namespace qpid { void update(const SequenceNumber cumulative, const SequenceNumberSet& range); void operator()(SequenceNumber first, SequenceNumber last) { update(first, last); } }; - std::ostream& operator<<(std::ostream&, const Range&); - std::ostream& operator<<(std::ostream&, const AccumulatedAck&); + QPID_COMMON_EXTERN std::ostream& operator<<(std::ostream&, const Range&); + QPID_COMMON_EXTERN std::ostream& operator<<(std::ostream&, const AccumulatedAck&); } } diff --git a/qpid/cpp/src/qpid/framing/Array.h b/qpid/cpp/src/qpid/framing/Array.h index 183fcb6d5c..e714b7133f 100644 --- a/qpid/cpp/src/qpid/framing/Array.h +++ b/qpid/cpp/src/qpid/framing/Array.h @@ -24,6 +24,7 @@ #include <boost/shared_ptr.hpp> #include <iostream> #include <vector> +#include "qpid/CommonImportExport.h" #ifndef _Array_ #define _Array_ @@ -41,38 +42,38 @@ class Array typedef ValueVector::const_iterator const_iterator; typedef ValueVector::iterator iterator; - uint32_t encodedSize() const; - void encode(Buffer& buffer) const; - void decode(Buffer& buffer); + QPID_COMMON_EXTERN uint32_t encodedSize() const; + QPID_COMMON_EXTERN void encode(Buffer& buffer) const; + QPID_COMMON_EXTERN void decode(Buffer& buffer); - int count() const; + QPID_COMMON_EXTERN int count() const; bool operator==(const Array& other) const; - Array(); - Array(TypeCode type); - Array(uint8_t type); + QPID_COMMON_EXTERN Array(); + QPID_COMMON_EXTERN Array(TypeCode type); + QPID_COMMON_EXTERN Array(uint8_t type); //creates a longstr array - Array(const std::vector<std::string>& in); + QPID_COMMON_EXTERN Array(const std::vector<std::string>& in); - TypeCode getType() const { return type; } + QPID_COMMON_EXTERN TypeCode getType() const { return type; } // std collection interface. - const_iterator begin() const { return values.begin(); } - const_iterator end() const { return values.end(); } - iterator begin() { return values.begin(); } - iterator end(){ return values.end(); } - - ValuePtr front() const { return values.front(); } - ValuePtr back() const { return values.back(); } - size_t size() const { return values.size(); } - - void insert(iterator i, ValuePtr value); - void erase(iterator i) { values.erase(i); } - void push_back(ValuePtr value) { values.insert(end(), value); } - void pop_back() { values.pop_back(); } + QPID_COMMON_EXTERN const_iterator begin() const { return values.begin(); } + QPID_COMMON_EXTERN const_iterator end() const { return values.end(); } + QPID_COMMON_EXTERN iterator begin() { return values.begin(); } + QPID_COMMON_EXTERN iterator end(){ return values.end(); } + + QPID_COMMON_EXTERN ValuePtr front() const { return values.front(); } + QPID_COMMON_EXTERN ValuePtr back() const { return values.back(); } + QPID_COMMON_EXTERN size_t size() const { return values.size(); } + + QPID_COMMON_EXTERN void insert(iterator i, ValuePtr value); + QPID_COMMON_EXTERN void erase(iterator i) { values.erase(i); } + QPID_COMMON_EXTERN void push_back(ValuePtr value) { values.insert(end(), value); } + QPID_COMMON_EXTERN void pop_back() { values.pop_back(); } // Non-std interface - void add(ValuePtr value) { push_back(value); } + QPID_COMMON_EXTERN void add(ValuePtr value) { push_back(value); } template <class T> void collect(std::vector<T>& out) const diff --git a/qpid/cpp/src/qpid/framing/Buffer.h b/qpid/cpp/src/qpid/framing/Buffer.h index 828e6e963a..57fb1e32a0 100644 --- a/qpid/cpp/src/qpid/framing/Buffer.h +++ b/qpid/cpp/src/qpid/framing/Buffer.h @@ -20,6 +20,7 @@ */ #include "amqp_types.h" #include "qpid/Exception.h" +#include "qpid/CommonImportExport.h" #include <boost/iterator/iterator_facade.hpp> #ifndef _Buffer_ @@ -66,65 +67,65 @@ class Buffer friend class Iterator; - Buffer(char* data=0, uint32_t size=0); + QPID_COMMON_EXTERN Buffer(char* data=0, uint32_t size=0); - void record(); - void restore(bool reRecord = false); - void reset(); + QPID_COMMON_EXTERN void record(); + QPID_COMMON_EXTERN void restore(bool reRecord = false); + QPID_COMMON_EXTERN void reset(); - uint32_t available() { return size - position; } - uint32_t getSize() { return size; } - uint32_t getPosition() { return position; } - Iterator getIterator() { return Iterator(*this); } - char* getPointer() { return data; } + QPID_COMMON_EXTERN uint32_t available() { return size - position; } + QPID_COMMON_EXTERN uint32_t getSize() { return size; } + QPID_COMMON_EXTERN uint32_t getPosition() { return position; } + QPID_COMMON_EXTERN Iterator getIterator() { return Iterator(*this); } + QPID_COMMON_EXTERN char* getPointer() { return data; } - void putOctet(uint8_t i); - void putShort(uint16_t i); - void putLong(uint32_t i); - void putLongLong(uint64_t i); - void putInt8(int8_t i); - void putInt16(int16_t i); - void putInt32(int32_t i); - void putInt64(int64_t i); - void putFloat(float f); - void putDouble(double f); - void putBin128(uint8_t* b); - - uint8_t getOctet(); - uint16_t getShort(); - uint32_t getLong(); - uint64_t getLongLong(); - int8_t getInt8(); - int16_t getInt16(); - int32_t getInt32(); - int64_t getInt64(); - float getFloat(); - double getDouble(); + QPID_COMMON_EXTERN void putOctet(uint8_t i); + QPID_COMMON_EXTERN void putShort(uint16_t i); + QPID_COMMON_EXTERN void putLong(uint32_t i); + QPID_COMMON_EXTERN void putLongLong(uint64_t i); + QPID_COMMON_EXTERN void putInt8(int8_t i); + QPID_COMMON_EXTERN void putInt16(int16_t i); + QPID_COMMON_EXTERN void putInt32(int32_t i); + QPID_COMMON_EXTERN void putInt64(int64_t i); + QPID_COMMON_EXTERN void putFloat(float f); + QPID_COMMON_EXTERN void putDouble(double f); + QPID_COMMON_EXTERN void putBin128(uint8_t* b); + + QPID_COMMON_EXTERN uint8_t getOctet(); + QPID_COMMON_EXTERN uint16_t getShort(); + QPID_COMMON_EXTERN uint32_t getLong(); + QPID_COMMON_EXTERN uint64_t getLongLong(); + QPID_COMMON_EXTERN int8_t getInt8(); + QPID_COMMON_EXTERN int16_t getInt16(); + QPID_COMMON_EXTERN int32_t getInt32(); + QPID_COMMON_EXTERN int64_t getInt64(); + QPID_COMMON_EXTERN float getFloat(); + QPID_COMMON_EXTERN double getDouble(); template <int n> - uint64_t getUInt(); + QPID_COMMON_EXTERN uint64_t getUInt(); template <int n> - void putUInt(uint64_t); + QPID_COMMON_EXTERN void putUInt(uint64_t); - void putShortString(const string& s); - void putMediumString(const string& s); - void putLongString(const string& s); - void getShortString(string& s); - void getMediumString(string& s); - void getLongString(string& s); - void getBin128(uint8_t* b); + QPID_COMMON_EXTERN void putShortString(const string& s); + QPID_COMMON_EXTERN void putMediumString(const string& s); + QPID_COMMON_EXTERN void putLongString(const string& s); + QPID_COMMON_EXTERN void getShortString(string& s); + QPID_COMMON_EXTERN void getMediumString(string& s); + QPID_COMMON_EXTERN void getLongString(string& s); + QPID_COMMON_EXTERN void getBin128(uint8_t* b); - void putRawData(const string& s); - void getRawData(string& s, uint32_t size); + QPID_COMMON_EXTERN void putRawData(const string& s); + QPID_COMMON_EXTERN void getRawData(string& s, uint32_t size); - void putRawData(const uint8_t* data, size_t size); - void getRawData(uint8_t* data, size_t size); + QPID_COMMON_EXTERN void putRawData(const uint8_t* data, size_t size); + QPID_COMMON_EXTERN void getRawData(uint8_t* data, size_t size); template <class T> void put(const T& data) { data.encode(*this); } template <class T> void get(T& data) { data.decode(*this); } - void dump(std::ostream&) const; + QPID_COMMON_EXTERN void dump(std::ostream&) const; }; std::ostream& operator<<(std::ostream&, const Buffer&); diff --git a/qpid/cpp/src/qpid/framing/FieldTable.h b/qpid/cpp/src/qpid/framing/FieldTable.h index 9e1214a28c..a07568559f 100644 --- a/qpid/cpp/src/qpid/framing/FieldTable.h +++ b/qpid/cpp/src/qpid/framing/FieldTable.h @@ -23,6 +23,7 @@ #include <boost/shared_ptr.hpp> #include <map> #include "amqp_types.h" +#include "qpid/CommonImportExport.h" #ifndef _FieldTable_ #define _FieldTable_ @@ -51,45 +52,45 @@ class FieldTable typedef std::map<std::string, ValuePtr> ValueMap; typedef ValueMap::iterator iterator; - FieldTable() {}; - FieldTable(const FieldTable& ft); - ~FieldTable(); - FieldTable& operator=(const FieldTable& ft); - uint32_t encodedSize() const; - void encode(Buffer& buffer) const; - void decode(Buffer& buffer); - - int count() const; - void set(const std::string& name, const ValuePtr& value); - ValuePtr get(const std::string& name) const; - bool isSet(const std::string& name) const { return get(name).get() != 0; } - - void setString(const std::string& name, const std::string& value); - void setInt(const std::string& name, const int value); - void setInt64(const std::string& name, const int64_t value); - void setTimestamp(const std::string& name, const uint64_t value); - void setUInt64(const std::string& name, const uint64_t value); - void setTable(const std::string& name, const FieldTable& value); - void setArray(const std::string& name, const Array& value); - void setFloat(const std::string& name, const float value); - void setDouble(const std::string& name, const double value); + QPID_COMMON_EXTERN FieldTable() {}; + QPID_COMMON_EXTERN FieldTable(const FieldTable& ft); + QPID_COMMON_EXTERN ~FieldTable(); + QPID_COMMON_EXTERN FieldTable& operator=(const FieldTable& ft); + QPID_COMMON_EXTERN uint32_t encodedSize() const; + QPID_COMMON_EXTERN void encode(Buffer& buffer) const; + QPID_COMMON_EXTERN void decode(Buffer& buffer); + + QPID_COMMON_EXTERN int count() const; + QPID_COMMON_EXTERN void set(const std::string& name, const ValuePtr& value); + QPID_COMMON_EXTERN ValuePtr get(const std::string& name) const; + QPID_COMMON_EXTERN bool isSet(const std::string& name) const { return get(name).get() != 0; } + + QPID_COMMON_EXTERN void setString(const std::string& name, const std::string& value); + QPID_COMMON_EXTERN void setInt(const std::string& name, const int value); + QPID_COMMON_EXTERN void setInt64(const std::string& name, const int64_t value); + QPID_COMMON_EXTERN void setTimestamp(const std::string& name, const uint64_t value); + QPID_COMMON_EXTERN void setUInt64(const std::string& name, const uint64_t value); + QPID_COMMON_EXTERN void setTable(const std::string& name, const FieldTable& value); + QPID_COMMON_EXTERN void setArray(const std::string& name, const Array& value); + QPID_COMMON_EXTERN void setFloat(const std::string& name, const float value); + QPID_COMMON_EXTERN void setDouble(const std::string& name, const double value); //void setDecimal(string& name, xxx& value); - int getAsInt(const std::string& name) const; - uint64_t getAsUInt64(const std::string& name) const; - int64_t getAsInt64(const std::string& name) const; - std::string getAsString(const std::string& name) const; + QPID_COMMON_EXTERN int getAsInt(const std::string& name) const; + QPID_COMMON_EXTERN uint64_t getAsUInt64(const std::string& name) const; + QPID_COMMON_EXTERN int64_t getAsInt64(const std::string& name) const; + QPID_COMMON_EXTERN std::string getAsString(const std::string& name) const; - bool getTable(const std::string& name, FieldTable& value) const; - bool getArray(const std::string& name, Array& value) const; - bool getFloat(const std::string& name, float& value) const; - bool getDouble(const std::string& name, double& value) const; + QPID_COMMON_EXTERN bool getTable(const std::string& name, FieldTable& value) const; + QPID_COMMON_EXTERN bool getArray(const std::string& name, Array& value) const; + QPID_COMMON_EXTERN bool getFloat(const std::string& name, float& value) const; + QPID_COMMON_EXTERN bool getDouble(const std::string& name, double& value) const; //bool getTimestamp(const std::string& name, uint64_t& value) const; //bool getDecimal(string& name, xxx& value); - void erase(const std::string& name); + QPID_COMMON_EXTERN void erase(const std::string& name); - bool operator==(const FieldTable& other) const; + QPID_COMMON_EXTERN bool operator==(const FieldTable& other) const; // Map-like interface. // TODO: may need to duplicate into versions that return mutable iterator @@ -107,7 +108,7 @@ class FieldTable private: ValueMap values; - friend std::ostream& operator<<(std::ostream& out, const FieldTable& body); + QPID_COMMON_EXTERN friend std::ostream& operator<<(std::ostream& out, const FieldTable& body); }; //class FieldNotFoundException{}; diff --git a/qpid/cpp/src/qpid/framing/FieldValue.h b/qpid/cpp/src/qpid/framing/FieldValue.h index 29760619e5..b66000d9fa 100644 --- a/qpid/cpp/src/qpid/framing/FieldValue.h +++ b/qpid/cpp/src/qpid/framing/FieldValue.h @@ -25,6 +25,7 @@ #include "amqp_types.h" #include "Buffer.h" #include "FieldTable.h" +#include "qpid/CommonImportExport.h" #include "assert.h" @@ -87,8 +88,8 @@ class FieldValue { bool empty() const { return data.get() == 0; } void encode(Buffer& buffer); void decode(Buffer& buffer); - bool operator==(const FieldValue&) const; - bool operator!=(const FieldValue& v) const { return !(*this == v); } + QPID_COMMON_EXTERN bool operator==(const FieldValue&) const; + QPID_COMMON_EXTERN bool operator!=(const FieldValue& v) const { return !(*this == v); } void print(std::ostream& out) const; @@ -249,12 +250,12 @@ class Str8Value : public FieldValue { class Str16Value : public FieldValue { public: - Str16Value(const std::string& v); + QPID_COMMON_EXTERN Str16Value(const std::string& v); }; class Struct32Value : public FieldValue { public: - Struct32Value(const std::string& v); + QPID_COMMON_EXTERN Struct32Value(const std::string& v); }; class FloatValue : public FieldValue diff --git a/qpid/cpp/src/qpid/framing/FrameSet.h b/qpid/cpp/src/qpid/framing/FrameSet.h index b13ca16e97..e3e8727600 100644 --- a/qpid/cpp/src/qpid/framing/FrameSet.h +++ b/qpid/cpp/src/qpid/framing/FrameSet.h @@ -23,6 +23,7 @@ #include "qpid/framing/amqp_framing.h" #include "qpid/framing/AMQFrame.h" #include "qpid/framing/SequenceNumber.h" +#include "qpid/CommonImportExport.h" #ifndef _FrameSet_ #define _FrameSet_ @@ -44,20 +45,20 @@ class FrameSet public: typedef boost::shared_ptr<FrameSet> shared_ptr; - FrameSet(const SequenceNumber& id); - void append(const AMQFrame& part); - bool isComplete() const; + QPID_COMMON_EXTERN FrameSet(const SequenceNumber& id); + QPID_COMMON_EXTERN void append(const AMQFrame& part); + QPID_COMMON_EXTERN bool isComplete() const; - uint64_t getContentSize() const; + QPID_COMMON_EXTERN uint64_t getContentSize() const; - void getContent(std::string&) const; - std::string getContent() const; + QPID_COMMON_EXTERN void getContent(std::string&) const; + QPID_COMMON_EXTERN std::string getContent() const; bool isContentBearing() const; - const AMQMethodBody* getMethod() const; - const AMQHeaderBody* getHeaders() const; - AMQHeaderBody* getHeaders(); + QPID_COMMON_EXTERN const AMQMethodBody* getMethod() const; + QPID_COMMON_EXTERN const AMQHeaderBody* getHeaders() const; + QPID_COMMON_EXTERN AMQHeaderBody* getHeaders(); template <class T> bool isA() const { const AMQMethodBody* method = getMethod(); diff --git a/qpid/cpp/src/qpid/framing/ProtocolInitiation.h b/qpid/cpp/src/qpid/framing/ProtocolInitiation.h index 6584fee55c..7a82b3575f 100644 --- a/qpid/cpp/src/qpid/framing/ProtocolInitiation.h +++ b/qpid/cpp/src/qpid/framing/ProtocolInitiation.h @@ -22,6 +22,7 @@ #include "Buffer.h" #include "AMQDataBlock.h" #include "ProtocolVersion.h" +#include "qpid/CommonImportExport.h" #ifndef _ProtocolInitiation_ #define _ProtocolInitiation_ @@ -35,12 +36,12 @@ private: ProtocolVersion version; public: - ProtocolInitiation(); - ProtocolInitiation(uint8_t major, uint8_t minor); - ProtocolInitiation(ProtocolVersion p); - virtual ~ProtocolInitiation(); - virtual void encode(Buffer& buffer) const; - virtual bool decode(Buffer& buffer); + QPID_COMMON_EXTERN ProtocolInitiation(); + QPID_COMMON_EXTERN ProtocolInitiation(uint8_t major, uint8_t minor); + QPID_COMMON_EXTERN ProtocolInitiation(ProtocolVersion p); + QPID_COMMON_EXTERN virtual ~ProtocolInitiation(); + QPID_COMMON_EXTERN virtual void encode(Buffer& buffer) const; + QPID_COMMON_EXTERN virtual bool decode(Buffer& buffer); inline virtual uint32_t encodedSize() const { return 8; } inline uint8_t getMajor() const { return version.getMajor(); } inline uint8_t getMinor() const { return version.getMinor(); } @@ -48,7 +49,7 @@ public: bool operator==(ProtocolVersion v) const { return v == getVersion(); } }; -std::ostream& operator<<(std::ostream& o, const framing::ProtocolInitiation& pi); +QPID_COMMON_EXTERN std::ostream& operator<<(std::ostream& o, const framing::ProtocolInitiation& pi); } diff --git a/qpid/cpp/src/qpid/framing/ProtocolVersion.h b/qpid/cpp/src/qpid/framing/ProtocolVersion.h index 9a7ebec491..681c9daf21 100644 --- a/qpid/cpp/src/qpid/framing/ProtocolVersion.h +++ b/qpid/cpp/src/qpid/framing/ProtocolVersion.h @@ -22,6 +22,7 @@ #define _ProtocolVersion_ #include "amqp_types.h" +#include "qpid/CommonImportExport.h" namespace qpid { @@ -38,16 +39,16 @@ public: explicit ProtocolVersion(uint8_t _major=0, uint8_t _minor=0) : major_(_major), minor_(_minor) {} - uint8_t getMajor() const { return major_; } - void setMajor(uint8_t major) { major_ = major; } - uint8_t getMinor() const { return minor_; } - void setMinor(uint8_t minor) { minor_ = minor; } - const std::string toString() const; + QPID_COMMON_EXTERN uint8_t getMajor() const { return major_; } + QPID_COMMON_EXTERN void setMajor(uint8_t major) { major_ = major; } + QPID_COMMON_EXTERN uint8_t getMinor() const { return minor_; } + QPID_COMMON_EXTERN void setMinor(uint8_t minor) { minor_ = minor; } + QPID_COMMON_EXTERN const std::string toString() const; - ProtocolVersion& operator=(ProtocolVersion p); + QPID_COMMON_EXTERN ProtocolVersion& operator=(ProtocolVersion p); - bool operator==(ProtocolVersion p) const; - bool operator!=(ProtocolVersion p) const { return ! (*this == p); } + QPID_COMMON_EXTERN bool operator==(ProtocolVersion p) const; + QPID_COMMON_EXTERN bool operator!=(ProtocolVersion p) const { return ! (*this == p); } }; } // namespace framing diff --git a/qpid/cpp/src/qpid/framing/Proxy.h b/qpid/cpp/src/qpid/framing/Proxy.h index 5e2c886af2..a9a6ce981e 100644 --- a/qpid/cpp/src/qpid/framing/Proxy.h +++ b/qpid/cpp/src/qpid/framing/Proxy.h @@ -22,6 +22,8 @@ #include "FrameHandler.h" #include "ProtocolVersion.h" +#include "qpid/CommonImportExport.h" + namespace qpid { namespace framing { @@ -37,19 +39,19 @@ class Proxy { Proxy& proxy; public: - ScopedSync(Proxy& p); - ~ScopedSync(); + QPID_COMMON_EXTERN ScopedSync(Proxy& p); + QPID_COMMON_EXTERN ~ScopedSync(); }; - Proxy(FrameHandler& h); - virtual ~Proxy(); + QPID_COMMON_EXTERN Proxy(FrameHandler& h); + QPID_COMMON_EXTERN virtual ~Proxy(); - void send(const AMQBody&); + QPID_COMMON_EXTERN void send(const AMQBody&); - ProtocolVersion getVersion() const; + QPID_COMMON_EXTERN ProtocolVersion getVersion() const; - FrameHandler& getHandler(); - void setHandler(FrameHandler&); + QPID_COMMON_EXTERN FrameHandler& getHandler(); + QPID_COMMON_EXTERN void setHandler(FrameHandler&); private: FrameHandler* out; bool sync; diff --git a/qpid/cpp/src/qpid/framing/SendContent.h b/qpid/cpp/src/qpid/framing/SendContent.h index dcd5202b3e..745c948c9e 100644 --- a/qpid/cpp/src/qpid/framing/SendContent.h +++ b/qpid/cpp/src/qpid/framing/SendContent.h @@ -22,6 +22,7 @@ #include "qpid/framing/amqp_framing.h" #include "qpid/framing/AMQFrame.h" #include "qpid/framing/FrameHandler.h" +#include "qpid/CommonImportExport.h" #ifndef _SendContent_ #define _SendContent_ @@ -44,8 +45,8 @@ class SendContent void sendFragment(const AMQContentBody& body, uint32_t offset, uint16_t size, bool first, bool last) const; void setFlags(AMQFrame& f, bool first, bool last) const; public: - SendContent(FrameHandler& _handler, uint16_t _maxFrameSize, uint frameCount); - void operator()(const AMQFrame& f); + QPID_COMMON_EXTERN SendContent(FrameHandler& _handler, uint16_t _maxFrameSize, uint frameCount); + QPID_COMMON_EXTERN void operator()(const AMQFrame& f); }; } diff --git a/qpid/cpp/src/qpid/framing/SequenceNumber.h b/qpid/cpp/src/qpid/framing/SequenceNumber.h index 930e146863..3b18ce1360 100644 --- a/qpid/cpp/src/qpid/framing/SequenceNumber.h +++ b/qpid/cpp/src/qpid/framing/SequenceNumber.h @@ -23,6 +23,7 @@ #include "amqp_types.h" #include <iosfwd> +#include "qpid/CommonImportExport.h" namespace qpid { namespace framing { @@ -37,22 +38,22 @@ class SequenceNumber int32_t value; public: - SequenceNumber(); - SequenceNumber(uint32_t v); + QPID_COMMON_EXTERN SequenceNumber(); + QPID_COMMON_EXTERN SequenceNumber(uint32_t v); - SequenceNumber& operator++();//prefix ++ - const SequenceNumber operator++(int);//postfix ++ - SequenceNumber& operator--();//prefix ++ - bool operator==(const SequenceNumber& other) const; - bool operator!=(const SequenceNumber& other) const; - bool operator<(const SequenceNumber& other) const; - bool operator>(const SequenceNumber& other) const; - bool operator<=(const SequenceNumber& other) const; - bool operator>=(const SequenceNumber& other) const; + QPID_COMMON_EXTERN SequenceNumber& operator++();//prefix ++ + QPID_COMMON_EXTERN const SequenceNumber operator++(int);//postfix ++ + QPID_COMMON_EXTERN SequenceNumber& operator--();//prefix ++ + QPID_COMMON_EXTERN bool operator==(const SequenceNumber& other) const; + QPID_COMMON_EXTERN bool operator!=(const SequenceNumber& other) const; + QPID_COMMON_EXTERN bool operator<(const SequenceNumber& other) const; + QPID_COMMON_EXTERN bool operator>(const SequenceNumber& other) const; + QPID_COMMON_EXTERN bool operator<=(const SequenceNumber& other) const; + QPID_COMMON_EXTERN bool operator>=(const SequenceNumber& other) const; uint32_t getValue() const { return (uint32_t) value; } operator uint32_t() const { return (uint32_t) value; } - friend int32_t operator-(const SequenceNumber& a, const SequenceNumber& b); + QPID_COMMON_EXTERN friend int32_t operator-(const SequenceNumber& a, const SequenceNumber& b); void encode(Buffer& buffer) const; void decode(Buffer& buffer); @@ -67,7 +68,7 @@ struct Window SequenceNumber lwm; }; -std::ostream& operator<<(std::ostream& o, const SequenceNumber& n); +QPID_COMMON_EXTERN std::ostream& operator<<(std::ostream& o, const SequenceNumber& n); }} // namespace qpid::framing diff --git a/qpid/cpp/src/qpid/framing/SequenceNumberSet.h b/qpid/cpp/src/qpid/framing/SequenceNumberSet.h index 666307f9d9..5ca40340b8 100644 --- a/qpid/cpp/src/qpid/framing/SequenceNumberSet.h +++ b/qpid/cpp/src/qpid/framing/SequenceNumberSet.h @@ -27,6 +27,7 @@ #include "SequenceNumber.h" #include "qpid/framing/reply_exceptions.h" #include "qpid/InlineVector.h" +#include "qpid/CommonImportExport.h" namespace qpid { namespace framing { @@ -41,7 +42,7 @@ public: void encode(Buffer& buffer) const; void decode(Buffer& buffer); uint32_t encodedSize() const; - SequenceNumberSet condense() const; + QPID_COMMON_EXTERN SequenceNumberSet condense() const; void addRange(const SequenceNumber& start, const SequenceNumber& end); template <class T> diff --git a/qpid/cpp/src/qpid/framing/SequenceSet.h b/qpid/cpp/src/qpid/framing/SequenceSet.h index 57b9c2c8e1..b5db9af76f 100644 --- a/qpid/cpp/src/qpid/framing/SequenceSet.h +++ b/qpid/cpp/src/qpid/framing/SequenceSet.h @@ -23,6 +23,7 @@ #include "SequenceNumber.h" #include "qpid/RangeSet.h" +#include "qpid/CommonImportExport.h" namespace qpid { namespace framing { @@ -41,13 +42,13 @@ class SequenceSet : public RangeSet<SequenceNumber> { void decode(Buffer& buffer); uint32_t encodedSize() const; - bool contains(const SequenceNumber& s) const; - void add(const SequenceNumber& s); - void add(const SequenceNumber& start, const SequenceNumber& finish); // Closed range - void add(const SequenceSet& set); - void remove(const SequenceNumber& s); - void remove(const SequenceNumber& start, const SequenceNumber& finish); // Closed range - void remove(const SequenceSet& set); + QPID_COMMON_EXTERN bool contains(const SequenceNumber& s) const; + QPID_COMMON_EXTERN void add(const SequenceNumber& s); + QPID_COMMON_EXTERN void add(const SequenceNumber& start, const SequenceNumber& finish); // Closed range + QPID_COMMON_EXTERN void add(const SequenceSet& set); + QPID_COMMON_EXTERN void remove(const SequenceNumber& s); + QPID_COMMON_EXTERN void remove(const SequenceNumber& start, const SequenceNumber& finish); // Closed range + QPID_COMMON_EXTERN void remove(const SequenceSet& set); template <class T> void for_each(T& t) const { for (RangeIterator i = rangesBegin(); i != rangesEnd(); i++) diff --git a/qpid/cpp/src/qpid/framing/StructHelper.h b/qpid/cpp/src/qpid/framing/StructHelper.h index e3dce4f5ec..89f556ad3c 100644 --- a/qpid/cpp/src/qpid/framing/StructHelper.h +++ b/qpid/cpp/src/qpid/framing/StructHelper.h @@ -22,6 +22,7 @@ #define _StructHelper_ #include "qpid/Exception.h" +#include "qpid/CommonImportExport.h" #include "Buffer.h" #include <stdlib.h> // For alloca diff --git a/qpid/cpp/src/qpid/framing/TransferContent.h b/qpid/cpp/src/qpid/framing/TransferContent.h index e3f6666fa4..236a0b6d93 100644 --- a/qpid/cpp/src/qpid/framing/TransferContent.h +++ b/qpid/cpp/src/qpid/framing/TransferContent.h @@ -26,6 +26,7 @@ #include "qpid/Exception.h" #include "qpid/framing/MessageProperties.h" #include "qpid/framing/DeliveryProperties.h" +#include "qpid/CommonImportExport.h" namespace qpid { namespace framing { @@ -36,27 +37,27 @@ class TransferContent : public MethodContent AMQHeaderBody header; std::string data; public: - TransferContent(const std::string& data = std::string(), const std::string& key=std::string()); + QPID_COMMON_EXTERN TransferContent(const std::string& data = std::string(), const std::string& key=std::string()); ///@internal - AMQHeaderBody getHeader() const; + QPID_COMMON_EXTERN AMQHeaderBody getHeader() const; - void setData(const std::string&); - const std::string& getData() const; - std::string& getData(); + QPID_COMMON_EXTERN void setData(const std::string&); + QPID_COMMON_EXTERN const std::string& getData() const; + QPID_COMMON_EXTERN std::string& getData(); - void appendData(const std::string&); + QPID_COMMON_EXTERN void appendData(const std::string&); - bool hasMessageProperties() const; - MessageProperties& getMessageProperties(); - const MessageProperties& getMessageProperties() const; + QPID_COMMON_EXTERN bool hasMessageProperties() const; + QPID_COMMON_EXTERN MessageProperties& getMessageProperties(); + QPID_COMMON_EXTERN const MessageProperties& getMessageProperties() const; - bool hasDeliveryProperties() const; - DeliveryProperties& getDeliveryProperties(); - const DeliveryProperties& getDeliveryProperties() const; + QPID_COMMON_EXTERN bool hasDeliveryProperties() const; + QPID_COMMON_EXTERN DeliveryProperties& getDeliveryProperties(); + QPID_COMMON_EXTERN const DeliveryProperties& getDeliveryProperties() const; ///@internal - void populate(const FrameSet& frameset); + QPID_COMMON_EXTERN void populate(const FrameSet& frameset); }; }} diff --git a/qpid/cpp/src/qpid/framing/Uuid.h b/qpid/cpp/src/qpid/framing/Uuid.h index 2fcbb5a261..42dc31a26d 100644 --- a/qpid/cpp/src/qpid/framing/Uuid.h +++ b/qpid/cpp/src/qpid/framing/Uuid.h @@ -20,6 +20,7 @@ */ #include "qpid/sys/uuid.h" +#include "qpid/CommonImportExport.h" #include <boost/array.hpp> @@ -63,12 +64,12 @@ struct Uuid : public boost::array<uint8_t, 16> { // Default op= and copy ctor are fine. // boost::array gives us ==, < etc. - void encode(framing::Buffer& buf) const; - void decode(framing::Buffer& buf); - uint32_t encodedSize() const { return size(); } + QPID_COMMON_EXTERN void encode(framing::Buffer& buf) const; + QPID_COMMON_EXTERN void decode(framing::Buffer& buf); + QPID_COMMON_EXTERN uint32_t encodedSize() const { return size(); } /** String value in format 1b4e28ba-2fa1-11d2-883f-b9a761bde3fb. */ - std::string str() const; + QPID_COMMON_EXTERN std::string str() const; template <class S> void serialize(S& s) { s.raw(begin(), size()); @@ -76,10 +77,10 @@ struct Uuid : public boost::array<uint8_t, 16> { }; /** Print in format 1b4e28ba-2fa1-11d2-883f-b9a761bde3fb. */ -std::ostream& operator<<(std::ostream&, Uuid); +QPID_COMMON_EXTERN std::ostream& operator<<(std::ostream&, Uuid); /** Read from format 1b4e28ba-2fa1-11d2-883f-b9a761bde3fb. */ -std::istream& operator>>(std::istream&, Uuid&); +QPID_COMMON_EXTERN std::istream& operator>>(std::istream&, Uuid&); }} // namespace qpid::framing diff --git a/qpid/cpp/src/qpid/log/Logger.h b/qpid/cpp/src/qpid/log/Logger.h index 539c1c851b..aba6999f79 100644 --- a/qpid/cpp/src/qpid/log/Logger.h +++ b/qpid/cpp/src/qpid/log/Logger.h @@ -18,6 +18,7 @@ #include <boost/ptr_container/ptr_vector.hpp> #include <boost/noncopyable.hpp> #include <set> +#include "qpid/CommonImportExport.h" namespace qpid { namespace log { @@ -54,42 +55,42 @@ class Logger : private boost::noncopyable { virtual void log(const Statement&, const std::string&) =0; }; - static Logger& instance(); + QPID_COMMON_EXTERN static Logger& instance(); - Logger(); - ~Logger(); + QPID_COMMON_EXTERN Logger(); + QPID_COMMON_EXTERN ~Logger(); /** Select the messages to be logged. */ - void select(const Selector& s); + QPID_COMMON_EXTERN void select(const Selector& s); /** Set the formatting flags, bitwise OR of FormatFlag values. */ - void format(int formatFlags); + QPID_COMMON_EXTERN void format(int formatFlags); /** Set format flags from options object. *@returns computed flags. */ - int format(const Options&); + QPID_COMMON_EXTERN int format(const Options&); /** Configure logger from Options */ - void configure(const Options& o); + QPID_COMMON_EXTERN void configure(const Options& o); /** Add a statement. */ - void add(Statement& s); + QPID_COMMON_EXTERN void add(Statement& s); /** Log a message. */ - void log(const Statement&, const std::string&); + QPID_COMMON_EXTERN void log(const Statement&, const std::string&); /** Add an output destination for messages */ - void output(std::auto_ptr<Output> out); + QPID_COMMON_EXTERN void output(std::auto_ptr<Output> out); /** Set a prefix for all messages */ - void setPrefix(const std::string& prefix); + QPID_COMMON_EXTERN void setPrefix(const std::string& prefix); /** Reset the logger. */ - void clear(); + QPID_COMMON_EXTERN void clear(); /** Get the options used to configure the logger. */ - const Options& getOptions() const { return options; } + QPID_COMMON_EXTERN const Options& getOptions() const { return options; } private: diff --git a/qpid/cpp/src/qpid/log/Options.h b/qpid/cpp/src/qpid/log/Options.h index 8a3c352d14..5e7bd433af 100644 --- a/qpid/cpp/src/qpid/log/Options.h +++ b/qpid/cpp/src/qpid/log/Options.h @@ -19,6 +19,7 @@ * */ #include "qpid/Options.h" +#include "qpid/CommonImportExport.h" #include "SinkOptions.h" #include <iosfwd> #include <memory> @@ -29,11 +30,11 @@ namespace log { /** Logging options for config parser. */ struct Options : public qpid::Options { /** Pass argv[0] for use in syslog output */ - Options(const std::string& argv0_=std::string(), + QPID_COMMON_EXTERN Options(const std::string& argv0_=std::string(), const std::string& name_="Logging options"); - Options(const Options &); + QPID_COMMON_EXTERN Options(const Options &); - Options& operator=(const Options&); + QPID_COMMON_EXTERN Options& operator=(const Options&); std::string argv0; std::string name; diff --git a/qpid/cpp/src/qpid/log/Statement.h b/qpid/cpp/src/qpid/log/Statement.h index 3c67b04b20..445f635cdd 100644 --- a/qpid/cpp/src/qpid/log/Statement.h +++ b/qpid/cpp/src/qpid/log/Statement.h @@ -20,7 +20,7 @@ */ #include "qpid/Msg.h" - +#include "qpid/CommonImportExport.h" #include <boost/current_function.hpp> namespace qpid { @@ -63,10 +63,10 @@ struct Statement { const char* function; Level level; - void log(const std::string& message); + QPID_COMMON_EXTERN void log(const std::string& message); struct Initializer { - Initializer(Statement& s); + QPID_COMMON_EXTERN Initializer(Statement& s); Statement& statement; }; }; diff --git a/qpid/cpp/src/qpid/management/Manageable.h b/qpid/cpp/src/qpid/management/Manageable.h index b4d80d8fad..d4c1a5e100 100644 --- a/qpid/cpp/src/qpid/management/Manageable.h +++ b/qpid/cpp/src/qpid/management/Manageable.h @@ -23,6 +23,7 @@ #include "ManagementObject.h" #include "Args.h" #include <string> +#include "qpid/CommonImportExport.h" namespace qpid { namespace management { @@ -36,7 +37,7 @@ class Manageable // status_t is a type used to pass completion status from the method handler. // typedef uint32_t status_t; - static std::string StatusText(status_t status, std::string text = std::string()); + QPID_COMMON_EXTERN static std::string StatusText(status_t status, std::string text = std::string()); static const status_t STATUS_OK = 0; static const status_t STATUS_UNKNOWN_OBJECT = 1; @@ -61,7 +62,7 @@ class Manageable // on this object. The input and output arguments are specific to the // method being called and must be down-cast to the appropriate sub class // before use. - virtual status_t ManagementMethod(uint32_t methodId, Args& args, std::string& text); + QPID_COMMON_EXTERN virtual status_t ManagementMethod(uint32_t methodId, Args& args, std::string& text); }; inline Manageable::~Manageable(void) {} diff --git a/qpid/cpp/src/qpid/management/ManagementObject.h b/qpid/cpp/src/qpid/management/ManagementObject.h index fbdad347b8..768578ef2f 100644 --- a/qpid/cpp/src/qpid/management/ManagementObject.h +++ b/qpid/cpp/src/qpid/management/ManagementObject.h @@ -25,6 +25,7 @@ #include "qpid/sys/Time.h" #include "qpid/sys/Mutex.h" #include <qpid/framing/Buffer.h> +#include "qpid/CommonImportExport.h" #include <map> namespace qpid { @@ -53,16 +54,16 @@ protected: uint64_t second; void fromString(const std::string&); public: - ObjectId() : agent(0), first(0), second(0) {} - ObjectId(framing::Buffer& buf) : agent(0) { decode(buf); } - ObjectId(uint8_t flags, uint16_t seq, uint32_t broker, uint32_t bank, uint64_t object); - ObjectId(AgentAttachment* _agent, uint8_t flags, uint16_t seq, uint64_t object); - ObjectId(std::istream&); - ObjectId(const std::string&); - bool operator==(const ObjectId &other) const; - bool operator<(const ObjectId &other) const; - void encode(framing::Buffer& buffer); - void decode(framing::Buffer& buffer); + QPID_COMMON_EXTERN ObjectId() : agent(0), first(0), second(0) {} + QPID_COMMON_EXTERN ObjectId(framing::Buffer& buf) : agent(0) { decode(buf); } + QPID_COMMON_EXTERN ObjectId(uint8_t flags, uint16_t seq, uint32_t broker, uint32_t bank, uint64_t object); + QPID_COMMON_EXTERN ObjectId(AgentAttachment* _agent, uint8_t flags, uint16_t seq, uint64_t object); + QPID_COMMON_EXTERN ObjectId(std::istream&); + QPID_COMMON_EXTERN ObjectId(const std::string&); + QPID_COMMON_EXTERN bool operator==(const ObjectId &other) const; + QPID_COMMON_EXTERN bool operator<(const ObjectId &other) const; + QPID_COMMON_EXTERN void encode(framing::Buffer& buffer); + QPID_COMMON_EXTERN void decode(framing::Buffer& buffer); friend std::ostream& operator<<(std::ostream&, const ObjectId&); }; @@ -128,8 +129,8 @@ class ManagementObject : public ManagementItem static int nextThreadIndex; bool forcePublish; - int getThreadIndex(); - void writeTimestamps(qpid::framing::Buffer& buf); + QPID_COMMON_EXTERN int getThreadIndex(); + QPID_COMMON_EXTERN void writeTimestamps(qpid::framing::Buffer& buf); public: typedef void (*writeSchemaCall_t) (qpid::framing::Buffer&); @@ -148,7 +149,7 @@ class ManagementObject : public ManagementItem virtual void doMethod(std::string& methodName, qpid::framing::Buffer& inBuf, qpid::framing::Buffer& outBuf) = 0; - virtual void setReference(ObjectId objectId); + QPID_COMMON_EXTERN virtual void setReference(ObjectId objectId); virtual std::string& getClassName() const = 0; virtual std::string& getPackageName() const = 0; diff --git a/qpid/cpp/src/qpid/sys/AggregateOutput.h b/qpid/cpp/src/qpid/sys/AggregateOutput.h index 1cda4456b4..fcd0d4c2f7 100644 --- a/qpid/cpp/src/qpid/sys/AggregateOutput.h +++ b/qpid/cpp/src/qpid/sys/AggregateOutput.h @@ -24,6 +24,7 @@ #include "Mutex.h" #include "OutputControl.h" #include "OutputTask.h" +#include "qpid/CommonImportExport.h" #include <algorithm> #include <vector> @@ -42,15 +43,15 @@ namespace sys { public: AggregateOutput(OutputControl& c) : next(0), control(c) {}; //this may be called on any thread - void activateOutput(); - void giveReadCredit(int32_t); + QPID_COMMON_EXTERN void activateOutput(); + QPID_COMMON_EXTERN void giveReadCredit(int32_t); //all the following will be called on the same thread - bool doOutput(); - bool hasOutput(); - void addOutputTask(OutputTask* t); - void removeOutputTask(OutputTask* t); - void removeAll(); + QPID_COMMON_EXTERN bool doOutput(); + QPID_COMMON_EXTERN bool hasOutput(); + QPID_COMMON_EXTERN void addOutputTask(OutputTask* t); + QPID_COMMON_EXTERN void removeOutputTask(OutputTask* t); + QPID_COMMON_EXTERN void removeAll(); /** Apply f to each OutputTask* in the tasks list */ template <class F> void eachOutput(F f) { diff --git a/qpid/cpp/src/qpid/sys/AsynchIO.h b/qpid/cpp/src/qpid/sys/AsynchIO.h index ffd4436c2a..fb02183359 100644 --- a/qpid/cpp/src/qpid/sys/AsynchIO.h +++ b/qpid/cpp/src/qpid/sys/AsynchIO.h @@ -22,7 +22,7 @@ */ #include "qpid/sys/IntegerTypes.h" - +#include "qpid/CommonImportExport.h" #include <boost/function.hpp> #include <boost/shared_ptr.hpp> @@ -45,9 +45,9 @@ private: AsynchAcceptorPrivate* impl; public: - AsynchAcceptor(const Socket& s, Callback callback); - ~AsynchAcceptor(); - void start(boost::shared_ptr<Poller> poller); + QPID_COMMON_EXTERN AsynchAcceptor(const Socket& s, Callback callback); + QPID_COMMON_EXTERN ~AsynchAcceptor(); + QPID_COMMON_EXTERN void start(boost::shared_ptr<Poller> poller); }; /* @@ -65,7 +65,7 @@ public: // create a correctly typed object. The platform code also manages // deletes. To correctly manage heaps when needed, the allocate and // delete should both be done from the same class/library. - static AsynchConnector* create(const Socket& s, + QPID_COMMON_EXTERN static AsynchConnector* create(const Socket& s, boost::shared_ptr<Poller> poller, std::string hostname, uint16_t port, @@ -121,7 +121,7 @@ public: // create a correctly typed object. The platform code also manages // deletes. To correctly manage heaps when needed, the allocate and // delete should both be done from the same class/library. - static AsynchIO* create(const Socket& s, + QPID_COMMON_EXTERN static AsynchIO* create(const Socket& s, ReadCallback rCb, EofCallback eofCb, DisconnectCallback disCb, diff --git a/qpid/cpp/src/qpid/sys/AsynchIOHandler.h b/qpid/cpp/src/qpid/sys/AsynchIOHandler.h index fa020fbce4..9f1d043b62 100644 --- a/qpid/cpp/src/qpid/sys/AsynchIOHandler.h +++ b/qpid/cpp/src/qpid/sys/AsynchIOHandler.h @@ -25,6 +25,7 @@ #include "ConnectionCodec.h" #include "AtomicValue.h" #include "Mutex.h" +#include "qpid/CommonImportExport.h" namespace qpid { @@ -52,26 +53,26 @@ class AsynchIOHandler : public OutputControl { void write(const framing::ProtocolInitiation&); public: - AsynchIOHandler(std::string id, ConnectionCodec::Factory* f); - ~AsynchIOHandler(); - void init(AsynchIO* a, int numBuffs); + QPID_COMMON_EXTERN AsynchIOHandler(std::string id, ConnectionCodec::Factory* f); + QPID_COMMON_EXTERN ~AsynchIOHandler(); + QPID_COMMON_EXTERN void init(AsynchIO* a, int numBuffs); - void setClient() { isClient = true; } + QPID_COMMON_EXTERN void setClient() { isClient = true; } // Output side - void close(); - void activateOutput(); - void giveReadCredit(int32_t credit); + QPID_COMMON_EXTERN void close(); + QPID_COMMON_EXTERN void activateOutput(); + QPID_COMMON_EXTERN void giveReadCredit(int32_t credit); // Input side - bool readbuff(AsynchIO& aio, AsynchIOBufferBase* buff); - void eof(AsynchIO& aio); - void disconnect(AsynchIO& aio); + QPID_COMMON_EXTERN bool readbuff(AsynchIO& aio, AsynchIOBufferBase* buff); + QPID_COMMON_EXTERN void eof(AsynchIO& aio); + QPID_COMMON_EXTERN void disconnect(AsynchIO& aio); // Notifications - void nobuffs(AsynchIO& aio); - void idle(AsynchIO& aio); - void closedSocket(AsynchIO& aio, const Socket& s); + QPID_COMMON_EXTERN void nobuffs(AsynchIO& aio); + QPID_COMMON_EXTERN void idle(AsynchIO& aio); + QPID_COMMON_EXTERN void closedSocket(AsynchIO& aio, const Socket& s); }; }} // namespace qpid::sys diff --git a/qpid/cpp/src/qpid/sys/DispatchHandle.h b/qpid/cpp/src/qpid/sys/DispatchHandle.h index ffcbd80f7e..63cd25f8fd 100644 --- a/qpid/cpp/src/qpid/sys/DispatchHandle.h +++ b/qpid/cpp/src/qpid/sys/DispatchHandle.h @@ -24,7 +24,7 @@ #include "Poller.h" #include "Mutex.h" - +#include "qpid/CommonImportExport.h" #include <boost/function.hpp> #include <queue> @@ -82,7 +82,7 @@ public: *@param wCb Callback called when the handle is writable. *@param dCb Callback called when the handle is disconnected. */ - DispatchHandle(const IOHandle& h, Callback rCb, Callback wCb, Callback dCb) : + QPID_COMMON_EXTERN DispatchHandle(const IOHandle& h, Callback rCb, Callback wCb, Callback dCb) : PollerHandle(h), readableCallback(rCb), writableCallback(wCb), @@ -90,42 +90,42 @@ public: state(IDLE) {} - ~DispatchHandle(); + QPID_COMMON_EXTERN ~DispatchHandle(); /** Add this DispatchHandle to the poller to be watched. */ - void startWatch(Poller::shared_ptr poller); + QPID_COMMON_EXTERN void startWatch(Poller::shared_ptr poller); /** Resume watching for all non-0 callbacks. */ - void rewatch(); + QPID_COMMON_EXTERN void rewatch(); /** Resume watching for read only. */ - void rewatchRead(); + QPID_COMMON_EXTERN void rewatchRead(); /** Resume watching for write only. */ - void rewatchWrite(); + QPID_COMMON_EXTERN void rewatchWrite(); /** Stop watching temporarily. The DispatchHandle remains associated with the poller and can be re-activated using rewatch. */ - void unwatch(); + QPID_COMMON_EXTERN void unwatch(); /** Stop watching for read */ - void unwatchRead(); + QPID_COMMON_EXTERN void unwatchRead(); /** Stop watching for write */ - void unwatchWrite(); + QPID_COMMON_EXTERN void unwatchWrite(); /** Stop watching permanently. Disassociates from the poller. */ - void stopWatch(); + QPID_COMMON_EXTERN void stopWatch(); /** Interrupt watching this handle and make a serialised callback that respects the * same exclusivity guarantees as the other callbacks */ - void call(Callback iCb); + QPID_COMMON_EXTERN void call(Callback iCb); protected: /** Override to get extra processing done when the DispatchHandle is deleted. */ - void doDelete(); + QPID_COMMON_EXTERN void doDelete(); private: - void processEvent(Poller::EventType dir); + QPID_COMMON_EXTERN void processEvent(Poller::EventType dir); }; class DispatchHandleRef { diff --git a/qpid/cpp/src/qpid/sys/Dispatcher.h b/qpid/cpp/src/qpid/sys/Dispatcher.h index f7c9e8d731..2f3ed10901 100644 --- a/qpid/cpp/src/qpid/sys/Dispatcher.h +++ b/qpid/cpp/src/qpid/sys/Dispatcher.h @@ -24,6 +24,7 @@ #include "Poller.h" #include "Runnable.h" +#include "qpid/CommonImportExport.h" namespace qpid { namespace sys { @@ -32,10 +33,10 @@ class Dispatcher : public Runnable { const Poller::shared_ptr poller; public: - Dispatcher(Poller::shared_ptr poller); - ~Dispatcher(); + QPID_COMMON_EXTERN Dispatcher(Poller::shared_ptr poller); + QPID_COMMON_EXTERN ~Dispatcher(); - void run(); + QPID_COMMON_EXTERN void run(); }; }} diff --git a/qpid/cpp/src/qpid/sys/IOHandle.h b/qpid/cpp/src/qpid/sys/IOHandle.h index 0bf2abbafa..656e5e1efd 100644 --- a/qpid/cpp/src/qpid/sys/IOHandle.h +++ b/qpid/cpp/src/qpid/sys/IOHandle.h @@ -22,6 +22,8 @@ * */ +#include "qpid/CommonImportExport.h" + namespace qpid { namespace sys { @@ -50,8 +52,8 @@ class IOHandle { protected: IOHandlePrivate* const impl; - IOHandle(IOHandlePrivate*); - virtual ~IOHandle(); + IOHandle(IOHandlePrivate*); + QPID_COMMON_EXTERN virtual ~IOHandle(); }; }} diff --git a/qpid/cpp/src/qpid/sys/PollableCondition.h b/qpid/cpp/src/qpid/sys/PollableCondition.h index 49e84e6cb0..f49fb22cb4 100644 --- a/qpid/cpp/src/qpid/sys/PollableCondition.h +++ b/qpid/cpp/src/qpid/sys/PollableCondition.h @@ -23,6 +23,7 @@ */ #include "qpid/sys/Poller.h" +#include "qpid/CommonImportExport.h" #include <boost/function.hpp> #include <boost/shared_ptr.hpp> @@ -36,35 +37,35 @@ class PollableCondition { public: typedef boost::function1<void, PollableCondition&> Callback; - PollableCondition(const Callback& cb, + QPID_COMMON_EXTERN PollableCondition(const Callback& cb, const boost::shared_ptr<sys::Poller>& poller); - ~PollableCondition(); + QPID_COMMON_EXTERN ~PollableCondition(); /** * Set the condition. Triggers callback to Callback from Poller. * When callback is made, condition is suspended. Call rearm() to * resume reacting to the condition. */ - void set(); + QPID_COMMON_EXTERN void set(); /** * Get the current state of the condition, then clear it. * * @return The state of the condition before it was cleared. */ - bool clear(); + QPID_COMMON_EXTERN bool clear(); /** * Temporarily suspend the ability for the poller to react to the * condition. It can be rearm()ed later. */ - void disarm(); + QPID_COMMON_EXTERN void disarm(); /** * Reset the ability for the poller to react to the condition. */ - void rearm(); + QPID_COMMON_EXTERN void rearm(); private: PollableConditionPrivate *impl; diff --git a/qpid/cpp/src/qpid/sys/Poller.h b/qpid/cpp/src/qpid/sys/Poller.h index 8e9f67fefd..49d7b321d7 100644 --- a/qpid/cpp/src/qpid/sys/Poller.h +++ b/qpid/cpp/src/qpid/sys/Poller.h @@ -24,7 +24,7 @@ #include "Time.h" #include "Runnable.h" - +#include "qpid/CommonImportExport.h" #include <boost/shared_ptr.hpp> namespace qpid { @@ -74,10 +74,10 @@ public: void process(); }; - Poller(); - ~Poller(); + QPID_COMMON_EXTERN Poller(); + QPID_COMMON_EXTERN ~Poller(); /** Note: this function is async-signal safe */ - void shutdown(); + QPID_COMMON_EXTERN void shutdown(); // Interrupt waiting for a specific poller handle // returns true if we could interrupt the handle @@ -88,16 +88,16 @@ public: // - This can either be because it has just received an event which has been // reported and has not been reenabled since. Or because it was removed // from the monitoring set - bool interrupt(PollerHandle& handle); + QPID_COMMON_EXTERN bool interrupt(PollerHandle& handle); // Poller run loop - void run(); + QPID_COMMON_EXTERN void run(); - void addFd(PollerHandle& handle, Direction dir); - void delFd(PollerHandle& handle); - void modFd(PollerHandle& handle, Direction dir); - void rearmFd(PollerHandle& handle); - Event wait(Duration timeout = TIME_INFINITE); + QPID_COMMON_EXTERN void addFd(PollerHandle& handle, Direction dir); + QPID_COMMON_EXTERN void delFd(PollerHandle& handle); + QPID_COMMON_EXTERN void modFd(PollerHandle& handle, Direction dir); + QPID_COMMON_EXTERN void rearmFd(PollerHandle& handle); + QPID_COMMON_EXTERN Event wait(Duration timeout = TIME_INFINITE); }; /** @@ -110,11 +110,11 @@ class PollerHandle { friend struct Poller::Event; PollerHandlePrivate* const impl; - virtual void processEvent(Poller::EventType) {}; + QPID_COMMON_EXTERN virtual void processEvent(Poller::EventType) {}; public: - PollerHandle(const IOHandle& h); - virtual ~PollerHandle(); + QPID_COMMON_EXTERN PollerHandle(const IOHandle& h); + QPID_COMMON_EXTERN virtual ~PollerHandle(); }; inline void Poller::Event::process() { diff --git a/qpid/cpp/src/qpid/sys/Runnable.h b/qpid/cpp/src/qpid/sys/Runnable.h index fb3927c612..4bf43c93d1 100644 --- a/qpid/cpp/src/qpid/sys/Runnable.h +++ b/qpid/cpp/src/qpid/sys/Runnable.h @@ -22,6 +22,7 @@ */ #include <boost/function.hpp> +#include "qpid/CommonImportExport.h" namespace qpid { namespace sys { @@ -35,7 +36,7 @@ class Runnable /** Type to represent a runnable as a Functor */ typedef boost::function0<void> Functor; - virtual ~Runnable(); + QPID_COMMON_EXTERN virtual ~Runnable(); /** Derived classes override run(). */ virtual void run() = 0; diff --git a/qpid/cpp/src/qpid/sys/Socket.h b/qpid/cpp/src/qpid/sys/Socket.h index ae48b8104d..f828d255bd 100644 --- a/qpid/cpp/src/qpid/sys/Socket.h +++ b/qpid/cpp/src/qpid/sys/Socket.h @@ -24,7 +24,7 @@ #include "IOHandle.h" #include "qpid/sys/IntegerTypes.h" - +#include "qpid/CommonImportExport.h" #include <string> struct sockaddr; @@ -38,7 +38,7 @@ class Socket : public IOHandle { public: /** Create a socket wrapper for descriptor. */ - Socket(); + QPID_COMMON_EXTERN Socket(); /** Create an initialized TCP socket */ void createTcp() const; @@ -49,21 +49,21 @@ public: /** Set socket non blocking */ void setNonblocking() const; - void connect(const std::string& host, uint16_t port) const; + QPID_COMMON_EXTERN void connect(const std::string& host, uint16_t port) const; - void close() const; + QPID_COMMON_EXTERN void close() const; /** Bind to a port and start listening. *@param port 0 means choose an available port. *@param backlog maximum number of pending connections. *@return The bound port. */ - int listen(uint16_t port = 0, int backlog = 10) const; + QPID_COMMON_EXTERN int listen(uint16_t port = 0, int backlog = 10) const; /** Returns the "socket name" ie the address bound to * the near end of the socket */ - std::string getSockname() const; + QPID_COMMON_EXTERN std::string getSockname() const; /** Returns the "peer name" ie the address bound to * the remote end of the socket @@ -74,14 +74,14 @@ public: * Returns an address (host and port) for the remote end of the * socket */ - std::string getPeerAddress() const; + QPID_COMMON_EXTERN std::string getPeerAddress() const; /** * Returns an address (host and port) for the local end of the * socket */ std::string getLocalAddress() const; - uint16_t getLocalPort() const; + QPID_COMMON_EXTERN uint16_t getLocalPort() const; uint16_t getRemotePort() const; /** @@ -99,7 +99,7 @@ public: int read(void *buf, size_t count) const; int write(const void *buf, size_t count) const; - void setTcpNoDelay(bool nodelay) const; + QPID_COMMON_EXTERN void setTcpNoDelay(bool nodelay) const; private: Socket(IOHandlePrivate*); diff --git a/qpid/cpp/src/qpid/sys/StrError.h b/qpid/cpp/src/qpid/sys/StrError.h index 3843f2abe1..69cc7e714c 100644 --- a/qpid/cpp/src/qpid/sys/StrError.h +++ b/qpid/cpp/src/qpid/sys/StrError.h @@ -23,12 +23,13 @@ */ #include <string> +#include "qpid/CommonImportExport.h" namespace qpid { namespace sys { /** Get the error message for a system number err, e.g. errno. */ -std::string strError(int err); +QPID_COMMON_EXTERN std::string strError(int err); }} // namespace qpid diff --git a/qpid/cpp/src/qpid/sys/SystemInfo.h b/qpid/cpp/src/qpid/sys/SystemInfo.h index 017a05e2c5..6e97022b36 100644 --- a/qpid/cpp/src/qpid/sys/SystemInfo.h +++ b/qpid/cpp/src/qpid/sys/SystemInfo.h @@ -23,6 +23,7 @@ #include "qpid/sys/IntegerTypes.h" #include "qpid/Address.h" +#include "qpid/CommonImportExport.h" namespace qpid { namespace sys { @@ -36,15 +37,15 @@ namespace SystemInfo { * Estimate available concurrency, e.g. number of CPU cores. * -1 means estimate not available on this platform. */ - long concurrency(); + QPID_COMMON_EXTERN long concurrency(); /** * Get the local host name and set it in the specified TcpAddress. * Returns false if it can't be obtained and sets errno to any error value. */ - bool getLocalHostname (TcpAddress &address); + QPID_COMMON_EXTERN bool getLocalHostname (TcpAddress &address); - void getLocalIpAddresses (uint16_t port, std::vector<Address> &addrList); + QPID_COMMON_EXTERN void getLocalIpAddresses (uint16_t port, std::vector<Address> &addrList); /** * Retrieve system identifiers and versions. This is information that can @@ -57,7 +58,7 @@ namespace SystemInfo { * @param version Receives the OS release version (kernel, build, sp, etc.) * @param machine Receives the hardware type. */ - void getSystemId (std::string &osName, + QPID_COMMON_EXTERN void getSystemId (std::string &osName, std::string &nodeName, std::string &release, std::string &version, @@ -66,17 +67,17 @@ namespace SystemInfo { /** * Get the process ID of the current process. */ - uint32_t getProcessId(); + QPID_COMMON_EXTERN uint32_t getProcessId(); /** * Get the process ID of the parent of the current process. */ - uint32_t getParentProcessId(); + QPID_COMMON_EXTERN uint32_t getParentProcessId(); /** * Get the name of the current process (i.e. the name of the executable) */ - std::string getProcessName(); + QPID_COMMON_EXTERN std::string getProcessName(); }}} // namespace qpid::sys::SystemInfo diff --git a/qpid/cpp/src/qpid/sys/Thread.h b/qpid/cpp/src/qpid/sys/Thread.h index e2b904aa1a..14e2fef1c0 100644 --- a/qpid/cpp/src/qpid/sys/Thread.h +++ b/qpid/cpp/src/qpid/sys/Thread.h @@ -22,6 +22,7 @@ * */ #include <boost/shared_ptr.hpp> +#include "qpid/CommonImportExport.h" #ifdef _WIN32 # define QPID_TSS __declspec(thread) @@ -42,15 +43,15 @@ class Thread boost::shared_ptr<ThreadPrivate> impl; public: - Thread(); - explicit Thread(qpid::sys::Runnable*); - explicit Thread(qpid::sys::Runnable&); + QPID_COMMON_EXTERN Thread(); + QPID_COMMON_EXTERN explicit Thread(qpid::sys::Runnable*); + QPID_COMMON_EXTERN explicit Thread(qpid::sys::Runnable&); - void join(); + QPID_COMMON_EXTERN void join(); - unsigned long id(); + QPID_COMMON_EXTERN unsigned long id(); - static Thread current(); + QPID_COMMON_EXTERN static Thread current(); /** ID of current thread for logging. * Workaround for broken Thread::current() in APR diff --git a/qpid/cpp/src/qpid/sys/Time.h b/qpid/cpp/src/qpid/sys/Time.h index d39be95434..2c93d64f32 100644 --- a/qpid/cpp/src/qpid/sys/Time.h +++ b/qpid/cpp/src/qpid/sys/Time.h @@ -33,6 +33,8 @@ # include "posix/Time.h" #endif +#include "qpid/CommonImportExport.h" + #include <limits> #include <iosfwd> @@ -86,23 +88,23 @@ class AbsTime { TimePrivate timepoint; public: - inline AbsTime() {} - AbsTime(const AbsTime& time0, const Duration& duration); + QPID_COMMON_EXTERN inline AbsTime() {} + QPID_COMMON_EXTERN AbsTime(const AbsTime& time0, const Duration& duration); // Default assignment operation fine // Default copy constructor fine - static AbsTime now(); - static AbsTime FarFuture(); + QPID_COMMON_EXTERN static AbsTime now(); + QPID_COMMON_EXTERN static AbsTime FarFuture(); const TimePrivate& getPrivate(void) const { return timepoint; } bool operator==(const AbsTime& t) const { return t.timepoint == timepoint; } template <class S> void serialize(S& s) { s(timepoint); } friend bool operator<(const AbsTime& a, const AbsTime& b); friend bool operator>(const AbsTime& a, const AbsTime& b); - friend std::ostream& operator << (std::ostream&, const AbsTime&); + QPID_COMMON_EXTERN friend std::ostream& operator << (std::ostream&, const AbsTime&); }; -std::ostream& operator << (std::ostream&, const AbsTime&); +QPID_COMMON_EXTERN std::ostream& operator << (std::ostream&, const AbsTime&); /** * @class Duration @@ -120,9 +122,9 @@ class Duration { friend class AbsTime; public: - inline Duration(int64_t time0); - explicit Duration(const AbsTime& time0); - explicit Duration(const AbsTime& start, const AbsTime& finish); + QPID_COMMON_EXTERN inline Duration(int64_t time0); + QPID_COMMON_EXTERN explicit Duration(const AbsTime& time0); + QPID_COMMON_EXTERN explicit Duration(const AbsTime& start, const AbsTime& finish); inline operator int64_t() const; }; @@ -158,7 +160,7 @@ const Duration TIME_INFINITE = std::numeric_limits<int64_t>::max(); const AbsTime FAR_FUTURE = AbsTime::FarFuture(); /** Portable sleep for a number of seconds */ -void sleep(int secs); +QPID_COMMON_EXTERN void sleep(int secs); /** Portable sleep for a number of microseconds */ void usleep(uint64_t usecs); diff --git a/qpid/cpp/src/qpid/sys/Timer.h b/qpid/cpp/src/qpid/sys/Timer.h index 2561e41034..dab2f55edb 100644 --- a/qpid/cpp/src/qpid/sys/Timer.h +++ b/qpid/cpp/src/qpid/sys/Timer.h @@ -25,7 +25,7 @@ #include "qpid/sys/Thread.h" #include "qpid/sys/Runnable.h" #include "qpid/RefCounted.h" - +#include "qpid/CommonImportExport.h" #include <memory> #include <queue> @@ -49,15 +49,15 @@ class TimerTask : public RefCounted { void fireTask(); public: - TimerTask(Duration period); - TimerTask(AbsTime fireTime); - virtual ~TimerTask(); + QPID_COMMON_EXTERN TimerTask(Duration period); + QPID_COMMON_EXTERN TimerTask(AbsTime fireTime); + QPID_COMMON_EXTERN virtual ~TimerTask(); - void setupNextFire(); - void restart(); - void delayTill(AbsTime fireTime); - void cancel(); - bool isCancelled() const; + QPID_COMMON_EXTERN void setupNextFire(); + QPID_COMMON_EXTERN void restart(); + QPID_COMMON_EXTERN void delayTill(AbsTime fireTime); + QPID_COMMON_EXTERN void cancel(); + QPID_COMMON_EXTERN bool isCancelled() const; protected: // Must be overridden with callback @@ -78,12 +78,12 @@ class Timer : private Runnable { void run(); public: - Timer(); - ~Timer(); + QPID_COMMON_EXTERN Timer(); + QPID_COMMON_EXTERN ~Timer(); - void add(boost::intrusive_ptr<TimerTask> task); - void start(); - void stop(); + QPID_COMMON_EXTERN void add(boost::intrusive_ptr<TimerTask> task); + QPID_COMMON_EXTERN void start(); + QPID_COMMON_EXTERN void stop(); }; diff --git a/qpid/cpp/src/qpid/sys/windows/uuid.h b/qpid/cpp/src/qpid/sys/windows/uuid.h index a44ef2e9a3..7d003c3739 100644 --- a/qpid/cpp/src/qpid/sys/windows/uuid.h +++ b/qpid/cpp/src/qpid/sys/windows/uuid.h @@ -23,6 +23,7 @@ */ #include <Rpc.h> +#include "qpid/CommonImportExport.h" #ifdef uuid_t /* Done in rpcdce.h */ # undef uuid_t @@ -31,11 +32,11 @@ namespace qpid { namespace sys { const size_t UuidSize = 16; }} typedef uint8_t uuid_t[qpid::sys::UuidSize]; -void uuid_clear (uuid_t uu); -void uuid_copy (uuid_t dst, const uuid_t src); -void uuid_generate (uuid_t out); -int uuid_is_null (const uuid_t uu); // Returns 1 if null, else 0 -int uuid_parse (const char *in, uuid_t uu); // Returns 0 on success, else -1 -void uuid_unparse (const uuid_t uu, char *out); +QPID_COMMON_EXTERN void uuid_clear (uuid_t uu); +QPID_COMMON_EXTERN void uuid_copy (uuid_t dst, const uuid_t src); +QPID_COMMON_EXTERN void uuid_generate (uuid_t out); +QPID_COMMON_EXTERN int uuid_is_null (const uuid_t uu); // Returns 1 if null, else 0 +QPID_COMMON_EXTERN int uuid_parse (const char *in, uuid_t uu); // Returns 0 on success, else -1 +QPID_COMMON_EXTERN void uuid_unparse (const uuid_t uu, char *out); #endif /*!_sys_windows_uuid_h*/ |