Commit Graph

210 Commits

Author SHA1 Message Date
De Stefano 275c5dce33 Added GIT_VERSION. 2016-10-03 22:44:49 +02:00
unknown a4d32efefb Added fixed reconnection timeout. 2016-10-03 21:31:46 +02:00
Matt Broadstone f6777e66df refactor(channels): move resetInternalState to private impls 2015-11-20 08:07:21 -05:00
Matt Broadstone 3781006a1e fix(QAmqpChannelHash): add missing include 2015-11-19 17:50:05 -05:00
Matt Broadstone a7f9a3a837 chore(version): bump version to 0.4.0 2015-11-19 17:46:23 -05:00
Matt Broadstone 0c96cfca52 refactor(QAmqpChannel): reset channel state on disconnect
We now track channels in QAmqpChannelHash for use across reconnects
however, the internal state of these channels was not being reset
when the connection was reestablished. This provides a way to do
that for not only channels, but both of its subclasses
2015-11-19 17:43:31 -05:00
Matt Broadstone c025333204 fix(QAmqpClient): enable autoReconnect after forced disconnect 2015-11-19 17:09:56 -05:00
Matt Broadstone c113611b05 fix(QAmqpClient): simulate closeOk on forced disconnect 2015-11-19 17:03:55 -05:00
Stuart Longland fd1b19b3b6 QAmqpClient: Substitute static_cast for qobject_cast 2015-05-02 21:10:22 +10:00
Stuart Longland 60f680a4ef QAmqpChannelHash: Substitute static_cast for qobject_cast 2015-05-02 21:10:08 +10:00
Stuart Longland e43224877f QAmqpChannelHash: Store empty/null strings as null strings. 2015-05-02 21:02:50 +10:00
Stuart Longland c171b5c337 QAmqpChannelHash: Add contains function 2015-05-02 21:01:07 +10:00
Stuart Longland 3e5cf05256 QAmqpChannelHash: Coding style fixes. 2015-05-02 20:52:27 +10:00
Stuart Longland 2b707d53de QAmqpChannel: Emit closed signal when server closes.
When we initiate a Close, we get a CloseOk in response and on receipt of
the CloseOk, we mark the channel as closed and emit a signal to notify
everyone else.

Great.  Now what happens when the server closes the channel?  We emit a
CloseOk, then… nothing.  We do nothing.  This fixes this problem, moving
the notification/marking logic to a new function and calling that on
both Close (sent from server) and CloseOk.
2015-05-02 20:41:19 +10:00
Stuart Longland 31f90a17a0 QAmqpChannelHash: Tweak channelDestroyed.
- DON'T rely on sender()
- DON'T expect to be able to cast the QObject to a QAmqpChannel and have
  name() work.

This isn't as efficient as I'd like, but it doesn't crash either.
2015-04-13 08:28:09 +10:00
Stuart Longland ae4f1b336e QAmqpClient: Re-factor using QAmqpChannelHash. 2015-04-13 08:28:04 +10:00
Stuart Longland beb89b30b8 QAmqpChannelHash: Container for storing channels. 2015-04-13 08:27:57 +10:00
Stuart Longland 673274345c QAmqpClient: Fix 'does not have class type' error.
Something in the back of my mind had me thinking iterator.value was a
field not a function.  No idea why.  Fixed now.
2015-04-13 08:27:47 +10:00
Stuart Longland 6599fdbc63 QAmqpClient: Add garbage collection slot.
On 'destroyed', do a clean up of our exchanges and queues.
2015-04-13 08:27:41 +10:00
Stuart Longland bca3f5f8bd QAmqpClient: Fix attempt to assign const QString
How on earth did I expect that to work?  Morning cup of tea hasn't
kicked in yet, of course I can't assign a const QString passed by
reference.

Fix egregious PEBKAC-caused compile error.
2015-04-13 08:27:31 +10:00
Stuart Longland 2622a482b4 QAmqpClient: Store the nameless exchange too.
Since there will be probably many requests for that one.  If we're
passed in QString() instead of QString(""), we overwrite that with the
latter to ensure the name field is never NULL.
2015-04-13 08:27:02 +10:00
Stuart Longland fd4eaef364 QAmqpClient: Use QPointer to store exchanges and queues.
Just discovered you *CAN* delete them yourself safely, and one of the
tests does.  So best to not assume they'll get deleted by other parties.

QPointer takes care of this problem for us.
2015-04-13 08:26:37 +10:00
Stuart Longland ae77ff56e0 QAmqpClientPrivate: Store pointers to named queues and exchanges. 2015-04-13 08:26:20 +10:00
Matt Broadstone 943180da27 fix(multiple-consume): only send consume message once
Previously if multiple attempts to call consume were made, then
QAmqpQueue would send a frame for each of them leading to multiple
consumer tags and general confusion. This guards from calling
consume multiple times.
2015-04-07 14:30:18 -04:00
Gauthier Brion b27ba8cb64 Calling writeFrame with its static form 2015-03-16 16:27:23 +01:00
Gauthier Brion 2c330566e5 Allowing to configure the write timeout of AMQP frames 2015-03-16 15:03:23 +01:00
Matt Broadstone 9b3288ca9d only attempt to close socket if its open
On socket errors we always close the socket per amqp specification,
however there is no need to do so if the connection has already been
forcibly closed from the server side. This causes recursive loops
when using SSL connections
2015-03-05 15:18:03 -05:00
Matt Broadstone 6cc9ee7457 allow access to socket state, enable low latency options
Provides an accessor and change signal for the state of QAmqpClients
internal ssl socket. This also defaults the internal socket to low
latency mode, as well as keep alive.
2015-03-04 17:55:04 -05:00
Matt Broadstone a4bc1b5f4e show example of queued calls on QAmqpExchange
This gives an example of how you can use QMetaObject::invokeMethod to
call a QAmqpExchange from another thread. Also, moved the qRegisterMetaType
for QAmqpMessage::PropertyHash to the ctor of QAmqpClientPrivate
2015-02-27 09:13:17 -05:00
Matt Broadstone 4379e991c6 properly tune heartbeat delay
tuneOk was only properly tuning the heartbeat delay value for values
larger than the default delay sent by the server. This changes that
behavior to send back the requested heartbeat delay if one was provided
2015-02-27 08:16:22 -05:00
Matt Broadstone 3c2a039c08 convert methods to actions where it makes sense
QAmqpExchange and QAmqpQueue both have a number of actions associated
with them that should be defined as slots (especially for a potential
future where they are exported as QML objects). This is a step in the
direction of fully making these classes scriptable
2015-02-15 16:36:16 -05:00
Marcelo E. Magallon 2652206d18 Increment nextChannelNumber only once
nextChannelNumber is being incremented twice. When the counter wraps
around it starts declaring already existing channels and the AMQP server
disconnects the client. This patch doubles the number of channels that
can be created before this happens.
2015-02-11 16:13:27 -06:00
Marcelo E. Magallon 79226ccb35 Change channel id type to quint16
My reading of the spec is that channel numbers are unsigned.
2015-02-11 16:12:36 -06:00
Matt Broadstone 99b0d32f3f use sslConfiguration on socket
A public accessor and mutator was provided for using a QSslConfiguration
with a QAmqpClient, however the configuration was never actually assigned
to the internal socket. This patch fixes that, and removes the needless
storage of a copy of the QSslConfiguration as well
2015-02-09 21:30:23 -05:00
Matt Broadstone c4524b5204 update LICENSE and add license headers 2015-02-09 13:45:05 -05:00
Matt Broadstone 4640a9ad6a cleanup frame handlers on channel deletion
In cases where exchanges and queues are added and deleted during
an extended use of a QAmqpClient, the client should internally cleanup
the frame handlers registered for those objects. This patch does that
as well as providing two test cases verifying this behavior for both
QAmqpQueue and QAmqpExchange.
2015-02-06 16:12:58 -05:00
Matt Broadstone bcc6fdba9d provide access to QAbstractSocket error string on error
When a socket error occurs the string version of the error is now
stored in QAmqpClient's internal errorString variable, providing
access to the string to users of the client.
2015-02-05 10:40:59 -05:00
Matt Broadstone f5736a9615 rename UnroutableKey to NoRouteError 2015-02-04 19:59:57 -05:00
Gauthier Brion 7cd07f4983 Fix problem of ms vs seconds for heartbeat 2015-02-03 18:00:26 +01:00
Matt Broadstone 31d8affc84 add support for ssl connections
This adds preliminary support for SSL connections to a RabbitMQ
server. Instead of providing two clients (QAmqpClient/QAmqpSslClient),
the SSL support was directly rolled into QAmqpClient itself, providing
signals/slots to deal with errors (sslErrors/ignoreSslErrors), and
the ability to assign a QSslConfiguration. Travis testing for ssl
support is currently disabled, pending a solution to a travis
limitation for starting ssl listeners
2015-02-02 10:49:25 -05:00
Matt Broadstone d051f5a445 add support for Basic.Reject
This adds the reject method to QAmqpQueue in order to reject an
incoming message, and conditionally requeue it.
2015-02-01 09:50:32 -05:00
Matt Broadstone e6b69010e4 remove QAmqpSslClient
Since you can provide amqps endpoints, it makes no sense to have a
separate class for SSL client support. This functionality will be
merged directly into QAmqpClient
2015-01-31 12:57:26 -05:00
Matt Broadstone 009c3131f5 add two new properties, changed the name of one
QAmqpQueue and QAmqpExchange both now have an isDeclared property,
and QAmqpChannel::isOpened was renamed to isOpen to more closely follow
Qt style/api guidelines
2015-01-31 12:44:25 -05:00
Matt Broadstone bb13e2e830 initialize timeout to 0 for autoReconnect
Previously timeout was initialized to -1, which meant when it went
through delay loops it would always use a negative value. This closes
issue #9
2015-01-29 18:57:11 -05:00
Matt Broadstone f2ac01de34 add preliminary support for publisher acknowledgements
RabbitMQ supports publish confirms (Publisher Acknowledgements) on
a given channel. This enables the user to toggle this functionality
and ensure that published messages are in fact published.
2015-01-19 13:51:20 -05:00
Matt Broadstone 8be77044ef micro optimizations
These are paths that we can optimize for since they are unlikely
to occur.
2015-01-15 07:27:19 -05:00
Matt Broadstone f35e939446 Add coveralls support to travis builds 2014-09-16 17:42:21 -04:00
Matt Broadstone 98f40f5589 Forward socket errors to user
Provide accessors and a signal for socket errors, so that the user
can react accordingly. This closes issue #6
2014-09-16 11:55:36 -04:00
Matt Broadstone 7242a64a2f clean up QAmqpFrame paths
- opt for QDataStream overloads instead of read ctor and toStream methods
- removed some unneccesary prefixes to Type and MethodClass enums
- removed documentation from header (this is coming back!)
- cleaned up some confusing code paths, removed unneccessary methods (like readHeader/writeHeader)
2014-09-15 15:45:20 -04:00
Matt Broadstone 10ab1423c2 remove QAMQP namespace
This is a very small library, so there is no real pressing need for
a library namespace. Further, the namespacing actually makes it rather
difficult to work with in some cases. Opting for a more "Qt" style
class naming scheme, using the QAmqp class prefix
2014-09-15 13:26:48 -04:00