Skip to content

Commit fafb9e0

Browse files
committed
record_accessor: extend API to support binary and string refs
Signed-off-by: Eduardo Silva <[email protected]>
1 parent 59dd90d commit fafb9e0

File tree

2 files changed

+54
-12
lines changed

2 files changed

+54
-12
lines changed

include/fluent-bit/flb_record_accessor.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ int flb_ra_get_kv_pair(struct flb_record_accessor *ra, msgpack_object map,
5858

5959
struct flb_ra_value *flb_ra_get_value_object(struct flb_record_accessor *ra,
6060
msgpack_object map);
61+
struct flb_ra_value *flb_ra_get_value_object_ref(struct flb_record_accessor *ra,
62+
msgpack_object map);
6163
int flb_ra_append_kv_pair(struct flb_record_accessor *ra, msgpack_object map,
6264
void **out_map, size_t *out_size, msgpack_object *in_val);
6365
int flb_ra_update_kv_pair(struct flb_record_accessor *ra, msgpack_object map,

src/flb_record_accessor.c

Lines changed: 52 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -525,10 +525,12 @@ static flb_sds_t ra_translate_string(struct flb_ra_parser *rp, flb_sds_t buf)
525525
static flb_sds_t ra_translate_keymap(struct flb_ra_parser *rp, flb_sds_t buf,
526526
msgpack_object map, int *found)
527527
{
528+
int i;
528529
int len;
529530
char *js;
530531
char str[32];
531-
flb_sds_t tmp = NULL;
532+
const char *p;
533+
flb_sds_t hex = NULL;
532534
struct flb_ra_value *v;
533535

534536
/* Lookup key or subkey value */
@@ -537,7 +539,7 @@ static flb_sds_t ra_translate_keymap(struct flb_ra_parser *rp, flb_sds_t buf,
537539
return buf;
538540
}
539541

540-
v = flb_ra_key_to_value(rp->key->name, map, rp->key->subkeys);
542+
v = flb_ra_key_to_value_ext(rp->key->name, map, rp->key->subkeys, FLB_TRUE);
541543
if (!v) {
542544
*found = FLB_FALSE;
543545
return buf;
@@ -554,41 +556,66 @@ static flb_sds_t ra_translate_keymap(struct flb_ra_parser *rp, flb_sds_t buf,
554556
js = flb_msgpack_to_json_str(1024, &v->o);
555557
if (js) {
556558
len = strlen(js);
557-
tmp = flb_sds_cat(buf, js, len);
559+
flb_sds_cat_safe(&buf, js, len);
558560
flb_free(js);
559561
}
560562
}
561563
else if (v->o.type == MSGPACK_OBJECT_BOOLEAN) {
562564
if (v->val.boolean) {
563-
tmp = flb_sds_cat(buf, "true", 4);
565+
flb_sds_cat_safe(&buf, "true", 4);
564566
}
565567
else {
566-
tmp = flb_sds_cat(buf, "false", 5);
568+
flb_sds_cat_safe(&buf, "false", 5);
567569
}
568570
}
569571
}
570572
else if (v->type == FLB_RA_INT) {
571573
len = snprintf(str, sizeof(str) - 1, "%" PRId64, v->val.i64);
572-
tmp = flb_sds_cat(buf, str, len);
574+
flb_sds_cat_safe(&buf, str, len);
573575
}
574576
else if (v->type == FLB_RA_FLOAT) {
575577
len = snprintf(str, sizeof(str) - 1, "%f", v->val.f64);
576578
if (len >= sizeof(str)) {
577-
tmp = flb_sds_cat(buf, str, sizeof(str)-1);
579+
flb_sds_cat_safe(&buf, str, sizeof(str)-1);
578580
}
579581
else {
580-
tmp = flb_sds_cat(buf, str, len);
582+
flb_sds_cat_safe(&buf, str, len);
581583
}
582584
}
583585
else if (v->type == FLB_RA_STRING) {
584-
tmp = flb_sds_cat(buf, v->val.string, flb_sds_len(v->val.string));
586+
if (v->storage == FLB_RA_REF) {
587+
flb_sds_cat_safe(&buf, v->val.ref.buf, v->val.ref.len);
588+
}
589+
else {
590+
flb_sds_cat_safe(&buf, v->val.string, flb_sds_len(v->val.string));
591+
}
592+
}
593+
else if (v->type == FLB_RA_BINARY) {
594+
if (v->storage == FLB_RA_REF) {
595+
p = v->val.ref.buf;
596+
len = v->val.ref.len;
597+
}
598+
else {
599+
p = v->val.binary;
600+
len = flb_sds_len(v->val.binary);
601+
}
602+
603+
hex = flb_sds_create_size(len * 2);
604+
if (hex) {
605+
for (i = 0; i < len; i++) {
606+
hex = flb_sds_printf(&hex, "%02x",
607+
(unsigned char) p[i]);
608+
}
609+
flb_sds_cat_safe(&buf, hex, flb_sds_len(hex));
610+
flb_sds_destroy(hex);
611+
}
585612
}
586613
else if (v->type == FLB_RA_NULL) {
587-
tmp = flb_sds_cat(buf, "null", 4);
614+
flb_sds_cat_safe(&buf, "null", 4);
588615
}
589616

590617
flb_ra_key_value_destroy(v);
591-
return tmp;
618+
return buf;
592619
}
593620

594621
/*
@@ -783,7 +810,20 @@ struct flb_ra_value *flb_ra_get_value_object(struct flb_record_accessor *ra,
783810
return NULL;
784811
}
785812

786-
return flb_ra_key_to_value(rp->key->name, map, rp->key->subkeys);
813+
return flb_ra_key_to_value_ext(rp->key->name, map, rp->key->subkeys, FLB_TRUE);
814+
}
815+
816+
struct flb_ra_value *flb_ra_get_value_object_ref(struct flb_record_accessor *ra,
817+
msgpack_object map)
818+
{
819+
struct flb_ra_parser *rp;
820+
821+
rp = get_ra_parser(ra);
822+
if (rp == NULL) {
823+
return NULL;
824+
}
825+
826+
return flb_ra_key_to_value_ext(rp->key->name, map, rp->key->subkeys, FLB_FALSE);
787827
}
788828

789829
/**

0 commit comments

Comments
 (0)