diff options
author | Tony Garnock-Jones <tonyg@kcbbs.gen.nz> | 2009-05-10 20:51:37 +0100 |
---|---|---|
committer | Tony Garnock-Jones <tonyg@kcbbs.gen.nz> | 2009-05-10 20:51:37 +0100 |
commit | f336bb896dce573d39db0460c4ca4ff75fc8bda9 (patch) | |
tree | c5be7ba87a428f91ad25ffc793c2fef09d6febc2 | |
parent | 9c66730ac06685622eebf5e93b002d3f64f40468 (diff) | |
download | rabbitmq-c-github-ask-f336bb896dce573d39db0460c4ca4ff75fc8bda9.tar.gz |
Actually implement amqp_send_header_to!
-rw-r--r-- | librabbitmq/amqp.h | 6 | ||||
-rw-r--r-- | librabbitmq/amqp_connection.c | 2 | ||||
-rw-r--r-- | librabbitmq/amqp_socket.c | 17 |
3 files changed, 19 insertions, 6 deletions
diff --git a/librabbitmq/amqp.h b/librabbitmq/amqp.h index a7160f3..59d5466 100644 --- a/librabbitmq/amqp.h +++ b/librabbitmq/amqp.h @@ -111,6 +111,8 @@ typedef enum amqp_sasl_method_enum_ { #define AMQP_PSEUDOFRAME_PROTOCOL_HEADER ((uint8_t) 'A') #define AMQP_PSEUDOFRAME_PROTOCOL_CHANNEL ((amqp_channel_t) ((((int) 'M') << 8) | ((int) 'Q'))) +typedef int (*amqp_output_fn_t)(void *context, void *buffer, size_t count); + /* Opaque struct. */ typedef struct amqp_connection_state_t_ *amqp_connection_state_t; @@ -147,7 +149,7 @@ extern int amqp_send_frame(amqp_connection_state_t state, amqp_frame_t const *frame); extern int amqp_send_frame_to(amqp_connection_state_t state, amqp_frame_t const *frame, - int (*fn)(void *context, void *buffer, size_t count), + amqp_output_fn_t fn, void *context); extern int amqp_table_entry_cmp(void const *entry1, void const *entry2); @@ -156,7 +158,7 @@ extern int amqp_open_socket(char const *hostname, int portnumber); extern int amqp_send_header(amqp_connection_state_t state); extern int amqp_send_header_to(amqp_connection_state_t state, - int (*fn)(void *context, void *buffer, size_t count), + amqp_output_fn_t fn, void *context); extern amqp_boolean_t amqp_frames_enqueued(amqp_connection_state_t state); diff --git a/librabbitmq/amqp_connection.c b/librabbitmq/amqp_connection.c index 9c6eb9d..17a30d1 100644 --- a/librabbitmq/amqp_connection.c +++ b/librabbitmq/amqp_connection.c @@ -367,7 +367,7 @@ int amqp_send_frame(amqp_connection_state_t state, int amqp_send_frame_to(amqp_connection_state_t state, amqp_frame_t const *frame, - int (*fn)(void *context, void *buffer, size_t count), + amqp_output_fn_t fn, void *context) { amqp_bytes_t encoded; diff --git a/librabbitmq/amqp_socket.c b/librabbitmq/amqp_socket.c index 8d0bcb9..60911d1 100644 --- a/librabbitmq/amqp_socket.c +++ b/librabbitmq/amqp_socket.c @@ -44,8 +44,8 @@ int amqp_open_socket(char const *hostname, return sockfd; } -int amqp_send_header(amqp_connection_state_t state) { - char header[8]; +static char *header() { + static char header[8]; header[0] = 'A'; header[1] = 'M'; header[2] = 'Q'; @@ -54,7 +54,18 @@ int amqp_send_header(amqp_connection_state_t state) { header[5] = 1; header[6] = AMQP_PROTOCOL_VERSION_MAJOR; header[7] = AMQP_PROTOCOL_VERSION_MINOR; - return write(state->sockfd, &header[0], 8); + return header; +} + +int amqp_send_header(amqp_connection_state_t state) { + return write(state->sockfd, header(), 8); +} + +int amqp_send_header_to(amqp_connection_state_t state, + amqp_output_fn_t fn, + void *context) +{ + return fn(context, header(), 8); } static amqp_bytes_t sasl_method_name(amqp_sasl_method_enum method) { |