blob: 7d8ef28722a2f3a222b15e39af6feb1ec5668f90 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
/* Copyright (C) 2021-2021 Fuwn
* SPDX-License-Identifier: GPL-3.0-only */
#include <viv/gemini.h>
#include <stdlib.h>
#include <string.h>
#include <viv/log.h>
#include <viv/viv.h>
void GEMINI_parse_header(
const char *header,
GEMINI_context_header *context_header
) {
context_header->parsed.status_code = atoi(header);
context_header->meta = malloc(strlen(&header[0]));
strcpy(context_header->meta, &header[3]);
/* Get the first digit of status_code_as_an_int */
/* Not used anymore, but I left it in, in case I need it later. */
/* while (status_code_as_an_int >= 10) {
status_code_as_an_int /= 10;
} */
switch (context_header->parsed.status_code) {
case 10: {
context_header->parsed.status_code_enum = GEMINI_status_code_INPUT;
} break;
case 11: {
context_header->parsed.status_code_enum = GEMINI_status_code_SENSITIVE_INPUT;
} break;
case 20: {
context_header->parsed.status_code_enum = GEMINI_status_code_SUCCESS;
} break;
case 30: {
context_header->parsed.status_code_enum = GEMINI_status_code_TEMPORARY_REDIRECT;
} break;
case 31: {
context_header->parsed.status_code_enum = GEMINI_status_code_PERMANENT_REDIRECT;
} break;
case 40: {
context_header->parsed.status_code_enum = GEMINI_status_code_TEMPORARY_FAILURE;
} break;
case 41: {
context_header->parsed.status_code_enum = GEMINI_status_code_SERVER_UNAVAILABLE;
} break;
case 42: {
context_header->parsed.status_code_enum = GEMINI_status_code_CGI_ERROR;
} break;
case 43: {
context_header->parsed.status_code_enum = GEMINI_status_code_PROXY_ERROR;
} break;
case 44: {
context_header->parsed.status_code_enum = GEMINI_status_code_SLOW_DOWN;
} break;
case 50: {
context_header->parsed.status_code_enum = GEMINI_status_code_PERMANENT_FAILURE;
} break;
case 51: {
context_header->parsed.status_code_enum = GEMINI_status_code_NOT_FOUND;
} break;
case 52: {
context_header->parsed.status_code_enum = GEMINI_status_code_GONE;
} break;
case 53: {
context_header->parsed.status_code_enum = GEMINI_status_code_PROXY_REFUSED;
} break;
case 59: {
context_header->parsed.status_code_enum = GEMINI_status_code_BAD_REQUEST;
} break;
case 60: {
context_header->parsed.status_code_enum = GEMINI_status_code_CLIENT_CERTIFICATE_REQUIRED;
} break;
case 61: {
context_header->parsed.status_code_enum = GEMINI_status_code_CERTIFICATE_NOT_AUTHORISED;
} break;
case 62: {
context_header->parsed.status_code_enum = GEMINI_status_code_CERTIFICATE_NOT_VALID;
} break;
default: {
VIV_ERROR("invalid status code: %d\n", context_header->parsed.status_code)
VIV_exit(EXIT_FAILURE, NULL);
}
}
}
|