Remove mg_log_set_callback. Use MG_PUTCHAR macro instead

This commit is contained in:
Sergey Lyubka 2022-05-20 09:45:17 +01:00
parent 7c17c806ad
commit 7e2ca72310
15 changed files with 124 additions and 188 deletions

View File

@ -306,12 +306,13 @@ Here is a list of build constants and their default values:
|MG_ENABLE_CUSTOM_MILLIS | 0 | Enable custom `mg_millis()` function | |MG_ENABLE_CUSTOM_MILLIS | 0 | Enable custom `mg_millis()` function |
|MG_ENABLE_PACKED_FS | 0 | Enable embedded FS support | |MG_ENABLE_PACKED_FS | 0 | Enable embedded FS support |
|MG_ENABLE_FATFS | 0 | Enable embedded FAT FS support | |MG_ENABLE_FATFS | 0 | Enable embedded FAT FS support |
|MG_ENABLE_LINES | undefined | If defined, show source file names in logs |
|MG_IO_SIZE | 2048 | Granularity of the send/recv IO buffer growth | |MG_IO_SIZE | 2048 | Granularity of the send/recv IO buffer growth |
|MG_MAX_RECV_BUF_SIZE | (3 * 1024 * 1024) | Maximum recv buffer size | |MG_MAX_RECV_BUF_SIZE | (3 * 1024 * 1024) | Maximum recv buffer size |
|MG_MAX_HTTP_HEADERS | 40 | Maximum number of HTTP headers | |MG_MAX_HTTP_HEADERS | 40 | Maximum number of HTTP headers |
|MG_HTTP_INDEX | "index.html" | Index file for HTML directory | |MG_HTTP_INDEX | "index.html" | Index file for HTML directory |
|MG_FATFS_ROOT | "/" | FAT FS root directory | |MG_FATFS_ROOT | "/" | FAT FS root directory |
|MG_ENABLE_LINES | undefined | If defined, show source file names in logs | |MG_PUTCHAR | putchar | Character output function, used by logging |
<span class="badge bg-danger">NOTE:</span> the `MG_IO_SIZE` constant also sets <span class="badge bg-danger">NOTE:</span> the `MG_IO_SIZE` constant also sets
maximum UDP message size, see maximum UDP message size, see
@ -3468,34 +3469,6 @@ mg_log_set("2"); // Set log level to info
mg_log_set("2,foo.c=3,bar.c=0"); // Set log level to info, with overrides mg_log_set("2,foo.c=3,bar.c=0"); // Set log level to info, with overrides
``` ```
### mg\_log\_set\_callback()
```c
void mg_log_set_callback(void (*fn)(const void *, size_t, void *), void *fnd);
```
By default, `LOG` writes to standard output stream (aka `stdout`), but this behaviour
can be changes via `mg_log_set_callback`. This function allows to set callback,
which called once mongoose (or host application) calls `LOG`
Parameters:
- `fn` - callback function, should be called on logging
- `fnd` - user parameter to pass to `fn`
Return value: none
Usage example:
```c
void log_via_printf(const void *buf, size_t len, void *userdata) {
(void) userdata;
printf("*.%s", buf, len);
}
// ...
mg_log_set_callback(&log_via_printf, NULL);
```
### mg\_hexdump() ### mg\_hexdump()
```c ```c

View File

@ -10,19 +10,19 @@ MINGW ?= $(DOCKER) mdashnet/mingw
all: $(PROG) all: $(PROG)
$(RUN) ./$(PROG) $(RUN) ./$(PROG)
$(PROG): $(PROG): $(SOURCES) $(FILES_TO_EMBED)
$(CC) ../../test/pack.c -o pack $(CC) ../../test/pack.c -o pack
./pack $(FILES_TO_EMBED) > packed_fs.c ./pack $(FILES_TO_EMBED) > packed_fs.c
$(CC) -W -Wall -Wextra -O0 -g3 $(CFLAGS) -o $(PROG) $(SOURCES) $(CC) -W -Wall -Wextra -O0 -g3 $(CFLAGS) -o $(PROG) $(SOURCES)
mingw: mingw: $(SOURCES) $(FILES_TO_EMBED)
$(MINGW) i686-w64-mingw32-gcc $(CFLAGS) ../../test/pack.c -o pack.exe $(MINGW) i686-w64-mingw32-gcc $(CFLAGS) ../../test/pack.c -o pack.exe
$(MINGW) wine cmd /c 'pack.exe $(FILES_TO_EMBED) > packed_fs.c' $(MINGW) wine cmd /c 'pack.exe $(FILES_TO_EMBED) > packed_fs.c'
$(MINGW) i686-w64-mingw32-gcc $(CFLAGS) $(SOURCES) -lws2_32 -o $(PROG).exe $(MINGW) i686-w64-mingw32-gcc $(CFLAGS) $(SOURCES) -lws2_32 -o $(PROG).exe
$(MINGW) wine $(PROG).exe $(MINGW) wine $(PROG).exe
vc98: vc98: $(SOURCES) $(FILES_TO_EMBED)
$(VC98) cl.exe /nologo $(CFLAGS) ../../test/pack.c /Fepack.exe $(VC98) cl.exe /nologo $(CFLAGS) ../../test/pack.c /Fepack.exe
$(VC98) cmd /c 'pack.exe $(FILES_TO_EMBED) > packed_fs.c' $(VC98) cmd /c 'pack.exe $(FILES_TO_EMBED) > packed_fs.c'
$(VC98) cl.exe /nologo /O2 $(CFLAGS) $(SOURCES) /Fe$(PROG).exe $(VC98) cl.exe /nologo /O2 $(CFLAGS) $(SOURCES) /Fe$(PROG).exe

View File

@ -639,11 +639,18 @@ static const unsigned char v2[] = {
105, 103, 93, 32, 61, 32, 117, 115, 101, 83, 116, 97, // ig] = useSta 105, 103, 93, 32, 61, 32, 117, 115, 101, 83, 116, 97, // ig] = useSta
116, 101, 40, 123, 125, 41, 59, 10, 10, 32, 32, 99, // te({});.. c 116, 101, 40, 123, 125, 41, 59, 10, 10, 32, 32, 99, // te({});.. c
111, 110, 115, 116, 32, 114, 101, 102, 114, 101, 115, 104, // onst refresh 111, 110, 115, 116, 32, 114, 101, 102, 114, 101, 115, 104, // onst refresh
32, 61, 32, 40, 41, 32, 61, 62, 10, 32, 32, 32, // = () =>. 32, 61, 32, 40, 41, 32, 61, 62, 32, 102, 101, 116, // = () => fet
32, 32, 32, 102, 101, 116, 99, 104, 40, 39, 47, 97, // fetch('/a 99, 104, 40, 39, 47, 97, 112, 105, 47, 99, 111, 110, // ch('/api/con
112, 105, 47, 99, 111, 110, 102, 105, 103, 47, 103, 101, // pi/config/ge 102, 105, 103, 47, 103, 101, 116, 39, 44, 32, 123, 104, // fig/get', {h
116, 39, 41, 46, 116, 104, 101, 110, 40, 114, 32, 61, // t').then(r = 101, 97, 100, 101, 114, 115, 58, 32, 123, 65, 117, 116, // eaders: {Aut
62, 32, 114, 46, 106, 115, 111, 110, 40, 41, 41, 46, // > r.json()). 104, 111, 114, 105, 122, 97, 116, 105, 111, 110, 58, 32, // horization:
39, 39, 125, 125, 41, 10, 32, 32, 32, 32, 32, 32, // ''}}).
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, //
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 116, // .t
104, 101, 110, 40, 114, 32, 61, 62, 32, 114, 46, 106, // hen(r => r.j
115, 111, 110, 40, 41, 41, 10, 32, 32, 32, 32, 32, // son()).
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, //
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, // .
116, 104, 101, 110, 40, 114, 32, 61, 62, 32, 115, 101, // then(r => se 116, 104, 101, 110, 40, 114, 32, 61, 62, 32, 115, 101, // then(r => se
116, 67, 111, 110, 102, 105, 103, 40, 114, 41, 41, 59, // tConfig(r)); 116, 67, 111, 110, 102, 105, 103, 40, 114, 41, 41, 59, // tConfig(r));
10, 10, 32, 32, 99, 111, 110, 115, 116, 32, 108, 111, // .. const lo 10, 10, 32, 32, 99, 111, 110, 115, 116, 32, 108, 111, // .. const lo
@ -709,80 +716,85 @@ static const unsigned char v2[] = {
32, 32, 32, 32, 32, 125, 41, 59, 10, 32, 32, 32, // });. 32, 32, 32, 32, 32, 125, 41, 59, 10, 32, 32, 32, // });.
32, 125, 59, 10, 32, 32, 32, 32, 102, 101, 116, 99, // };. fetc 32, 125, 59, 10, 32, 32, 32, 32, 102, 101, 116, 99, // };. fetc
104, 40, 39, 47, 97, 112, 105, 47, 119, 97, 116, 99, // h('/api/watc 104, 40, 39, 47, 97, 112, 105, 47, 119, 97, 116, 99, // h('/api/watc
104, 39, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32, // h'). 104, 39, 44, 32, 123, 104, 101, 97, 100, 101, 114, 115, // h', {headers
46, 116, 104, 101, 110, 40, 114, 32, 61, 62, 32, 114, // .then(r => r 58, 32, 123, 65, 117, 116, 104, 111, 114, 105, 122, 97, // : {Authoriza
46, 98, 111, 100, 121, 46, 103, 101, 116, 82, 101, 97, // .body.getRea 116, 105, 111, 110, 58, 32, 39, 39, 125, 125, 41, 10, // tion: ''}}).
100, 101, 114, 40, 41, 41, 10, 32, 32, 32, 32, 32, // der()).
32, 32, 32, 46, 116, 104, 101, 110, 40, 102, 41, 10, // .then(f).
32, 32, 32, 32, 32, 32, 32, 32, 46, 99, 97, 116, // .cat
99, 104, 40, 101, 32, 61, 62, 32, 115, 101, 116, 84, // ch(e => setT
105, 109, 101, 111, 117, 116, 40, 119, 97, 116, 99, 104, // imeout(watch
44, 32, 49, 48, 48, 48, 41, 41, 59, 10, 32, 32, // , 1000));.
125, 59, 10, 10, 32, 32, 117, 115, 101, 69, 102, 102, // };.. useEff
101, 99, 116, 40, 40, 41, 32, 61, 62, 32, 123, 10, // ect(() => {.
32, 32, 32, 32, 102, 101, 116, 99, 104, 40, 39, 47, // fetch('/
97, 112, 105, 47, 108, 111, 103, 105, 110, 39, 41, 10, // api/login').
32, 32, 32, 32, 32, 32, 32, 32, 46, 116, 104, 101, // .the 32, 32, 32, 32, 32, 32, 32, 32, 46, 116, 104, 101, // .the
110, 40, 114, 32, 61, 62, 32, 114, 46, 106, 115, 111, // n(r => r.jso 110, 40, 114, 32, 61, 62, 32, 114, 46, 98, 111, 100, // n(r => r.bod
110, 40, 41, 41, 10, 32, 32, 32, 32, 32, 32, 32, // n()). 121, 46, 103, 101, 116, 82, 101, 97, 100, 101, 114, 40, // y.getReader(
32, 46, 116, 104, 101, 110, 40, 114, 32, 61, 62, 32, // .then(r => 41, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32, 46, // )). .
108, 111, 103, 105, 110, 40, 114, 41, 41, 10, 32, 32, // login(r)). 116, 104, 101, 110, 40, 102, 41, 10, 32, 32, 32, 32, // then(f).
32, 32, 32, 32, 32, 32, 46, 99, 97, 116, 99, 104, // .catch 32, 32, 32, 32, 46, 99, 97, 116, 99, 104, 40, 101, // .catch(e
40, 101, 114, 114, 32, 61, 62, 32, 115, 101, 116, 85, // (err => setU 32, 61, 62, 32, 115, 101, 116, 84, 105, 109, 101, 111, // => setTimeo
115, 101, 114, 40, 39, 39, 41, 41, 59, 10, 32, 32, // ser(''));. 117, 116, 40, 119, 97, 116, 99, 104, 44, 32, 49, 48, // ut(watch, 10
32, 32, 114, 101, 102, 114, 101, 115, 104, 40, 41, 59, // refresh(); 48, 48, 41, 41, 59, 10, 32, 32, 125, 59, 10, 10, // 00));. };..
10, 32, 32, 32, 32, 119, 97, 116, 99, 104, 40, 41, // . watch() 32, 32, 117, 115, 101, 69, 102, 102, 101, 99, 116, 40, // useEffect(
59, 10, 32, 32, 125, 44, 32, 91, 93, 41, 59, 10, // ;. }, []);. 40, 41, 32, 61, 62, 32, 123, 10, 32, 32, 32, 32, // () => {.
10, 32, 32, 105, 102, 32, 40, 33, 117, 115, 101, 114, // . if (!user 102, 101, 116, 99, 104, 40, 39, 47, 97, 112, 105, 47, // fetch('/api/
41, 32, 114, 101, 116, 117, 114, 110, 32, 104, 116, 109, // ) return htm 108, 111, 103, 105, 110, 39, 44, 32, 123, 104, 101, 97, // login', {hea
108, 96, 60, 36, 123, 76, 111, 103, 105, 110, 125, 32, // l`<${Login} 100, 101, 114, 115, 58, 32, 123, 65, 117, 116, 104, 111, // ders: {Autho
108, 111, 103, 105, 110, 61, 36, 123, 108, 111, 103, 105, // login=${logi 114, 105, 122, 97, 116, 105, 111, 110, 58, 32, 39, 39, // rization: ''
110, 125, 32, 47, 62, 96, 59, 10, 32, 32, 99, 111, // n} />`;. co 125, 125, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32, // }}).
110, 115, 116, 32, 97, 100, 109, 105, 110, 32, 61, 32, // nst admin = 46, 116, 104, 101, 110, 40, 114, 32, 61, 62, 32, 114, // .then(r => r
117, 115, 101, 114, 32, 61, 61, 32, 39, 97, 100, 109, // user == 'adm 46, 106, 115, 111, 110, 40, 41, 41, 10, 32, 32, 32, // .json()).
105, 110, 39, 59, 10, 32, 32, 99, 111, 110, 115, 116, // in';. const 32, 32, 32, 32, 32, 46, 116, 104, 101, 110, 40, 114, // .then(r
32, 99, 111, 108, 115, 105, 122, 101, 32, 61, 32, 97, // colsize = a 32, 61, 62, 32, 108, 111, 103, 105, 110, 40, 114, 41, // => login(r)
100, 109, 105, 110, 32, 63, 32, 39, 99, 52, 39, 32, // dmin ? 'c4' 41, 10, 32, 32, 32, 32, 32, 32, 32, 32, 46, 99, // ). .c
58, 32, 39, 99, 54, 39, 59, 10, 32, 32, 99, 111, // : 'c6';. co 97, 116, 99, 104, 40, 101, 114, 114, 32, 61, 62, 32, // atch(err =>
110, 115, 116, 32, 99, 115, 32, 61, 32, 97, 100, 109, // nst cs = adm 115, 101, 116, 85, 115, 101, 114, 40, 39, 39, 41, 41, // setUser(''))
105, 110, 32, 63, 32, 104, 116, 109, 108, 96, 60, 36, // in ? html`<$ 59, 10, 32, 32, 32, 32, 114, 101, 102, 114, 101, 115, // ;. refres
123, 67, 104, 97, 110, 103, 101, 83, 101, 116, 116, 105, // {ChangeSetti 104, 40, 41, 59, 10, 32, 32, 32, 32, 119, 97, 116, // h();. wat
110, 103, 115, 125, 32, 99, 111, 110, 102, 105, 103, 61, // ngs} config= 99, 104, 40, 41, 59, 10, 32, 32, 125, 44, 32, 91, // ch();. }, [
36, 123, 99, 111, 110, 102, 105, 103, 125, 32, 47, 62, // ${config} /> 93, 41, 59, 10, 10, 32, 32, 105, 102, 32, 40, 33, // ]);.. if (!
96, 32, 58, 32, 39, 39, 59, 10, 32, 32, 114, 101, // ` : '';. re 117, 115, 101, 114, 41, 32, 114, 101, 116, 117, 114, 110, // user) return
116, 117, 114, 110, 32, 104, 116, 109, 108, 96, 10, 60, // turn html`.< 32, 104, 116, 109, 108, 96, 60, 36, 123, 76, 111, 103, // html`<${Log
36, 123, 78, 97, 118, 125, 32, 117, 115, 101, 114, 61, // ${Nav} user= 105, 110, 125, 32, 108, 111, 103, 105, 110, 61, 36, 123, // in} login=${
36, 123, 117, 115, 101, 114, 125, 32, 108, 111, 103, 111, // ${user} logo 108, 111, 103, 105, 110, 125, 32, 47, 62, 96, 59, 10, // login} />`;.
117, 116, 61, 36, 123, 108, 111, 103, 111, 117, 116, 125, // ut=${logout} 32, 32, 99, 111, 110, 115, 116, 32, 97, 100, 109, 105, // const admi
32, 47, 62, 10, 60, 100, 105, 118, 32, 99, 108, 97, // />.<div cla 110, 32, 61, 32, 117, 115, 101, 114, 32, 61, 61, 32, // n = user ==
115, 115, 61, 34, 99, 111, 110, 116, 97, 105, 110, 101, // ss="containe 39, 97, 100, 109, 105, 110, 39, 59, 10, 32, 32, 99, // 'admin';. c
114, 34, 62, 10, 32, 32, 60, 36, 123, 72, 101, 114, // r">. <${Her 111, 110, 115, 116, 32, 99, 111, 108, 115, 105, 122, 101, // onst colsize
111, 125, 32, 47, 62, 10, 32, 32, 60, 100, 105, 118, // o} />. <div 32, 61, 32, 97, 100, 109, 105, 110, 32, 63, 32, 39, // = admin ? '
32, 99, 108, 97, 115, 115, 61, 34, 114, 111, 119, 34, // class="row" 99, 52, 39, 32, 58, 32, 39, 99, 54, 39, 59, 10, // c4' : 'c6';.
62, 10, 32, 32, 32, 32, 60, 100, 105, 118, 32, 99, // >. <div c 32, 32, 99, 111, 110, 115, 116, 32, 99, 115, 32, 61, // const cs =
108, 97, 115, 115, 61, 34, 99, 111, 108, 32, 36, 123, // lass="col ${ 32, 97, 100, 109, 105, 110, 32, 63, 32, 104, 116, 109, // admin ? htm
99, 111, 108, 115, 105, 122, 101, 125, 34, 62, 60, 36, // colsize}"><$ 108, 96, 60, 36, 123, 67, 104, 97, 110, 103, 101, 83, // l`<${ChangeS
123, 83, 104, 111, 119, 83, 101, 116, 116, 105, 110, 103, // {ShowSetting 101, 116, 116, 105, 110, 103, 115, 125, 32, 99, 111, 110, // ettings} con
115, 125, 32, 99, 111, 110, 102, 105, 103, 61, 36, 123, // s} config=${ 102, 105, 103, 61, 36, 123, 99, 111, 110, 102, 105, 103, // fig=${config
99, 111, 110, 102, 105, 103, 125, 32, 47, 62, 60, 47, // config} /></ 125, 32, 47, 62, 96, 32, 58, 32, 39, 39, 59, 10, // } />` : '';.
32, 32, 114, 101, 116, 117, 114, 110, 32, 104, 116, 109, // return htm
108, 96, 10, 60, 36, 123, 78, 97, 118, 125, 32, 117, // l`.<${Nav} u
115, 101, 114, 61, 36, 123, 117, 115, 101, 114, 125, 32, // ser=${user}
108, 111, 103, 111, 117, 116, 61, 36, 123, 108, 111, 103, // logout=${log
111, 117, 116, 125, 32, 47, 62, 10, 60, 100, 105, 118, // out} />.<div
32, 99, 108, 97, 115, 115, 61, 34, 99, 111, 110, 116, // class="cont
97, 105, 110, 101, 114, 34, 62, 10, 32, 32, 60, 36, // ainer">. <$
123, 72, 101, 114, 111, 125, 32, 47, 62, 10, 32, 32, // {Hero} />.
60, 100, 105, 118, 32, 99, 108, 97, 115, 115, 61, 34, // <div class="
114, 111, 119, 34, 62, 10, 32, 32, 32, 32, 60, 100, // row">. <d
105, 118, 32, 99, 108, 97, 115, 115, 61, 34, 99, 111, // iv class="co
108, 32, 36, 123, 99, 111, 108, 115, 105, 122, 101, 125, // l ${colsize}
34, 62, 60, 36, 123, 83, 104, 111, 119, 83, 101, 116, // "><${ShowSet
116, 105, 110, 103, 115, 125, 32, 99, 111, 110, 102, 105, // tings} confi
103, 61, 36, 123, 99, 111, 110, 102, 105, 103, 125, 32, // g=${config}
47, 62, 60, 47, 100, 105, 118, 62, 10, 32, 32, 32, // /></div>.
32, 60, 100, 105, 118, 32, 99, 108, 97, 115, 115, 61, // <div class=
34, 99, 111, 108, 32, 36, 123, 99, 111, 108, 115, 105, // "col ${colsi
122, 101, 125, 34, 62, 36, 123, 99, 115, 125, 60, 47, // ze}">${cs}</
100, 105, 118, 62, 10, 32, 32, 32, 32, 60, 100, 105, // div>. <di 100, 105, 118, 62, 10, 32, 32, 32, 32, 60, 100, 105, // div>. <di
118, 32, 99, 108, 97, 115, 115, 61, 34, 99, 111, 108, // v class="col 118, 32, 99, 108, 97, 115, 115, 61, 34, 99, 111, 108, // v class="col
32, 36, 123, 99, 111, 108, 115, 105, 122, 101, 125, 34, // ${colsize}" 32, 36, 123, 99, 111, 108, 115, 105, 122, 101, 125, 34, // ${colsize}"
62, 36, 123, 99, 115, 125, 60, 47, 100, 105, 118, 62, // >${cs}</div> 62, 60, 36, 123, 67, 104, 97, 116, 125, 32, 109, 101, // ><${Chat} me
10, 32, 32, 32, 32, 60, 100, 105, 118, 32, 99, 108, // . <div cl 115, 115, 97, 103, 101, 115, 61, 36, 123, 109, 101, 115, // ssages=${mes
97, 115, 115, 61, 34, 99, 111, 108, 32, 36, 123, 99, // ass="col ${c 115, 97, 103, 101, 115, 125, 32, 47, 62, 60, 47, 100, // sages} /></d
111, 108, 115, 105, 122, 101, 125, 34, 62, 60, 36, 123, // olsize}"><${ 105, 118, 62, 10, 32, 32, 60, 47, 100, 105, 118, 62, // iv>. </div>
67, 104, 97, 116, 125, 32, 109, 101, 115, 115, 97, 103, // Chat} messag 10, 32, 32, 60, 36, 123, 70, 111, 111, 116, 101, 114, // . <${Footer
101, 115, 61, 36, 123, 109, 101, 115, 115, 97, 103, 101, // es=${message 125, 32, 47, 62, 10, 60, 47, 100, 105, 118, 62, 96, // } />.</div>`
115, 125, 32, 47, 62, 60, 47, 100, 105, 118, 62, 10, // s} /></div>. 59, 10, 125, 59, 10, 10, 119, 105, 110, 100, 111, 119, // ;.};..window
32, 32, 60, 47, 100, 105, 118, 62, 10, 32, 32, 60, // </div>. < 46, 111, 110, 108, 111, 97, 100, 32, 61, 32, 40, 41, // .onload = ()
36, 123, 70, 111, 111, 116, 101, 114, 125, 32, 47, 62, // ${Footer} /> 32, 61, 62, 32, 114, 101, 110, 100, 101, 114, 40, 104, // => render(h
10, 60, 47, 100, 105, 118, 62, 96, 59, 10, 125, 59, // .</div>`;.}; 40, 65, 112, 112, 41, 44, 32, 100, 111, 99, 117, 109, // (App), docum
10, 10, 119, 105, 110, 100, 111, 119, 46, 111, 110, 108, // ..window.onl 101, 110, 116, 46, 98, 111, 100, 121, 41, 59, 10, 0 // ent.body);.
111, 97, 100, 32, 61, 32, 40, 41, 32, 61, 62, 32, // oad = () =>
114, 101, 110, 100, 101, 114, 40, 104, 40, 65, 112, 112, // render(h(App
41, 44, 32, 100, 111, 99, 117, 109, 101, 110, 116, 46, // ), document.
98, 111, 100, 121, 41, 59, 10, 0 // body);.
}; };
static const unsigned char v3[] = { static const unsigned char v3[] = {
118, 97, 114, 32, 101, 44, 110, 44, 95, 44, 116, 44, // var e,n,_,t, 118, 97, 114, 32, 101, 44, 110, 44, 95, 44, 116, 44, // var e,n,_,t,
@ -2345,7 +2357,7 @@ static const struct packed_file {
time_t mtime; time_t mtime;
} packed_files[] = { } packed_files[] = {
{"/web_root/index.html", v1, sizeof(v1), 1652432837}, {"/web_root/index.html", v1, sizeof(v1), 1652432837},
{"/web_root/main.js", v2, sizeof(v2), 1652514584}, {"/web_root/main.js", v2, sizeof(v2), 1652995504},
{"/web_root/preact.min.js", v3, sizeof(v3), 1652374364}, {"/web_root/preact.min.js", v3, sizeof(v3), 1652374364},
{"/web_root/style.css", v4, sizeof(v4), 1652467860}, {"/web_root/style.css", v4, sizeof(v4), 1652467860},
{"/web_root/user.png", v5, sizeof(v5), 1626172939}, {"/web_root/user.png", v5, sizeof(v5), 1626172939},

View File

@ -187,8 +187,9 @@ const App = function(props) {
const [user, setUser] = useState(''); const [user, setUser] = useState('');
const [config, setConfig] = useState({}); const [config, setConfig] = useState({});
const refresh = () => const refresh = () => fetch('/api/config/get', {headers: {Authorization: ''}})
fetch('/api/config/get').then(r => r.json()).then(r => setConfig(r)); .then(r => r.json())
.then(r => setConfig(r));
const login = function(u) { const login = function(u) {
document.cookie = `access_token=${u.token};path=/;max-age=3600`; document.cookie = `access_token=${u.token};path=/;max-age=3600`;
@ -214,14 +215,14 @@ const App = function(props) {
if (!result.done) return f(reader); if (!result.done) return f(reader);
}); });
}; };
fetch('/api/watch') fetch('/api/watch', {headers: {Authorization: ''}})
.then(r => r.body.getReader()) .then(r => r.body.getReader())
.then(f) .then(f)
.catch(e => setTimeout(watch, 1000)); .catch(e => setTimeout(watch, 1000));
}; };
useEffect(() => { useEffect(() => {
fetch('/api/login') fetch('/api/login', {headers: {Authorization: ''}})
.then(r => r.json()) .then(r => r.json())
.then(r => login(r)) .then(r => login(r))
.catch(err => setUser('')); .catch(err => setUser(''));

View File

@ -88,14 +88,8 @@ static void timer_fn(void *arg) {
if (s_boot_timestamp < 9999) mg_sntp_request(s_sntp_conn); if (s_boot_timestamp < 9999) mg_sntp_request(s_sntp_conn);
} }
// Use Zephyr's printk() for Mongooose MG_* logging
static void logfn(const void *ptr, size_t len, void *userdata) {
printk("%.*s", (int) len, (char *) ptr);
}
int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {
mg_log_set(s_debug_level); mg_log_set(s_debug_level);
mg_log_set_callback(logfn, NULL);
mg_mgr_init(&s_mgr); mg_mgr_init(&s_mgr);
mg_timer_add(&s_mgr, 5000, MG_TIMER_REPEAT | MG_TIMER_RUN_NOW, timer_fn, mg_timer_add(&s_mgr, 5000, MG_TIMER_REPEAT | MG_TIMER_RUN_NOW, timer_fn,

View File

@ -69,16 +69,10 @@ static void timer_fn(void *arg) {
if (s_boot_timestamp < 9999) mg_sntp_request(s_sntp_conn); if (s_boot_timestamp < 9999) mg_sntp_request(s_sntp_conn);
} }
// Use Zephyr's printk() for Mongooose MG_* logging
static void logfn(const void *ptr, size_t len, void *userdata) {
printk("%.*s", (int) len, (char *) ptr);
}
int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {
struct mg_mgr mgr; struct mg_mgr mgr;
mg_log_set(s_debug_level); mg_log_set(s_debug_level);
mg_log_set_callback(logfn, NULL);
mg_mgr_init(&mgr); mg_mgr_init(&mgr);
mg_http_listen(&mgr, s_http_addr, wcb, NULL); mg_http_listen(&mgr, s_http_addr, wcb, NULL);

View File

@ -86,14 +86,8 @@ static void timer_fn(void *arg) {
if (s_boot_timestamp < 9999) mg_sntp_request(s_sntp_conn); if (s_boot_timestamp < 9999) mg_sntp_request(s_sntp_conn);
} }
// Use Zephyr's printk() for Mongooose MG_* logging
static void logfn(const void *ptr, size_t len, void *userdata) {
printk("%.*s", (int) len, (char *) ptr);
}
int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {
mg_log_set(s_debug_level); mg_log_set(s_debug_level);
mg_log_set_callback(logfn, NULL);
mg_mgr_init(&mgr); mg_mgr_init(&mgr);
mg_timer_add(&mgr, 5000, MG_TIMER_REPEAT | MG_TIMER_RUN_NOW, timer_fn, &mgr); mg_timer_add(&mgr, 5000, MG_TIMER_REPEAT | MG_TIMER_RUN_NOW, timer_fn, &mgr);

View File

@ -63,16 +63,10 @@ static void timer_fn(void *arg) {
if (s_boot_timestamp < 9999) mg_sntp_request(s_sntp_conn); if (s_boot_timestamp < 9999) mg_sntp_request(s_sntp_conn);
} }
// Use Zephyr's printk() for Mongooose MG_* logging
static void logfn(const void *ptr, size_t len, void *userdata) {
printk("%.*s", (int) len, (char *) ptr);
}
int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {
struct mg_mgr mgr; struct mg_mgr mgr;
mg_log_set(s_debug_level); mg_log_set(s_debug_level);
mg_log_set_callback(logfn, NULL);
mg_mgr_init(&mgr); mg_mgr_init(&mgr);
mg_http_listen(&mgr, s_ws_addr, fn, NULL); mg_http_listen(&mgr, s_ws_addr, fn, NULL);

View File

@ -1997,24 +1997,17 @@ void mg_iobuf_free(struct mg_iobuf *io) {
static void logc(int c) { static const char *s_spec = "2";
putchar(c);
static void logc(unsigned char c) {
MG_PUTCHAR(c);
} }
static void logs(const char *buf, size_t len) { static void logs(const char *buf, size_t len) {
size_t i; size_t i;
for (i = 0; i < len; i++) logc(buf[i]); for (i = 0; i < len; i++) logc(((unsigned char *) buf)[i]);
} }
static void mg_log_stdout(const void *buf, size_t len, void *userdata) {
(void) userdata, (void) buf, (void) len;
logs((const char *) buf, len);
}
static const char *s_spec = "2";
static void (*s_fn)(const void *, size_t, void *) = mg_log_stdout;
static void *s_fn_param = NULL;
void mg_log_set(const char *spec) { void mg_log_set(const char *spec) {
MG_DEBUG(("Setting log level to %s", spec)); MG_DEBUG(("Setting log level to %s", spec));
s_spec = spec; s_spec = spec;
@ -2026,8 +2019,6 @@ bool mg_log_prefix(int level, const char *file, int line, const char *fname) {
struct mg_str k, v, s = mg_str(s_spec); struct mg_str k, v, s = mg_str(s_spec);
const char *p = strrchr(file, '/'); const char *p = strrchr(file, '/');
if (s_fn == NULL) return false;
if (p == NULL) p = strrchr(file, '\\'); if (p == NULL) p = strrchr(file, '\\');
p = p == NULL ? file : p + 1; p = p == NULL ? file : p + 1;
@ -2042,8 +2033,7 @@ bool mg_log_prefix(int level, const char *file, int line, const char *fname) {
level, p, line, fname); level, p, line, fname);
if (n > sizeof(buf) - 2) n = sizeof(buf) - 2; if (n > sizeof(buf) - 2) n = sizeof(buf) - 2;
while (n < sizeof(buf)) buf[n++] = ' '; while (n < sizeof(buf)) buf[n++] = ' ';
buf[sizeof(buf) - 1] = '\0'; logs(buf, n - 1);
s_fn(buf, n - 1, s_fn_param);
return true; return true;
} else { } else {
return false; return false;
@ -2057,16 +2047,11 @@ void mg_log(const char *fmt, ...) {
va_start(ap, fmt); va_start(ap, fmt);
len = mg_vasprintf(&buf, sizeof(mem), fmt, ap); len = mg_vasprintf(&buf, sizeof(mem), fmt, ap);
va_end(ap); va_end(ap);
s_fn(buf, len, s_fn_param); logs(buf, len);
s_fn("\n", 1, s_fn_param); logc((unsigned char) '\n');
if (buf != mem) free(buf); if (buf != mem) free(buf);
} }
void mg_log_set_callback(void (*fn)(const void *, size_t, void *), void *fnd) {
s_fn = fn;
s_fn_param = fnd;
}
static unsigned char nibble(unsigned c) { static unsigned char nibble(unsigned c) {
return (unsigned char) (c < 10 ? c + '0' : c + 'W'); return (unsigned char) (c < 10 ? c + '0' : c + 'W');
} }

View File

@ -338,8 +338,6 @@ struct timeval {
#include <rl_net.h> #include <rl_net.h>
#define MG_IO_SIZE 512
#define MG_SOCK_LISTEN_BACKLOG_SIZE 1
#define MG_ENABLE_CUSTOM_MILLIS 1 #define MG_ENABLE_CUSTOM_MILLIS 1
typedef int socklen_t; typedef int socklen_t;
#define closesocket(x) closesocket(x) #define closesocket(x) closesocket(x)
@ -564,6 +562,7 @@ typedef int socklen_t;
#include <sys/types.h> #include <sys/types.h>
#include <time.h> #include <time.h>
#define MG_PUTCHAR(x) printk("%c", x)
#define strerror(x) zsock_gai_strerror(x) #define strerror(x) zsock_gai_strerror(x)
#define FD_CLOEXEC 0 #define FD_CLOEXEC 0
#define F_SETFD 0 #define F_SETFD 0
@ -674,6 +673,10 @@ int sscanf(const char *, const char *, ...);
#endif #endif
#endif #endif
#ifndef MG_PUTCHAR
#define MG_PUTCHAR(x) putchar(x)
#endif
@ -726,7 +729,6 @@ enum { MG_LL_NONE, MG_LL_ERROR, MG_LL_INFO, MG_LL_DEBUG, MG_LL_VERBOSE };
void mg_log(const char *fmt, ...) PRINTF_LIKE(1, 2); void mg_log(const char *fmt, ...) PRINTF_LIKE(1, 2);
bool mg_log_prefix(int ll, const char *file, int line, const char *fname); bool mg_log_prefix(int ll, const char *file, int line, const char *fname);
void mg_log_set(const char *spec); void mg_log_set(const char *spec);
void mg_log_set_callback(void (*fn)(const void *, size_t, void *), void *param);
void mg_hexdump(const void *buf, size_t len); void mg_hexdump(const void *buf, size_t len);
#define MG_LOG(level, args) \ #define MG_LOG(level, args) \

View File

@ -15,8 +15,6 @@
#include <rl_net.h> #include <rl_net.h>
#define MG_IO_SIZE 512
#define MG_SOCK_LISTEN_BACKLOG_SIZE 1
#define MG_ENABLE_CUSTOM_MILLIS 1 #define MG_ENABLE_CUSTOM_MILLIS 1
typedef int socklen_t; typedef int socklen_t;
#define closesocket(x) closesocket(x) #define closesocket(x) closesocket(x)

View File

@ -17,6 +17,7 @@
#include <sys/types.h> #include <sys/types.h>
#include <time.h> #include <time.h>
#define MG_PUTCHAR(x) printk("%c", x)
#define strerror(x) zsock_gai_strerror(x) #define strerror(x) zsock_gai_strerror(x)
#define FD_CLOEXEC 0 #define FD_CLOEXEC 0
#define F_SETFD 0 #define F_SETFD 0

View File

@ -98,3 +98,7 @@
#define MG_ENABLE_FILE 0 #define MG_ENABLE_FILE 0
#endif #endif
#endif #endif
#ifndef MG_PUTCHAR
#define MG_PUTCHAR(x) putchar(x)
#endif

View File

@ -1,24 +1,17 @@
#include "log.h" #include "log.h"
#include "util.h" #include "util.h"
static void logc(int c) { static const char *s_spec = "2";
putchar(c);
static void logc(unsigned char c) {
MG_PUTCHAR(c);
} }
static void logs(const char *buf, size_t len) { static void logs(const char *buf, size_t len) {
size_t i; size_t i;
for (i = 0; i < len; i++) logc(buf[i]); for (i = 0; i < len; i++) logc(((unsigned char *) buf)[i]);
} }
static void mg_log_stdout(const void *buf, size_t len, void *userdata) {
(void) userdata, (void) buf, (void) len;
logs((const char *) buf, len);
}
static const char *s_spec = "2";
static void (*s_fn)(const void *, size_t, void *) = mg_log_stdout;
static void *s_fn_param = NULL;
void mg_log_set(const char *spec) { void mg_log_set(const char *spec) {
MG_DEBUG(("Setting log level to %s", spec)); MG_DEBUG(("Setting log level to %s", spec));
s_spec = spec; s_spec = spec;
@ -30,8 +23,6 @@ bool mg_log_prefix(int level, const char *file, int line, const char *fname) {
struct mg_str k, v, s = mg_str(s_spec); struct mg_str k, v, s = mg_str(s_spec);
const char *p = strrchr(file, '/'); const char *p = strrchr(file, '/');
if (s_fn == NULL) return false;
if (p == NULL) p = strrchr(file, '\\'); if (p == NULL) p = strrchr(file, '\\');
p = p == NULL ? file : p + 1; p = p == NULL ? file : p + 1;
@ -46,8 +37,7 @@ bool mg_log_prefix(int level, const char *file, int line, const char *fname) {
level, p, line, fname); level, p, line, fname);
if (n > sizeof(buf) - 2) n = sizeof(buf) - 2; if (n > sizeof(buf) - 2) n = sizeof(buf) - 2;
while (n < sizeof(buf)) buf[n++] = ' '; while (n < sizeof(buf)) buf[n++] = ' ';
buf[sizeof(buf) - 1] = '\0'; logs(buf, n - 1);
s_fn(buf, n - 1, s_fn_param);
return true; return true;
} else { } else {
return false; return false;
@ -61,16 +51,11 @@ void mg_log(const char *fmt, ...) {
va_start(ap, fmt); va_start(ap, fmt);
len = mg_vasprintf(&buf, sizeof(mem), fmt, ap); len = mg_vasprintf(&buf, sizeof(mem), fmt, ap);
va_end(ap); va_end(ap);
s_fn(buf, len, s_fn_param); logs(buf, len);
s_fn("\n", 1, s_fn_param); logc((unsigned char) '\n');
if (buf != mem) free(buf); if (buf != mem) free(buf);
} }
void mg_log_set_callback(void (*fn)(const void *, size_t, void *), void *fnd) {
s_fn = fn;
s_fn_param = fnd;
}
static unsigned char nibble(unsigned c) { static unsigned char nibble(unsigned c) {
return (unsigned char) (c < 10 ? c + '0' : c + 'W'); return (unsigned char) (c < 10 ? c + '0' : c + 'W');
} }

View File

@ -7,7 +7,6 @@ enum { MG_LL_NONE, MG_LL_ERROR, MG_LL_INFO, MG_LL_DEBUG, MG_LL_VERBOSE };
void mg_log(const char *fmt, ...) PRINTF_LIKE(1, 2); void mg_log(const char *fmt, ...) PRINTF_LIKE(1, 2);
bool mg_log_prefix(int ll, const char *file, int line, const char *fname); bool mg_log_prefix(int ll, const char *file, int line, const char *fname);
void mg_log_set(const char *spec); void mg_log_set(const char *spec);
void mg_log_set_callback(void (*fn)(const void *, size_t, void *), void *param);
void mg_hexdump(const void *buf, size_t len); void mg_hexdump(const void *buf, size_t len);
#define MG_LOG(level, args) \ #define MG_LOG(level, args) \