... | ... |
@@ -52,6 +52,7 @@ int wk_service(wk *web); /* To be called after sselelect_wait() but before ssele |
52 | 52 |
|
53 | 53 |
int wk_serve_cookieadd(wk *web, int connid, char *cookiename, char *value, char *domain, int maxage, char *attributes); |
54 | 54 |
int wk_serve_etagset(wk *web, int connid, char *etag); |
55 |
+int wk_serve_generic_headers(wk *web, int connid, int datalen, const char *mime, int *etagnotmodified); |
|
55 | 56 |
int wk_serve_buffer_as_file(wk *web, int connid, void *data, int datalen, const char *mime); |
56 | 57 |
int wk_serve_file(wk *web, int connid, char *filename, const char *mime); |
57 | 58 |
int wk_serve_error(wk *web, int connid, wk_error wkerror); |
... | ... |
@@ -73,7 +73,7 @@ int wk_post_addvalid(wk *web, int connid, char *varname, char *tofile); |
73 | 73 |
char *wk_post_get(wk *web, int connid, char *varname, int *isfile); |
74 | 74 |
|
75 | 75 |
const char *mime_getdefault(const char *filename, const char *defaultmime); |
76 |
- |
|
76 |
+int uri_urldecode(char *component); /* simple decoder for url-encoded strings. In-place substitution, outputs UTF-8 data */ |
|
77 | 77 |
|
78 | 78 |
int wk_sbufacquire(wk *web); |
79 | 79 |
sbuf *wk_sbufget(wk *web, int sbufid); |
... | ... |
@@ -52,6 +52,7 @@ wk_uri *wk_geturi(wk *web, int connid); /* for use in callback_event() when wke_ |
52 | 52 |
int wk_service(wk *web); /* To be called after sselelect_wait() but before sselect_getXXX() */ |
53 | 53 |
|
54 | 54 |
int wk_serve_cookieadd(wk *web, int connid, char *cookiename, char *value, char *domain, int maxage, char *attributes); |
55 |
+int wk_serve_etagset(wk *web, int connid, char *etag); |
|
55 | 56 |
int wk_serve_buffer_as_file(wk *web, int connid, void *data, int datalen, const char *mime); |
56 | 57 |
int wk_serve_file(wk *web, int connid, char *filename, const char *mime); |
57 | 58 |
int wk_serve_error(wk *web, int connid, wk_error wkerror); |
... | ... |
@@ -44,7 +44,7 @@ typedef enum wk_action { |
44 | 44 |
wkact_continuation, |
45 | 45 |
} wk_action; |
46 | 46 |
|
47 |
-wk *wk_init(int port, sselect *ssel, void (*callback_event)(/*wk *web,int connid, wk_event event, void *userptr*/), wk_action (*callback_http)(/*wk *web,int connid, wk_uri *uri, void *userptr*/),wk_action (*callback_post)(/*wk *web,int connid, wk_uri *uri, void *userptr*/), wk_action (*callback_continuation)(/*wk *web,int connid, wk_uri *uri, void *userptr*/), void *userptr); |
|
47 |
+wk *wk_init(int serverfd, sselect *ssel, void (*callback_event)(/*wk *web,int connid, wk_event event, void *userptr*/), wk_action (*callback_http)(/*wk *web,int connid, wk_uri *uri, void *userptr*/),wk_action (*callback_post)(/*wk *web,int connid, wk_uri *uri, void *userptr*/), wk_action (*callback_continuation)(/*wk *web,int connid, wk_uri *uri, void *userptr*/), void *userptr); |
|
48 | 48 |
void wk_free(wk *web); |
49 | 49 |
|
50 | 50 |
wk_uri *wk_geturi(wk *web, int connid); /* for use in callback_event() when wke_closed */ |
... | ... |
@@ -51,6 +51,7 @@ wk_uri *wk_geturi(wk *web, int connid); /* for use in callback_event() when wke_ |
51 | 51 |
|
52 | 52 |
int wk_service(wk *web); /* To be called after sselelect_wait() but before sselect_getXXX() */ |
53 | 53 |
|
54 |
+int wk_serve_cookieadd(wk *web, int connid, char *cookiename, char *value, char *domain, int maxage, char *attributes); |
|
54 | 55 |
int wk_serve_buffer_as_file(wk *web, int connid, void *data, int datalen, const char *mime); |
55 | 56 |
int wk_serve_file(wk *web, int connid, char *filename, const char *mime); |
56 | 57 |
int wk_serve_error(wk *web, int connid, wk_error wkerror); |
... | ... |
@@ -64,6 +65,8 @@ char *wk_uri_getheaderbynum(wk_uri *wkuri, int num); |
64 | 65 |
|
65 | 66 |
char *wk_uri_getvar(wk_uri *wkuri, char *varname, int *len); |
66 | 67 |
char *wk_uri_copyvar(wk_uri *uri, char *varname, char *dest, int destlen); |
68 |
+char *wk_uri_getcookie(wk_uri *uri, char *cookiename, int *len); |
|
69 |
+char *wk_uri_copycookie(wk_uri *uri, char *cookiename, char *dest, int destlen); |
|
67 | 70 |
|
68 | 71 |
int wk_post_addvalid(wk *web, int connid, char *varname, char *tofile); |
69 | 72 |
char *wk_post_get(wk *web, int connid, char *varname, int *isfile); |
... | ... |
@@ -54,6 +54,7 @@ int wk_service(wk *web); /* To be called after sselelect_wait() but before ssele |
54 | 54 |
int wk_serve_buffer_as_file(wk *web, int connid, void *data, int datalen, const char *mime); |
55 | 55 |
int wk_serve_file(wk *web, int connid, char *filename, const char *mime); |
56 | 56 |
int wk_serve_error(wk *web, int connid, wk_error wkerror); |
57 |
+int wk_serve_redirect(wk *web, int connid, char *newlocation); |
|
57 | 58 |
int wk_writestr(wk *web, int connid, const char *str); |
58 | 59 |
int wk_write(wk *web, int connid, const void *data, int datalen); |
59 | 60 |
int wk_close(wk *web, int connid); |
... | ... |
@@ -62,6 +62,7 @@ char *wk_uri_getheader(wk_uri *wkuri, char *header, char *defaultvalue); |
62 | 62 |
char *wk_uri_getheaderbynum(wk_uri *wkuri, int num); |
63 | 63 |
|
64 | 64 |
char *wk_uri_getvar(wk_uri *wkuri, char *varname, int *len); |
65 |
+char *wk_uri_copyvar(wk_uri *uri, char *varname, char *dest, int destlen); |
|
65 | 66 |
|
66 | 67 |
int wk_post_addvalid(wk *web, int connid, char *varname, char *tofile); |
67 | 68 |
char *wk_post_get(wk *web, int connid, char *varname, int *isfile); |
... | ... |
@@ -40,10 +40,11 @@ typedef enum wk_error { |
40 | 40 |
|
41 | 41 |
typedef enum wk_action { |
42 | 42 |
wkact_finished=0, |
43 |
+ wkact_post, |
|
43 | 44 |
wkact_continuation, |
44 | 45 |
} wk_action; |
45 | 46 |
|
46 |
-wk *wk_init(int port, sselect *ssel, void (*callback_event)(/*wk *web,int connid, wk_event event, void *userptr*/), wk_action (*callback_http)(/*wk *web,int connid, wk_uri *uri, void *userptr*/), wk_action (*callback_continuation)(/*wk *web,int connid, wk_uri *uri, void *userptr*/), void *userptr); |
|
47 |
+wk *wk_init(int port, sselect *ssel, void (*callback_event)(/*wk *web,int connid, wk_event event, void *userptr*/), wk_action (*callback_http)(/*wk *web,int connid, wk_uri *uri, void *userptr*/),wk_action (*callback_post)(/*wk *web,int connid, wk_uri *uri, void *userptr*/), wk_action (*callback_continuation)(/*wk *web,int connid, wk_uri *uri, void *userptr*/), void *userptr); |
|
47 | 48 |
void wk_free(wk *web); |
48 | 49 |
|
49 | 50 |
wk_uri *wk_geturi(wk *web, int connid); /* for use in callback_event() when wke_closed */ |
... | ... |
@@ -60,6 +61,11 @@ int wk_close(wk *web, int connid); |
60 | 61 |
char *wk_uri_getheader(wk_uri *wkuri, char *header, char *defaultvalue); |
61 | 62 |
char *wk_uri_getheaderbynum(wk_uri *wkuri, int num); |
62 | 63 |
|
64 |
+char *wk_uri_getvar(wk_uri *wkuri, char *varname, int *len); |
|
65 |
+ |
|
66 |
+int wk_post_addvalid(wk *web, int connid, char *varname, char *tofile); |
|
67 |
+char *wk_post_get(wk *web, int connid, char *varname, int *isfile); |
|
68 |
+ |
|
63 | 69 |
const char *mime_getdefault(const char *filename, const char *defaultmime); |
64 | 70 |
|
65 | 71 |
|
... | ... |
@@ -53,8 +53,8 @@ int wk_service(wk *web); /* To be called after sselelect_wait() but before ssele |
53 | 53 |
int wk_serve_buffer_as_file(wk *web, int connid, void *data, int datalen, const char *mime); |
54 | 54 |
int wk_serve_file(wk *web, int connid, char *filename, const char *mime); |
55 | 55 |
int wk_serve_error(wk *web, int connid, wk_error wkerror); |
56 |
-int wk_writestr(wk *web, int connid, char *str); |
|
57 |
-int wk_write(wk *web, int connid, void *data, int datalen); |
|
56 |
+int wk_writestr(wk *web, int connid, const char *str); |
|
57 |
+int wk_write(wk *web, int connid, const void *data, int datalen); |
|
58 | 58 |
int wk_close(wk *web, int connid); |
59 | 59 |
|
60 | 60 |
char *wk_uri_getheader(wk_uri *wkuri, char *header, char *defaultvalue); |
... | ... |
@@ -38,7 +38,12 @@ typedef enum wk_error { |
38 | 38 |
wkerr_notimplemented=501, |
39 | 39 |
} wk_error; |
40 | 40 |
|
41 |
-wk *wk_init(int port, sselect *ssel, void (*callback_event)(/*wk *web,int connid, wk_event event, void *userptr*/), void (*callback_http)(/*wk *web,int connid, wk_uri *uri, void *userptr*/), void (*callback_continuation)(/*wk *web,int connid, wk_uri *uri, void *userptr*/), void *userptr); |
|
41 |
+typedef enum wk_action { |
|
42 |
+ wkact_finished=0, |
|
43 |
+ wkact_continuation, |
|
44 |
+} wk_action; |
|
45 |
+ |
|
46 |
+wk *wk_init(int port, sselect *ssel, void (*callback_event)(/*wk *web,int connid, wk_event event, void *userptr*/), wk_action (*callback_http)(/*wk *web,int connid, wk_uri *uri, void *userptr*/), wk_action (*callback_continuation)(/*wk *web,int connid, wk_uri *uri, void *userptr*/), void *userptr); |
|
42 | 47 |
void wk_free(wk *web); |
43 | 48 |
|
44 | 49 |
wk_uri *wk_geturi(wk *web, int connid); /* for use in callback_event() when wke_closed */ |
... | ... |
@@ -12,7 +12,7 @@ |
12 | 12 |
#ifndef WEBKERNEL_H |
13 | 13 |
#define WEBKERNEL_H |
14 | 14 |
#include <sys/select.h> |
15 |
-#include "iobuf.h" |
|
15 |
+#include "sbuf.h" |
|
16 | 16 |
#include "socklib.h" |
17 | 17 |
|
18 | 18 |
typedef void wk; |
... | ... |
@@ -57,7 +57,9 @@ char *wk_uri_getheaderbynum(wk_uri *wkuri, int num); |
57 | 57 |
|
58 | 58 |
const char *mime_getdefault(const char *filename, const char *defaultmime); |
59 | 59 |
|
60 |
-siobuf *wk_iobufget(wk *web); |
|
61 |
-void wk_iobuffree(wk *web, int iobufnum); |
|
60 |
+ |
|
61 |
+int wk_sbufacquire(wk *web); |
|
62 |
+sbuf *wk_sbufget(wk *web, int sbufid); |
|
63 |
+void wk_sbufrelease(wk *web, int sbufid); |
|
62 | 64 |
|
63 | 65 |
#endif |
... | ... |
@@ -55,7 +55,7 @@ int wk_close(wk *web, int connid); |
55 | 55 |
char *wk_uri_getheader(wk_uri *wkuri, char *header, char *defaultvalue); |
56 | 56 |
char *wk_uri_getheaderbynum(wk_uri *wkuri, int num); |
57 | 57 |
|
58 |
-const char *mime_getdefault(char *filename); |
|
58 |
+const char *mime_getdefault(const char *filename, const char *defaultmime); |
|
59 | 59 |
|
60 | 60 |
siobuf *wk_iobufget(wk *web); |
61 | 61 |
void wk_iobuffree(wk *web, int iobufnum); |
... | ... |
@@ -5,10 +5,6 @@ |
5 | 5 |
* |
6 | 6 |
* Header file. |
7 | 7 |
* |
8 |
- * History: |
|
9 |
- * 21/01/2014 Creation. |
|
10 |
- * 2/04/2014 wk_fdinit()/_fdcheck(). |
|
11 |
- * |
|
12 | 8 |
* Author: Dario Rodriguez dario@softhome.net |
13 | 9 |
* This library is licensed on the terms of the GNU LGPL v2+ |
14 | 10 |
*/ |
... | ... |
@@ -17,21 +13,51 @@ |
17 | 13 |
#define WEBKERNEL_H |
18 | 14 |
#include <sys/select.h> |
19 | 15 |
#include "iobuf.h" |
16 |
+#include "socklib.h" |
|
20 | 17 |
|
21 | 18 |
typedef void wk; |
19 |
+typedef enum wk_event { |
|
20 |
+ wke_init=0, |
|
21 |
+ wke_fini, |
|
22 |
+ wke_connected, |
|
23 |
+ wke_closed, |
|
24 |
+} wk_event; |
|
25 |
+ |
|
26 |
+typedef struct wk_uri { |
|
27 |
+ char *method; |
|
28 |
+ char *protocol; |
|
29 |
+ char *path; |
|
30 |
+ char *query; |
|
31 |
+ char *headers; |
|
32 |
+ void *uriuserptr; |
|
33 |
+} wk_uri; |
|
22 | 34 |
|
23 |
-wk *wk_init(int port); |
|
35 |
+typedef enum wk_error { |
|
36 |
+ wkerr_notfound=404, |
|
37 |
+ wkerr_internal=500, |
|
38 |
+ wkerr_notimplemented=501, |
|
39 |
+} wk_error; |
|
40 |
+ |
|
41 |
+wk *wk_init(int port, sselect *ssel, void (*callback_event)(/*wk *web,int connid, wk_event event, void *userptr*/), void (*callback_http)(/*wk *web,int connid, wk_uri *uri, void *userptr*/), void (*callback_continuation)(/*wk *web,int connid, wk_uri *uri, void *userptr*/), void *userptr); |
|
24 | 42 |
void wk_free(wk *web); |
25 |
-int wk_fdsetinit(wk *web, int *n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds); /* n, readfds, writefds and execptfds must be already initialized to 0 */ |
|
26 |
-int wk_fdsetcheck(wk *web, fd_set *readfds, fd_set *writefds, fd_set *exceptfds); |
|
27 |
-int wk_select(wk *web, int timemoutms,...); |
|
28 |
-int wk_httpaccept(wk *web, int *httpnum); |
|
29 |
-int wk_httpisrequest(char *line); |
|
30 |
-int wk_httpfromdisk(wk *web, int httpnum,char *firstline); |
|
31 |
-int wk_httpreset(wk *web, int httpnum); |
|
32 |
-int wk_httpclose(wk *web, int httpnum); |
|
43 |
+ |
|
44 |
+wk_uri *wk_geturi(wk *web, int connid); /* for use in callback_event() when wke_closed */ |
|
45 |
+ |
|
46 |
+int wk_service(wk *web); /* To be called after sselelect_wait() but before sselect_getXXX() */ |
|
47 |
+ |
|
48 |
+int wk_serve_buffer_as_file(wk *web, int connid, void *data, int datalen, const char *mime); |
|
49 |
+int wk_serve_file(wk *web, int connid, char *filename, const char *mime); |
|
50 |
+int wk_serve_error(wk *web, int connid, wk_error wkerror); |
|
51 |
+int wk_writestr(wk *web, int connid, char *str); |
|
52 |
+int wk_write(wk *web, int connid, void *data, int datalen); |
|
53 |
+int wk_close(wk *web, int connid); |
|
54 |
+ |
|
55 |
+char *wk_uri_getheader(wk_uri *wkuri, char *header, char *defaultvalue); |
|
56 |
+char *wk_uri_getheaderbynum(wk_uri *wkuri, int num); |
|
57 |
+ |
|
58 |
+const char *mime_getdefault(char *filename); |
|
33 | 59 |
|
34 | 60 |
siobuf *wk_iobufget(wk *web); |
35 |
-wk_iobuffree(wk *web, int iobufnum); |
|
61 |
+void wk_iobuffree(wk *web, int iobufnum); |
|
36 | 62 |
|
37 | 63 |
#endif |
... | ... |
@@ -7,6 +7,7 @@ |
7 | 7 |
* |
8 | 8 |
* History: |
9 | 9 |
* 21/01/2014 Creation. |
10 |
+ * 2/04/2014 wk_fdinit()/_fdcheck(). |
|
10 | 11 |
* |
11 | 12 |
* Author: Dario Rodriguez dario@softhome.net |
12 | 13 |
* This library is licensed on the terms of the GNU LGPL v2+ |
... | ... |
@@ -14,13 +15,15 @@ |
14 | 15 |
|
15 | 16 |
#ifndef WEBKERNEL_H |
16 | 17 |
#define WEBKERNEL_H |
18 |
+#include <sys/select.h> |
|
17 | 19 |
#include "iobuf.h" |
18 | 20 |
|
19 | 21 |
typedef void wk; |
20 | 22 |
|
21 | 23 |
wk *wk_init(int port); |
22 | 24 |
void wk_free(wk *web); |
23 |
- |
|
25 |
+int wk_fdsetinit(wk *web, int *n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds); /* n, readfds, writefds and execptfds must be already initialized to 0 */ |
|
26 |
+int wk_fdsetcheck(wk *web, fd_set *readfds, fd_set *writefds, fd_set *exceptfds); |
|
24 | 27 |
int wk_select(wk *web, int timemoutms,...); |
25 | 28 |
int wk_httpaccept(wk *web, int *httpnum); |
26 | 29 |
int wk_httpisrequest(char *line); |
1 | 1 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,34 @@ |
1 |
+/* |
|
2 |
+ * webkernel.h |
|
3 |
+ * |
|
4 |
+ * A small embeddable web server. |
|
5 |
+ * |
|
6 |
+ * Header file. |
|
7 |
+ * |
|
8 |
+ * History: |
|
9 |
+ * 21/01/2014 Creation. |
|
10 |
+ * |
|
11 |
+ * Author: Dario Rodriguez dario@softhome.net |
|
12 |
+ * This library is licensed on the terms of the GNU LGPL v2+ |
|
13 |
+ */ |
|
14 |
+ |
|
15 |
+#ifndef WEBKERNEL_H |
|
16 |
+#define WEBKERNEL_H |
|
17 |
+#include "iobuf.h" |
|
18 |
+ |
|
19 |
+typedef void wk; |
|
20 |
+ |
|
21 |
+wk *wk_init(int port); |
|
22 |
+void wk_free(wk *web); |
|
23 |
+ |
|
24 |
+int wk_select(wk *web, int timemoutms,...); |
|
25 |
+int wk_httpaccept(wk *web, int *httpnum); |
|
26 |
+int wk_httpisrequest(char *line); |
|
27 |
+int wk_httpfromdisk(wk *web, int httpnum,char *firstline); |
|
28 |
+int wk_httpreset(wk *web, int httpnum); |
|
29 |
+int wk_httpclose(wk *web, int httpnum); |
|
30 |
+ |
|
31 |
+siobuf *wk_iobufget(wk *web); |
|
32 |
+wk_iobuffree(wk *web, int iobufnum); |
|
33 |
+ |
|
34 |
+#endif |