int zmsg_send (zmsg_t **self_p, void *dest) { assert (self_p); assert (dest); zmsg_t *self = *self_p; int rc = 0; void *handle = zsock_resolve (dest); if (self) { assert (zmsg_is (self)); if (zlist_size (self->frames) == 0) return -1; // Sending an empty message is an error zframe_t *frame = (zframe_t *) zlist_pop (self->frames); while (frame) { rc = zframe_send (&frame, handle, zlist_size (self->frames)? ZFRAME_MORE: 0); if (rc != 0) break; frame = (zframe_t *) zlist_pop (self->frames); } zmsg_destroy (self_p); } return rc; }
zframe_t * zmsg_last (zmsg_t *self) { assert (self); assert (zmsg_is (self)); return (zframe_t *) zlist_last (self->frames); }
int zmsg_sendm (zmsg_t **self_p, void *dest) { assert (self_p); assert (dest); zmsg_t *self = *self_p; int rc = 0; if (self) { assert (zmsg_is (self)); bool sent_some = false; zframe_t *frame; while ((frame = (zframe_t *) zlist_head (self->frames))) { rc = zframe_send (&frame, dest, ZFRAME_MORE); if (rc != 0) { if (errno == EINTR && sent_some) continue; else break; } sent_some = true; (void) zlist_pop (self->frames); } if (rc == 0) zmsg_destroy (self_p); } return rc; }
size_t zmsg_content_size (zmsg_t *self) { assert (self); assert (zmsg_is (self)); return self->content_size; }
static void get_message_to_deliver (client_t *self) { assert (zmsg_is (self->msg)); if (self->callee) xrap_traffic_set_sender (self->message, self->callee->id); xrap_traffic_set_content (self->message, &self->msg); }
size_t zmsg_size (zmsg_t *self) { assert (self); assert (zmsg_is (self)); return zlist_size (self->frames); }
void zmsg_remove (zmsg_t *self, zframe_t *frame) { assert (self); assert (zmsg_is (self)); self->content_size -= zframe_size (frame); zlist_remove (self->frames, frame); }
int zmsg_addstr (zmsg_t *self, const char *string) { assert (self); assert (zmsg_is (self)); assert (string); self->content_size += strlen (string); zlist_append (self->frames, zframe_new (string, strlen (string))); return 0; }
int zmsg_append (zmsg_t *self, zframe_t **frame_p) { assert (self); assert (zmsg_is (self)); assert (frame_p); zframe_t *frame = *frame_p; *frame_p = NULL; // We now own frame self->content_size += zframe_size (frame); return zlist_append (self->frames, frame); }
zframe_t * zmsg_pop (zmsg_t *self) { assert (self); assert (zmsg_is (self)); zframe_t *frame = (zframe_t *) zlist_pop (self->frames); if (frame) self->content_size -= zframe_size (frame); return frame; }
int zmsg_addmem (zmsg_t *self, const void *src, size_t size) { assert (self); assert (zmsg_is (self)); zframe_t *frame = zframe_new (src, size); if (frame) { self->content_size += size; return zlist_append (self->frames, frame); } else return -1; }
char * zmsg_popstr (zmsg_t *self) { assert (self); assert (zmsg_is (self)); zframe_t *frame = (zframe_t *) zlist_pop (self->frames); char *string = NULL; if (frame) { self->content_size -= zframe_size (frame); string = zframe_strdup (frame); zframe_destroy (&frame); } return string; }
int zmsg_addstr (zmsg_t *self, const char *string) { assert (self); assert (zmsg_is (self)); assert (string); size_t len = strlen (string); zframe_t *frame = zframe_new (string, len); if (frame) { self->content_size += len; return zlist_append (self->frames, frame); } else return -1; }
void zmsg_destroy (zmsg_t **self_p) { assert (self_p); if (*self_p) { zmsg_t *self = *self_p; assert (zmsg_is (self)); zframe_t *frame; while ((frame = (zframe_t *) zlist_pop (self->frames))) zframe_destroy (&frame); zlist_destroy (&self->frames); self->tag = 0xDeadBeef; free (self); *self_p = NULL; } }
void zmsg_print (zmsg_t *self) { assert (self); assert (zmsg_is (self)); if (!self) { zsys_debug ("(NULL)"); return; } zframe_t *frame = zmsg_first (self); while (frame) { zframe_print (frame, NULL); frame = zmsg_next (self); } }
zmsg_t * zmsg_popmsg (zmsg_t *self) { assert (self); assert (zmsg_is (self)); zframe_t *frame = zmsg_pop (self); if (!frame) return NULL; size_t len = zframe_size (frame); byte *data = zframe_data (frame); zmsg_t *msg = zmsg_decode (data, len); zframe_destroy (&frame); return msg; }
size_t zmsg_encode (zmsg_t *self, byte **buffer) { assert (self); assert (zmsg_is (self)); // Calculate real size of buffer size_t buffer_size = 0; zframe_t *frame = zmsg_first (self); while (frame) { size_t frame_size = zframe_size (frame); if (frame_size < 255) buffer_size += frame_size + 1; else buffer_size += frame_size + 1 + 4; frame = zmsg_next (self); } *buffer = (byte *) zmalloc (buffer_size); if (*buffer) { // Encode message now byte *dest = *buffer; frame = zmsg_first (self); while (frame) { size_t frame_size = zframe_size (frame); if (frame_size < 255) { *dest++ = (byte) frame_size; memcpy (dest, zframe_data (frame), frame_size); dest += frame_size; } else { *dest++ = 0xFF; *dest++ = (frame_size >> 24) & 255; *dest++ = (frame_size >> 16) & 255; *dest++ = (frame_size >> 8) & 255; *dest++ = frame_size & 255; memcpy (dest, zframe_data (frame), frame_size); dest += frame_size; } frame = zmsg_next (self); } assert ((dest - *buffer) == buffer_size); } return buffer_size; }
int zmsg_addmsg (zmsg_t *self, zmsg_t **msg_p) { assert (self); assert (zmsg_is (self)); assert (msg_p); zmsg_t *msg = *msg_p; byte *data; size_t len = zmsg_encode (msg, &data); int r = zmsg_addmem (self, data, len); if (r == 0) { zmsg_destroy (&msg); *msg_p = NULL; } free (data); return r; }
void zmsg_fprint (zmsg_t *self, FILE *file) { assert (self); assert (zmsg_is (self)); fprintf (file, "--------------------------------------\n"); if (!self) { fprintf (file, "NULL"); return; } zframe_t *frame = zmsg_first (self); int frame_nbr = 0; while (frame && frame_nbr++ < 10) { zframe_fprint (frame, NULL, file); frame = zmsg_next (self); } }
int zmsg_save (zmsg_t *self, FILE *file) { assert (self); assert (zmsg_is (self)); assert (file); zframe_t *frame = zmsg_first (self); while (frame) { size_t frame_size = zframe_size (frame); if (fwrite (&frame_size, sizeof (frame_size), 1, file) != 1) return -1; if (fwrite (zframe_data (frame), frame_size, 1, file) != 1) return -1; frame = zmsg_next (self); } return 0; }
int zmsg_addstrf (zmsg_t *self, const char *format, ...) { assert (self); assert (zmsg_is (self)); assert (format); va_list argptr; va_start (argptr, format); char *string = zsys_vprintf (format, argptr); va_end (argptr); self->content_size += strlen (string); zlist_append (self->frames, zframe_new (string, strlen (string))); free (string); return 0; }
zmsg_t * zmsg_dup (zmsg_t *self) { assert (self); assert (zmsg_is (self)); zmsg_t *copy = zmsg_new (); if (!copy) return NULL; zframe_t *frame = zmsg_first (self); while (frame) { if (zmsg_addmem (copy, zframe_data (frame), zframe_size (frame))) { zmsg_destroy (©); return NULL; } frame = zmsg_next (self); } return copy; }
zmsg_t * zmsg_dup (zmsg_t *self) { if (self) { assert (zmsg_is (self)); zmsg_t *copy = zmsg_new (); if (copy) { zframe_t *frame = zmsg_first (self); while (frame) { if (zmsg_addmem (copy, zframe_data (frame), zframe_size (frame))) { zmsg_destroy (©); break; // Abandon attempt to copy message } frame = zmsg_next (self); } } return copy; } else return NULL; }
int zmsg_sendm (zmsg_t **self_p, void *dest) { assert (self_p); assert (dest); zmsg_t *self = *self_p; int rc = 0; if (self) { assert (zmsg_is (self)); zframe_t *frame = (zframe_t *) zlist_pop (self->frames); while (frame) { rc = zframe_send (&frame, dest, ZFRAME_MORE); if (rc != 0) break; frame = (zframe_t *) zlist_pop (self->frames); } if (rc == 0) zmsg_destroy (self_p); } return rc; }
int zmsg_addstrf (zmsg_t *self, const char *format, ...) { assert (self); assert (zmsg_is (self)); assert (format); va_list argptr; va_start (argptr, format); char *string = zsys_vprintf (format, argptr); va_end (argptr); if (!string) return -1; size_t len = strlen (string); zframe_t *frame = zframe_new (string, len); free (string); if (frame) { self->content_size += len; return zlist_append (self->frames, frame); } else return -1; }
/// // Probe the supplied object, and report if it looks like a zmsg_t. bool QmlZmsgAttached::is (void *self) { return zmsg_is (self); };
Z K1(zmsgis){PC(x); R kb(zmsg_is(VSK(x)));}
/// // Probe the supplied object, and report if it looks like a zmsg_t. bool QZmsg::is (void *self) { bool rv = zmsg_is (self); return rv; }