void process_input(mdata_get_t *mdg, const char *buf) { switch (mdg->mdg_state) { case MDGS_MESSAGE_HEADER: if (strcmp(buf, "NOTFOUND") == 0) { mdg->mdg_response = MDGR_NOTFOUND; mdg->mdg_state = MDGS_DONE; } else if (strcmp(buf, "SUCCESS") == 0) { mdg->mdg_response = MDGR_SUCCESS; mdg->mdg_state = MDGS_MESSAGE_DATA; } else { dynstr_append(mdg->mdg_data, buf); mdg->mdg_response = MDGR_UNKNOWN; mdg->mdg_state = MDGS_DONE; } break; case MDGS_MESSAGE_DATA: if (strcmp(buf, ".") == 0) { mdg->mdg_state = MDGS_DONE; } else { int offs = buf[0] == '.' ? 1 : 0; if (dynstr_len(mdg->mdg_data) > 0) dynstr_append(mdg->mdg_data, "\n"); dynstr_append(mdg->mdg_data, buf + offs); } break; case MDGS_DONE: break; default: abort(); } }
static int print_response(mdata_response_t mdr, string_t *data) { const char *cstr = dynstr_cstr(data); size_t len = dynstr_len(data); switch (mdr) { case MDR_SUCCESS: fprintf(stdout, "%s", cstr); if (len >= 1 && cstr[len - 1] != '\n') fprintf(stdout, "\n"); return (MDEC_SUCCESS); case MDR_NOTFOUND: fprintf(stderr, "No metadata\n"); return (MDEC_NOTFOUND); case MDR_UNKNOWN: fprintf(stderr, "Error getting metadata: %s\n", cstr); return (MDEC_ERROR); case MDR_INVALID_COMMAND: fprintf(stderr, "ERROR: host does not support KEYS\n"); return (MDEC_ERROR); default: ABORT("print_response: UNKNOWN RESPONSE\n"); return (MDEC_ERROR); } }
int plat_send(mdata_plat_t *mpl, string_t *data) { int len = dynstr_len(data); if (write(mpl->mpl_conn, dynstr_cstr(data), len) != len) return (-1); return (0); }