Commit Graph

173 Commits

Author SHA1 Message Date
Martijn Otto 2c60151d31 Only allocate a message and its data when a consumer wants to and allow consumers to receive the individual parts 2016-06-23 14:42:50 +02:00
Emiel Bruijntjes 24c8527b5d added tcpinbuffer with much less allocation 2016-06-15 13:32:30 -04:00
Emiel Bruijntjes 6320e2ae0e added consistent-hash exchange (same as pull request #68) 2016-06-15 11:20:31 -04:00
Emiel Bruijntjes 59830c659c added connection::maxFrame() and connection::expected() methods to give hints about the amount of data that the connection::parse() method ideally expects 2016-06-15 04:57:46 -04:00
Jan Westerdiep 7384b521ac small legibility fixes 2016-06-10 15:21:10 +02:00
hoxnox 15fa529bfd Bugfix: add missing include guards 2016-04-06 17:49:39 +03:00
Aljar Meesters 70a7565c4e fixed bug when connection goes out of scope 2016-03-04 17:34:28 +01:00
Martijn Otto 89c2075a5f Fix segfault when the handler is destructed from within a callback 2016-01-15 14:19:09 +01:00
Brent Dimmig bbfcf76f39 add TcpHandler implementation for libevent 2016-01-09 16:03:42 -05:00
Martijn Otto 18bf111eec fixed changing io events for libev 2016-01-04 16:53:22 +01:00
Toon Schoenmakers 09ad7b6cf4 How about we include libev before using the structs from libev? 2015-12-30 16:04:34 +01:00
Toon Schoenmakers 93a0b60b6e clients can now intercept the heartbeat negotiation, and install a shorter of longer heartbeat interval, and clients can be notified for received heartbeat frames 2015-12-02 10:46:55 +01:00
Emiel Bruijntjes 57c1109115 added extra Table::set() methods 2015-11-28 17:30:02 +01:00
Emiel Bruijntjes 155c989db5 added "override" keywords to overridden methods, fixed buffer overflow in setting up a connection 2015-11-28 11:38:15 +01:00
Emiel Bruijntjes 16a5104cd1 added include guard 2015-11-17 11:17:21 +01:00
Emiel Bruijntjes 3c6f909871 on second thought, should not be protected 2015-11-17 10:07:33 +01:00
Emiel Bruijntjes 1fc239f9fe loop member is now protected (could be useful) 2015-11-17 10:06:26 +01:00
Emiel Bruijntjes 66d2173f86 added libev implementation for the Tcp handler, added libev example program 2015-11-17 09:33:28 +01:00
Toon Schoenmakers c783ec7618 When building the address url, username and password should be split with a colon 2015-11-02 17:53:43 +01:00
Toon Schoenmakers 875300dbce Exposed the channels method in the TcpConnection class and added a more specialized constructor to the Address class 2015-11-02 17:47:21 +01:00
Emiel Bruijntjes b610ac5183 added TcpConnection::close() method 2015-11-01 12:20:12 +01:00
Emiel Bruijntjes 9e08c6932f extra Address constructor added 2015-11-01 12:17:33 +01:00
Emiel Bruijntjes 6061d853c7 Merge pull request #44 from Kojoley/envelope-copyctor-fix
AMQP::Envelope copy constructor missing base class constructor call
2015-11-01 05:14:27 -05:00
Emiel Bruijntjes 34699cfcd3 fixed formatting 2015-11-01 11:10:01 +01:00
Emiel Bruijntjes 0e5024d38a Merge pull request #47 from keenlogics/Heartbeat
The server heartbeat is stored in Connection
2015-11-01 05:03:02 -05:00
Emiel Bruijntjes 66ade94fc0 moved the #pragma once statement 2015-11-01 10:48:13 +01:00
Emiel Bruijntjes d41423d5db Added TcpChannel class so that Connection and Channel class are once again completely protocol agnostic 2015-11-01 09:51:43 +01:00
Emiel Bruijntjes b4bd61580b fixed to parsing incoming tcp data 2015-11-01 09:43:17 +01:00
Emiel Bruijntjes df801953a1 improvements to work directly with tcp connections 2015-10-31 21:13:41 +01:00
Emiel Bruijntjes 189d6c9ef1 added Connection::waiting() method to find out if the connection object is waiting/expecting an answer from the rabbitmq server 2015-10-31 18:26:52 +01:00
Emiel Bruijntjes f3955bcd51 implemented TcpConnection, so that users of the library do not have to setup their own tcp connections 2015-10-31 18:26:04 +01:00
Emiel Bruijntjes d18fd082d2 use move semantics in Login class (small optimization) 2015-10-31 18:23:24 +01:00
Emiel Bruijntjes fc5a053089 added "Address" class to parse "amqp://" urls 2015-10-31 18:22:41 +01:00
Sebastian Melinat 74a1a17553 During the handshake the heartbeat duration the server wants is stored in the connection so that clients can retrieve and use it for error detection 2015-10-21 15:26:53 +02:00
Nikita Kniazev ca522a32a5 AMQP::Envelope copy constructor missing base class constructor call 2015-09-28 12:56:52 +03:00
Toon Schoenmakers 12af6e854a Added a method to check how many channels a connection has 2015-09-10 14:33:25 +02:00
Toon Schoenmakers a0d7063c4e Fixed a few incorrect signatures in docblocks 2015-08-03 16:25:25 +02:00
Martijn Otto db3613112e Removed some macros for FreeBSD: Apparantly they are not needed. We might need to remove them for NetBSD and DragonFly as well 2015-07-01 09:48:56 +02:00
Martijn Otto 7a11c23f03 When a deferred handler is in error state, registering a finalize callback should also cause it to be called immediately 2015-06-12 16:48:25 +02:00
Martijn Otto a93b88697d Fix double ready bug for channel, fixes #25 2015-05-18 10:56:50 +02:00
Martijn Otto 7ae4f9c5ff Fixed a bug in the envelope, easy retrieval of field type and improved casting operators for numeric fields 2015-05-05 13:38:20 +02:00
Martijn Otto fcc9522e16 Some bugfixes and performance enhancements 2015-04-30 14:18:18 +02:00
Martijn Otto 45deeaa754 Fixed a bug where a frame could be sent exceeding the maximum frame size (resulting in protocol errors) and added some optimizations 2015-04-30 10:59:03 +02:00
Martijn Otto b9caf0199d Received messages are now moved into the callback instead of provided as a const reference 2015-04-28 10:58:49 +02:00
Emiel Bruijntjes ad3b95741e various trics and changes so that windows compilers, and 32bit systems will not complain about stuff 2015-04-24 10:46:44 +02:00
Martijn Otto 803ba6cc88 Added publish method with r-value std::string 2015-04-22 14:24:00 +02:00
Emiel Bruijntjes df6b8ae743 in reaction to pull request #21 the "const uint**_t" return values have been changed into "uint**_t" return values 2015-02-17 09:02:51 +01:00
Sebastian Melinat 09850e792f Bugfix: ConnectionImpl::reportError calls ChannelImpl::reportError of every channel. The channel then removes itselfs from the connection. That caused the for loop to run out of bounds. Fixed by switching to while 2015-01-28 11:47:03 +01:00
Emiel Bruijntjes f23dc72a4f Fixed documentation, removed references to the ChannelHandler - an object that is no longer supported by AMQP-CPP 2015-01-26 14:47:30 +01:00
Emiel Bruijntjes 236dd02b13 fixed theoretical issue when deferredGet onSize() methods destructs the underlying channel object 2014-09-02 11:18:11 +02:00
Emiel Bruijntjes 9653578d4a The Channel.get().onFinalize() function was called before the Channel.get().onSuccess() method, which is strange. This has been fixed. To fix this, we had to refactor the Deferred* into shared_ptrs 2014-09-02 10:32:55 +02:00
Emiel Bruijntjes 6cc25c4b27 removed operator= from channels and connections 2014-08-29 13:24:24 +02:00
Emiel Bruijntjes aceac8b677 the finalize callback is now called as part of the deferred object destructor, this ensures that the finalize callback will always be called 2014-08-29 13:18:08 +02:00
Emiel Bruijntjes d35dba71a1 disabled copy constructors for channel and connection objects, because the end-user is not supposed to copy them 2014-08-29 13:17:17 +02:00
Emiel Bruijntjes ebcdd71848 Added onSize() method to DeferredGet 2014-08-28 10:02:01 +02:00
Emiel Bruijntjes c7b3f71f14 the connection.close function was only waiting for synchronous calls to complete, async calls that were waiting (after a synchronous) were still discarded, this has been fixed 2014-08-20 13:40:29 +02:00
Emiel Bruijntjes d23e818f64 turns out that shared_from_this() can not be called from the constructor, so we made a special attach() function to postpone object initialization 2014-08-20 12:44:52 +02:00
Emiel Bruijntjes 6997a70cf1 when a connection was closed, the commands already given to the channels were sometimes by-passed by the closing channel. This has been fixed. Also solved the problem that calls executed on channel objects that fall out of scope were not always completed 2014-08-20 11:47:16 +02:00
Michael van der Werve 170ef1f82a when a channel is destructed during a success-callback, the program crashed, this has been fixed by using shared_ptr 2014-08-19 17:43:12 +02:00
Michael van der Werve 07d9361d84 compile fixes 2014-08-19 15:00:20 +02:00
Michael van der Werve acda90655d login and vhost can now be fetched from the connection class 2014-08-19 14:54:30 +02:00
Emiel Bruijntjes 328820f898 renamed apple.h to endian.h because it turns out that it is also used for linux systems, and removed double implemented ChannelImpl::get() function 2014-08-14 15:25:44 +02:00
Emiel Bruijntjes 3e47191f90 fixed apple incompatibility 2014-08-14 15:19:08 +02:00
Emiel Bruijntjes 945a01f659 The Connection::parse() method can now also be called with a buffer object, which allows the user to implement the buffer much more efficiently: it no longer has to be an array 2014-08-13 13:01:27 +02:00
Richard Hodges d2a84b5f8d build - added new source files to CMakeLists 2014-08-07 11:09:02 +01:00
Emiel Bruijntjes 37a51cdc7b basic.get is asynchronous until the entire body has been received, only then subsequent messages are sent + first work in progress on implementing smarter buffers 2014-08-07 11:00:06 +01:00
Emiel Bruijntjes b4270f39bc added Channel::get() that allows one to retrieve a single message from the channel 2014-08-07 11:00:06 +01:00
Emiel Bruijntjes f905c9db49 Quality of service now supports "global" parameter (default is still false) 2014-08-07 11:00:05 +01:00
Emiel Bruijntjes e299aa5fac basic.get is asynchronous until the entire body has been received, only then subsequent messages are sent + first work in progress on implementing smarter buffers 2014-08-01 11:55:07 +02:00
Emiel Bruijntjes f39410039b added Channel::get() that allows one to retrieve a single message from the channel 2014-07-31 12:58:13 +02:00
Emiel Bruijntjes cac3247304 Quality of service now supports "global" parameter (default is still false) 2014-07-31 10:10:15 +02:00
Richard Hodges b9ca150dba merged from latest upstream 2014-07-28 15:16:32 +01:00
Richard Hodges b41e2edc52 Merge remote-tracking branch 'upstream/master' 2014-07-28 15:07:06 +01:00
Richard Hodges 7c0642f30d build - added CMakeLists.txt to allow integration into a CMAKE build tree 2014-07-11 18:17:03 +01:00
Martijn Otto ca8a39ea45 Fix memory leak 2014-05-06 16:49:43 +02:00
Martijn Otto a9570277b7 Removed the nowait option from the public interface, because the deferred would never be called and implemented a queue to wait for synchronous methods to complete before sending the next frame 2014-04-29 15:51:33 +02:00
Emiel Bruijntjes e0b709fa63 in case of a connection error, we no longer call the channel wide error handler 2014-04-16 12:04:44 +02:00
Emiel Bruijntjes e903cdb4ee the derived deferred classes now also re-implement the onSuccess() method to ensure that the same object type is returned, to support propert chaining 2014-04-16 11:43:27 +02:00
Emiel Bruijntjes 1fecc57d67 when a connection gets in error state, all deferred results will now also call their error callback, and the channel wide error handler is called _after_ all individual error handlers are called 2014-04-16 09:25:08 +02:00
Emiel Bruijntjes 59e0b61e6b installed test program, added onMessage() function in deferredconsumer 2014-04-15 14:49:03 +02:00
Emiel Bruijntjes 82249ee368 update documentation, error callbacks now get a const char * instead of a std::string 2014-04-15 14:22:30 +02:00
Emiel Bruijntjes 3d4a1b865e removed some @todo tags 2014-04-15 13:22:06 +02:00
Emiel Bruijntjes b13398b09d setTimeout function removed from connection handler, the finalize and error callbacks are called right away if installed on an object that already is in an error state 2014-04-15 13:18:32 +02:00
Emiel Bruijntjes 60b59524e7 when an error is detected on a channel, all subsequent and cached deferred objects are notified about the error too 2014-04-15 13:14:16 +02:00
Emiel Bruijntjes d08270701e refactored dealing with error messages 2014-04-15 13:01:27 +02:00
Emiel Bruijntjes ae7a32a8bf when a consumer is cancelled, it is also removed from the map of active consumers in the the ChannelImpl object 2014-04-15 12:36:11 +02:00
Emiel Bruijntjes 3b78247363 error callbacks get a const char *, no longer a std::string 2014-04-15 12:29:22 +02:00
Emiel Bruijntjes 301b8153e3 deferred objects are now correctly destructed + added extra checks so that no crashes occur when someone destructs a channel inside a callback function 2014-04-15 12:25:56 +02:00
Emiel Bruijntjes 745ab512a5 the consumer message callback can now also be installed via the Deferred objects, and it is no longer passed a consumer tag, because it already is obvious what the consumer tag is supposed to be 2014-04-15 11:39:52 +02:00
Emiel Bruijntjes 921f24ae06 de-templified the deferred objects, to make them easier to understand for other programmers 2014-04-15 10:43:33 +02:00
Emiel Bruijntjes 7b20f46519 removed channel parameter from the callbacks, because this can easily be captured 2014-04-15 08:52:49 +02:00
Emiel Bruijntjes b8d4581569 cast to array and cast to object implemented, refactored shared-ptr and clone() methods to utilize std::make_shared (see issue #7) 2014-04-14 17:14:36 +02:00
Emiel Bruijntjes bcc6eaff82 added const access for operator[] (issue #7) 2014-04-14 16:06:29 +02:00
Martijn Otto 83621790f4 Give the connection object to the timeout as well 2014-04-14 15:31:15 +02:00
Martijn Otto 05412e0d2b Merged recent commits 2014-04-14 14:23:37 +02:00
Martijn Otto f10e33c7c7 Fix logic error in the array type 2014-04-14 14:18:51 +02:00
Martijn Otto 1c0495378a Implemented deferred consumers and a setTimeout method on the connection handler for indicating immediate failures on deferred objects 2014-04-14 14:10:57 +02:00
Emiel Bruijntjes cf5def0e89 fixed operator[] for arrays and strings, implemented << operator for field and fieldproxy objects to simplify debugging (reported from issue #7) 2014-04-14 13:34:46 +02:00
Martijn Otto d2c17869e0 Moved the remaining methods over to deferred handlers 2014-04-10 12:51:04 +02:00
Martijn Otto e1b0e3dea1 Added a generic callback class that acts as a container for the different types of callbacks 2014-04-08 16:12:04 +02:00