int comms_parse_response(char *xml, char *host, size_t host_len, char *key, size_t key_len, char *data, size_t data_len, char *lastlogsize, size_t lastlogsize_len, char *timestamp, size_t timestamp_len, char *source, size_t source_len, char *severity, size_t severity_len) { int i, ret = SUCCEED; char *data_b64 = NULL; assert(NULL != host && 0 != host_len); assert(NULL != key && 0 != key_len); assert(NULL != data && 0 != data_len); assert(NULL != lastlogsize && 0 != lastlogsize_len); assert(NULL != timestamp && 0 != timestamp_len); assert(NULL != source && 0 != source_len); assert(NULL != severity && 0 != severity_len); if (SUCCEED == xml_get_data_dyn(xml, "host", &data_b64)) { str_base64_decode(data_b64, host, host_len - 1, &i); host[i] = '\0'; xml_free_data_dyn(&data_b64); } else { *host = '\0'; ret = FAIL; } if (SUCCEED == xml_get_data_dyn(xml, "key", &data_b64)) { str_base64_decode(data_b64, key, key_len - 1, &i); key[i] = '\0'; xml_free_data_dyn(&data_b64); } else { *key = '\0'; ret = FAIL; } if (SUCCEED == xml_get_data_dyn(xml, "data", &data_b64)) { str_base64_decode(data_b64, data, data_len - 1, &i); data[i] = '\0'; xml_free_data_dyn(&data_b64); } else { *data = '\0'; ret = FAIL; } if (SUCCEED == xml_get_data_dyn(xml, "lastlogsize", &data_b64)) { str_base64_decode(data_b64, lastlogsize, lastlogsize_len - 1, &i); lastlogsize[i] = '\0'; xml_free_data_dyn(&data_b64); } else *lastlogsize = '\0'; if (SUCCEED == xml_get_data_dyn(xml, "timestamp", &data_b64)) { str_base64_decode(data_b64, timestamp, timestamp_len - 1, &i); timestamp[i] = '\0'; xml_free_data_dyn(&data_b64); } else *timestamp = '\0'; if (SUCCEED == xml_get_data_dyn(xml, "source", &data_b64)) { str_base64_decode(data_b64, source, source_len - 1, &i); source[i] = '\0'; xml_free_data_dyn(&data_b64); } else *source = '\0'; if (SUCCEED == xml_get_data_dyn(xml, "severity", &data_b64)) { str_base64_decode(data_b64, severity, severity_len - 1, &i); severity[i] = '\0'; xml_free_data_dyn(&data_b64); } else *severity = '\0'; return ret; }
int comms_parse_response(char *xml, char *host, int host_len, char *key, int key_len, char *data, int data_len, char *lastlogsize, int lastlogsize_len, char *timestamp, int timestamp_len, char *source, int source_len, char *severity, int severity_len) { int i, ret = SUCCEED; char *data_b64 = NULL; assert(key); assert(host); assert(data); assert(lastlogsize); assert(timestamp); assert(source); assert(severity); if (SUCCEED == xml_get_data_dyn(xml, "host", &data_b64)) { str_base64_decode(data_b64, host, host_len - 1, &i); host[i] = '\0'; xml_free_data_dyn(&data_b64); } if (SUCCEED == xml_get_data_dyn(xml, "key", &data_b64)) { str_base64_decode(data_b64, key, key_len - 1, &i); key[i] = '\0'; xml_free_data_dyn(&data_b64); } if (SUCCEED == xml_get_data_dyn(xml, "data", &data_b64)) { str_base64_decode(data_b64, data, data_len - 1, &i); data[i] = '\0'; xml_free_data_dyn(&data_b64); } if (SUCCEED == xml_get_data_dyn(xml, "lastlogsize", &data_b64)) { str_base64_decode(data_b64, lastlogsize, lastlogsize_len - 1, &i); lastlogsize[i] = '\0'; xml_free_data_dyn(&data_b64); } if (SUCCEED == xml_get_data_dyn(xml, "timestamp", &data_b64)) { str_base64_decode(data_b64, timestamp, timestamp_len - 1, &i); timestamp[i] = '\0'; xml_free_data_dyn(&data_b64); } if (SUCCEED == xml_get_data_dyn(xml, "source", &data_b64)) { str_base64_decode(data_b64, source, source_len - 1, &i); source[i] = '\0'; xml_free_data_dyn(&data_b64); } if (SUCCEED == xml_get_data_dyn(xml, "severity", &data_b64)) { str_base64_decode(data_b64, severity, severity_len - 1, &i); severity[i] = '\0'; xml_free_data_dyn(&data_b64); } return ret; }