#include #include "parser.h" #include "debug.h" #include "string.h" int onewire_parser(char *rrd_data, const char **parser_data) { OWNET_HANDLE h; const char *server_addr; char buf[24], *tmp; int i = 1, ret; int max_str = RRD_DATA_MAX_LEN; if (!parser_data) { pr_err("No parser data available\n"); return -1; } server_addr = parser_data[0]; if (!server_addr) { pr_err("Server address not specified\n"); return -1; } h = OWNET_init(server_addr); if (h < 0) { pr_err("Failed to connect to server %s\n", server_addr); return -1; } while (parser_data[i]) { if (!strcmp("U", parser_data[i])) { undefined: ret = snprintf(rrd_data, max_str, "U"); max_str -= ret; rrd_data += ret; goto next; } pr_info("Reading data for entry %s\n", parser_data[i]); ret = OWNET_read(h, parser_data[i], &tmp); if (ret < 0) { pr_err("Failed to read entry %s\n", parser_data[i]); goto undefined; } /* The data from OWNET_read appears to not be NULL terminated */ memcpy(buf, tmp, MIN(ret, sizeof(buf) -1)); free(tmp); buf[ret] = 0; ret = snprintf(rrd_data, max_str, "%s", buf); max_str -= ret; rrd_data += ret; next: i++; if (!parser_data[i]) break; ret = snprintf(rrd_data, max_str, ":"); max_str -= ret; rrd_data += ret; } rrd_data = 0; OWNET_finish(); return 0; }