コード例 #1
0
ファイル: victory.c プロジェクト: JaewookYim/victory
static int ht_process(struct channel *ch)
{
	char buf[4096];
	struct buffer bu = buffer_wrap(buf);
	struct env env;
	char method[12];
	char uri[512];
	char version[10];
	const char *host;

	if (ht_method(ch, &bu, sizeof(method), method, sizeof(uri), uri,
		sizeof(version), version))
		return -1;
	if (strcasecmp(version, "HTTP/1.1")) /* require HTTP/1.1 */
		return -1;
	if (ht_headers(ch, &bu, &env))
		return -1;

	host = env_get(&env, "Host");
	if (!host) {
		ht_response(ch, 400);
		ch_puts(ch, "Content-Type: text/plain\r\n");
		ch_puts(ch, "Connection: close\r\n");
		ch_puts(ch, "\r\n");
		ch_puts(ch, "require Host in HTTP/1.1 headers.\n");
		return 0;
	}

	printf("method=%s\n", method);
	printf("uri=%s\n", uri);
	printf("version=%s\n", version);
	printf("Host=%s\n", host);

	ht_response(ch, 200);
	/* send some basic headers */
	ch_puts(ch, "Content-Type: text/plain\r\n");
	ch_puts(ch, "Connection: close\r\n");
	ch_puts(ch, "\r\n");
	// TODO: output a real response
	ch_puts(ch, "Hello World!\n");
	ch_printf(ch, "\n\turi=%s\n\thost=%s\n", uri, host);
	return 0;
}
コード例 #2
0
ファイル: victory.c プロジェクト: OrangeTide/victory
static int ht_process(struct channel *ch)
{
	char buf[4096];
	struct buffer bu = buffer_wrap(buf);
	struct env env;
	char method[12];
	char uri[512];
	char version[10];
	const char *host;
	struct service *se;
	struct module *mo;
	struct domain *dom;
	const char *sub;

	if (ht_method(ch, &bu, sizeof(method), method, sizeof(uri), uri,
		sizeof(version), version))
		return -1;
	if (strcasecmp(version, "HTTP/1.1")) /* require HTTP/1.1 */
		return -1;
	if (ht_headers(ch, &bu, &env))
		return -1;

	host = env_get(&env, "Host");
	if (!host) {
		ht_response(ch, 400);
		ch_puts(ch, "Content-Type: text/plain\r\n");
		ch_puts(ch, "Connection: close\r\n");
		ch_puts(ch, "\r\n");
		ch_puts(ch, "require Host in HTTP/1.1 headers.\n");
		return 0;
	}

	dom = ha_find_dom(host);
	if (!dom) {
		ht_response(ch, 403);
		ch_puts(ch, "Content-Type: text/plain\r\n");
		ch_puts(ch, "Connection: close\r\n");
		ch_puts(ch, "\r\n");
		ch_printf(ch, "Host \"%s\" is unavailable.\n\n", host);
		return 0;
	}

	Debug("method=\"%s\"\n", method);
	Debug("uri=\"%s\"\n", uri);
	Debug("version=\"%s\"\n", version);
	Debug("Host=\"%s\" (%s)\n", host, dom->name);

	se = se_find(dom, uri, &sub);
	if (!se) {
		ht_response(ch, 404);
		ch_puts(ch, "Content-Type: text/plain\r\n");
		ch_puts(ch, "Connection: close\r\n");
		ch_puts(ch, "\r\n");
		ch_printf(ch, "Request-URI \"%s\" is unavailable.\n\n", uri);
		ch_printf(ch, "dom=\"%s\"\n", dom->name);
		ch_printf(ch, "host=\"%s\"\n", host);
		return 0;
	}

	mo = se->module;

	ht_response(ch, 200);
	/* send some basic headers */
	ch_puts(ch, "Content-Type: text/plain\r\n");
	ch_puts(ch, "Connection: close\r\n");
	ch_puts(ch, "\r\n");
	// TODO: output a real response
	ch_puts(ch, "Hello World!\n");
	ch_printf(ch, "\n\turi=%s\n\thost=%s\n\tmodule=%s\n\tsubpath=%s\n",
		uri, dom->name, mo ? mo->name : "(none)", sub);
	return 0;
}