Raw send support.

This commit is contained in:
Ian Gulliver
2016-02-17 20:14:44 -08:00
parent 7d39421966
commit 3801b2c9ce
3 changed files with 40 additions and 0 deletions

34
raw.c
View File

@@ -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;
}
}

1
raw.h
View File

@@ -7,3 +7,4 @@ struct packet;
void raw_init();
bool raw_parse(struct buf *, struct packet *, void *);
void raw_serialize(struct packet *, struct buf *);

5
send.c
View File

@@ -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,