void evtag_marshal_kill(struct evbuffer *evbuf, ev_uint32_t tag, const struct kill *msg) { struct evbuffer *_buf = evbuffer_new(); assert(_buf != NULL); kill_marshal(_buf, msg); evtag_marshal_buffer(evbuf, tag, _buf); evbuffer_free(_buf); }
void tag_marshal_record(struct evbuffer *evbuf, uint8_t tag, struct record *record) { struct evbuffer *tmp = evbuffer_new(); if (tmp != NULL) { record_marshal(tmp, record); evtag_marshal_buffer(evbuf, tag, tmp); evbuffer_free(tmp); } }
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); }