char *basic_get(amqp_connection_state_t connection_state_, const char *queue_name_, uint64_t *out_body_size_) { amqp_rpc_reply_t rpc_reply; amqp_time_t deadline; struct timeval timeout = { 5, 0 }; int time_rc = amqp_time_from_now(&deadline, &timeout); assert(time_rc == AMQP_STATUS_OK); do { rpc_reply = amqp_basic_get(connection_state_, fixed_channel_id, amqp_cstring_bytes(queue_name_), /*no_ack*/ 1); } while (rpc_reply.reply_type == AMQP_RESPONSE_NORMAL && rpc_reply.reply.id == AMQP_BASIC_GET_EMPTY_METHOD && amqp_time_has_past(deadline) == AMQP_STATUS_OK); assert(rpc_reply.reply_type == AMQP_RESPONSE_NORMAL); assert(rpc_reply.reply.id == AMQP_BASIC_GET_OK_METHOD); amqp_message_t message; rpc_reply = amqp_read_message(connection_state_, fixed_channel_id, &message, 0); assert(rpc_reply.reply_type == AMQP_RESPONSE_NORMAL); char *body = malloc(message.body.len); memcpy(body, message.body.bytes, message.body.len); *out_body_size_ = message.body.len; amqp_destroy_message(&message); return body; }
static int do_get(amqp_connection_state_t conn, char *queue) { amqp_rpc_reply_t r = amqp_basic_get(conn, 1, cstring_bytes(queue), 1); die_rpc(r, "basic.get"); if (r.reply.id == AMQP_BASIC_GET_EMPTY_METHOD) return 0; copy_body(conn, 1); return 1; }