Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package perl-Net-AMQP-RabbitMQ for 
openSUSE:Factory checked in at 2021-10-26 20:14:10
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-Net-AMQP-RabbitMQ (Old)
 and      /work/SRC/openSUSE:Factory/.perl-Net-AMQP-RabbitMQ.new.1890 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "perl-Net-AMQP-RabbitMQ"

Tue Oct 26 20:14:10 2021 rev:4 rq:927518 version:2.40009

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/perl-Net-AMQP-RabbitMQ/perl-Net-AMQP-RabbitMQ.changes
    2020-10-22 14:26:58.631003165 +0200
+++ 
/work/SRC/openSUSE:Factory/.perl-Net-AMQP-RabbitMQ.new.1890/perl-Net-AMQP-RabbitMQ.changes
  2021-10-26 20:14:55.162048652 +0200
@@ -1,0 +2,15 @@
+Sun Oct 24 03:07:06 UTC 2021 - Tina M??ller <[email protected]>
+
+- updated to 2.40009
+   see /usr/share/doc/packages/perl-Net-AMQP-RabbitMQ/Changes
+
+  2.40009 - 2021-10-23
+      - Fixed a process where subprocess closed the parent process's 
connection - fixes #202
+      - Changed over to GitHub Actions from TravisCI
+      - Added support for librabbitmq-c's RPC timeout functionality. - fixes 
#206
+      - Updated to use the latest rabbitmq-c version.
+      - Merged #201, which allows setting `client_properties` in connect.
+      - Merged #200, which fixes minor document typos - fixes #199
+      - Merged #198, which adds minor documentation clarification - fixes #61
+
+-------------------------------------------------------------------

Old:
----
  Net-AMQP-RabbitMQ-2.40008.tar.gz

New:
----
  Net-AMQP-RabbitMQ-2.40009.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ perl-Net-AMQP-RabbitMQ.spec ++++++
--- /var/tmp/diff_new_pack.nbvU34/_old  2021-10-26 20:14:55.622048895 +0200
+++ /var/tmp/diff_new_pack.nbvU34/_new  2021-10-26 20:14:55.626048897 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package perl-Net-AMQP-RabbitMQ
 #
-# Copyright (c) 2020 SUSE LLC
+# Copyright (c) 2021 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -16,18 +16,16 @@
 #
 
 
+%define cpan_name Net-AMQP-RabbitMQ
 Name:           perl-Net-AMQP-RabbitMQ
-Version:        2.40008
+Version:        2.40009
 Release:        0
 #Upstream: MPL
-%define cpan_name Net-AMQP-RabbitMQ
 Summary:        Interact with RabbitMQ over AMQP using librabbitmq
 License:        MPL-1.1
-Group:          Development/Libraries/Perl
 URL:            https://metacpan.org/release/%{cpan_name}
 Source0:        
https://cpan.metacpan.org/authors/id/M/MS/MSTEMLE/%{cpan_name}-%{version}.tar.gz
 Source1:        cpanspec.yml
-BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 BuildRequires:  perl
 BuildRequires:  perl-macros
 BuildRequires:  perl(Math::Int64) >= 0.34
@@ -47,11 +45,11 @@
 you appropriately catch the errors.
 
 %prep
-%setup -q -n %{cpan_name}-%{version}
+%autosetup  -n %{cpan_name}-%{version}
 
 %build
 perl Makefile.PL INSTALLDIRS=vendor OPTIMIZE="%{optflags}"
-make %{?_smp_mflags}
+%make_build
 
 %check
 # MANUAL no testing (needs network)
@@ -63,7 +61,6 @@
 %perl_gen_filelist
 
 %files -f %{name}.files
-%defattr(-,root,root,755)
 %doc Changes CONTRIBUTING.md README.md
 %license LICENSE LICENSE-MIT
 

++++++ Net-AMQP-RabbitMQ-2.40008.tar.gz -> Net-AMQP-RabbitMQ-2.40009.tar.gz 
++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Net-AMQP-RabbitMQ-2.40008/Changes 
new/Net-AMQP-RabbitMQ-2.40009/Changes
--- old/Net-AMQP-RabbitMQ-2.40008/Changes       2020-10-01 02:46:47.000000000 
+0200
+++ new/Net-AMQP-RabbitMQ-2.40009/Changes       2021-10-23 20:17:46.000000000 
+0200
@@ -1,5 +1,14 @@
 Revision history for perl module Net::AMQP::RabbitMQ
 
+2.40009 - 2021-10-23
+    - Fixed a process where subprocess closed the parent process's connection 
- fixes #202
+    - Changed over to GitHub Actions from TravisCI
+    - Added support for librabbitmq-c's RPC timeout functionality. - fixes #206
+    - Updated to use the latest rabbitmq-c version.
+    - Merged #201, which allows setting `client_properties` in connect.
+    - Merged #200, which fixes minor document typos - fixes #199
+    - Merged #198, which adds minor documentation clarification - fixes #61
+
 2.40008 - 2020-09-30
     - Merged #195, to update Sectigo CA -  fixes #194
 
@@ -235,7 +244,7 @@
     - add a connect timeout that both times out connect() calls and
         sets SO_{SND.RCV}TIMEO on the socket
     - add a heartbeat method
-    - a hearbeat frame can be received in the internal_recv function
+    - a heartbeat frame can be received in the internal_recv function
         causing an unexpected failure consuming; these are now ignored.
     - make queue_declare return message and consumer counts (additionally)
         when called in array context.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Net-AMQP-RabbitMQ-2.40008/META.json 
new/Net-AMQP-RabbitMQ-2.40009/META.json
--- old/Net-AMQP-RabbitMQ-2.40008/META.json     2020-10-01 03:31:59.000000000 
+0200
+++ new/Net-AMQP-RabbitMQ-2.40009/META.json     2021-10-23 20:22:07.000000000 
+0200
@@ -4,7 +4,7 @@
       "Mark Ellis <[email protected]>, Michael Stemle, Jr. <[email protected]>"
    ],
    "dynamic_config" : 1,
-   "generated_by" : "ExtUtils::MakeMaker version 7.44, CPAN::Meta::Converter 
version 2.150010",
+   "generated_by" : "ExtUtils::MakeMaker version 7.62, CPAN::Meta::Converter 
version 2.150010",
    "license" : [
       "mozilla_1_1"
    ],
@@ -56,11 +56,11 @@
          "web" : "https://github.com/net-amqp-rabbitmq/net-amqp-rabbitmq";
       }
    },
-   "version" : "2.40008",
+   "version" : "2.40009",
    "x_contributors" : [
       "jesus - Theo Schlossnagle <[email protected]>",
       "markellis - Mark Ellis <[email protected]>",
-      "mstemle - Michael Stemle, Jr. <[email protected]>",
+      "mstemle - Mike \"manchicken\" Stemle, Jr. <[email protected]>",
       "drolsky - Dave Rolsky <[email protected]>",
       "srezic - Slaven Rezi?? <[email protected]>",
       "armand - Armand Leclercq <[email protected]>",
@@ -71,5 +71,5 @@
       "FGA - Fabrice Gabolde <[email protected]>",
       "ikegami - Eric Brine <[email protected]>"
    ],
-   "x_serialization_backend" : "JSON::PP version 4.04"
+   "x_serialization_backend" : "JSON::PP version 4.06"
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Net-AMQP-RabbitMQ-2.40008/META.yml 
new/Net-AMQP-RabbitMQ-2.40009/META.yml
--- old/Net-AMQP-RabbitMQ-2.40008/META.yml      2020-10-01 03:31:59.000000000 
+0200
+++ new/Net-AMQP-RabbitMQ-2.40009/META.yml      2021-10-23 20:22:07.000000000 
+0200
@@ -10,7 +10,7 @@
 configure_requires:
   ExtUtils::MakeMaker: '0'
 dynamic_config: 1
-generated_by: 'ExtUtils::MakeMaker version 7.44, CPAN::Meta::Converter version 
2.150010'
+generated_by: 'ExtUtils::MakeMaker version 7.62, CPAN::Meta::Converter version 
2.150010'
 license: mozilla
 meta-spec:
   url: http://module-build.sourceforge.net/META-spec-v1.4.html
@@ -27,11 +27,11 @@
 resources:
   bugtracker: https://github.com/net-amqp-rabbitmq/net-amqp-rabbitmq/issues
   repository: git://github.com/net-amqp-rabbitmq/net-amqp-rabbitmq.git
-version: '2.40008'
+version: '2.40009'
 x_contributors:
   - 'jesus - Theo Schlossnagle <[email protected]>'
   - 'markellis - Mark Ellis <[email protected]>'
-  - 'mstemle - Michael Stemle, Jr. <[email protected]>'
+  - 'mstemle - Mike "manchicken" Stemle, Jr. <[email protected]>'
   - 'drolsky - Dave Rolsky <[email protected]>'
   - 'srezic - Slaven Rezi?? <[email protected]>'
   - 'armand - Armand Leclercq <[email protected]>'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Net-AMQP-RabbitMQ-2.40008/Makefile.PL 
new/Net-AMQP-RabbitMQ-2.40009/Makefile.PL
--- old/Net-AMQP-RabbitMQ-2.40008/Makefile.PL   2020-10-01 02:37:00.000000000 
+0200
+++ new/Net-AMQP-RabbitMQ-2.40009/Makefile.PL   2021-10-02 17:30:11.000000000 
+0200
@@ -1,10 +1,10 @@
 use strict;
 use warnings;
-require 5.008 ;
+require 5.008;
 use utf8;
 
 use lib qw(inc);
-use ExtUtils::MakeMaker 5.16 ;
+use ExtUtils::MakeMaker 5.16;
 use Config;
 use Devel::CheckLib;
 
@@ -13,14 +13,14 @@
 my $has_htonll = check_lib(
     'function' => '
 #ifdef htonll
-return 0;
+    return 0;
 #else
-return -1;
+    return -1;
 #endif
-',
+    ',
     'header'   => ['arpa/inet.h','stdio.h'],
     'lib' => 'c',
-);
+    );
 
 #XXX i wonder if we should check for socket and poll...
 my @defines = ('-DHAVE_SOCKET', '-DHAVE_POLL', 
qq/-DAMQ_PLATFORM='"Perl_$^O_$^V"'/);
@@ -31,48 +31,45 @@
 
 my %checklib_extra_options;
 if ( $^O eq 'darwin') {
-    my $osx_openssl_path = -d "/usr/local/opt/openssl"
-      ? "/usr/local/opt/openssl"
-      : -d "/opt/local"
-        ? "/opt/local" : "/usr/local";
-
-    my $libpath = "${osx_openssl_path}/lib";
-    my $incpath = "${osx_openssl_path}/include";
-
-    push @libs, "-L$libpath";
-    push @inc, "-I$incpath";
-
-    $checklib_extra_options{libpath} = $libpath;
-    $checklib_extra_options{incpath} = $incpath;
+  eval {
+    require ExtUtils::PkgConfig;
+    push @libs, ExtUtils::PkgConfig->libs('openssl');
+    push @inc, ExtUtils::PkgConfig->cflags('openssl');
+
+    $checklib_extra_options{LIBS} = 
ExtUtils::PkgConfig->libs_only_L('openssl');
+    $checklib_extra_options{INC} = 
ExtUtils::PkgConfig->cflags_only_I('openssl');
+  }; if ($@) {
+    print "Unable to figure out where SSL is using pkg-config: $@\n";
+  }
 }
 
 my $has_openssl = check_lib(
     lib     => [qw/ssl crypto/],
     header  => 'openssl/conf.h',
     %checklib_extra_options,
-);
+    );
 if ( $has_openssl ) {
-    push @defines, '-DNAR_HAVE_OPENSSL';
-    push @libs, '-lssl', '-lcrypto';
-    if ( $^O eq 'MSWin32' ) {
-        push @inc, "-Irabbitmq-include/win32";
-    }
-    else {
-        push @inc, "-Irabbitmq-include/unix";
-    }
+  push @defines, '-DNAR_HAVE_OPENSSL';
+  push @libs, '-lssl', '-lcrypto';
+  if ( $^O eq 'MSWin32' ) {
+    push @inc, "-Irabbitmq-include/win32";
+  }
+  else {
+    push @inc, "-Irabbitmq-include/unix";
+  }
 }
 
 my $ofiles = '';
 foreach ( <*.c> ){
-    next if ( $_ =~ m/assertlib/ );
-    next if ( ( $_ eq 'amqp_openssl.c' ) && !$has_openssl );
-    next if ( ( $_ eq 'threads.c' ) && ( $^O ne 'MSWin32' ) );
+  next if ( $_ =~ m/assertlib/ );
+  next if ( ( $_ eq 'amqp_openssl.c' ) && !$has_openssl );
+  next if ( ( $_ eq 'threads.c' ) && ( $^O ne 'MSWin32' ) );
 
-    #this shouldn't exist unless the build dir is unclean. so ignore it
-    next if $_ eq 'RabbitMQ.c';
+#this shouldn't exist unless the build dir is unclean. so ignore it
+  next if $_ eq 'RabbitMQ.c';
 
-    $_ =~ s/.c$/.o/;
-    $ofiles .= "$_ ";
+  $_ =~ s/.c$/.o/;
+  $ofiles .= "$_ ";
 }
 
 my %WriteMakefileArgs = (
@@ -87,48 +84,48 @@
     LIBS            => join( ' ', @libs ),
     INC             => join( ' ', @inc ),
     PREREQ_PM       => {
-        'Math::Int64'      => '0.34',
-        'Scalar::Util'     => '0',
-        'XSLoader'         => '0',
+    'Math::Int64'      => '0.34',
+    'Scalar::Util'     => '0',
+    'XSLoader'         => '0',
     },
     TEST_REQUIRES   => {
-        'Sys::Hostname'    => '0',
-        'Test::More'       => '0',
-        'Time::HiRes'      => '0',
+    'Sys::Hostname'    => '0',
+    'Test::More'       => '0',
+    'Time::HiRes'      => '0',
     },
     META_MERGE        => {
-        "meta-spec" => { version => 2 },
-        "dynamic_config" => 1,
-        "x_contributors" => [
-            'jesus - Theo Schlossnagle <[email protected]>',
-            'markellis - Mark Ellis <[email protected]>',
-            'mstemle - Michael Stemle, Jr. <[email protected]>',
-            'drolsky - Dave Rolsky <[email protected]>',
-            'srezic - Slaven Rezi?? <[email protected]>',
-            'armand - Armand Leclercq <[email protected]>',
-            'dburke - Daniel W Burke <[email protected]>',
-            'davsx - D??vid Kov??cs <[email protected]>',
-            'iron-s - Alexey Sheynuk',
-            'ether - Karen Etheridge <[email protected]>',
-            'FGA - Fabrice Gabolde <[email protected]>',
-            'ikegami - Eric Brine <[email protected]>',
-        ],
-        resources => {
-            bugtracker  => {
-                web    => 
'https://github.com/net-amqp-rabbitmq/net-amqp-rabbitmq/issues',
-            },
-            repository => {
-                type => 'git',
-                url => 
'git://github.com/net-amqp-rabbitmq/net-amqp-rabbitmq.git',
-                web => 
'https://github.com/net-amqp-rabbitmq/net-amqp-rabbitmq',
-            },
+      "meta-spec" => { version => 2 },
+      "dynamic_config" => 1,
+      "x_contributors" => [
+        'jesus - Theo Schlossnagle <[email protected]>',
+      'markellis - Mark Ellis <[email protected]>',
+      'mstemle - Mike "manchicken" Stemle, Jr. <[email protected]>',
+      'drolsky - Dave Rolsky <[email protected]>',
+      'srezic - Slaven Rezi?? <[email protected]>',
+      'armand - Armand Leclercq <[email protected]>',
+      'dburke - Daniel W Burke <[email protected]>',
+      'davsx - D??vid Kov??cs <[email protected]>',
+      'iron-s - Alexey Sheynuk',
+      'ether - Karen Etheridge <[email protected]>',
+      'FGA - Fabrice Gabolde <[email protected]>',
+      'ikegami - Eric Brine <[email protected]>',
+      ],
+      resources => {
+        bugtracker  => {
+          web    => 
'https://github.com/net-amqp-rabbitmq/net-amqp-rabbitmq/issues',
+        },
+        repository => {
+          type => 'git',
+          url => 'git://github.com/net-amqp-rabbitmq/net-amqp-rabbitmq.git',
+          web => 'https://github.com/net-amqp-rabbitmq/net-amqp-rabbitmq',
         },
+      },
     },
-);
+    );
 
 if (!eval { ExtUtils::MakeMaker->VERSION('6.6303') }) {
-    $WriteMakefileArgs{BUILD_REQUIRES} = $WriteMakefileArgs{TEST_REQUIRES};
-    delete $WriteMakefileArgs{TEST_REQUIRES};
+  $WriteMakefileArgs{BUILD_REQUIRES} = $WriteMakefileArgs{TEST_REQUIRES};
+  delete $WriteMakefileArgs{TEST_REQUIRES};
 }
 
 WriteMakefile(%WriteMakefileArgs);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Net-AMQP-RabbitMQ-2.40008/README.md 
new/Net-AMQP-RabbitMQ-2.40009/README.md
--- old/Net-AMQP-RabbitMQ-2.40008/README.md     2020-10-01 02:37:00.000000000 
+0200
+++ new/Net-AMQP-RabbitMQ-2.40009/README.md     2021-10-06 03:43:00.000000000 
+0200
@@ -48,7 +48,26 @@
 MQSSL=1 prove -I blib/lib -I blib/arch -v t/
 ```
 
-#To build a release
+# To build a release
+
+```sh
 perl Makefile.PL
 make manifest
 make dist
+```
+
+# Special note for macOS
+
+You need `pkg-config` working, especially for openssl. There are so many 
different
+ways to install dependencies, and so many different paths for them, it is 
becoming
+very difficult to guess where they will be.
+
+As a result, we're shifting to using `pkg-config` for this. Please make sure
+that if you're running into any problems of missing symbols or misplaced files,
+that you check this _first_.
+
+# OpenSSL Compatibility
+
+So far we have been testing with OpenSSL 1.1. We appear to be good there, but
+OpenSSL 3 is not supported at this time.
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Net-AMQP-RabbitMQ-2.40008/RabbitMQ.pm 
new/Net-AMQP-RabbitMQ-2.40009/RabbitMQ.pm
--- old/Net-AMQP-RabbitMQ-2.40008/RabbitMQ.pm   2020-10-01 02:46:47.000000000 
+0200
+++ new/Net-AMQP-RabbitMQ-2.40009/RabbitMQ.pm   2021-10-23 20:17:46.000000000 
+0200
@@ -2,7 +2,7 @@
 use strict;
 use warnings;
 
-our $VERSION = '2.40008';
+our $VERSION = '2.40009';
 
 use XSLoader;
 XSLoader::load "Net::AMQP::RabbitMQ", $VERSION;
@@ -55,6 +55,13 @@
 should be making good use of C<eval> around these methods to ensure that you
 appropriately catch the errors.
 
+=head1 INSTALLATION
+
+C<cpanm Net::AMQP::RabbitMQ> or C<cpan Net::AMQP::RabbitMQ>
+
+Note that the C<Net::AMQP::RabbitMQ> module includes the associated librabbitmq
+C library.  Thus there is no need to install this separately beforehand.
+
 =head1 METHODS
 
 All methods, unless specifically stated, return nothing on success
@@ -81,7 +88,7 @@
         vhost           => $vhost,       #default '/'
         channel_max     => $cmax,        #default 0
         frame_max       => $fmax,        #default 131072
-        heartbeat       => $hearbeat,    #default 0
+        heartbeat       => $heartbeat,   #default 0
         timeout         => $seconds,     #default undef (no timeout)
 
         ssl             => 1 | 0,        #default 0
@@ -499,6 +506,30 @@
 
 C<$channel> is a channel that has been opened with C<channel_open>.
 
+=head2 get_rpc_timeout()
+
+Return the RPC timeout on the current connection.
+
+The value returned will be either C<undef>, if the RPC timeout is
+unlimited, or a hashref with C<tv_sec> for the number of seconds and
+C<tv_usec> for the number of microseconds.
+
+=head2 set_rpc_timeout({ tv_sec => SECONDS, tv_usec => MICROSECONDS })
+
+Set the RPC timeout for the current connection, using the seconds
+(C<tv_sec>) and microseconds (C<tv_usec>) provided. The arguments
+supplied can be either in the form of a hash or a hashref, so all of
+the following are valid:
+
+    $mq->set_rpc_timeout(tv_sec => 10, tv_usec => 500000)
+    $mq->set_rpc_timeout( { tv_sec => 10, tv_usec => 500000 } )
+    $mq->set_rpc_timeout(tv_sec => 10)
+    $mq->set_rpc_timeout(tv_usec => 500000)
+
+In order to remove the time limit for RPC calls, simply pass C<undef>.
+
+    $mq->set_rpc_timeout( undef )
+
 =head2 basic_qos($channel, $options)
 
 Set quality of service flags on the current $channel.
@@ -519,6 +550,9 @@
 you must send a heartbeat periodically matching connection parameter or
 the server may snip the connection.
 
+Note that since C<recv> blocks for up to C<$timeout> milliseconds,
+it automatically handles sending heartbeats for you while active.
+
 =head2 has_ssl
 
 Returns true if the module was compiled with SSL support, false otherwise
@@ -685,7 +719,7 @@
 
 Mark Ellis E<lt>[email protected]<gt>
 
-Michael Stemle, Jr. E<lt>[email protected]<gt>
+Mike "manchicken" Stemle, Jr. E<lt>[email protected]<gt>
 
 Dave Rolsky E<lt>[email protected]<gt>
 
@@ -751,11 +785,28 @@
     $self->_publish($channel, $routing_key, $body, $options, $props);
 }
 
+sub set_rpc_timeout {
+  my ($self, @opts) = @_;
+
+  my $args = undef;
+
+  # Be kind on whether or not we receive a hashref
+  # or an actual hash.
+  if ((scalar @opts % 2) == 0) {
+    $args = { @opts };
+  } elsif ( scalar @opts == 1 && defined $opts[0]) {
+    $args = $opts[0];
+  }
+
+  return $self->_set_rpc_timeout( $args );
+}
+
 sub DESTROY {
     my ($self) = @_;
-    $self->_destroy_connection_close
-        if !$have_fieldhash || $pids{$self} && $pids{$self} == $$;
-    $self->_destroy_cleanup;
+    if (!$have_fieldhash || $pids{$self} && $pids{$self} == $$) {
+      $self->_destroy_connection_close;
+      $self->_destroy_cleanup;
+    }
 }
 
 1;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Net-AMQP-RabbitMQ-2.40008/RabbitMQ.xs 
new/Net-AMQP-RabbitMQ-2.40009/RabbitMQ.xs
--- old/Net-AMQP-RabbitMQ-2.40008/RabbitMQ.xs   2020-10-01 02:37:00.000000000 
+0200
+++ new/Net-AMQP-RabbitMQ-2.40009/RabbitMQ.xs   2021-10-23 20:17:46.000000000 
+0200
@@ -30,6 +30,7 @@
 /* perl Makefile.PL; make CCFLAGS=-DDEBUG */
 #if DEBUG
  #define __DEBUG__(X)  X
+ extern void dump_table(amqp_table_t table);
 #else
  #define __DEBUG__(X) /* NOOP */
 #endif
@@ -1134,10 +1135,11 @@
   PERL_MATH_INT64_LOAD_OR_CROAK;
 
 int
-net_amqp_rabbitmq_connect(conn, hostname, options)
+net_amqp_rabbitmq_connect(conn, hostname, options, client_properties = NULL)
   Net::AMQP::RabbitMQ conn
   char *hostname
   HV *options
+  HV *client_properties
   PREINIT:
     amqp_socket_t *sock;
     char *user = "guest";
@@ -1158,6 +1160,7 @@
     int ssl_init = 1;
     char *sasl_method = "plain";
     amqp_sasl_method_enum sasl_type = AMQP_SASL_METHOD_PLAIN;
+    amqp_table_t client_properties_tbl = amqp_empty_table;
   CODE:
     str_from_hv(options, user);
     str_from_hv(options, password);
@@ -1176,6 +1179,11 @@
     int_from_hv(options, ssl_init);
     str_from_hv(options, sasl_method);
 
+    if(client_properties)
+    {
+      hash_to_amqp_table(client_properties, &client_properties_tbl, 1);
+    }
+
     if(timeout >= 0) {
      to.tv_sec = floor(timeout);
      to.tv_usec = 1000000.0 * (timeout - floor(timeout));
@@ -1229,7 +1237,7 @@
     }
 
     die_on_error(aTHX_ amqp_socket_open_noblock(sock, hostname, port, 
(timeout<0)?NULL:&to), conn, "opening socket");
-    die_on_amqp_error(aTHX_ amqp_login(conn, vhost, channel_max, frame_max, 
heartbeat, sasl_type, user, password), conn, "Logging in");
+    die_on_amqp_error(aTHX_ amqp_login_with_properties(conn, vhost, 
channel_max, frame_max, heartbeat, &client_properties_tbl, sasl_type, user, 
password), conn, "Logging in");
 
     maybe_release_buffers(conn);
 
@@ -1286,17 +1294,25 @@
     {
       hash_to_amqp_table(args, &arguments, 1);
     }
-    amqp_exchange_declare(
-      conn,
-      channel,
-      amqp_cstring_bytes(exchange),
-      amqp_cstring_bytes(exchange_type),
-      passive,
-      (amqp_boolean_t)durable,
-      (amqp_boolean_t)auto_delete,
-      (amqp_boolean_t)internal,
-      arguments
+    __DEBUG__(
+      warn("%d: amqp_declare_exchange with channel:%d, exchange:%s, and 
exchange_type:%s\n",
+        __LINE__,
+        channel,
+        exchange,
+        exchange_type
+      );
+      dump_table(arguments);
     );
+    amqp_exchange_declare(
+        conn,
+        channel,
+        amqp_cstring_bytes(exchange),
+        amqp_cstring_bytes(exchange_type),
+        passive,
+        (amqp_boolean_t)durable,
+        (amqp_boolean_t)auto_delete,
+        (amqp_boolean_t)internal,
+        arguments);
     maybe_release_buffers(conn);
     die_on_amqp_error(aTHX_ amqp_get_rpc_reply(conn), conn, "Declaring 
exchange");
 
@@ -1926,6 +1942,60 @@
     amqp_tx_rollback(conn, channel);
     die_on_amqp_error(aTHX_ amqp_get_rpc_reply(conn), conn, "Rolling Back 
transaction");
 
+SV* net_amqp_rabbitmq_get_rpc_timeout(conn)
+  Net::AMQP::RabbitMQ conn
+  PREINIT:
+    struct timeval *timeout_tv;
+    HV *output;
+  CODE:
+    timeout_tv = amqp_get_rpc_timeout(conn);
+    if (timeout_tv == NULL) {
+      __DEBUG__( warn("%d get_rpc_timeout: Timeout is NULL, returning undef.", 
__LINE__) );
+      RETVAL = &PL_sv_undef;
+    } else {
+      __DEBUG__( warn("%d get_rpc_timeout: Timeout is non-NULL, returning 
hashref.", __LINE__) );
+      output = newHV();
+      hv_stores(output, "tv_sec", newSVi64( timeout_tv->tv_sec ));
+      hv_stores(output, "tv_usec", newSVi64( timeout_tv->tv_usec ));
+      RETVAL = newRV_noinc( output );
+    }
+  OUTPUT:
+    RETVAL
+
+void net_amqp_rabbitmq__set_rpc_timeout(conn, args = NULL)
+  Net::AMQP::RabbitMQ conn
+  SV* args
+  PREINIT:
+    struct timeval timeout = {0,0};
+    struct timeval *old_timeout = NULL;
+    int tv_sec = 0;
+    int tv_usec = 0;
+    int res = 0;
+  CODE:
+    old_timeout = amqp_get_rpc_timeout(conn);
+
+    // If we are setting the RPC timeout to NULL...
+    if (args == NULL || !SvOK(args) || args == &PL_sv_undef) {
+      __DEBUG__( warn("%d set_rpc_timeout: No args. Setting to unlimited RPC 
timeout.", __LINE__) );
+
+      if (old_timeout != NULL) {
+        __DEBUG__( warn("%d set_rpc_timeout: Changing to unlimited RPC 
timeout.", __LINE__) );
+        amqp_set_rpc_timeout( conn, NULL );
+      }
+    }
+
+    // If we are setting the RPC timeout to something other than NULL...
+    else {
+      int_from_hv(SvRV(args), tv_sec);
+      int_from_hv(SvRV(args), tv_usec);
+      __DEBUG__( warn("%d set_rpc_timeout: Setting to tv_sec:%d and 
tv_usec:%d.", __LINE__, tv_sec, tv_usec) );
+      // If we need to allocate the timeout...
+
+      timeout.tv_sec = tv_sec;
+      timeout.tv_usec = tv_usec;
+      die_on_error(aTHX_ amqp_set_rpc_timeout(conn, &timeout), conn, "Set RPC 
Timeout");
+    }
+
 void
 net_amqp_rabbitmq_basic_qos(conn, channel, args = NULL)
   Net::AMQP::RabbitMQ conn
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Net-AMQP-RabbitMQ-2.40008/amqp_api.c 
new/Net-AMQP-RabbitMQ-2.40009/amqp_api.c
--- old/Net-AMQP-RabbitMQ-2.40008/amqp_api.c    2020-10-01 02:55:49.000000000 
+0200
+++ new/Net-AMQP-RabbitMQ-2.40009/amqp_api.c    2021-10-23 20:21:35.000000000 
+0200
@@ -108,14 +108,16 @@
     "socket library initialization failed"};
 
 static const char *ssl_error_strings[] = {
-    /* AMQP_STATUS_SSL_ERRO  R                -0x0200 */
+    /* AMQP_STATUS_SSL_ERROR                  -0x0200 */
     "a SSL error occurred",
     /* AMQP_STATUS_SSL_HOSTNAME_VERIFY_FAILED -0x0201 */
     "SSL hostname verification failed",
     /* AMQP_STATUS_SSL_PEER_VERIFY_FAILED     -0x0202 */
     "SSL peer cert verification failed",
     /* AMQP_STATUS_SSL_CONNECTION_FAILED      -0x0203 */
-    "SSL handshake failed"};
+    "SSL handshake failed",
+    /* AMQP_STATUS_SSL_SET_ENGINE_FAILED      -0x0204 */
+    "SSL setting engine failed"};
 
 static const char *unknown_error_string = "(unknown error)";
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Net-AMQP-RabbitMQ-2.40008/amqp_connection.c 
new/Net-AMQP-RabbitMQ-2.40009/amqp_connection.c
--- old/Net-AMQP-RabbitMQ-2.40008/amqp_connection.c     2020-10-01 
02:55:49.000000000 +0200
+++ new/Net-AMQP-RabbitMQ-2.40009/amqp_connection.c     2021-10-23 
20:21:35.000000000 +0200
@@ -281,8 +281,8 @@
         return (int)bytes_consumed;
       }
 
-    /* it's not a protocol header; fall through to process it as a
-       regular frame header */
+      /* it's not a protocol header; fall through to process it as a
+         regular frame header */
 
     case CONNECTION_STATE_HEADER: {
       amqp_channel_t channel;
@@ -329,7 +329,7 @@
         return (int)bytes_consumed;
       }
     }
-    /* fall through to process body */
+      /* fall through to process body */
 
     case CONNECTION_STATE_BODY: {
       amqp_bytes_t encoded;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Net-AMQP-RabbitMQ-2.40008/amqp_openssl.c 
new/Net-AMQP-RabbitMQ-2.40009/amqp_openssl.c
--- old/Net-AMQP-RabbitMQ-2.40008/amqp_openssl.c        2020-10-01 
02:55:49.000000000 +0200
+++ new/Net-AMQP-RabbitMQ-2.40009/amqp_openssl.c        2021-10-23 
20:21:35.000000000 +0200
@@ -63,6 +63,7 @@
 static amqp_boolean_t openssl_initialized = 0;
 static amqp_boolean_t openssl_bio_initialized = 0;
 static int openssl_connections = 0;
+static ENGINE *openssl_engine = NULL;
 
 #define CHECK_SUCCESS(condition)                                            \
   do {                                                                      \
@@ -412,6 +413,34 @@
   return AMQP_STATUS_OK;
 }
 
+int amqp_ssl_socket_set_key_engine(amqp_socket_t *base, const char *cert,
+                                   const char *key) {
+  int status;
+  struct amqp_ssl_socket_t *self;
+  EVP_PKEY *pkey = NULL;
+  if (base->klass != &amqp_ssl_socket_class) {
+    amqp_abort("<%p> is not of type amqp_ssl_socket_t", base);
+  }
+  self = (struct amqp_ssl_socket_t *)base;
+  status = SSL_CTX_use_certificate_chain_file(self->ctx, cert);
+  if (1 != status) {
+    return AMQP_STATUS_SSL_ERROR;
+  }
+
+  pkey = ENGINE_load_private_key(openssl_engine, key, NULL, NULL);
+  if (pkey == NULL) {
+    return AMQP_STATUS_SSL_ERROR;
+  }
+
+  status = SSL_CTX_use_PrivateKey(self->ctx, pkey);
+  EVP_PKEY_free(pkey);
+
+  if (1 != status) {
+    return AMQP_STATUS_SSL_ERROR;
+  }
+  return AMQP_STATUS_OK;
+}
+
 static int password_cb(AMQP_UNUSED char *buffer, AMQP_UNUSED int length,
                        AMQP_UNUSED int rwflag, AMQP_UNUSED void *user_data) {
   amqp_abort("rabbitmq-c does not support password protected keys");
@@ -469,6 +498,15 @@
   return AMQP_STATUS_OK;
 }
 
+void amqp_ssl_socket_set_key_passwd(amqp_socket_t *base, const char *passwd) {
+  struct amqp_ssl_socket_t *self;
+  if (base->klass != &amqp_ssl_socket_class) {
+    amqp_abort("<%p> is not of type amqp_ssl_socket_t", base);
+  }
+  self = (struct amqp_ssl_socket_t *)base;
+  SSL_CTX_set_default_passwd_cb_userdata(self->ctx, (void *)passwd);
+}
+
 void amqp_ssl_socket_set_verify(amqp_socket_t *base, amqp_boolean_t verify) {
   amqp_ssl_socket_set_verify_peer(base, verify);
   amqp_ssl_socket_set_verify_hostname(base, verify);
@@ -633,6 +671,43 @@
   return status;
 }
 
+int amqp_set_ssl_engine(const char *engine) {
+  int status = AMQP_STATUS_OK;
+  CHECK_SUCCESS(pthread_mutex_lock(&openssl_init_mutex));
+
+  if (!openssl_initialized) {
+    status = AMQP_STATUS_SSL_ERROR;
+    goto out;
+  }
+
+  if (openssl_engine != NULL) {
+    ENGINE_free(openssl_engine);
+    openssl_engine = NULL;
+  }
+
+  if (engine == NULL) {
+    goto out;
+  }
+
+  ENGINE_load_builtin_engines();
+  openssl_engine = ENGINE_by_id(engine);
+  if (openssl_engine == NULL) {
+    status = AMQP_STATUS_SSL_SET_ENGINE_FAILED;
+    goto out;
+  }
+
+  if (ENGINE_set_default(openssl_engine, ENGINE_METHOD_ALL) == 0) {
+    ENGINE_free(openssl_engine);
+    openssl_engine = NULL;
+    status = AMQP_STATUS_SSL_SET_ENGINE_FAILED;
+    goto out;
+  }
+
+out:
+  CHECK_SUCCESS(pthread_mutex_unlock(&openssl_init_mutex));
+  return status;
+}
+
 static int initialize_ssl_and_increment_connections() {
   int status;
   CHECK_SUCCESS(pthread_mutex_lock(&openssl_init_mutex));
@@ -687,10 +762,6 @@
   ERR_remove_state(0);
 #endif
 
-#ifndef LIBRESSL_VERSION_NUMBER
-  FIPS_mode_set(0);
-#endif
-
   CRYPTO_set_locking_callback(NULL);
   CRYPTO_set_id_callback(NULL);
   {
@@ -701,6 +772,11 @@
     free(amqp_openssl_lockarray);
   }
 
+  if (openssl_engine != NULL) {
+    ENGINE_free(openssl_engine);
+    openssl_engine = NULL;
+  }
+
   ENGINE_cleanup();
   CONF_modules_free();
   EVP_cleanup();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Net-AMQP-RabbitMQ-2.40008/amqp_socket.c 
new/Net-AMQP-RabbitMQ-2.40009/amqp_socket.c
--- old/Net-AMQP-RabbitMQ-2.40008/amqp_socket.c 2020-10-01 02:55:49.000000000 
+0200
+++ new/Net-AMQP-RabbitMQ-2.40009/amqp_socket.c 2021-10-23 20:21:35.000000000 
+0200
@@ -760,7 +760,10 @@
       state->last_queued_frame = link;
     }
   }
-  timeout = amqp_time_immediate();
+  int res = amqp_time_s_from_now(&timeout, 0);
+  if (AMQP_STATUS_OK != res) {
+    return res;
+  }
 
   return recv_with_timeout(state, timeout);
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Net-AMQP-RabbitMQ-2.40008/amqp_table.c 
new/Net-AMQP-RabbitMQ-2.40009/amqp_table.c
--- old/Net-AMQP-RabbitMQ-2.40008/amqp_table.c  2020-10-01 02:55:49.000000000 
+0200
+++ new/Net-AMQP-RabbitMQ-2.40009/amqp_table.c  2021-10-23 20:21:35.000000000 
+0200
@@ -247,11 +247,11 @@
 
     case AMQP_FIELD_KIND_F32:
       TRIVIAL_FIELD_DECODER(32);
-    /* and by punning, f32 magically gets the right value...! */
+      /* and by punning, f32 magically gets the right value...! */
 
     case AMQP_FIELD_KIND_F64:
       TRIVIAL_FIELD_DECODER(64);
-    /* and by punning, f64 magically gets the right value...! */
+      /* and by punning, f64 magically gets the right value...! */
 
     case AMQP_FIELD_KIND_DECIMAL:
       if (!amqp_decode_8(encoded, offset, &entry->value.decimal.decimals) ||
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Net-AMQP-RabbitMQ-2.40008/amqp_time.c 
new/Net-AMQP-RabbitMQ-2.40009/amqp_time.c
--- old/Net-AMQP-RabbitMQ-2.40008/amqp_time.c   2020-10-01 02:55:49.000000000 
+0200
+++ new/Net-AMQP-RabbitMQ-2.40009/amqp_time.c   2021-10-23 20:21:35.000000000 
+0200
@@ -111,10 +111,6 @@
     *time = amqp_time_infinite();
     return AMQP_STATUS_OK;
   }
-  if (0 == timeout->tv_sec && 0 == timeout->tv_usec) {
-    *time = amqp_time_immediate();
-    return AMQP_STATUS_OK;
-  }
 
   if (timeout->tv_sec < 0 || timeout->tv_usec < 0) {
     return AMQP_STATUS_INVALID_PARAMETER;
@@ -160,12 +156,6 @@
   return AMQP_STATUS_OK;
 }
 
-amqp_time_t amqp_time_immediate(void) {
-  amqp_time_t time;
-  time.time_point_ns = 0;
-  return time;
-}
-
 amqp_time_t amqp_time_infinite(void) {
   amqp_time_t time;
   time.time_point_ns = UINT64_MAX;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Net-AMQP-RabbitMQ-2.40008/amqp_url.c 
new/Net-AMQP-RabbitMQ-2.40009/amqp_url.c
--- old/Net-AMQP-RabbitMQ-2.40008/amqp_url.c    2020-10-01 02:55:49.000000000 
+0200
+++ new/Net-AMQP-RabbitMQ-2.40009/amqp_url.c    2021-10-23 20:21:35.000000000 
+0200
@@ -213,7 +213,7 @@
     res = AMQP_STATUS_OK;
   }
 
-/* Any other delimiter is bad, and we will return AMQP_STATUS_BAD_AMQP_URL. */
+  /* Any other delimiter is bad, and we will return AMQP_STATUS_BAD_AMQP_URL. 
*/
 
 out:
   return res;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Net-AMQP-RabbitMQ-2.40008/rabbitmq-include/amqp.h 
new/Net-AMQP-RabbitMQ-2.40009/rabbitmq-include/amqp.h
--- old/Net-AMQP-RabbitMQ-2.40008/rabbitmq-include/amqp.h       2020-10-01 
02:55:49.000000000 +0200
+++ new/Net-AMQP-RabbitMQ-2.40009/rabbitmq-include/amqp.h       2021-10-23 
20:21:35.000000000 +0200
@@ -221,7 +221,7 @@
 #define AMQP_VERSION_MAJOR 0
 #define AMQP_VERSION_MINOR 11
 #define AMQP_VERSION_PATCH 0
-#define AMQP_VERSION_IS_RELEASE 0
+#define AMQP_VERSION_IS_RELEASE 1
 
 /**
  * \def AMQP_VERSION_CODE
@@ -575,8 +575,8 @@
                     * own block in the large_blocks block list */
 
   amqp_pool_blocklist_t pages; /**< blocks that are the size of pagesize */
-  amqp_pool_blocklist_t
-      large_blocks; /**< allocations larger than the pagesize */
+  amqp_pool_blocklist_t large_blocks; /**< allocations larger than the pagesize
+                                       */
 
   int next_page;     /**< an index to the next unused page block */
   char *alloc_block; /**< pointer to the current allocation block */
@@ -608,8 +608,8 @@
                            */
   amqp_channel_t channel; /**< the channel the frame was received on */
   union {
-    amqp_method_t
-        method; /**< a method, use if frame_type == AMQP_FRAME_METHOD */
+    amqp_method_t method; /**< a method, use if frame_type == AMQP_FRAME_METHOD
+                           */
     struct {
       uint16_t class_id;        /**< the class for the properties */
       uint64_t body_size;       /**< size of the body in bytes */
@@ -770,7 +770,8 @@
   AMQP_STATUS_SSL_PEER_VERIFY_FAILED = -0x0202,     /**< SSL validation of peer
                                                          certificate failed. */
   AMQP_STATUS_SSL_CONNECTION_FAILED = -0x0203, /**< SSL handshake failed. */
-  _AMQP_STATUS_SSL_NEXT_VALUE = -0x0204        /**< Internal value */
+  AMQP_STATUS_SSL_SET_ENGINE_FAILED = -0x0204, /**< SSL setting engine failed 
*/
+  _AMQP_STATUS_SSL_NEXT_VALUE = -0x0205        /**< Internal value */
 } amqp_status_enum;
 
 /**
@@ -1044,7 +1045,7 @@
  * of the socket outside of the library will lead to undefined behavior.
  * Additionally rabbitmq-c may use the socket differently version-to-version,
  * what may work in one version, may break in the next version. Be sure to
- * throughly test any applications that use the socket returned by this
+ * thoroughly test any applications that use the socket returned by this
  * function especially when using a newer version of rabbitmq-c
  *
  * \param [in] state the connection object
@@ -2200,16 +2201,16 @@
  * \since v0.4.0
  */
 typedef struct amqp_envelope_t_ {
-  amqp_channel_t channel; /**< channel message was delivered on */
-  amqp_bytes_t
-      consumer_tag;      /**< the consumer tag the message was delivered to */
-  uint64_t delivery_tag; /**< the messages delivery tag */
+  amqp_channel_t channel;     /**< channel message was delivered on */
+  amqp_bytes_t consumer_tag;  /**< the consumer tag the message was delivered 
to
+                               */
+  uint64_t delivery_tag;      /**< the messages delivery tag */
   amqp_boolean_t redelivered; /**< flag indicating whether this message is 
being
                                  redelivered */
   amqp_bytes_t exchange;      /**< exchange this message was published to */
-  amqp_bytes_t
-      routing_key; /**< the routing key this message was published with */
-  amqp_message_t message; /**< the message */
+  amqp_bytes_t routing_key; /**< the routing key this message was published 
with
+                             */
+  amqp_message_t message;   /**< the message */
 } amqp_envelope_t;
 
 /**
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Net-AMQP-RabbitMQ-2.40008/rabbitmq-include/amqp_framing.h 
new/Net-AMQP-RabbitMQ-2.40009/rabbitmq-include/amqp_framing.h
--- old/Net-AMQP-RabbitMQ-2.40008/rabbitmq-include/amqp_framing.h       
2020-10-01 02:55:49.000000000 +0200
+++ new/Net-AMQP-RabbitMQ-2.40009/rabbitmq-include/amqp_framing.h       
2021-10-23 20:21:35.000000000 +0200
@@ -46,7 +46,7 @@
 #define AMQP_PROTOCOL_VERSION_MINOR 9 /**< AMQP protocol version minor */
 #define AMQP_PROTOCOL_VERSION_REVISION                                   \
   1                                  /**< AMQP protocol version revision \
-                                        */
+                                      */
 #define AMQP_PROTOCOL_PORT 5672      /**< Default AMQP Port */
 #define AMQP_FRAME_METHOD 1          /**< Constant: FRAME-METHOD */
 #define AMQP_FRAME_HEADER 2          /**< Constant: FRAME-HEADER */
@@ -794,7 +794,7 @@
 /* Class property records. */
 #define AMQP_CONNECTION_CLASS                    \
   (0x000A) /**< connection class id @internal 10 \
-              */
+            */
 /** connection class properties */
 typedef struct amqp_connection_properties_t_ {
   amqp_flags_t _flags; /**< bit-mask of set fields */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Net-AMQP-RabbitMQ-2.40008/rabbitmq-include/amqp_openssl_hostname_validation.h
 
new/Net-AMQP-RabbitMQ-2.40009/rabbitmq-include/amqp_openssl_hostname_validation.h
--- 
old/Net-AMQP-RabbitMQ-2.40008/rabbitmq-include/amqp_openssl_hostname_validation.h
   2020-10-01 02:55:49.000000000 +0200
+++ 
new/Net-AMQP-RabbitMQ-2.40009/rabbitmq-include/amqp_openssl_hostname_validation.h
   2021-10-23 20:21:35.000000000 +0200
@@ -41,17 +41,17 @@
 } amqp_hostname_validation_result;
 
 /**
-* Validates the server's identity by looking for the expected hostname in the
-* server's certificate. As described in RFC 6125, it first tries to find a 
match
-* in the Subject Alternative Name extension. If the extension is not present in
-* the certificate, it checks the Common Name instead.
-*
-* Returns AMQP_HVR_MATCH_FOUND if a match was found.
-* Returns AMQP_HVR_MATCH_NOT_FOUND if no matches were found.
-* Returns AMQP_HVR_MALFORMED_CERTIFICATE if any of the hostnames had a NUL
-* character embedded in it.
-* Returns AMQP_HVR_ERROR if there was an error.
-*/
+ * Validates the server's identity by looking for the expected hostname in the
+ * server's certificate. As described in RFC 6125, it first tries to find a
+ * match in the Subject Alternative Name extension. If the extension is not
+ * present in the certificate, it checks the Common Name instead.
+ *
+ * Returns AMQP_HVR_MATCH_FOUND if a match was found.
+ * Returns AMQP_HVR_MATCH_NOT_FOUND if no matches were found.
+ * Returns AMQP_HVR_MALFORMED_CERTIFICATE if any of the hostnames had a NUL
+ * character embedded in it.
+ * Returns AMQP_HVR_ERROR if there was an error.
+ */
 amqp_hostname_validation_result amqp_ssl_validate_hostname(
     const char *hostname, const X509 *server_cert);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Net-AMQP-RabbitMQ-2.40008/rabbitmq-include/amqp_ssl_socket.h 
new/Net-AMQP-RabbitMQ-2.40009/rabbitmq-include/amqp_ssl_socket.h
--- old/Net-AMQP-RabbitMQ-2.40008/rabbitmq-include/amqp_ssl_socket.h    
2020-10-01 02:55:49.000000000 +0200
+++ new/Net-AMQP-RabbitMQ-2.40009/rabbitmq-include/amqp_ssl_socket.h    
2021-10-23 20:21:35.000000000 +0200
@@ -86,6 +86,18 @@
                                          const char *cacert);
 
 /**
+ * Set the password of key in PEM format.
+ *
+ * \param [in,out] self An SSL/TLS socket object.
+ * \param [in] passwd The password of key in PEM format.
+ *
+ * \since v0.11.0
+ */
+AMQP_PUBLIC_FUNCTION
+void AMQP_CALL amqp_ssl_socket_set_key_passwd(amqp_socket_t *self,
+                                              const char *passwd);
+
+/**
  * Set the client key.
  *
  * \param [in,out] self An SSL/TLS socket object.
@@ -102,6 +114,24 @@
                                       const char *key);
 
 /**
+ * Set the client key use the engine.
+ *
+ * This function requires amqp_set_ssl_engine() has been called.
+ *
+ * \param [in,out] self An SSL/TLS socket object.
+ * \param [in] cert Path to the client certificate in PEM foramt.
+ * \param [in] the key ID.
+ *
+ * \return \ref AMQP_STATUS_OK on success an \ref amqp_status_enum value on
+ *  failure.
+ *
+ * \since v0.11.0
+ */
+AMQP_PUBLIC_FUNCTION
+int AMQP_CALL amqp_ssl_socket_set_key_engine(amqp_socket_t *self,
+                                             const char *cert, const char 
*key);
+
+/**
  * Set the client key from a buffer.
  *
  * \param [in,out] self An SSL/TLS socket object.
@@ -238,6 +268,22 @@
 int AMQP_CALL amqp_initialize_ssl_library(void);
 
 /**
+ * Set the engine for underlying SSL/TLS library.
+ *
+ * This function is thread-safe, and may be called more than once.
+ *
+ * This function requires amqp_initialize_ssl_library() or 
amqp_ssl_socket_new()
+ * has been called.
+ *
+ * \param [in] engine the engine ID
+ * \return AMQP_STATUS_OK on success.
+ *
+ * \since v0.11.0
+ */
+AMQP_PUBLIC_FUNCTION
+int amqp_set_ssl_engine(const char *engine);
+
+/**
  * Uninitialize the underlying SSL/TLS library.
  *
  * \return AMQP_STATUS_OK on success.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Net-AMQP-RabbitMQ-2.40008/rabbitmq-include/amqp_time.h 
new/Net-AMQP-RabbitMQ-2.40009/rabbitmq-include/amqp_time.h
--- old/Net-AMQP-RabbitMQ-2.40008/rabbitmq-include/amqp_time.h  2020-10-01 
02:55:49.000000000 +0200
+++ new/Net-AMQP-RabbitMQ-2.40009/rabbitmq-include/amqp_time.h  2021-10-23 
20:21:35.000000000 +0200
@@ -53,7 +53,9 @@
  * - UINT64_MAX: means 'at infinity', its mean for polls with an infinite
  *   timeout
  */
-typedef struct amqp_time_t_ { uint64_t time_point_ns; } amqp_time_t;
+typedef struct amqp_time_t_ {
+  uint64_t time_point_ns;
+} amqp_time_t;
 
 /* Gets a monotonic timestamp. This will return 0 if the underlying call to the
  * system fails.
@@ -62,7 +64,6 @@
 
 /* Get a amqp_time_t that is timeout from now.
  * If timeout is NULL, an amqp_time_infinite() is created.
- * If timeout = {0, 0}, an amqp_time_immediate() is created.
  *
  * Returns AMQP_STATUS_OK on success.
  * AMQP_STATUS_INVALID_PARAMETER if timeout is invalid
@@ -80,9 +81,6 @@
  */
 int amqp_time_s_from_now(amqp_time_t *time, int seconds);
 
-/* Create an immediate amqp_time_t */
-amqp_time_t amqp_time_immediate(void);
-
 /* Create an infinite amqp_time_t */
 amqp_time_t amqp_time_infinite(void);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Net-AMQP-RabbitMQ-2.40008/t/lib/NAR/Helper.pm 
new/Net-AMQP-RabbitMQ-2.40009/t/lib/NAR/Helper.pm
--- old/Net-AMQP-RabbitMQ-2.40008/t/lib/NAR/Helper.pm   2020-10-01 
02:37:00.000000000 +0200
+++ new/Net-AMQP-RabbitMQ-2.40009/t/lib/NAR/Helper.pm   2021-10-02 
01:44:28.000000000 +0200
@@ -142,6 +142,23 @@
     } );
 }
 
+sub get_connection_options {
+    my ( $self ) = @_;
+
+    return {
+        user            => $self->{username},
+        password        => $self->{password},
+        port            => $self->{port},
+        ssl             => $self->{ssl},
+        ssl_verify_host => $self->{ssl_verify_host},
+        ssl_verify_peer => $self->{ssl_verify_peer},
+        ssl_cacert      => $self->{ssl_cacert},
+        ssl_init        => $self->{ssl_init},
+        vhost           => $self->{vhost},
+    };
+
+}
+
 sub heartbeat {
     my $self = shift;
 

Reply via email to