예제 #1
0
파일: vban.c 프로젝트: KristianLyng/vagent2
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;
}
예제 #2
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;
}
예제 #3
0
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);
}
예제 #4
0
파일: vdirect.c 프로젝트: denen99/vagent2
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;
}
예제 #5
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);
}