Subversion Repositories Tewi

Rev

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