|
|
|
@ -157,7 +157,7 @@ output_json_dnp3_objects_template = """/* Copyright (C) 2015 Open Information Se
|
|
|
|
|
#include "output-json-dnp3-objects.h"
|
|
|
|
|
#include "output-json.h"
|
|
|
|
|
|
|
|
|
|
void OutputJsonDNP3SetItem(json_t *js, DNP3Object *object,
|
|
|
|
|
void OutputJsonDNP3SetItem(JsonBuilder *js, DNP3Object *object,
|
|
|
|
|
DNP3Point *point)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
@ -167,20 +167,17 @@ void OutputJsonDNP3SetItem(json_t *js, DNP3Object *object,
|
|
|
|
|
DNP3ObjectG{{object.group}}V{{object.variation}} *data = point->data;
|
|
|
|
|
{% for field in object.fields %}
|
|
|
|
|
{% if is_integer_type(field.type) %}
|
|
|
|
|
json_object_set_new(js, "{{field.name}}",
|
|
|
|
|
json_integer(data->{{field.name}}));
|
|
|
|
|
jb_set_uint(js, "{{field.name}}", data->{{field.name}});
|
|
|
|
|
{% elif field.type in ["flt32", "flt64"] %}
|
|
|
|
|
json_object_set_new(js, "{{field.name}}",
|
|
|
|
|
json_real(data->{{field.name}}));
|
|
|
|
|
jb_set_float(js, "{{field.name}}", data->{{field.name}});
|
|
|
|
|
{% elif field.type == "bytearray" %}
|
|
|
|
|
unsigned long {{field.name}}_b64_len = data->{{field.len_field}} * 2;
|
|
|
|
|
uint8_t {{field.name}}_b64[{{field.name}}_b64_len];
|
|
|
|
|
Base64Encode(data->{{field.name}}, data->{{field.len_field}},
|
|
|
|
|
{{field.name}}_b64, &{{field.name}}_b64_len);
|
|
|
|
|
json_object_set_new(js, "data->{{field.name}}",
|
|
|
|
|
json_string((char *){{field.name}}_b64));
|
|
|
|
|
jb_set_string(js, "data->{{field.name}}", (char *){{field.name}}_b64);
|
|
|
|
|
{% elif field.type == "vstr4" %}
|
|
|
|
|
json_object_set_new(js, "data->{{field.name}}", SCJsonString(data->{{field.name}}));
|
|
|
|
|
jb_set_string(js, "data->{{field.name}}", data->{{field.name}});
|
|
|
|
|
{% elif field.type == "chararray" %}
|
|
|
|
|
if (data->{{field.len_field}} > 0) {
|
|
|
|
|
/* First create a null terminated string as not all versions
|
|
|
|
@ -188,14 +185,13 @@ void OutputJsonDNP3SetItem(json_t *js, DNP3Object *object,
|
|
|
|
|
char tmpbuf[data->{{field.len_field}} + 1];
|
|
|
|
|
memcpy(tmpbuf, data->{{field.name}}, data->{{field.len_field}});
|
|
|
|
|
tmpbuf[data->{{field.len_field}}] = '\\0';
|
|
|
|
|
json_object_set_new(js, "{{field.name}}", SCJsonString(tmpbuf));
|
|
|
|
|
jb_set_string(js, "{{field.name}}", tmpbuf);
|
|
|
|
|
} else {
|
|
|
|
|
json_object_set_new(js, "{{field.name}}", json_string(""));
|
|
|
|
|
jb_set_string(js, "{{field.name}}", "");
|
|
|
|
|
}
|
|
|
|
|
{% elif field.type == "bstr8" %}
|
|
|
|
|
{% for field in field.fields %}
|
|
|
|
|
json_object_set_new(js, "{{field.name}}",
|
|
|
|
|
json_integer(data->{{field.name}}));
|
|
|
|
|
jb_set_uint(js, "{{field.name}}", data->{{field.name}});
|
|
|
|
|
{% endfor %}
|
|
|
|
|
{% else %}
|
|
|
|
|
{{ raise("Unhandled datatype: %s" % (field.type)) }}
|
|
|
|
|