Browse code

webkernel: add wk_serve_generic_headers to write only the headers; the data must be written later with wk_write (unless etagnotmodified is true, as that means the reply was 304 Not modified)

Dario Rodriguez authored on 18/05/2015 17:14:13
Showing 1 changed files
... ...
@@ -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);
Browse code

Finish POST implementation with application/x-www-form-urlencoded variables

Dario Rodriguez authored on 05/05/2015 19:08:21
Showing 1 changed files
... ...
@@ -40,7 +40,6 @@ typedef enum wk_error {
40 40
 
41 41
 typedef enum wk_action {
42 42
         wkact_finished=0,
43
-        wkact_post,
44 43
         wkact_continuation,
45 44
 } wk_action;
46 45
 
Browse code

webkernel: add uri_urldecode (taken from my unreleased vdrsyncts)

Dario Rodriguez authored on 23/07/2014 20:13:42
Showing 1 changed files
... ...
@@ -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);
Browse code

webkernel: add etag support (so the the browser can use cached pages)

Dario Rodriguez authored on 16/07/2014 13:27:49
Showing 1 changed files
... ...
@@ -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);
Browse code

webkernel: make wk_init expect a server fd instead of a port number

Dario Rodriguez authored on 15/07/2014 11:03:21
Showing 1 changed files
... ...
@@ -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 */
Browse code

webkernel: basic cookie support

Dario Rodriguez authored on 13/07/2014 19:55:14
Showing 1 changed files
... ...
@@ -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);
Browse code

add wk_serve_Redirect()

Dario Rodriguez authored on 26/06/2014 16:55:55
Showing 1 changed files
... ...
@@ -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);
Browse code

webkernel: post callback

Dario Rodriguez authored on 24/06/2014 20:25:38
Showing 1 changed files
... ...
@@ -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);
Browse code

webkernel: get vars from GET request, partial implementation of vars for POST request.

Dario Rodriguez authored on 23/06/2014 20:31:46
Showing 1 changed files
... ...
@@ -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
 
Browse code

webkernel_test: initial implementation of the testing framework

Dario Rodriguez authored on 18/06/2014 11:18:10
Showing 1 changed files
... ...
@@ -65,6 +65,6 @@ const char *mime_getdefault(const char *filename, const char *defaultmime);
65 65
 
66 66
 int wk_sbufacquire(wk *web);
67 67
 sbuf *wk_sbufget(wk *web, int sbufid);
68
-void wk_sbufrelease(wk *web, int sbufid);
68
+int wk_sbufrelease(wk *web, int sbufid);
69 69
 
70 70
 #endif
Browse code

webkernel: completed initial implementation

Dario Rodriguez authored on 17/06/2014 20:32:33
Showing 1 changed files
... ...
@@ -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);
Browse code

webkernel: service (withoy read processing and without write-from-fd functionality)

Dario Rodriguez authored on 17/06/2014 11:12:59
Showing 1 changed files
... ...
@@ -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 */
Browse code

webkernel: sbuf acquire/release

Dario Rodriguez authored on 15/06/2014 14:41:12
Showing 1 changed files
... ...
@@ -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
Browse code

webkernel: init, free, start of service and structures of clients

Dario Rodriguez authored on 13/06/2014 11:16:28
Showing 1 changed files
... ...
@@ -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);
Browse code

webkernel: rework API

Dario Rodriguez authored on 11/06/2014 11:10:24
Showing 1 changed files
... ...
@@ -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
Browse code

add wk_fdsetinit()/_fdcheck() for better integration with other libraries with a select-based event loop

Dario Rodriguez authored on 02/04/2014 11:46:14
Showing 1 changed files
... ...
@@ -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);
Browse code

Added current unfinished sources

Dario Rodriguez authored on 12/03/2014 11:38:34
Showing 1 changed files
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