1 /**
2  * netsrv.h
3  *
4  * Copyright (C) 2018 by David McNaughton
5  *
6  * History:
7  * 12-JUL-18    1.0     Initial Release
8  */
9 
10 /**
11  * This web server module provides...
12  */
13 #include <stdbool.h>
14 #include <sys/ipc.h>
15 #include <sys/msg.h>
16 #include <string.h>
17 
18 #define UNUSED(x) (void)(x)
19 
20 enum net_device {
21 	DEV_SIO1,
22 	DEV_LPT,
23 	DEV_VIO,
24 	DEV_CPA,
25 	DEV_DZLR,
26 	DEV_88ACC,
27 	DEV_D7AIO
28 };
29 
30 typedef enum net_device net_device_t;
31 
32 struct msgbuf {
33 	long	mtype;
34 	char	mtext[128];
35 };
36 
37 typedef struct msgbuf msgbuf_t;
38 
39 struct ws_client {
40 	struct mg_connection *conn;
41 	int state;
42 };
43 
44 typedef struct ws_client ws_client_t;
45 
46 extern int net_device_alive(net_device_t);
47 extern void net_device_send(net_device_t, char*, int);
48 extern int net_device_get(net_device_t);
49 extern int net_device_get_data(net_device_t, char *, int);
50 extern int net_device_poll(net_device_t);
51 extern void net_device_service(net_device_t device, void (*cbfunc)(BYTE *data));
52 
53 /*
54 * convenience macros for http output
55 */
56 typedef struct mg_connection HttpdConnection_t;
57 
58 #define httpdPrintf(conn, args...)			mg_printf(conn, args)
59 #define httpdStartResponse(conn, code)		mg_printf(conn, "HTTP/1.1 %d OK\r\n", code)
60 #define httpdHeader(conn, key, val)			mg_printf(conn, "%s: %s\r\n", key, val)
61 #define httpdEndHeaders(conn)				mg_printf(conn, "\r\n")
62 
63 #define _HTTP_MAX_ARGS	8
64 
65 enum http_method {
66 	HTTP_GET,
67 	HTTP_POST,
68 	HTTP_PUT,
69 	HTTP_DELETE,
70 	UNKNOWN
71 };
72 
73 typedef enum http_method http_method_t;
74 
75 struct request {
76 	const struct mg_request_info *mg;
77 	http_method_t method;
78 	const char *args[_HTTP_MAX_ARGS];
79 	long long len;
80 };
81 
82 typedef struct request request_t;
83 
84 extern request_t *get_request(const HttpdConnection_t *);