ksgi

Форк
0
/
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

25
int
26
main(void)
27
{
28
	struct kreq	 req;
29
	struct kfcgi	*fcgi;
30
	enum kcgi_err	 er;
31

32
	if (KCGI_OK != khttp_fcgi_init(&fcgi, NULL, 0, NULL, 0, 0))
33
		return 0;
34

35
	for (;;) {
36
		er = khttp_fcgi_parse(fcgi, &req);
37
		if (KCGI_EXIT == er) {
38
			fprintf(stderr, "khttp_fcgi_parse: terminate\n");
39
			break;
40
		} else if (KCGI_OK != er) {
41
			fprintf(stderr, "khttp_fcgi_parse: error: %d\n", er);
42
			break;
43
		}
44

45
		er = khttp_head(&req, kresps[KRESP_STATUS], 
46
			"%s", khttps[KHTTP_200]);
47
		if (KCGI_HUP == er) {
48
			fprintf(stderr, "khttp_head: interrupt\n");
49
			khttp_free(&req);
50
			continue;
51
		} else if (KCGI_OK != er) {
52
			fprintf(stderr, "khttp_head: error: %d\n", er);
53
			khttp_free(&req);
54
			break;
55
		}
56

57
		er = khttp_head(&req, kresps[KRESP_CONTENT_TYPE], 
58
			"%s", kmimetypes[req.mime]);
59
		if (KCGI_HUP == er) {
60
			fprintf(stderr, "khttp_head: interrupt\n");
61
			khttp_free(&req);
62
			continue;
63
		} else if (KCGI_OK != er) {
64
			fprintf(stderr, "khttp_head: error: %d\n", er);
65
			khttp_free(&req);
66
			break;
67
		}
68

69
		er = khttp_body(&req);
70
		if (KCGI_HUP == er) {
71
			fprintf(stderr, "khttp_body: interrupt\n");
72
			khttp_free(&req);
73
			continue;
74
		} else if (KCGI_OK != er) {
75
			fprintf(stderr, "khttp_body: error: %d\n", er);
76
			khttp_free(&req);
77
			break;
78
		}
79

80
		er = khttp_puts(&req, "Hello, world!\n");
81
		if (KCGI_HUP == er) {
82
			fprintf(stderr, "khttp_puts: interrupt\n");
83
			khttp_free(&req);
84
			continue;
85
		} else if (KCGI_OK != er) {
86
			fprintf(stderr, "khttp_puts: error: %d\n", er);
87
			khttp_free(&req);
88
			break;
89
		}
90

91
		khttp_free(&req);
92
	}
93

94
	khttp_fcgi_free(fcgi);
95
	return 0;
96
}
97

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.