diff options
author | Alan Antonuk <alan.antonuk@gmail.com> | 2013-06-25 03:42:31 -0700 |
---|---|---|
committer | Alan Antonuk <alan.antonuk@gmail.com> | 2013-06-25 16:10:51 -0700 |
commit | aca5dc13c7ebce355f490b395ca3a57593348e84 (patch) | |
tree | 67acfb70c65200737a6e006e8764dd99c4c8743f /librabbitmq/amqp_api.c | |
parent | daa0e663ed6ae6d49ed3cc0da3043e3d4e8b2252 (diff) | |
download | rabbitmq-c-aca5dc13c7ebce355f490b395ca3a57593348e84.tar.gz |
Add support for heartbeats in amqp_basic_publish
Check heartbeats when doing basic.publish. Do this by doing a recv on
the socket.
Diffstat (limited to 'librabbitmq/amqp_api.c')
-rw-r--r-- | librabbitmq/amqp_api.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/librabbitmq/amqp_api.c b/librabbitmq/amqp_api.c index bdd7d80..525d92c 100644 --- a/librabbitmq/amqp_api.c +++ b/librabbitmq/amqp_api.c @@ -39,6 +39,7 @@ #endif #include "amqp_private.h" +#include "amqp_timer.h" #include <assert.h> #include <stdarg.h> #include <stdint.h> @@ -186,6 +187,22 @@ int amqp_basic_publish(amqp_connection_state_t state, m.immediate = immediate; m.ticket = 0; + if (state->heartbeat > 0) { + uint64_t current_timestamp = amqp_get_monotonic_timestamp(); + if (0 == current_timestamp) { + return AMQP_STATUS_TIMER_FAILURE; + } + + if (current_timestamp > state->next_recv_heartbeat) { + res = amqp_try_recv(state, current_timestamp); + if (AMQP_STATUS_TIMEOUT == res) { + return AMQP_STATUS_HEARTBEAT_TIMEOUT; + } else if (AMQP_STATUS_OK != res) { + return res; + } + } + } + res = amqp_send_method(state, channel, AMQP_BASIC_PUBLISH_METHOD, &m); if (res < 0) { return res; |