summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTony Garnock-Jones <tonyg@kcbbs.gen.nz>2009-05-10 20:51:37 +0100
committerTony Garnock-Jones <tonyg@kcbbs.gen.nz>2009-05-10 20:51:37 +0100
commitf336bb896dce573d39db0460c4ca4ff75fc8bda9 (patch)
treec5be7ba87a428f91ad25ffc793c2fef09d6febc2
parent9c66730ac06685622eebf5e93b002d3f64f40468 (diff)
downloadrabbitmq-c-f336bb896dce573d39db0460c4ca4ff75fc8bda9.tar.gz
Actually implement amqp_send_header_to!
-rw-r--r--librabbitmq/amqp.h6
-rw-r--r--librabbitmq/amqp_connection.c2
-rw-r--r--librabbitmq/amqp_socket.c17
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) {