summaryrefslogtreecommitdiffstats
path: root/output/ulogd_output_XML.c
diff options
context:
space:
mode:
Diffstat (limited to 'output/ulogd_output_XML.c')
-rw-r--r--output/ulogd_output_XML.c33
1 files changed, 22 insertions, 11 deletions
diff --git a/output/ulogd_output_XML.c b/output/ulogd_output_XML.c
index ba33739..44af596 100644
--- a/output/ulogd_output_XML.c
+++ b/output/ulogd_output_XML.c
@@ -109,7 +109,7 @@ xml_output_flow(struct ulogd_key *inp, char *buf, ssize_t size)
if (tmp < 0 || tmp >= size)
return -1;
- return 0;
+ return tmp;
#else
return -1;
#endif
@@ -126,7 +126,7 @@ xml_output_packet(struct ulogd_key *inp, char *buf, ssize_t size)
if (tmp < 0 || tmp >= size)
return -1;
- return 0;
+ return tmp;
#else
return -1;
#endif
@@ -143,7 +143,7 @@ xml_output_sum(struct ulogd_key *inp, char *buf, ssize_t size)
NFACCT_SNPRINTF_F_TIME);
if (tmp < 0 || tmp >= size)
return -1;
- return 0;
+ return tmp;
#else
return -1;
#endif
@@ -155,14 +155,25 @@ static int xml_output(struct ulogd_pluginstance *upi)
struct ulogd_key *inp = upi->input.keys;
struct xml_priv *opi = (struct xml_priv *) &upi->private;
static char buf[4096];
- int ret = -1;
+ int ret = -1, tmp = 0;
- if (pp_is_valid(inp, KEY_CT))
- ret = xml_output_flow(inp, buf, sizeof(buf));
- else if (pp_is_valid(inp, KEY_PCKT))
- ret = xml_output_packet(inp, buf, sizeof(buf));
- else if (pp_is_valid(inp, KEY_SUM))
- ret = xml_output_sum(inp, buf, sizeof(buf));
+ if (pp_is_valid(inp, KEY_PCKT)) {
+ ret = xml_output_packet(inp, buf + tmp, sizeof(buf) - tmp);
+ if (ret < 0)
+ return ULOGD_IRET_ERR;
+ tmp += ret;
+ }
+ if (pp_is_valid(inp, KEY_CT)) {
+ ret = xml_output_flow(inp, buf + tmp, sizeof(buf) - tmp);
+ if (ret < 0)
+ return ULOGD_IRET_ERR;
+ tmp += ret;
+ }
+ if (pp_is_valid(inp, KEY_SUM)) {
+ ret = xml_output_sum(inp, buf + tmp, sizeof(buf) - tmp);
+ if (ret < 0)
+ return ULOGD_IRET_ERR;
+ }
if (ret < 0)
return ULOGD_IRET_ERR;
@@ -314,7 +325,7 @@ static struct ulogd_plugin xml_plugin = {
.input = {
.keys = xml_inp,
.num_keys = ARRAY_SIZE(xml_inp),
- .type = ULOGD_DTYPE_FLOW | ULOGD_DTYPE_SUM,
+ .type = ULOGD_DTYPE_FLOW | ULOGD_DTYPE_SUM | ULOGD_DTYPE_RAW,
},
.output = {
.type = ULOGD_DTYPE_SINK,