int zyre_peer_send (zyre_peer_t *self, zre_msg_t **msg_p) { assert (self); zre_msg_t *msg = *msg_p; assert (msg); if (self->connected) { self->sent_sequence += 1; zre_msg_set_sequence (msg, self->sent_sequence); if (self->verbose) zsys_info ("(%s) send %s to peer=%s sequence=%d", self->origin, zre_msg_command (msg), self->name? self->name: "-", zre_msg_sequence (msg)); if (zre_msg_send (msg, self->mailbox)) { if (errno == EAGAIN) { if (self->verbose) zsys_info ("(%s) disconnect from peer (EAGAIN): name=%s", self->origin, self->name); zyre_peer_disconnect (self); return -1; } // Can't get any other error here assert (false); } } zre_msg_destroy (msg_p); return 0; }
int zre_msg_send_ping_ok ( void *output, uint16_t sequence) { zre_msg_t *self = zre_msg_new (ZRE_MSG_PING_OK); zre_msg_set_sequence (self, sequence); return zre_msg_send (&self, output); }
int zre_msg_send_whisper ( void *output, uint16_t sequence, zframe_t *content) { zre_msg_t *self = zre_msg_new (ZRE_MSG_WHISPER); zre_msg_set_sequence (self, sequence); zre_msg_set_content (self, zframe_dup (content)); return zre_msg_send (&self, output); }
int zre_msg_send_leave ( void *output, uint16_t sequence, const char *group, byte status) { zre_msg_t *self = zre_msg_new (ZRE_MSG_LEAVE); zre_msg_set_sequence (self, sequence); zre_msg_set_group (self, group); zre_msg_set_status (self, status); return zre_msg_send (&self, output); }
int zre_msg_send_join ( void *output, uint16_t sequence, char *group, byte status) { zre_msg_t *self = zre_msg_new (ZRE_MSG_JOIN); zre_msg_set_sequence (self, sequence); zre_msg_set_group (self, group); zre_msg_set_status (self, status); return zre_msg_send (&self, output); }
int zre_msg_send_shout ( void *output, uint16_t sequence, char *group, zframe_t *content) { zre_msg_t *self = zre_msg_new (ZRE_MSG_SHOUT); zre_msg_set_sequence (self, sequence); zre_msg_set_group (self, group); zre_msg_set_content (self, zframe_dup (content)); return zre_msg_send (&self, output); }
int zre_peer_send (zre_peer_t *self, zre_msg_t **msg_p) { assert (self); if (self->connected) { zre_msg_set_sequence (*msg_p, ++(self->sent_sequence)); if (zre_msg_send (msg_p, self->mailbox) && errno == EAGAIN) { zre_peer_disconnect (self); return -1; } } else zre_msg_destroy (msg_p); return 0; }
int zre_msg_send_hello ( void *output, uint16_t sequence, char *ipaddress, uint16_t mailbox, zlist_t *groups, byte status, zhash_t *headers) { zre_msg_t *self = zre_msg_new (ZRE_MSG_HELLO); zre_msg_set_sequence (self, sequence); zre_msg_set_ipaddress (self, ipaddress); zre_msg_set_mailbox (self, mailbox); zre_msg_set_groups (self, zlist_dup (groups)); zre_msg_set_status (self, status); zre_msg_set_headers (self, zhash_dup (headers)); return zre_msg_send (&self, output); }
int zre_msg_test (bool verbose) { printf (" * zre_msg: "); // @selftest // Simple create/destroy test zre_msg_t *self = zre_msg_new (0); assert (self); zre_msg_destroy (&self); // Create pair of sockets we can send through zctx_t *ctx = zctx_new (); assert (ctx); void *output = zsocket_new (ctx, ZMQ_DEALER); assert (output); zsocket_bind (output, "inproc://selftest"); void *input = zsocket_new (ctx, ZMQ_ROUTER); assert (input); zsocket_connect (input, "inproc://selftest"); // Encode/send/decode and verify each message type int instance; zre_msg_t *copy; self = zre_msg_new (ZRE_MSG_HELLO); // Check that _dup works on empty message copy = zre_msg_dup (self); assert (copy); zre_msg_destroy (©); zre_msg_set_sequence (self, 123); zre_msg_set_ipaddress (self, "Life is short but Now lasts for ever"); zre_msg_set_mailbox (self, 123); zre_msg_groups_append (self, "Name: %s", "Brutus"); zre_msg_groups_append (self, "Age: %d", 43); zre_msg_set_status (self, 123); zre_msg_headers_insert (self, "Name", "Brutus"); zre_msg_headers_insert (self, "Age", "%d", 43); // Send twice from same object zre_msg_send_again (self, output); zre_msg_send (&self, output); for (instance = 0; instance < 2; instance++) { self = zre_msg_recv (input); assert (self); assert (zre_msg_routing_id (self)); assert (zre_msg_sequence (self) == 123); assert (streq (zre_msg_ipaddress (self), "Life is short but Now lasts for ever")); assert (zre_msg_mailbox (self) == 123); assert (zre_msg_groups_size (self) == 2); assert (streq (zre_msg_groups_first (self), "Name: Brutus")); assert (streq (zre_msg_groups_next (self), "Age: 43")); assert (zre_msg_status (self) == 123); assert (zre_msg_headers_size (self) == 2); assert (streq (zre_msg_headers_string (self, "Name", "?"), "Brutus")); assert (zre_msg_headers_number (self, "Age", 0) == 43); zre_msg_destroy (&self); } self = zre_msg_new (ZRE_MSG_WHISPER); // Check that _dup works on empty message copy = zre_msg_dup (self); assert (copy); zre_msg_destroy (©); zre_msg_set_sequence (self, 123); zmsg_t *whisper_content = zmsg_new (); zre_msg_set_content (self, &whisper_content); zmsg_addstr (zre_msg_content (self), "Hello, World"); // Send twice from same object zre_msg_send_again (self, output); zre_msg_send (&self, output); for (instance = 0; instance < 2; instance++) { self = zre_msg_recv (input); assert (self); assert (zre_msg_routing_id (self)); assert (zre_msg_sequence (self) == 123); assert (zmsg_size (zre_msg_content (self)) == 1); zre_msg_destroy (&self); } self = zre_msg_new (ZRE_MSG_SHOUT); // Check that _dup works on empty message copy = zre_msg_dup (self); assert (copy); zre_msg_destroy (©); zre_msg_set_sequence (self, 123); zre_msg_set_group (self, "Life is short but Now lasts for ever"); zmsg_t *shout_content = zmsg_new (); zre_msg_set_content (self, &shout_content); zmsg_addstr (zre_msg_content (self), "Hello, World"); // Send twice from same object zre_msg_send_again (self, output); zre_msg_send (&self, output); for (instance = 0; instance < 2; instance++) { self = zre_msg_recv (input); assert (self); assert (zre_msg_routing_id (self)); assert (zre_msg_sequence (self) == 123); assert (streq (zre_msg_group (self), "Life is short but Now lasts for ever")); assert (zmsg_size (zre_msg_content (self)) == 1); zre_msg_destroy (&self); } self = zre_msg_new (ZRE_MSG_JOIN); // Check that _dup works on empty message copy = zre_msg_dup (self); assert (copy); zre_msg_destroy (©); zre_msg_set_sequence (self, 123); zre_msg_set_group (self, "Life is short but Now lasts for ever"); zre_msg_set_status (self, 123); // Send twice from same object zre_msg_send_again (self, output); zre_msg_send (&self, output); for (instance = 0; instance < 2; instance++) { self = zre_msg_recv (input); assert (self); assert (zre_msg_routing_id (self)); assert (zre_msg_sequence (self) == 123); assert (streq (zre_msg_group (self), "Life is short but Now lasts for ever")); assert (zre_msg_status (self) == 123); zre_msg_destroy (&self); } self = zre_msg_new (ZRE_MSG_LEAVE); // Check that _dup works on empty message copy = zre_msg_dup (self); assert (copy); zre_msg_destroy (©); zre_msg_set_sequence (self, 123); zre_msg_set_group (self, "Life is short but Now lasts for ever"); zre_msg_set_status (self, 123); // Send twice from same object zre_msg_send_again (self, output); zre_msg_send (&self, output); for (instance = 0; instance < 2; instance++) { self = zre_msg_recv (input); assert (self); assert (zre_msg_routing_id (self)); assert (zre_msg_sequence (self) == 123); assert (streq (zre_msg_group (self), "Life is short but Now lasts for ever")); assert (zre_msg_status (self) == 123); zre_msg_destroy (&self); } self = zre_msg_new (ZRE_MSG_PING); // Check that _dup works on empty message copy = zre_msg_dup (self); assert (copy); zre_msg_destroy (©); zre_msg_set_sequence (self, 123); // Send twice from same object zre_msg_send_again (self, output); zre_msg_send (&self, output); for (instance = 0; instance < 2; instance++) { self = zre_msg_recv (input); assert (self); assert (zre_msg_routing_id (self)); assert (zre_msg_sequence (self) == 123); zre_msg_destroy (&self); } self = zre_msg_new (ZRE_MSG_PING_OK); // Check that _dup works on empty message copy = zre_msg_dup (self); assert (copy); zre_msg_destroy (©); zre_msg_set_sequence (self, 123); // Send twice from same object zre_msg_send_again (self, output); zre_msg_send (&self, output); for (instance = 0; instance < 2; instance++) { self = zre_msg_recv (input); assert (self); assert (zre_msg_routing_id (self)); assert (zre_msg_sequence (self) == 123); zre_msg_destroy (&self); } zctx_destroy (&ctx); // @end printf ("OK\n"); return 0; }
int zre_msg_test (bool verbose) { printf (" * zre_msg: "); // @selftest // Simple create/destroy test zre_msg_t *self = zre_msg_new (0); assert (self); zre_msg_destroy (&self); // Create pair of sockets we can send through zctx_t *ctx = zctx_new (); assert (ctx); void *output = zsocket_new (ctx, ZMQ_DEALER); assert (output); zsocket_bind (output, "inproc://selftest"); void *input = zsocket_new (ctx, ZMQ_ROUTER); assert (input); zsocket_connect (input, "inproc://selftest"); // Encode/send/decode and verify each message type self = zre_msg_new (ZRE_MSG_HELLO); zre_msg_set_sequence (self, 123); zre_msg_set_ipaddress (self, "Life is short but Now lasts for ever"); zre_msg_set_mailbox (self, 123); zre_msg_groups_append (self, "Name: %s", "Brutus"); zre_msg_groups_append (self, "Age: %d", 43); zre_msg_set_status (self, 123); zre_msg_headers_insert (self, "Name", "Brutus"); zre_msg_headers_insert (self, "Age", "%d", 43); zre_msg_send (&self, output); self = zre_msg_recv (input); assert (self); assert (zre_msg_sequence (self) == 123); assert (streq (zre_msg_ipaddress (self), "Life is short but Now lasts for ever")); assert (zre_msg_mailbox (self) == 123); assert (zre_msg_groups_size (self) == 2); assert (streq (zre_msg_groups_first (self), "Name: Brutus")); assert (streq (zre_msg_groups_next (self), "Age: 43")); assert (zre_msg_status (self) == 123); assert (zre_msg_headers_size (self) == 2); assert (streq (zre_msg_headers_string (self, "Name", "?"), "Brutus")); assert (zre_msg_headers_number (self, "Age", 0) == 43); zre_msg_destroy (&self); self = zre_msg_new (ZRE_MSG_WHISPER); zre_msg_set_sequence (self, 123); zre_msg_set_content (self, zframe_new ("Captcha Diem", 12)); zre_msg_send (&self, output); self = zre_msg_recv (input); assert (self); assert (zre_msg_sequence (self) == 123); assert (zframe_streq (zre_msg_content (self), "Captcha Diem")); zre_msg_destroy (&self); self = zre_msg_new (ZRE_MSG_SHOUT); zre_msg_set_sequence (self, 123); zre_msg_set_group (self, "Life is short but Now lasts for ever"); zre_msg_set_content (self, zframe_new ("Captcha Diem", 12)); zre_msg_send (&self, output); self = zre_msg_recv (input); assert (self); assert (zre_msg_sequence (self) == 123); assert (streq (zre_msg_group (self), "Life is short but Now lasts for ever")); assert (zframe_streq (zre_msg_content (self), "Captcha Diem")); zre_msg_destroy (&self); self = zre_msg_new (ZRE_MSG_JOIN); zre_msg_set_sequence (self, 123); zre_msg_set_group (self, "Life is short but Now lasts for ever"); zre_msg_set_status (self, 123); zre_msg_send (&self, output); self = zre_msg_recv (input); assert (self); assert (zre_msg_sequence (self) == 123); assert (streq (zre_msg_group (self), "Life is short but Now lasts for ever")); assert (zre_msg_status (self) == 123); zre_msg_destroy (&self); self = zre_msg_new (ZRE_MSG_LEAVE); zre_msg_set_sequence (self, 123); zre_msg_set_group (self, "Life is short but Now lasts for ever"); zre_msg_set_status (self, 123); zre_msg_send (&self, output); self = zre_msg_recv (input); assert (self); assert (zre_msg_sequence (self) == 123); assert (streq (zre_msg_group (self), "Life is short but Now lasts for ever")); assert (zre_msg_status (self) == 123); zre_msg_destroy (&self); self = zre_msg_new (ZRE_MSG_PING); zre_msg_set_sequence (self, 123); zre_msg_send (&self, output); self = zre_msg_recv (input); assert (self); assert (zre_msg_sequence (self) == 123); zre_msg_destroy (&self); self = zre_msg_new (ZRE_MSG_PING_OK); zre_msg_set_sequence (self, 123); zre_msg_send (&self, output); self = zre_msg_recv (input); assert (self); assert (zre_msg_sequence (self) == 123); zre_msg_destroy (&self); zctx_destroy (&ctx); // @end printf ("OK\n"); return 0; }