#include #include #include #include #include #include #include #include #include #include int main(void) { struct kreq r; struct khtmlreq req; const char *page = "hw.cgi"; if (khttp_parse(&r, NULL, 0, &page, 1, 0) != KCGI_OK) return 1; 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); khtml_open(&req, &r, 0); kcgi_writer_disable(&r); khtml_elem(&req, KELEM_DOCTYPE); char *query = getenv("QUERY_STRING"); khtml_elem(&req, KELEM_HTML); khtml_elem(&req, KELEM_HEAD); khtml_elem(&req, KELEM_TITLE); khtml_puts(&req, "Hello, world"); khtml_closeelem(&req, 1); khtml_closeelem(&req, 1); khtml_elem(&req, KELEM_BODY); khtml_elem(&req, KELEM_P); if (strcmp(query, "") != 0) { khtml_puts(&req, query); khtml_elem(&req, KELEM_BR); } khtml_puts(&req, getenv("REMOTE_ADDR")); khtml_elem(&req, KELEM_BR); khtml_puts(&req, getenv("REQUEST_METHOD")); khtml_elem(&req, KELEM_BR); khtml_puts(&req, getenv("HTTP_USER_AGENT")); khtml_elem(&req, KELEM_BR); int i; for (i = 0; i < 10; ++i) { khtml_printf(&req, "%d", i); khtml_elem(&req, KELEM_BR); } char *lenstr = getenv("CONTENT_LENGTH"); if (lenstr != NULL) { int len = atoi(lenstr); char *instr = calloc(len, sizeof(char)); fgets(instr, len, stdin); khtml_putc(&req, '\n'); khtml_puts(&req, getenv("CONTENT_TYPE")); khtml_puts(&req, instr); khtml_puts(&req, "¡That's all folks!"); } else { khtml_puts(&req, "No input."); } /* khtml_attr(&req, KELEM_FORM, KATTR_METHOD, "post"); khtml_attr(&req, KELEM_INPUT, KATTR_TYPE, "file", KATTR__MAX); khtml_closeelem(&req, 1);*/ khtml_close(&req); khttp_free(&r); return(EXIT_SUCCESS); }