예제 #1
0
static int
child(void)
{
	struct kreq	 r;
	const char 	*page = "index";
	struct kvalid	 valid = { NULL, "tag" };

	if (KCGI_OK != khttp_parse(&r, &valid, 1, &page, 1, 0))
		return(0);

	if (NULL == r.fieldmap[0]) {
		khttp_free(&r);
		return(0);
	} else if (BUFSZ != r.fieldmap[0]->valsz) {
		khttp_free(&r);
		return(0);
	}

	khttp_head(&r, kresps[KRESP_STATUS], 
		"%s", khttps[KHTTP_200]);
	khttp_head(&r, kresps[KRESP_CONTENT_TYPE], 
		"%s", kmimetypes[KMIME_TEXT_HTML]);
	khttp_body(&r);
	khttp_write(&r, r.fieldmap[0]->val, r.fieldmap[0]->valsz);
	khttp_free(&r);
	return(1);
}
예제 #2
0
static int
child(void)
{
	struct kreq	 r;
	const char 	*page = "index";
	struct kvalid	 valid = { NULL, "tag" };
	size_t		 i;
	struct kfcgi	*fcgi;
	enum kcgi_err	 er;

	if (KCGI_OK != khttp_fcgi_init(&fcgi, &valid, 1, &page, 1, 0))
		return(0);

	while (KCGI_OK == (er = khttp_fcgi_parse(fcgi, &r))) {
		if (NULL == r.fieldmap[0]) {
			khttp_free(&r);
			khttp_fcgi_free(fcgi);
			return(0);
		} else if (1024 * 1024 != r.fieldmap[0]->valsz) {
			khttp_free(&r);
			khttp_fcgi_free(fcgi);
			return(0);
		}

		for (i = 0; i < 1024 * 1024; i++)
			if (r.fieldmap[0]->val[i] != (i % 10) + 65) {
				khttp_free(&r);
				khttp_fcgi_free(fcgi);
				return(0);
			}

		khttp_head(&r, kresps[KRESP_STATUS], 
			"%s", khttps[KHTTP_200]);
		khttp_head(&r, kresps[KRESP_CONTENT_TYPE], 
			"%s", kmimetypes[KMIME_TEXT_HTML]);
		khttp_body(&r);
		khttp_write(&r, r.fieldmap[0]->val, r.fieldmap[0]->valsz);
		khttp_free(&r);
	}

	khttp_free(&r);
	khttp_fcgi_free(fcgi);
	return(KCGI_HUP == er ? 1 : 0);
}