ksgi
/
sample-fcgi.c
96 строк · 2.4 Кб
1/* $Id$ */
2/*
3* Copyright (c) 2015, 2018 Kristaps Dzonsons <kristaps@bsd.lv>
4*
5* Permission to use, copy, modify, and distribute this software for any
6* purpose with or without fee is hereby granted, provided that the above
7* copyright notice and this permission notice appear in all copies.
8*
9* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16*/
17#include <getopt.h>
18#include <stdarg.h>
19#include <stdio.h>
20#include <stdint.h>
21#include <string.h>
22
23#include "kcgi.h"
24
25int
26main(void)
27{
28struct kreq req;
29struct kfcgi *fcgi;
30enum kcgi_err er;
31
32if (KCGI_OK != khttp_fcgi_init(&fcgi, NULL, 0, NULL, 0, 0))
33return 0;
34
35for (;;) {
36er = khttp_fcgi_parse(fcgi, &req);
37if (KCGI_EXIT == er) {
38fprintf(stderr, "khttp_fcgi_parse: terminate\n");
39break;
40} else if (KCGI_OK != er) {
41fprintf(stderr, "khttp_fcgi_parse: error: %d\n", er);
42break;
43}
44
45er = khttp_head(&req, kresps[KRESP_STATUS],
46"%s", khttps[KHTTP_200]);
47if (KCGI_HUP == er) {
48fprintf(stderr, "khttp_head: interrupt\n");
49khttp_free(&req);
50continue;
51} else if (KCGI_OK != er) {
52fprintf(stderr, "khttp_head: error: %d\n", er);
53khttp_free(&req);
54break;
55}
56
57er = khttp_head(&req, kresps[KRESP_CONTENT_TYPE],
58"%s", kmimetypes[req.mime]);
59if (KCGI_HUP == er) {
60fprintf(stderr, "khttp_head: interrupt\n");
61khttp_free(&req);
62continue;
63} else if (KCGI_OK != er) {
64fprintf(stderr, "khttp_head: error: %d\n", er);
65khttp_free(&req);
66break;
67}
68
69er = khttp_body(&req);
70if (KCGI_HUP == er) {
71fprintf(stderr, "khttp_body: interrupt\n");
72khttp_free(&req);
73continue;
74} else if (KCGI_OK != er) {
75fprintf(stderr, "khttp_body: error: %d\n", er);
76khttp_free(&req);
77break;
78}
79
80er = khttp_puts(&req, "Hello, world!\n");
81if (KCGI_HUP == er) {
82fprintf(stderr, "khttp_puts: interrupt\n");
83khttp_free(&req);
84continue;
85} else if (KCGI_OK != er) {
86fprintf(stderr, "khttp_puts: error: %d\n", er);
87khttp_free(&req);
88break;
89}
90
91khttp_free(&req);
92}
93
94khttp_fcgi_free(fcgi);
95return 0;
96}
97