diff --git a/plugins/persist-sqlite/Makefile b/plugins/persist-sqlite/Makefile index 41ad7958..8823c5ed 100644 --- a/plugins/persist-sqlite/Makefile +++ b/plugins/persist-sqlite/Makefile @@ -27,7 +27,7 @@ all : ${ALL_DEPS} binary : ${PLUGIN_NAME}.so ${PLUGIN_NAME}.so : ${OBJS} - ${CROSS_COMPILE}${CC} $(PLUGIN_LDFLAGS) -fPIC -shared $^ -o $@ -lsqlite3 + ${CROSS_COMPILE}${CC} $(PLUGIN_LDFLAGS) -fPIC -shared $^ -o $@ -lsqlite3 -lcjson clients.o : clients.c persist_sqlite.h ${CROSS_COMPILE}${CC} $(LOCAL_CPPFLAGS) $(PLUGIN_CPPFLAGS) $(PLUGIN_CFLAGS) -c $< -o $@ diff --git a/plugins/persist-sqlite/base_msgs.c b/plugins/persist-sqlite/base_msgs.c index 5de333dc..bf4abdce 100644 --- a/plugins/persist-sqlite/base_msgs.c +++ b/plugins/persist-sqlite/base_msgs.c @@ -33,6 +33,8 @@ static char *properties_to_json(const mosquitto_property *properties) uint8_t i8; uint16_t i16; uint32_t i32; + void *binval; + uint16_t len; int propid; if(!properties) return NULL; @@ -130,6 +132,24 @@ static char *properties_to_json(const mosquitto_property *properties) case MQTT_PROP_CORRELATION_DATA: case MQTT_PROP_AUTHENTICATION_DATA: /* bin */ + mosquitto_property_read_binary(properties, propid, &binval, &len, false); + char *hexval = malloc(2*(size_t)len + 1); + if(!hexval){ + free(binval); + cJSON_Delete(array); + return NULL; + } + for(int i=0; ivalueint); break; case MQTT_PROP_TYPE_BINARY: + if(!cJSON_IsString(j_value)) continue; + slen = strlen(j_value->valuestring); + if(slen/2 > UINT16_MAX) continue; + for(size_t i=0; ivaluestring)[i/2] = (uint8_t)(hex2nibble(j_value->valuestring[i])<<4) + hex2nibble(j_value->valuestring[i+1]); + } + mosquitto_property_add_binary(&properties, propid, (uint8_t *)j_value->valuestring, (uint16_t)(slen/2)); break; case MQTT_PROP_TYPE_STRING: if(!cJSON_IsString(j_value)) continue;