Commit Graph

399 Commits

Author SHA1 Message Date
Emiel Bruijntjes f3ba779e67 deferred-chain was in kept in scope by a consumer-operation, this fixes #323 2020-02-28 12:45:45 +01:00
LAD Martin 022bd87ac1 Adds channel callbacks checking 2019-11-05 13:39:45 +00:00
Emiel Bruijntjes 5a648fe2d8
Merge pull request #298 from CopernicaMarketingSoftware/synchronous-fix
fix for incorrect handling of synchronous flag
2019-06-19 10:56:52 +02:00
Michael van der Werve 7b79b7c6e2 now we always flush when a success is reported, and the funcction is renamed to flush 2019-06-19 10:54:50 +02:00
Emiel Bruijntjes f107b4aa3e
Merge pull request #288 from metricq/master
fix access to free'd memory in case of errors
2019-06-19 10:49:43 +02:00
Michael van der Werve c82fce8ec9 fix for incorrect handling of synchronous flag 2019-06-19 09:38:56 +02:00
Peter A. Bigot a6930f5c36 linux_tcp/poll: fix undefined behavior in select
The select(2) system call on Linux now includes the restrict qualifier
on the fd_set pointers passed in, causing a diagnostic in gcc9 for the
call blocking for both read and write.  Pass a pointer to a temporary
copy of the set when two references are required.

Signed-off-by: Peter A. Bigot <pab@pabigot.com>
2019-05-30 10:53:09 -05:00
tilsche d3f35fb524 fix duplicate _connection->remove call on ConnectionImpl objects that were already destroyed, but didn't detach in case of errors 2019-03-04 16:53:31 +01:00
weili-jiang fc22637578 Check pipe writes in linux_tcp to suppress Wunused-result in GCC 2019-02-05 08:33:28 +13:00
Emiel Bruijntjes e10fd61ac8 slightly prettified the code 2019-01-10 08:25:31 +01:00
Michael van der Werve a774e6c10c on ssl error, make sure that it is found out 2019-01-08 13:14:42 +01:00
Michael van der Werve 63d4acdce3 should be in working order now 2019-01-08 12:58:38 +01:00
Emiel Bruijntjes 20d4104d18
Merge pull request #271 from CopernicaMarketingSoftware/heartbeats
Implemented custom heartbeats in Livev
2018-12-13 23:41:20 +01:00
Youri Moll a92dc27653 Implemented custom heartbeats in Livev 2018-12-13 13:01:38 +01:00
Emiel Bruijntjes 03ca83cb50 handle case when tcp connection is lost during reading, that should report an error back to user-space too (fixes #266) 2018-12-03 08:29:17 +01:00
Emiel Bruijntjes d2e3792abc fixed issue when end-of-file was encountered, this fixes #266 2018-11-30 06:42:54 +01:00
Emiel Bruijntjes 53f994d61d when user calls connection.heartbeat() we now always send out the heartbeat (AMQP-CPP no longer tries to be smart about skipping heartbeats, because that could lead to timeouts if the user is a little late with its call, or when there is network congestion) 2018-11-28 13:52:00 +01:00
Emiel Bruijntjes ec31f5ad11 added Channel implementation file (fixes #267) 2018-11-25 12:46:12 +01:00
Emiel Bruijntjes 91a23d5737 Merge branch 'master' of github.com:CopernicaMarketingSoftware/AMQP-CPP 2018-11-23 11:16:03 +01:00
Emiel Bruijntjes ee60aeb025 The Channel constructor now throws an exception if the max number of channels has been reached 2018-11-23 11:15:51 +01:00
Emiel Bruijntjes 799583ea39 Merge branch 'master' of github.com:CopernicaMarketingSoftware/AMQP-CPP 2018-11-21 13:56:53 +01:00
Emiel Bruijntjes 8eed709988 Connection::fail() will now also call the channel::onError method 2018-11-21 13:56:44 +01:00
Emiel Bruijntjes 45ca61cc43 added TcpConnection::closed() 2018-11-14 14:15:52 +01:00
Emiel Bruijntjes 888dc8c40b added channel::usable() to replace channel::connected() 2018-11-12 15:24:25 +01:00
Emiel Bruijntjes a80847dc5e fixed a couple of todos, make sure that onError() is always called 2018-11-12 12:12:04 +01:00
Emiel Bruijntjes 6f81b0a097 when tcp connection is lost, the pending operations are now reported with an error 2018-11-11 23:46:58 +01:00
Emiel Bruijntjes e83a07f871 renamed onClosed to onLost to prevent confusion between TcpHandler::onClosed() and ConnectionHandler::onClosed() 2018-11-08 09:58:36 +01:00
Emiel Bruijntjes da6744bf4d renamed ConnectionHandler::onConnectedO() to ConnectionHandler::onReady() 2018-11-08 08:34:58 +01:00
Emiel Bruijntjes 34f84e1ab7 handle unlikely error when ssl-handshake could not be started 2018-11-07 23:44:24 +01:00
Emiel Bruijntjes 06dc23190d added ConnectionHandler::onProperties and TcpConnectionHandler::onProperties 2018-11-07 23:22:25 +01:00
Emiel Bruijntjes 428219ad83 simplified and improved the close procedure 2018-11-07 15:04:08 +01:00
Emiel Bruijntjes 64c876e65a removed support for TcpConnection::flush() and removed internal TcpShutdown state 2018-11-06 18:11:27 +01:00
Emiel Bruijntjes 6ea2d8dffd removed unneeded comment 2018-11-05 17:18:24 +01:00
Emiel Bruijntjes 9330231a69 fixed assigning the new state 2018-11-05 17:11:21 +01:00
Emiel Bruijntjes 54049f9e8e improved the tcp handler, added more methods to monitor whether a connection is connected, logged on and in an error state 2018-11-05 16:49:55 +01:00
Emiel Bruijntjes bb417e89c2 add support for ConnectionHandler::onAttached() and ConnectionHandler::onDetached() 2018-11-05 16:19:48 +01:00
Emiel Bruijntjes 359eec189f work in progress, simplified the tcp and ssl states 2018-11-05 16:18:20 +01:00
Emiel Bruijntjes e617161c8c the state::abort() method is no longer needed 2018-11-05 15:49:22 +01:00
Emiel Bruijntjes b81bc340b5 work in progress on refactored tcp handling, to solve various issues, like the one that lost connections do not trigger operations to fail 2018-11-04 23:34:31 +01:00
Emiel Bruijntjes 3f32e8773d fixed typo and possible (but unlikely) crash in the tcp-resolver 2018-10-28 18:52:41 +01:00
Emiel Bruijntjes 62a4262a58 the TcpConnection::close() method now supports an "immediate" parameter to skip the official amqp handshake for closing down 2018-10-28 18:13:13 +01:00
Emiel Bruijntjes 8546f52cd0 added onAttached() and onDetached() to the TcpHandler interface 2018-10-28 10:22:01 +01:00
Emiel Bruijntjes c52e8ff0b2 added ConnectionHandler::onAttached() and ConnectionHandler::onDetached() methods 2018-10-28 10:04:34 +01:00
Emiel Bruijntjes 11af8a7f6b
Merge pull request #218 from RZRCDR/fix_msvc_compiler_warnings
Fix msvc compiler warnings
2018-10-27 12:52:07 +02:00
Peter A. Bigot adf4fb3bc1 TcpResolver: reduce risk of accessing destructed TcpConnection
Invoking TcpHandler::onError might result in the connection being
destroyed.  Though the reference to it in TcpClosed() is likely benign,
it's safer to follow the standard practice of returning a nullptr to
indicate that the connection is known to be destroyed.
2018-06-24 10:31:21 -05:00
Emiel Bruijntjes e665916b85 Merge branch 'master' of github.com:CopernicaMarketingSoftware/AMQP-CPP 2018-06-15 09:19:37 +02:00
Emiel Bruijntjes 80ce6327bb fixed ssl handling: the sslconnected class incorrectly cached the readability/writability state of a socket, even after it already did a read- or write-operation, which could lead to the system getting to read mode when no data was expected 2018-06-15 09:19:27 +02:00
Emiel Bruijntjes 2430da76c3 refactored code 2018-06-10 20:46:11 +02:00
xqing2003 e40006058e
fix memory leak
fix memory leak when channel error
2018-06-06 22:11:55 +08:00
xqing2003 7737917886
solve memory leak 2018-06-01 23:30:30 +08:00
Emiel Bruijntjes 025fdb5530
Merge pull request #134 from mgibula/master
Add Publisher Confirms support
2018-05-14 22:42:56 +02:00
Marcin Gibula cab0602dbf Forgot to set ChannelImpl::_confirm 2018-05-14 22:36:49 +02:00
Marcin Gibula 578abbf973 Update src/CMakeLists.txt 2018-05-14 21:44:01 +02:00
Marcin Gibula 2aa55b83c7 Replace old API with DeferredConfirm class 2018-05-14 21:12:34 +02:00
Marcin Gibula bf1caa1eae Add DeferredConfirm class 2018-05-14 21:05:49 +02:00
Marcin Gibula eeee1c3c5f Rename setConfirmMode() to confirmSelect() 2018-05-14 12:59:20 +02:00
Marcin Gibula e0b04ad7e0 Remove messageCounter() 2018-05-14 12:55:15 +02:00
Emiel Bruijntjes 5d69cc567c more calls to openssl::err_clear_error() to prevent that the error queue contains errors that are not related to the operations that is being checked 2018-04-27 12:38:06 +02:00
Trevor Perrin 416e244b31 Clear SSL Error Queue
The OpenSSL documentation states that the error queue for the current
thread needs to be emptied prior to the next TLS/SSL I/O operation,
or the call to SSL_get_error() will not be reliable.
2018-04-26 15:50:32 -05:00
Dirkco du Plessis 1479922901 Fix MSVC compile warning C4800 for bitwise operation resulting in int to boolean assignment.
Fix MSVC compile warning C4244 possible loss of data. Possible data loss from uint64_t to uint32_t.
2018-04-22 15:53:52 +01:00
Marcin Gibula bfd91b6ab5 Merge with upstream 2018-04-10 10:30:01 +02:00
Emiel Bruijntjes 69a201e741 optimizid dealing with ssl connections by not going back to the event loop that often, and prevented that object was staying in send state if it was endlessly sending data and not receiving anything, found this out when working on issue #207 2018-04-05 11:10:55 +02:00
Emiel Bruijntjes b26058f3e2 renamed bytesQueued() to queued() 2018-04-01 22:34:15 +02:00
Mike Playle 8800d2917e Add method to return the amount of queued outgoing data 2018-04-01 10:54:05 +01:00
tilsche ec21091080 Make sure ssl files are included in the library and add missing libraries for linking the examples 2018-03-12 10:46:32 +01:00
Emiel Bruijntjes f1c32242f7 Merge branch 'master' of github.com:CopernicaMarketingSoftware/AMQP-CPP 2018-03-10 14:56:18 +01:00
Emiel Bruijntjes d2b2d5af14 shared-ptr has been turned into a unique-ptr for the tcp-state 2018-03-10 14:55:57 +01:00
Emiel Bruijntjes d81565fe6a fixed that stream operator of address wrote the port number when the default amqps port was used 2018-03-10 10:31:40 +01:00
Emiel Bruijntjes 367de51d77 added method to intercept tls handshakes, and to verify certificates 2018-03-10 00:59:14 +01:00
Emiel Bruijntjes 4c2b8ff68e added ability to set the handle to the openssl library (so that programs that load openssl via dlopen() can still use amqp-cpp) 2018-03-09 15:08:52 +01:00
Emiel Bruijntjes 28b6c903e1 finished implementing amqps:// support 2018-03-09 13:55:49 +01:00
Emiel Bruijntjes c26005ddfb work in progress on setting up tls connections to rabbitmq 2018-03-08 14:00:44 +01:00
Emiel Bruijntjes e39ca5b012 ssl connection fixes 2018-03-08 13:36:56 +01:00
Emiel Bruijntjes 872d4e9a11 implemented flushing for ssl connections 2018-03-08 13:09:56 +01:00
Emiel Bruijntjes bc4db8d8fe elegant shutdown for ssl connections 2018-03-08 12:11:45 +01:00
Emiel Bruijntjes 38d504d8a0 reportClosed() is never called when still busy with ssl handshake, so that method has been removed, and better handling of scenarion in which user space destructs connections in onError() implementation 2018-03-08 11:20:07 +01:00
Emiel Bruijntjes 25df834e74 prevent ssl errors or reference count errors when copying around ssl objects 2018-03-08 11:04:39 +01:00
Emiel Bruijntjes cea5a54487 fix bug: error about missing openssl was also reported when not even opening a secure connection 2018-03-08 10:44:42 +01:00
Emiel Bruijntjes 9a08c64ff7 more elegant close procedure for tcp connections 2018-03-08 10:37:49 +01:00
Emiel Bruijntjes f23bcf19f1 improved docblocks in tcpstate.h header file, when an error or closed is reported to user space, the _handler variable is now reset to prevent that it will be used to report more than once (we still need to check if this does not trigger other errors), and the state object is no longer destructed after a reportClosed() call, so that it can clean up nicely (which we need to the tls shutdown anyway) 2018-03-08 10:02:42 +01:00
Emiel Bruijntjes 8065cfe940 update docblock 2018-03-06 22:06:41 +01:00
Emiel Bruijntjes 7aa7794e3e work in progress on ssl implementation 2018-03-06 22:03:53 +01:00
Emiel Bruijntjes 0ca9bc9dad added error in case openssl is missing 2018-03-06 18:07:34 +01:00
Emiel Bruijntjes 25d5410b13 fixed some compile issues 2018-03-06 17:52:44 +01:00
Tamas Elekes 8ba8ed1727 dynamically loading openssl funtions during runtime work in progress 2018-03-06 14:40:46 +01:00
Tamas Elekes 3bb7714f3b dynamically loading openssl funtions during runtime work in progress 2018-03-06 14:39:36 +01:00
Emiel Bruijntjes baa4450aa6 update indentation 2018-03-06 09:44:24 +01:00
Emiel Bruijntjes 69596e49dc removed tabs 2018-03-06 08:40:44 +01:00
Emiel Bruijntjes 69c615d0a4 removed tcp prefix from all ssl related classes 2018-03-06 08:39:42 +01:00
Emiel Bruijntjes 72ffd5eb1a disabled ssl for the time being 2018-03-05 22:25:58 +01:00
Emiel Bruijntjes 463eed89c0 work in progress on closing ssl connections 2018-03-05 22:24:19 +01:00
Emiel Bruijntjes 4a51c5dd60 improve ssl handshake methods 2018-03-05 20:08:09 +01:00
Emiel Bruijntjes fa5ef5318a work in progress on dealing with secure connections 2018-03-05 19:53:53 +01:00
Tamas Elekes e46dfcf3b8 work in progress on ssl support for the AMQP-CPP library 2018-03-05 17:29:37 +01:00
Tamas Elekes 9c1a09a711 ssl connection WIP 2018-03-02 16:56:35 +01:00
Tamas Elekes 342268e50a support for amqps:// addresses in the AMQP::Address class (although it does not yet make a real secure connection) 2018-03-02 13:53:00 +01:00
Emiel Bruijntjes 2a0a6f3fb7 update cmake stuff 2018-03-01 23:13:07 +01:00
Emiel Bruijntjes 41239a1952 fixed to make returning message functional, and added test code 2018-03-01 22:54:50 +01:00
Emiel Bruijntjes 1ccd93cc5e final step (although untested) for handling returned messages 2018-03-01 22:27:27 +01:00
Emiel Bruijntjes 1f3500cee8 breaking changes:
channel.publish() now returns a DeferredConsumer object on which callbacks can be installed for handling returned messages,
channel.get().onSize() has a different behavior: it now reports the message size (and no longer the queue size),
channel.get().onCount() has been added: it reports the queue size (this used to be the onSize() method),
channel.consume().onSize() method has been added to find out the size of the upcoming message
2018-03-01 21:12:53 +01:00
Emiel Bruijntjes f39df772d3 breaking changes:
channel.publish() now returns a DeferredConsumer object on which callbacks can be installed for handling returned messages,
channel.get().onSize() has a different behavior: it now reports the message size (and no longer the queue size),
channel.get().onCount() has been added: it reports the queue size (this used to be the onSize() method),
channel.consume().onSize() method has been added to find out the size of the upcoming message
2018-03-01 21:12:50 +01:00
Emiel Bruijntjes ef76876d67 refactored code to make room for a deferredpublisher class (which will also use the deferredreceiver base class) 2018-03-01 18:07:18 +01:00
Emiel Bruijntjes 520fe40201 refactored handling of incoming messages from consume and get operations, to prepare for future handling of returned messages and publisher confirms. this also implies a small change to the api: the begin-callback when a message is received now also gets the original exchange and routing key (which could be useful) 2018-03-01 17:34:27 +01:00
Emiel Bruijntjes 3ccc6af475 added deferredreceiver files (forgotter in prev commit) 2018-02-27 05:09:03 +01:00
Emiel Bruijntjes e0feb17ecc renamed deferredconsumerbase into deferredreceiver, because it is not only a base class for the consumer, but also for other receiving operations: get requests and in the future also for returned messages 2018-02-27 05:08:21 +01:00
Emiel Bruijntjes ec327de396 less conservative caching of outgoing data. This fixes #184 2018-02-07 10:08:32 +01:00
Emiel Bruijntjes f5540e9af2 fixed autodelete flag for declaring an exchange and added support for internal exchange. this fixes #183 2018-02-06 21:54:56 +01:00
zerodefect 4b2c423896 Build examples now with travis-ci to ensure new changes don't break existing code. Fixed warnings as a result of lambda captures. 2018-01-30 10:07:27 +00:00
Aart Stuurman f64b705c19 Merge branch 'clean-build' of https://github.com/surgura/AMQP-CPP into clean-build 2018-01-28 22:20:18 +01:00
Aart Stuurman dd6bbada96 Fix build error for Make where include files could not be found. Make now installs headers correctly. 2018-01-26 23:04:01 +01:00
Aart Stuurman d0bfa0bfc7 Updated Makefile to have same results as before the update. 2018-01-26 22:14:43 +01:00
Aart Stuurman f25efd2235 Merge https://github.com/CopernicaMarketingSoftware/AMQP-CPP into travis 2018-01-25 18:17:43 +01:00
Aart Stuurman 413af81635 Fixed unix compile error after previous commit. 2018-01-24 02:03:16 +01:00
Aart Stuurman cf7261add5 Reordered public include files so they are now in include/amqpcpp/. 2018-01-24 01:58:18 +01:00
Aart Stuurman b211fc7779 fixed 32 bit warnings. 2018-01-24 00:38:07 +01:00
Aart Stuurman 715b683867 restore ignore file for make. 2018-01-23 19:22:33 +01:00
Aart Stuurman 80850810d3 fixed compile error at linux_tcp 2018-01-23 19:17:49 +01:00
Aart Stuurman 27f765b5f7 linux tcp is now opt-out instead of opt-in(to keep compatibility with the original lib). 2018-01-23 19:15:10 +01:00
Aart Stuurman b1be2267f6 comments 2018-01-23 19:02:46 +01:00
Aart Stuurman 5701d28b2b added BUILD_TCP option to build the linux sockets implementation. 2018-01-23 18:49:59 +01:00
Emiel Bruijntjes 9935f8414b update copyright year when connection is established to rabbitmq 2018-01-23 17:17:21 +01:00
Aart Stuurman 001dfaa7e0 - Moved linux specific TCP implementation to a seperate folder and removed it from default build. Does not yet build correctly if you want that.
- Fixed conversion warnings from <some integer> type to uint32_t, which happens a lot around here. This is no functional change, just making it explicit so the compiler doesn't warn.
2018-01-23 16:47:53 +01:00
Emiel Bruijntjes f05aba0782 added TcpConnection::fileno() to expose the internal filedescriptor / socket 2017-12-12 17:10:51 +01:00
Emiel Bruijntjes 562703b1cf renamed major() and minor() methods of the ConnectionStartFrame class to fix warning from new gcc version that these function names are more or less reserved 2017-11-01 08:20:52 +01:00
Emiel Bruijntjes 49337d078d heartbeats will now only be sent if the connection is idle 2017-06-19 10:24:03 +02:00
Emiel Bruijntjes a091921e88 added connection::heartbeat() method, userspace programs are responsible for calling this method once every 60 seconds 2017-06-16 10:14:42 +01:00
Marcin Gibula 3ab9eed268 Simplify message counter logic 2017-06-08 23:41:55 +02:00
Marcin Gibula 061c462ee0 Set correct message length 2017-06-08 23:18:40 +02:00
Marcin Gibula a28ea01f0e Call ACK and NACK callbacks 2017-06-08 22:57:29 +02:00
Marcin Gibula 30e652c669 Add Channel::setConfirmMode() and Channel::messageCounter() methods 2017-06-08 22:19:55 +02:00
Marcin Gibula c7a12d22c1 Add confirm.select and confirm.select-ok frames 2017-06-08 22:00:28 +02:00
Rafal Goslawski a976f5bea4 removed unneeded reference to endian.h. fixes #123 2017-05-04 15:15:51 +02:00
RafalGoslawski 5e895f3b9f Update CMakeLists.txt. fixes #123 2017-05-04 11:34:17 +02:00
Emiel Bruijntjes 16e2d21aa3 fixed issue that a tcp connection could crash if the user space code deconstructed a handler in a onClosed() handler 2017-04-26 15:33:17 +02:00
Okke bdae991324 Moved header files to include/ because of broken header dependencies 2017-03-09 11:53:13 +01:00
Emiel Bruijntjes 71eba4c5d3 prevent copying of buffers 2017-03-09 09:25:26 +01:00
Emiel Bruijntjes 1f5f641d8b we now use passthrough buffers, so we no longer have to dynamically allocate a buffer for each and every outgoing message 2017-03-09 00:18:53 +01:00
Emiel Bruijntjes 00b81949d3 the AMQP::Message and AMQP::Envelope objects can now longer be copied or moved, and the signatures for creating an envelope and publishing a message have been made much more strict. This could be a API breaking change, to the version number should be upped 2017-03-08 13:32:51 +01:00
Okke c6608cee0a Added even more debug code for the channelimpl class 2017-03-07 10:10:11 +01:00
Okke 055431de6e Fixed compilation issue due to recent changes in ChannelImpl 2017-03-03 12:56:54 +01:00
Emiel Bruijntjes ed2ffd3f03 added method tcpconnection::flush() 2016-09-19 10:19:06 +02:00
Emiel Bruijntjes 173225071e we no longer use "emit" for method names, because it seems to conflict with the Qt library that uses emit as some sort of macro 2016-09-10 20:36:06 +02:00
theirix e6e70e69de Removed unneeded const qual 2016-09-02 22:44:11 +03:00
Emiel Bruijntjes 383914c0c7 Merge pull request #80 from theirix/sigpipe-osx
Avoid SIGPIPE on OS X without MSG_NOSIGNAL
2016-07-27 05:09:44 -04:00
theirix fbe287c795 Build shared library with CMake
Added option BUILD_SHARED to build shared library instead of static.
2016-07-10 22:24:24 +03:00
theirix 66f2001c7b Avoid SIGPIPE on OS X without MSG_NOSIGNAL
OS X does not have Linux-specific option MSG_NOSIGNAL.
SIGPIPE can be avoided on OS X by using sockopt SO_NOSIGPIPE.
Credits: https://noahdesu.github.io/2014/01/16/port-sendmsg.html
2016-07-10 21:44:14 +03:00
David van Erkelens ad9171f226 Changed writev to sendmsg to prevent SIGPIPE errors 2016-07-06 14:08:45 +02:00
Emiel Bruijntjes aad09a1dd2 work in progress to prevent SIGPIPE signals (this is going to fix #79) 2016-07-06 13:03:51 +02:00
David van Erkelens dddd16b74d Make sure single gets are processed correctly as well 2016-07-05 16:39:12 +02:00
Martijn Otto 979128782b Merge pull request #76 from maxim-ky/master
Made some destructors virtual and fixed a user-after-free bug
2016-07-04 09:38:31 +02:00