Skip to content

Commit 77ba0f2

Browse files
committed
filter-modify: Proof-of-concept integration of UTF8 encoding for string values
Signed-off-by: Nigel Stewart <[email protected]>
1 parent fd8fa1c commit 77ba0f2

File tree

6 files changed

+50
-0
lines changed

6 files changed

+50
-0
lines changed

CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,9 @@ add_subdirectory(${FLB_PATH_LIB_MPACK} EXCLUDE_FROM_ALL)
309309
# Miniz (zip)
310310
add_subdirectory(${FLB_PATH_LIB_MINIZ} EXCLUDE_FROM_ALL)
311311

312+
# tutf8e
313+
add_subdirectory(${FLB_PATH_LIB_TUTF8E} EXCLUDE_FROM_ALL)
314+
312315
# Chunk I/O
313316
FLB_OPTION(CIO_LIB_STATIC ON)
314317
FLB_OPTION(CIO_LIB_SHARED OFF)

cmake/headers.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ include_directories(
1616
${FLB_PATH_ROOT_SOURCE}/${FLB_PATH_LIB_MPACK}/src
1717
${FLB_PATH_ROOT_SOURCE}/${FLB_PATH_LIB_MINIZ}/
1818
${FLB_PATH_ROOT_SOURCE}/${FLB_PATH_LIB_ONIGMO}
19+
${FLB_PATH_ROOT_SOURCE}/${FLB_PATH_LIB_TUTF8E}/include
1920
${CMAKE_CURRENT_BINARY_DIR}/include
2021
)
2122

cmake/libraries.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,4 @@ set(FLB_PATH_LIB_SQLITE "lib/sqlite-amalgamation-3240000")
1111
set(FLB_PATH_LIB_ONIGMO "lib/onigmo")
1212
set(FLB_PATH_LIB_MPACK "lib/mpack-amalgamation-1.0")
1313
set(FLB_PATH_LIB_MINIZ "lib/miniz")
14+
set(FLB_PATH_LIB_TUTF8E "lib/tutf8e")

plugins/filter_modify/modify.c

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@
3131
#include <fluent-bit/flb_regex.h>
3232
#include <msgpack.h>
3333

34+
#include <tutf8e.h>
35+
3436
#include "modify.h"
3537

3638
static void condition_free(struct modify_condition *condition)
@@ -331,6 +333,9 @@ static int setup(struct filter_modify_ctx *ctx,
331333
else if (strcasecmp(kv->key, "set") == 0) {
332334
rule->ruletype = SET;
333335
}
336+
else if (strcasecmp(kv->key, "utf8") == 0) {
337+
rule->ruletype = UTF8;
338+
}
334339
else if (strcasecmp(kv->key, "copy") == 0) {
335340
rule->ruletype = COPY;
336341
}
@@ -1157,6 +1162,42 @@ static inline int apply_rule_SET(msgpack_packer * packer,
11571162
return FLB_FILTER_MODIFIED;
11581163
}
11591164

1165+
static inline int apply_rule_UTF8(msgpack_packer * packer,
1166+
msgpack_object * map,
1167+
struct modify_rule *rule)
1168+
{
1169+
int ret = FLB_FILTER_NOTOUCH;
1170+
int i;
1171+
1172+
int match_keys =
1173+
map_count_keys_matching_str(map, rule->key, rule->key_len);
1174+
1175+
if (match_keys == 0) {
1176+
flb_debug
1177+
("[filter_modify] Rule %s to UTF8 %s : No keys matching %s found, not applying rule",
1178+
rule->val, rule->key, rule->key);
1179+
}
1180+
else {
1181+
msgpack_pack_map(packer, map->via.map.size);
1182+
for (i = 0; i < map->via.map.size; i++) {
1183+
msgpack_pack_object(packer, map->via.map.ptr[i].key);
1184+
if (map->via.map.ptr[i].val.type == MSGPACK_OBJECT_STR &&
1185+
kv_key_matches_str_rule_key(&map->via.map.ptr[i], rule)) {
1186+
size_t size = 512;
1187+
char buffer[512];
1188+
if (!tutf8e_buffer_encode_iso_8859_2(buffer, &size, map->via.map.ptr[i].val.via.str.ptr, map->via.map.ptr[i].val.via.str.size))
1189+
{
1190+
helper_pack_string(packer, buffer, size);
1191+
ret = FLB_FILTER_MODIFIED;
1192+
continue;
1193+
}
1194+
}
1195+
msgpack_pack_object(packer, map->via.map.ptr[i].val);
1196+
}
1197+
}
1198+
return ret;
1199+
}
1200+
11601201
static inline int apply_rule_REMOVE(msgpack_packer * packer,
11611202
msgpack_object * map,
11621203
struct modify_rule *rule)
@@ -1222,6 +1263,8 @@ static inline int apply_modifying_rule(msgpack_packer * packer,
12221263
return apply_rule_ADD(packer, map, rule);
12231264
case SET:
12241265
return apply_rule_SET(packer, map, rule);
1266+
case UTF8:
1267+
return apply_rule_UTF8(packer, map, rule);
12251268
case REMOVE:
12261269
return apply_rule_REMOVE(packer, map, rule);
12271270
case REMOVE_WILDCARD:

plugins/filter_modify/modify.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ enum FLB_FILTER_MODIFY_RULETYPE {
2626
HARD_RENAME,
2727
ADD,
2828
SET,
29+
UTF8,
2930
REMOVE,
3031
REMOVE_WILDCARD,
3132
REMOVE_REGEX,

src/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,7 @@ set(FLB_DEPS
229229
mpack-static
230230
chunkio-static
231231
miniz
232+
tutf8e
232233
${FLB_PLUGINS}
233234
${FLB_PROXY_PLUGINS}
234235
${extra_libs}

0 commit comments

Comments
 (0)