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 *);