void run_marshal(struct evbuffer *evbuf, const struct run *tmp){ evtag_marshal_string(evbuf, RUN_HOW, tmp->how_data); if (tmp->some_bytes_set) { evtag_marshal(evbuf, RUN_SOME_BYTES, tmp->some_bytes_data, tmp->some_bytes_length); } evtag_marshal(evbuf, RUN_FIXED_BYTES, tmp->fixed_bytes_data, (24)); if (tmp->notes_set) { { int i; for (i = 0; i < tmp->notes_length; ++i) { evtag_marshal_string(evbuf, RUN_NOTES, tmp->notes_data[i]); } } } if (tmp->large_number_set) { evtag_marshal_int64(evbuf, RUN_LARGE_NUMBER, tmp->large_number_data); } if (tmp->other_numbers_set) { { int i; for (i = 0; i < tmp->other_numbers_length; ++i) { evtag_marshal_int(evbuf, RUN_OTHER_NUMBERS, tmp->other_numbers_data[i]); } } } }
void run_marshal(struct evbuffer *evbuf, const struct run *tmp){ evtag_marshal_string(evbuf, RUN_HOW, tmp->how_data); if (tmp->some_bytes_set) { evtag_marshal(evbuf, RUN_SOME_BYTES, tmp->some_bytes_data, tmp->some_bytes_length); } evtag_marshal(evbuf, RUN_FIXED_BYTES, tmp->fixed_bytes_data, sizeof(tmp->fixed_bytes_data)); }
void evtag_marshal_timeval(struct evbuffer *evbuf, ev_uint32_t tag, struct timeval *tv) { ev_uint8_t data[10]; int len = encode_int_internal(data, tv->tv_sec); len += encode_int_internal(data + len, tv->tv_usec); evtag_marshal(evbuf, tag, data, len); }
void evtag_marshal_run(struct evbuffer *evbuf, ev_uint32_t tag, const struct run *msg) { struct evbuffer *_buf = evbuffer_new(); assert(_buf != NULL); evbuffer_drain(_buf, -1); run_marshal(_buf, msg); evtag_marshal(evbuf, tag, EVBUFFER_DATA(_buf), EVBUFFER_LENGTH(_buf)); evbuffer_free(_buf); }
static void record_marshal(struct evbuffer *evbuf, struct record *record) { struct evbuffer *addr = evbuffer_new(); struct hash *hash; if (timerisset(&record->tv_start)) evtag_marshal_timeval(evbuf, REC_TV_START, &record->tv_start); if (timerisset(&record->tv_end)) evtag_marshal_timeval(evbuf, REC_TV_END, &record->tv_end); /* Encode an address */ addr_marshal(addr, &record->src); evtag_marshal_buffer(evbuf, REC_SRC, addr); evbuffer_drain(addr, evbuffer_get_length(addr)); addr_marshal(addr, &record->dst); evtag_marshal_buffer(evbuf, REC_DST, addr); evbuffer_drain(addr, evbuffer_get_length(addr)); evtag_marshal_int(evbuf, REC_SRC_PORT, record->src_port); evtag_marshal_int(evbuf, REC_DST_PORT, record->dst_port); evtag_marshal_int(evbuf, REC_PROTO, record->proto); evtag_marshal_int(evbuf, REC_STATE, record->state); if (record->os_fp != NULL) evtag_marshal_string(evbuf, REC_OS_FP, record->os_fp); TAILQ_FOREACH(hash, &record->hashes, next) evtag_marshal(evbuf, REC_HASH, hash->digest, sizeof(hash->digest)); if (record->bytes) evtag_marshal_int(evbuf, REC_BYTES, record->bytes); if (record->flags) evtag_marshal_int(evbuf, REC_FLAGS, record->flags); evbuffer_free(addr); }
void evtag_marshal_string(struct evbuffer *buf, ev_uint32_t tag, const char *string) { /* TODO support strings longer than UINT32_MAX ? */ evtag_marshal(buf, tag, string, (ev_uint32_t)strlen(string)); }