Subversion Repositories Tewi

Rev

Rev 156 | Rev 212 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
4 nishi 1
/* $Id: tw_config.h 187 2024-09-28 00:07:34Z nishi $ */
2
 
3
#ifndef __TW_CONFIG_H__
4
#define __TW_CONFIG_H__
5
 
140 nishi 6
#ifdef __cplusplus
7
extern "C" {
8
#endif
9
 
156 nishi 10
#include "../config.h"
11
 
21 nishi 12
#include "tw_http.h"
13
 
7 nishi 14
#include <stdint.h>
21 nishi 15
#include <stdbool.h>
7 nishi 16
 
21 nishi 17
#ifdef __MINGW32__
18
#include <winsock2.h>
19
#define NO_IPV6
20
#else
187 nishi 21
#ifdef __PPU__
22
#include <net/net.h>
23
#endif
21 nishi 24
#include <netinet/in.h>
81 nishi 25
#ifdef __HAIKU__
26
#define NO_IPV6
21 nishi 27
#endif
81 nishi 28
#endif
6 nishi 29
 
21 nishi 30
#ifdef NO_IPV6
31
#define SOCKADDR struct sockaddr_in
32
#else
33
#define SOCKADDR struct sockaddr_in6
34
#endif
35
 
22 nishi 36
#define MAX_PORTS 1024
37
#define MAX_VHOSTS 1024
38
#define MAX_MODULES 1024
39
#define MAX_DIRS 1024
40
#define MAX_MIME 1024
41
#define MAX_ICON 1024
24 nishi 42
#define MAX_INDEX 1024
33 nishi 43
#define MAX_README 8
21 nishi 44
 
45
enum TW_DIR_TYPE {
46
	TW_DIR_ALLOW = 0,
47
	TW_DIR_DENY
48
};
49
 
50
struct tw_dir_entry {
51
	char* name;
52
	char* dir;
53
	int type;
54
};
55
 
56
struct tw_mime_entry {
57
	char* ext;
58
	char* mime;
59
};
60
 
22 nishi 61
struct tw_icon_entry {
62
	char* mime;
63
	char* icon;
64
};
65
 
12 nishi 66
struct tw_config_entry {
67
	char* name;
68
	int port;
156 nishi 69
#ifndef NO_SSL
12 nishi 70
	char* sslkey;
71
	char* sslcert;
156 nishi 72
#endif
19 nishi 73
	char* root;
123 nishi 74
	int hideport;
21 nishi 75
	struct tw_dir_entry dirs[MAX_DIRS];
76
	int dir_count;
77
	struct tw_mime_entry mimes[MAX_DIRS];
78
	int mime_count;
22 nishi 79
	struct tw_icon_entry icons[MAX_DIRS];
80
	int icon_count;
24 nishi 81
	char* indexes[MAX_INDEX];
82
	int index_count;
33 nishi 83
	char* readmes[MAX_README];
84
	int readme_count;
156 nishi 85
#ifdef HAS_CHROOT
86
	char* chroot_path;
87
#endif
12 nishi 88
};
89
 
6 nishi 90
struct tw_config {
7 nishi 91
	uint64_t ports[MAX_PORTS + 1]; /* If port & (1 << 32) is non-zero, it is SSL */
12 nishi 92
	char hostname[1025];
156 nishi 93
	char* defined[1025];
6 nishi 94
	struct tw_config_entry root;
12 nishi 95
	struct tw_config_entry vhosts[MAX_VHOSTS];
18 nishi 96
	void* modules[MAX_MODULES];
97
	int module_count;
12 nishi 98
	int vhost_count;
128 nishi 99
	char* server_admin;
17 nishi 100
	char* server_root;
18 nishi 101
	char* extension;
6 nishi 102
};
103
 
104
void tw_config_init(void);
4 nishi 105
int tw_config_read(const char* path);
12 nishi 106
struct tw_config_entry* tw_vhost_match(const char* name, int port);
21 nishi 107
bool tw_permission_allowed(const char* path, SOCKADDR addr, struct tw_http_request req, struct tw_config_entry* vhost);
4 nishi 108
 
140 nishi 109
#ifdef __cplusplus
110
}
4 nishi 111
#endif
140 nishi 112
 
113
#endif