From 3801b2c9ceebba389f86e1dfb707921da9860e03 Mon Sep 17 00:00:00 2001 From: Ian Gulliver Date: Wed, 17 Feb 2016 20:14:44 -0800 Subject: [PATCH] Raw send support. --- raw.c | 34 ++++++++++++++++++++++++++++++++++ raw.h | 1 + send.c | 5 +++++ 3 files changed, 40 insertions(+) diff --git a/raw.c b/raw.c index 62c1da1..6c9bd1a 100644 --- a/raw.c +++ b/raw.c @@ -47,6 +47,24 @@ static bool raw_parse_mode_s_long(struct buf *buf, struct packet *packet) { return true; } +static void raw_serialize_mode_s_short(struct packet *packet, struct buf *buf) { + struct raw_mode_s_short_overlay *overlay = (struct raw_mode_s_short_overlay *) buf_at(buf, 0); + overlay->asterisk = '*'; + overlay->semicolon = ';'; + overlay->lf = '\n'; + hex_from_bin(overlay->payload, packet->payload, sizeof(overlay->payload) / 2); + buf->length = sizeof(*overlay); +} + +static void raw_serialize_mode_s_long(struct packet *packet, struct buf *buf) { + struct raw_mode_s_long_overlay *overlay = (struct raw_mode_s_long_overlay *) buf_at(buf, 0); + overlay->asterisk = '*'; + overlay->semicolon = ';'; + overlay->lf = '\n'; + hex_from_bin(overlay->payload, packet->payload, sizeof(overlay->payload) / 2); + buf->length = sizeof(*overlay); +} + void raw_init() { assert(sizeof(struct raw_mode_s_short_overlay) < BUF_LEN_MAX); assert(sizeof(struct raw_mode_s_long_overlay) < BUF_LEN_MAX); @@ -57,3 +75,19 @@ bool raw_parse(struct buf *buf, struct packet *packet, void *state_in) { raw_parse_mode_s_short(buf, packet) || raw_parse_mode_s_long(buf, packet)); } + +void raw_serialize(struct packet *packet, struct buf *buf) { + if (!packet) { + return; + } + + switch (packet->type) { + case MODE_S_SHORT: + raw_serialize_mode_s_short(packet, buf); + break; + + case MODE_S_LONG: + raw_serialize_mode_s_long(packet, buf); + break; + } +} diff --git a/raw.h b/raw.h index a9a4f1e..615823b 100644 --- a/raw.h +++ b/raw.h @@ -7,3 +7,4 @@ struct packet; void raw_init(); bool raw_parse(struct buf *, struct packet *, void *); +void raw_serialize(struct packet *, struct buf *); diff --git a/send.c b/send.c index 5970719..03da67f 100644 --- a/send.c +++ b/send.c @@ -13,6 +13,7 @@ #include "beast.h" #include "json.h" +#include "raw.h" #include "stats.h" struct send { @@ -37,6 +38,10 @@ struct serializer { .name = "json", .serialize = json_serialize, }, + { + .name = "raw", + .serialize = raw_serialize, + }, { .name = "stats", .serialize = stats_serialize,