int ConsulRestClient::get( const std::string & url, std::string & ret ) { int code = 200; char * r = rest_get( url.c_str(), &code ); if( r == nullptr ) { return code; } ret = r; return 0; }
static void connection_apply_handler(int err, const struct http_msg *msg, struct mbuf *mb, struct json_object *jobj, void *arg) { struct connection_apply_data *data = arg; int count, i; struct zapi_connection conn; err = rest_err(err, msg); if (err) goto out; if (!jzon_is_array(jobj)) { err = EPROTO; goto out; } conn.to = NULL; count = json_object_array_length(jobj); for (i = 0; i < count; ++i) { struct json_object *jitem; jitem = json_object_array_get_idx(jobj, i); if (!jitem) continue; err = zapi_connection_decode(jitem, &conn); if (err) goto out; if (data->connh(0, &conn, data->arg)) { err = ENOENT; goto out; } } if (conn.to) { err = rest_get(NULL, data->cli, data->pri, connection_apply_handler, data, "/connections?start=%s", conn.to); if (err) goto out; } out: if (err) { if (err != ENOENT) data->connh(err, NULL, data->arg); mem_deref(data); } }
int zapi_connection_apply(struct rest_cli *cli, int pri, zapi_connection_h *connh, void *arg) { struct connection_apply_data *data; int err; data = mem_zalloc(sizeof(*data), NULL); if (!data) return ENOMEM; data->cli = cli; data->pri = pri; data->connh = connh; data->arg = arg; err = rest_get(NULL, cli, pri, connection_apply_handler, data, "/connections"); if (err) mem_deref(data); return err; }