static unsigned int vban_reply(struct http_request *request, void *data) { struct agent_core_t *core = data; struct vban_priv_t *vban; char *body; GET_PRIV(core, vban); if (request->method == M_GET) { run_and_respond(vban->vadmin, request->connection, "ban.list"); return 0; } else { char *mark; assert(((char *)request->data)[request->ndata] == '\0'); body = strdup(request->data); mark = strchr(body,'\n'); if (mark) *mark = '\0'; if (strlen(request->url) == strlen("/ban")) run_and_respond(vban->vadmin, request->connection, "ban %s",body); else { const char *path = request->url + strlen("/ban"); if (request->ndata != 0) { http_reply(request->connection, 500, "Banning with both a url and request body? Pick one or the other please."); } else { assert(request->ndata == 0); run_and_respond(vban->vadmin, request->connection, "ban " BAN_SHORTHAND "%s",path); } } free(body); return 0; } return 0; }
/* * FIXME: Should be simplified/split up. */ static unsigned int vparams_reply(struct http_request *request, void *data) { const char *arg; struct agent_core_t *core = data; struct vparams_priv_t *vparams; char *body; GET_PRIV(core, vparams); if (!strcmp(request->url, "/paramjson/") && request->method == M_GET) { param_json(request, vparams); return 1; } if (request->method == M_GET) { if (!strcmp(request->url,"/param/")) { run_and_respond(vparams->vadmin, request->connection, "param.show"); return 1; } else { arg = request->url + strlen("/param/"); assert(arg && *arg); run_and_respond(vparams->vadmin, request->connection, "param.show %s", arg); return 1; } } else if (request->method == M_PUT) { char *mark; assert(((char *)request->data)[request->ndata] == '\0'); body = strdup(request->data); mark = strchr(body,'\n'); if (mark) *mark = '\0'; if (!strcmp(request->url, "/param/")) { run_and_respond(vparams->vadmin, request->connection, "param.set %s",body); } else { arg = request->url + strlen("/param/"); assert(arg && *arg); run_and_respond(vparams->vadmin, request->connection, "param.set %s %s",arg, body); } free(body); return 1; } http_reply(request->connection, 500, "Failed"); return 1; }
static unsigned int vbackends_reply(struct http_request *request, void *data) { const char *arg; struct agent_core_t *core = data; struct agent_plugin_t *plug; struct vbackends_priv_t *vbackends; char *body; plug = plugin_find(core,"vbackends"); vbackends = plug->data; if (!strcmp(request->url, "/backendjson/") && request->method == M_GET) { backends_json(request, vbackends); return (1); } if (request->method == M_PUT) { char *mark; assert(((char *)request->data)[request->ndata] == '\0'); body = strdup(request->data); mark = strchr(body,'\n'); if (mark) *mark = '\0'; arg = request->url + strlen("/backend/"); assert(arg && *arg); run_and_respond(vbackends->vadmin, request->connection, "backend.set_health %s %s", arg, body); free(body); return (1); } http_reply(request->connection, 500, "Failed"); return (1); }
static unsigned int vdirect_reply(struct http_request *request, void *data) { struct vdirect_priv_t *vdirect; GET_PRIV(data, vdirect); char *tmp; char *cmd = malloc(request->ndata); memcpy(cmd, request->data, request->ndata); cmd[request->ndata] = '\0'; tmp = index(cmd, '\n'); if (tmp) *tmp = '\0'; run_and_respond(vdirect->vadmin,request->connection,cmd); free(cmd); return 0; }
static unsigned int vdirect_reply(struct http_request *request, void *data) { struct agent_core_t *core = data; struct vdirect_priv_t *vdirect; char *cmd, *p; GET_PRIV(core, vdirect); DUP_OBJ(cmd, request->data, request->ndata); p = strchr(cmd, '\n'); if (p) *p = '\0'; run_and_respond(vdirect->vadmin, request->connection, cmd); free(cmd); return (0); }