summaryrefslogtreecommitdiff
path: root/httpd.h
diff options
context:
space:
mode:
authorReyk Floeter <reyk@esdenera.com>2014-07-13 16:12:59 +0200
committerReyk Floeter <reyk@esdenera.com>2014-07-13 16:12:59 +0200
commitb0a1cfbe755d14e21af5e866fc7321cf6a3c8d0b (patch)
tree948585fe33752889c039c67cc1eccd73ec5fa5c8 /httpd.h
parent660b4faa8d41d0817c59d00f8d606daab3586535 (diff)
downloadhttpd-b0a1cfbe755d14e21af5e866fc7321cf6a3c8d0b.tar.gz
httpd-b0a1cfbe755d14e21af5e866fc7321cf6a3c8d0b.zip
Implement media type support
Diffstat (limited to 'httpd.h')
-rw-r--r--httpd.h29
1 files changed, 27 insertions, 2 deletions
diff --git a/httpd.h b/httpd.h
index d4fd4ca..f4ba745 100644
--- a/httpd.h
+++ b/httpd.h
@@ -42,8 +42,12 @@
#define SERVER_BACKLOG 10
#define SERVER_OUTOF_FD_RETRIES 5
+#define MEDIATYPE_NAMEMAX 128 /* file name extension */
+#define MEDIATYPE_TYPEMAX 64 /* length of type/subtype */
+
#define CONFIG_RELOAD 0x00
-#define CONFIG_SERVERS 0x01
+#define CONFIG_MEDIA 0x01
+#define CONFIG_SERVERS 0x02
#define CONFIG_ALL 0xff
#define TCPFLAG_NODELAY 0x01
@@ -182,6 +186,7 @@ enum imsg_type {
IMSG_CTL_END,
IMSG_CTL_START,
IMSG_CFG_SERVER,
+ IMSG_CFG_MEDIA,
IMSG_CFG_DONE
};
@@ -304,6 +309,15 @@ struct server {
};
TAILQ_HEAD(serverlist, server);
+struct media_type {
+ char media_name[MEDIATYPE_NAMEMAX];
+ char media_type[MEDIATYPE_TYPEMAX];
+ char media_subtype[MEDIATYPE_TYPEMAX];
+ char *media_encoding;
+ RB_ENTRY(media_type) media_entry;
+};
+RB_HEAD(mediatypes, media_type);
+
struct httpd {
u_int8_t sc_opts;
u_int32_t sc_flags;
@@ -313,6 +327,7 @@ struct httpd {
u_int16_t sc_id;
struct serverlist *sc_servers;
+ struct mediatypes *sc_mediatypes;
struct privsep *sc_ps;
int sc_reload;
@@ -383,7 +398,7 @@ void server_reset_http(struct client *);
void server_close_http(struct client *);
/* server_file.c */
-int server_response(struct client *);
+int server_response(struct httpd *, struct client *);
/* httpd.c */
void event_again(struct event *, int, short,
@@ -409,7 +424,15 @@ struct kv *kv_inherit(struct kv *, struct kv *);
int kv_log(struct evbuffer *, struct kv *);
struct kv *kv_find(struct kvtree *, struct kv *);
int kv_cmp(struct kv *, struct kv *);
+struct media_type
+ *media_add(struct mediatypes *, struct media_type *);
+void media_delete(struct mediatypes *, struct media_type *);
+void media_purge(struct mediatypes *);
+struct media_type *
+ media_find(struct mediatypes *, char *);
+int media_cmp(struct media_type *, struct media_type *);
RB_PROTOTYPE(kvtree, kv, kv_node, kv_cmp);
+RB_PROTOTYPE(mediatypes, media_type, media_entry, media_cmp);
/* log.c */
void log_init(int);
@@ -459,5 +482,7 @@ int config_getreset(struct httpd *, struct imsg *);
int config_getcfg(struct httpd *, struct imsg *);
int config_setserver(struct httpd *, struct server *);
int config_getserver(struct httpd *, struct imsg *);
+int config_setmedia(struct httpd *, struct media_type *);
+int config_getmedia(struct httpd *, struct imsg *);
#endif /* _HTTPD_H */