qpid_messaging 0.18.5 → 0.20.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -3,7 +3,7 @@
3
3
  Qpid is an cross-platform enterprise messaging system based on the open-source
4
4
  AMQP protocol.
5
5
 
6
- Version :: 0.18.0
6
+ Version :: 0.20.0
7
7
 
8
8
  = Links
9
9
 
data/Rakefile CHANGED
@@ -33,7 +33,6 @@ require "rdoc/task"
33
33
  require "rake/testtask"
34
34
 
35
35
  require "cucumber/rake/task"
36
- require "rspec/core/rake_task"
37
36
 
38
37
  CLOBBER.include("pkg")
39
38
 
@@ -56,44 +55,6 @@ task :default => :test
56
55
  desc "Runs all tests."
57
56
  task :test => :"test:all"
58
57
 
59
- #---------------
60
- # Testing tasks.
61
- #---------------
62
-
63
- namespace :test do
64
-
65
- desc "Run RSpec tests."
66
- RSpec::Core::RakeTask.new do |t|
67
- t.ruby_opts = ['-rtest/unit']
68
- t.rcov = false
69
- t.rcov_opts = [
70
- '--exclude', 'lib\/qpid_messaging.rb,spec\/,lib\/ruby',
71
- ]
72
- end
73
-
74
- desc "Run all tests (default)."
75
- task :all => [:spec, :features]
76
-
77
- Cucumber::Rake::Task.new(:features) do |t|
78
- t.libs = ["lib", "ext/nonblockio"]
79
- t.cucumber_opts = "--format progress"
80
- end
81
-
82
- end
83
-
84
- #---------------------
85
- # Documentation tasks.
86
- #---------------------
87
-
88
- Rake::RDocTask.new(:rdoc => "rdoc",
89
- :clobber_rdoc => "rdoc:clean",
90
- :rerdoc => "rdoc:force") do |rd|
91
- rd.main = "README.rdoc"
92
- rd.options << "--all"
93
- rd.rdoc_files.include("README.rdoc", "lib/**/*.rb")
94
- rd.title = "Qpid Messaging Documentation"
95
- end
96
-
97
58
  #-----------------
98
59
  # Package the gem.
99
60
  #-----------------
data/examples/client.rb CHANGED
@@ -29,7 +29,9 @@ if __FILE__ == $0
29
29
  connection.open
30
30
  session = connection.create_session
31
31
  sender = session.create_sender "service_queue"
32
- response_queue = Qpid::Messaging::Address.new("#response-queue;{create:always}")
32
+ response_queue = Qpid::Messaging::Address.new("#response-queue", "",
33
+ :create => :always,
34
+ :delete => :always)
33
35
  receiver = session.create_receiver response_queue
34
36
 
35
37
  ["Twas brillig, and the slithy toves",
data/ext/cqpid/cqpid.cpp CHANGED
@@ -1859,12 +1859,6 @@ static VALUE mCqpid;
1859
1859
 
1860
1860
 
1861
1861
 
1862
- struct mystr
1863
- {
1864
- size_t len;
1865
- const char *ptr;
1866
- };
1867
-
1868
1862
  #include <qpid/messaging/exceptions.h>
1869
1863
  #include <qpid/messaging/Address.h>
1870
1864
  #include <qpid/messaging/Connection.h>
@@ -2000,9 +1994,6 @@ SWIG_From_std_string (const std::string& s)
2000
1994
  return SWIG_FromCharPtrAndSize(s.data(), s.size());
2001
1995
  }
2002
1996
 
2003
- SWIGINTERN qpid::messaging::Duration qpid_messaging_Duration___mul__(qpid::messaging::Duration *self,uint64_t multiplier){
2004
- return qpid::messaging::Duration(self->getMilliseconds() * multiplier);
2005
- }
2006
1997
 
2007
1998
  SWIGINTERNINLINE VALUE
2008
1999
  SWIG_From_bool (bool value)
@@ -2135,6 +2126,13 @@ SWIG_AsVal_bool (VALUE obj, bool *val)
2135
2126
  }
2136
2127
 
2137
2128
 
2129
+ SWIGINTERNINLINE VALUE
2130
+ SWIG_FromCharPtr(const char *cptr)
2131
+ {
2132
+ return SWIG_FromCharPtrAndSize(cptr, (cptr ? strlen(cptr) : 0));
2133
+ }
2134
+
2135
+
2138
2136
  #define SWIG_From_long LONG2NUM
2139
2137
 
2140
2138
 
@@ -2151,12 +2149,6 @@ SWIG_From_size_t (size_t value)
2151
2149
  return SWIG_From_unsigned_SS_long (static_cast< unsigned long >(value));
2152
2150
  }
2153
2151
 
2154
- SWIGINTERN mystr qpid_messaging_Message_getContentPtr(qpid::messaging::Message *self){
2155
- mystr s;
2156
- s.ptr = self->getContentPtr();
2157
- s.len = self->getContentSize();
2158
- return s;
2159
- }
2160
2152
 
2161
2153
 
2162
2154
 
@@ -3169,45 +3161,6 @@ _wrap_Duration_MINUTE_get(VALUE self) {
3169
3161
  }
3170
3162
 
3171
3163
 
3172
- SWIGINTERN VALUE
3173
- _wrap_Duration___mul__(int argc, VALUE *argv, VALUE self) {
3174
- qpid::messaging::Duration *arg1 = (qpid::messaging::Duration *) 0 ;
3175
- uint64_t arg2 ;
3176
- void *argp1 = 0 ;
3177
- int res1 = 0 ;
3178
- SwigValueWrapper< qpid::messaging::Duration > result;
3179
- VALUE vresult = Qnil;
3180
-
3181
- if ((argc < 1) || (argc > 1)) {
3182
- rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
3183
- }
3184
- res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_qpid__messaging__Duration, 0 | 0 );
3185
- if (!SWIG_IsOK(res1)) {
3186
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "qpid::messaging::Duration *","__mul__", 1, self ));
3187
- }
3188
- arg1 = reinterpret_cast< qpid::messaging::Duration * >(argp1);
3189
- {
3190
- if (TYPE(argv[0]) == T_BIGNUM)
3191
- arg2 = NUM2ULL(argv[0]);
3192
- else
3193
- arg2 = (uint64_t) FIX2ULONG(argv[0]);
3194
- }
3195
- {
3196
- try {
3197
- result = qpid_messaging_Duration___mul__(arg1,arg2);
3198
- }
3199
- catch (qpid::messaging::MessagingException& mex) {
3200
- static VALUE merror = rb_define_class("MessagingError", rb_eStandardError);
3201
- rb_raise(merror, mex.what());
3202
- }
3203
- }
3204
- vresult = SWIG_NewPointerObj((new qpid::messaging::Duration(static_cast< const qpid::messaging::Duration& >(result))), SWIGTYPE_p_qpid__messaging__Duration, SWIG_POINTER_OWN | 0 );
3205
- return vresult;
3206
- fail:
3207
- return Qnil;
3208
- }
3209
-
3210
-
3211
3164
  SWIGINTERN void
3212
3165
  free_qpid_messaging_Duration(qpid::messaging::Duration *arg1) {
3213
3166
  delete arg1;
@@ -4633,6 +4586,38 @@ fail:
4633
4586
  }
4634
4587
 
4635
4588
 
4589
+ SWIGINTERN VALUE
4590
+ _wrap_Message_getContentPtr(int argc, VALUE *argv, VALUE self) {
4591
+ qpid::messaging::Message *arg1 = (qpid::messaging::Message *) 0 ;
4592
+ void *argp1 = 0 ;
4593
+ int res1 = 0 ;
4594
+ char *result = 0 ;
4595
+ VALUE vresult = Qnil;
4596
+
4597
+ if ((argc < 0) || (argc > 0)) {
4598
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
4599
+ }
4600
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_qpid__messaging__Message, 0 | 0 );
4601
+ if (!SWIG_IsOK(res1)) {
4602
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "qpid::messaging::Message const *","getContentPtr", 1, self ));
4603
+ }
4604
+ arg1 = reinterpret_cast< qpid::messaging::Message * >(argp1);
4605
+ {
4606
+ try {
4607
+ result = (char *)((qpid::messaging::Message const *)arg1)->getContentPtr();
4608
+ }
4609
+ catch (qpid::messaging::MessagingException& mex) {
4610
+ static VALUE merror = rb_define_class("MessagingError", rb_eStandardError);
4611
+ rb_raise(merror, mex.what());
4612
+ }
4613
+ }
4614
+ vresult = SWIG_FromCharPtr((const char *)result);
4615
+ return vresult;
4616
+ fail:
4617
+ return Qnil;
4618
+ }
4619
+
4620
+
4636
4621
  SWIGINTERN VALUE
4637
4622
  _wrap_Message_getContentSize(int argc, VALUE *argv, VALUE self) {
4638
4623
  qpid::messaging::Message *arg1 = (qpid::messaging::Message *) 0 ;
@@ -4719,40 +4704,6 @@ fail:
4719
4704
  }
4720
4705
 
4721
4706
 
4722
- SWIGINTERN VALUE
4723
- _wrap_Message_getContentPtr(int argc, VALUE *argv, VALUE self) {
4724
- qpid::messaging::Message *arg1 = (qpid::messaging::Message *) 0 ;
4725
- void *argp1 = 0 ;
4726
- int res1 = 0 ;
4727
- mystr result;
4728
- VALUE vresult = Qnil;
4729
-
4730
- if ((argc < 0) || (argc > 0)) {
4731
- rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
4732
- }
4733
- res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_qpid__messaging__Message, 0 | 0 );
4734
- if (!SWIG_IsOK(res1)) {
4735
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "qpid::messaging::Message *","getContentPtr", 1, self ));
4736
- }
4737
- arg1 = reinterpret_cast< qpid::messaging::Message * >(argp1);
4738
- {
4739
- try {
4740
- result = qpid_messaging_Message_getContentPtr(arg1);
4741
- }
4742
- catch (qpid::messaging::MessagingException& mex) {
4743
- static VALUE merror = rb_define_class("MessagingError", rb_eStandardError);
4744
- rb_raise(merror, mex.what());
4745
- }
4746
- }
4747
- {
4748
- vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_FromCharPtrAndSize((&result)->ptr, (&result)->len));
4749
- }
4750
- return vresult;
4751
- fail:
4752
- return Qnil;
4753
- }
4754
-
4755
-
4756
4707
  static swig_class SwigClassEncodingException;
4757
4708
 
4758
4709
  #ifdef HAVE_RB_DEFINE_ALLOC_FUNC
@@ -9812,7 +9763,6 @@ SWIGEXPORT void Init_cqpid(void) {
9812
9763
  rb_define_singleton_method(SwigClassDuration.klass, "IMMEDIATE", VALUEFUNC(_wrap_Duration_IMMEDIATE_get), 0);
9813
9764
  rb_define_singleton_method(SwigClassDuration.klass, "SECOND", VALUEFUNC(_wrap_Duration_SECOND_get), 0);
9814
9765
  rb_define_singleton_method(SwigClassDuration.klass, "MINUTE", VALUEFUNC(_wrap_Duration_MINUTE_get), 0);
9815
- rb_define_method(SwigClassDuration.klass, "*", VALUEFUNC(_wrap_Duration___mul__), -1);
9816
9766
  SwigClassDuration.mark = 0;
9817
9767
  SwigClassDuration.destroy = (void (*)(void *)) free_qpid_messaging_Duration;
9818
9768
  SwigClassDuration.trackObjects = 0;
@@ -9846,9 +9796,9 @@ SWIGEXPORT void Init_cqpid(void) {
9846
9796
  rb_define_method(SwigClassMessage.klass, "getProperties", VALUEFUNC(_wrap_Message_getProperties), -1);
9847
9797
  rb_define_method(SwigClassMessage.klass, "setContent", VALUEFUNC(_wrap_Message_setContent), -1);
9848
9798
  rb_define_method(SwigClassMessage.klass, "getContent", VALUEFUNC(_wrap_Message_getContent), -1);
9799
+ rb_define_method(SwigClassMessage.klass, "getContentPtr", VALUEFUNC(_wrap_Message_getContentPtr), -1);
9849
9800
  rb_define_method(SwigClassMessage.klass, "getContentSize", VALUEFUNC(_wrap_Message_getContentSize), -1);
9850
9801
  rb_define_method(SwigClassMessage.klass, "setProperty", VALUEFUNC(_wrap_Message_setProperty), -1);
9851
- rb_define_method(SwigClassMessage.klass, "getContentPtr", VALUEFUNC(_wrap_Message_getContentPtr), -1);
9852
9802
  SwigClassMessage.mark = 0;
9853
9803
  SwigClassMessage.destroy = (void (*)(void *)) free_qpid_messaging_Message;
9854
9804
  SwigClassMessage.trackObjects = 0;
data/ext/cqpid/extconf.rb CHANGED
@@ -26,10 +26,9 @@
26
26
  require 'mkmf'
27
27
 
28
28
  # Setup the build environment.
29
- $CFLAGS = "-fPIC -fno-inline -x c++ -lstdc++"
29
+ $CFLAGS = "-fPIC -fno-inline -x c++"
30
30
 
31
31
  REQUIRED_LIBRARIES = [
32
- 'stdc++',
33
32
  'qpidclient',
34
33
  'qpidcommon',
35
34
  'qpidmessaging',
@@ -25,5 +25,5 @@ Feature: Creating a receiver
25
25
 
26
26
  Scenario: Using an Address object
27
27
  Given an open session
28
- And an Address with the string "create-receiver-test;{create:always}"
28
+ And an Address with the name "create-receiver-test" and subject "foo" and option "create" set to "always" and "delete" set to "always"
29
29
  Then creating a receiver with an Address succeeds
@@ -21,5 +21,5 @@ Feature: Creating a sender
21
21
 
22
22
  Scenario: Using an Address object
23
23
  Given an open session
24
- And an Address with the string "my-queue/my-subject;{create:always}"
24
+ And an Address with the name "my-queue" and subject "my-subject" and option "create" set to "always"
25
25
  Then creating a sender with an Address succeeds
@@ -17,6 +17,15 @@
17
17
  # under the License.
18
18
  #
19
19
 
20
- Given /^an Address with the string "(.*?)"$/ do |address|
21
- @address = Qpid::Messaging::Address.new "#{address}"
20
+ Given /^an Address with the name "([^"]*)" and subject "([^"]*)" and option "([^"]*)" set to "([^"]*)"$/ do |name, subject, key, value|
21
+ options = Hash.new
22
+ options["#{key}"] = "#{value}"
23
+ @address = Qpid::Messaging::Address.new "#{name}", "#{subject}", options
24
+ end
25
+
26
+ Given /^an Address with the name "([^"]*)" and subject "([^"]*)" and option "([^"]*)" set to "([^"]*)" and "([^"]*)" set to "([^"]*)"$/ do |name, subject, key1, value1, key2, value2|
27
+ options = Hash.new
28
+ options["#{key1}"] = "#{value1}"
29
+ options["#{key2}"] = "#{value2}"
30
+ @address = Qpid::Messaging::Address.new "#{name}", "#{subject}", options
22
31
  end
@@ -70,18 +70,26 @@ module Qpid
70
70
  #
71
71
  class Address
72
72
 
73
- # Creates a new +Address+ object from an address string.
73
+ # Creates a new +Address+ object.
74
74
  #
75
75
  # ==== Options
76
76
  #
77
- # * address - the address string
77
+ # * name - The name for the +Address+.
78
+ # * subject - The subject for the +Address+
79
+ # * :create - See the class documentation.
80
+ # * :assert - See the class documentation.
81
+ # * :delete - See the class documentation.
82
+ # * :node - See the class documentation.
83
+ # * :link - See the class documentation.
84
+ # * :mode - See the class documentation.
78
85
  #
79
86
  # ==== Examples
80
87
  #
81
- # addr = Qpid::Messaging::Address.new "my-queue;{create:always}"
88
+ # addr = Qpid::Messaging::Address.new "my-queue"
89
+ # addr = Qpid::Messaging::Address.new "my-queue", "testing", :create => :always
82
90
  #
83
- def initialize(address, address_impl = nil)
84
- @address_impl = address_impl || Cqpid::Address.new(address)
91
+ def initialize(name, subject, options = {}, _type = "", address_impl = nil)
92
+ @address_impl = address_impl || Cqpid::Address.new(name, subject, convert_options(options), _type)
85
93
  end
86
94
 
87
95
  def address_impl # :nodoc:
@@ -23,52 +23,35 @@ module Qpid
23
23
 
24
24
  # Encodes the supplied content into the given message.
25
25
  def self.encode content, message, encoding = nil
26
- Cqpid::encode content, message.message_impl, encoding
26
+ prepared = content
27
+ case content
28
+ when Hash
29
+ prepared = {}
30
+ content.each_pair do |key,value|
31
+ prepared[key.to_s] = value.to_s
32
+ end
33
+ Cqpid::encode prepared, message.message_impl
34
+ when Array
35
+ prepared = []
36
+ content.each {|value| prepared << value.to_s}
37
+ Cqpid::encode prepared, message.message_impl
38
+ end
27
39
  end
28
40
 
29
41
  # Decodes and returns the message's content.
30
42
  def self.decode(message, content_type = nil)
31
- content_type = message.content_type if content_type.nil?
43
+ content_type = message.content_type unless content_type
32
44
 
33
45
  case content_type
34
46
  when "amqp/map"
35
- return Cqpid.decodeMap message.message_impl
47
+ Cqpid.decodeMap message.message_impl
36
48
  when "amqp/list"
37
- return Cqpid.decodeList message.message_impl
49
+ Cqpid.decodeList message.message_impl
38
50
  end
39
51
 
40
52
  message.content
41
53
  end
42
54
 
43
- # Takes as input any type and converts anything that's a symbol
44
- # into a string.
45
- def self.stringify(value)
46
- # set the default value
47
- result = value
48
-
49
- case value
50
-
51
- when Symbol
52
- result = value.to_s
53
-
54
- when Hash
55
- result = {}
56
- value.each_pair do |key, value|
57
- result[stringify(key)] = stringify(value)
58
- end
59
-
60
- when Array
61
- result = []
62
- value.each do |element|
63
- result << stringify(element)
64
- end
65
-
66
- end
67
-
68
- return result
69
-
70
- end
71
-
72
55
  end
73
56
 
74
57
  end
@@ -51,18 +51,18 @@ module Qpid
51
51
 
52
52
  # Sets the address to which replies should be sent for the +Message+.
53
53
  #
54
+ # *NOTE:* The address must be an instance of Address.
55
+ #
54
56
  # ==== Options
55
57
  #
56
- # * address - an instance of +Address+, or an address string
58
+ # * address - an instance of +Address+
57
59
  #
58
60
  # ==== Examples
59
61
  #
60
62
  # msg.reply_to = Qpid:Messaging::Address.new "my-responses"
61
- # msg.reply_to = "my-feed/responses"
62
63
  #
63
64
  def reply_to=(address)
64
- address = Qpid::Messaging::Address.new "#{address}" if !address.is_a? Qpid::Messaging::Address
65
-
65
+ raise ArgumentError, "Agument must be an Address" unless address.is_a? Qpid::Messaging::Address
66
66
  @message_impl.setReplyTo address.address_impl
67
67
  end
68
68
 
@@ -71,7 +71,7 @@ module Qpid
71
71
  def reply_to
72
72
  address_impl = @message_impl.getReplyTo
73
73
  # only return an address if a reply to was specified
74
- Qpid::Messaging::Address.new(nil, address_impl) if address_impl
74
+ Qpid::Messaging::Address.new(nil, nil, nil, nil, address_impl) if address_impl
75
75
  end
76
76
 
77
77
  # Sets the subject for the +Message+.
@@ -283,14 +283,14 @@ module Qpid
283
283
 
284
284
  # Assigns a value to the named property.
285
285
  #
286
+ # *NOTE:* Both the key or the value may be a symbol, but they will
287
+ # both be converted to a +String+ for ease of transport.
288
+ #
286
289
  # ==== Options
287
290
  #
288
291
  # * name - the property name
289
292
  # * value - the property value
290
- def []=(key, value)
291
- @message_impl.setProperty(key.to_s,
292
- Qpid::Messaging.stringify(value))
293
- end
293
+ def []=(key, value); @message_impl.setProperty(key.to_s, value.to_s); end
294
294
 
295
295
  # Sets the content for the +Message+.
296
296
  #
@@ -309,12 +309,18 @@ module Qpid
309
309
  #
310
310
  def content=(content)
311
311
  content_type = nil
312
- @content = Qpid::Messaging.stringify(content)
312
+ @content = content
313
313
  case @content
314
314
  when Hash
315
315
  content_type = "amqp/map"
316
+ new_content = {}
317
+ content.each_pair{|key, value| new_content[key.to_s] = value.to_s}
318
+ @content = new_content
316
319
  when Array
320
+ new_content = []
317
321
  content_type = "amqp/list"
322
+ content.each {|element| new_content << element.to_s}
323
+ @content = new_content
318
324
  end
319
325
  if content_type.nil?
320
326
  @message_impl.setContent @content
@@ -22,8 +22,8 @@ module Qpid #:nodoc:
22
22
  module Version
23
23
 
24
24
  NUMBERS = [MAJOR = 0,
25
- MINOR = 18,
26
- BUILD = 5]
25
+ MINOR = 20,
26
+ BUILD = 0]
27
27
  end
28
28
 
29
29
  VERSION = Version::NUMBERS.join('.')
@@ -26,7 +26,7 @@ module Qpid
26
26
  describe Address do
27
27
 
28
28
  before(:each) do
29
- @address = Qpid::Messaging::Address.new "my-name/my-subject;{create:always}"
29
+ @address = Qpid::Messaging::Address.new "my-name", "my-subject", :create => :always
30
30
  end
31
31
 
32
32
  it "stores the name, subject and options when created" do
@@ -72,7 +72,7 @@ module Qpid
72
72
  end
73
73
 
74
74
  it "can return a string representation" do
75
- address = Qpid::Messaging::Address.new "foo/bar:{create:always,link:durable}"
75
+ address = Qpid::Messaging::Address.new "foo", "bar", :create => :always, :link => :durable
76
76
  result = address.to_s
77
77
 
78
78
  result.should =~ /foo\/bar/
@@ -36,7 +36,7 @@ module Qpid
36
36
  end
37
37
 
38
38
  it "can set the reply to address" do
39
- address = Qpid::Messaging::Address.new "my-queue;{create:always}"
39
+ address = Qpid::Messaging::Address.new "my-queue", ""
40
40
 
41
41
  @message.reply_to = address
42
42
 
@@ -45,19 +45,6 @@ module Qpid
45
45
  reply_to.name.should == address.name
46
46
  end
47
47
 
48
- it "can set the reply to from an address string" do
49
- name = "my-queue"
50
- subject = "responses"
51
- address = "#{name}/#{subject}"
52
-
53
- @message.reply_to = address
54
-
55
- reply_to = @message.reply_to
56
-
57
- reply_to.name.should == name
58
- reply_to.subject.should == subject
59
- end
60
-
61
48
  it "should store the content when created" do
62
49
  content = @message.content
63
50
 
@@ -46,7 +46,7 @@ module Qpid
46
46
  end
47
47
 
48
48
  it "creates a Sender from an Address" do
49
- address = Qpid::Messaging::Address.new "my-queue;{create:always}"
49
+ address = Qpid::Messaging::Address.new "my-queu", "", :create => :always
50
50
 
51
51
  @session_impl.should_receive(:createSender).
52
52
  with(address.address_impl).
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: qpid_messaging
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.18.5
4
+ version: 0.20.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-02-04 00:00:00.000000000 Z
12
+ date: 2013-01-29 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Qpid is an enterprise messaging framework.
15
15
  email: dev@qpid.apache.org