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_PACKED_FS | 0 | Enable embedded 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_MAX_RECV_BUF_SIZE | (3 * 1024 * 1024) | Maximum recv buffer size |
|MG_MAX_HTTP_HEADERS | 40 | Maximum number of HTTP headers |
|MG_HTTP_INDEX | "index.html" | Index file for HTML 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
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\_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()
```c

View File

@ -10,19 +10,19 @@ MINGW ?= $(DOCKER) mdashnet/mingw
all: $(PROG)
$(RUN) ./$(PROG)
$(PROG):
$(PROG): $(SOURCES) $(FILES_TO_EMBED)
$(CC) ../../test/pack.c -o pack
./pack $(FILES_TO_EMBED) > packed_fs.c
$(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) wine cmd /c 'pack.exe $(FILES_TO_EMBED) > packed_fs.c'
$(MINGW) i686-w64-mingw32-gcc $(CFLAGS) $(SOURCES) -lws2_32 -o $(PROG).exe
$(MINGW) wine $(PROG).exe
vc98:
vc98: $(SOURCES) $(FILES_TO_EMBED)
$(VC98) cl.exe /nologo $(CFLAGS) ../../test/pack.c /Fepack.exe
$(VC98) cmd /c 'pack.exe $(FILES_TO_EMBED) > packed_fs.c'
$(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
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
32, 61, 32, 40, 41, 32, 61, 62, 10, 32, 32, 32, // = () =>.
32, 32, 32, 102, 101, 116, 99, 104, 40, 39, 47, 97, // fetch('/a
112, 105, 47, 99, 111, 110, 102, 105, 103, 47, 103, 101, // pi/config/ge
116, 39, 41, 46, 116, 104, 101, 110, 40, 114, 32, 61, // t').then(r =
62, 32, 114, 46, 106, 115, 111, 110, 40, 41, 41, 46, // > r.json()).
32, 61, 32, 40, 41, 32, 61, 62, 32, 102, 101, 116, // = () => fet
99, 104, 40, 39, 47, 97, 112, 105, 47, 99, 111, 110, // ch('/api/con
102, 105, 103, 47, 103, 101, 116, 39, 44, 32, 123, 104, // fig/get', {h
101, 97, 100, 101, 114, 115, 58, 32, 123, 65, 117, 116, // eaders: {Aut
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, 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
@ -709,80 +716,85 @@ static const unsigned char v2[] = {
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
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').
46, 116, 104, 101, 110, 40, 114, 32, 61, 62, 32, 114, // .then(r => r
46, 98, 111, 100, 121, 46, 103, 101, 116, 82, 101, 97, // .body.getRea
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').
104, 39, 44, 32, 123, 104, 101, 97, 100, 101, 114, 115, // h', {headers
58, 32, 123, 65, 117, 116, 104, 111, 114, 105, 122, 97, // : {Authoriza
116, 105, 111, 110, 58, 32, 39, 39, 125, 125, 41, 10, // tion: ''}}).
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, 41, 41, 10, 32, 32, 32, 32, 32, 32, 32, // n()).
32, 46, 116, 104, 101, 110, 40, 114, 32, 61, 62, 32, // .then(r =>
108, 111, 103, 105, 110, 40, 114, 41, 41, 10, 32, 32, // login(r)).
32, 32, 32, 32, 32, 32, 46, 99, 97, 116, 99, 104, // .catch
40, 101, 114, 114, 32, 61, 62, 32, 115, 101, 116, 85, // (err => setU
115, 101, 114, 40, 39, 39, 41, 41, 59, 10, 32, 32, // ser(''));.
32, 32, 114, 101, 102, 114, 101, 115, 104, 40, 41, 59, // refresh();
10, 32, 32, 32, 32, 119, 97, 116, 99, 104, 40, 41, // . watch()
59, 10, 32, 32, 125, 44, 32, 91, 93, 41, 59, 10, // ;. }, []);.
10, 32, 32, 105, 102, 32, 40, 33, 117, 115, 101, 114, // . if (!user
41, 32, 114, 101, 116, 117, 114, 110, 32, 104, 116, 109, // ) return htm
108, 96, 60, 36, 123, 76, 111, 103, 105, 110, 125, 32, // l`<${Login}
108, 111, 103, 105, 110, 61, 36, 123, 108, 111, 103, 105, // login=${logi
110, 125, 32, 47, 62, 96, 59, 10, 32, 32, 99, 111, // n} />`;. co
110, 115, 116, 32, 97, 100, 109, 105, 110, 32, 61, 32, // nst admin =
117, 115, 101, 114, 32, 61, 61, 32, 39, 97, 100, 109, // user == 'adm
105, 110, 39, 59, 10, 32, 32, 99, 111, 110, 115, 116, // in';. const
32, 99, 111, 108, 115, 105, 122, 101, 32, 61, 32, 97, // colsize = a
100, 109, 105, 110, 32, 63, 32, 39, 99, 52, 39, 32, // dmin ? 'c4'
58, 32, 39, 99, 54, 39, 59, 10, 32, 32, 99, 111, // : 'c6';. co
110, 115, 116, 32, 99, 115, 32, 61, 32, 97, 100, 109, // nst cs = adm
105, 110, 32, 63, 32, 104, 116, 109, 108, 96, 60, 36, // in ? html`<$
123, 67, 104, 97, 110, 103, 101, 83, 101, 116, 116, 105, // {ChangeSetti
110, 103, 115, 125, 32, 99, 111, 110, 102, 105, 103, 61, // ngs} config=
36, 123, 99, 111, 110, 102, 105, 103, 125, 32, 47, 62, // ${config} />
96, 32, 58, 32, 39, 39, 59, 10, 32, 32, 114, 101, // ` : '';. re
116, 117, 114, 110, 32, 104, 116, 109, 108, 96, 10, 60, // turn html`.<
36, 123, 78, 97, 118, 125, 32, 117, 115, 101, 114, 61, // ${Nav} user=
36, 123, 117, 115, 101, 114, 125, 32, 108, 111, 103, 111, // ${user} logo
117, 116, 61, 36, 123, 108, 111, 103, 111, 117, 116, 125, // ut=${logout}
32, 47, 62, 10, 60, 100, 105, 118, 32, 99, 108, 97, // />.<div cla
115, 115, 61, 34, 99, 111, 110, 116, 97, 105, 110, 101, // ss="containe
114, 34, 62, 10, 32, 32, 60, 36, 123, 72, 101, 114, // r">. <${Her
111, 125, 32, 47, 62, 10, 32, 32, 60, 100, 105, 118, // o} />. <div
32, 99, 108, 97, 115, 115, 61, 34, 114, 111, 119, 34, // class="row"
62, 10, 32, 32, 32, 32, 60, 100, 105, 118, 32, 99, // >. <div c
108, 97, 115, 115, 61, 34, 99, 111, 108, 32, 36, 123, // lass="col ${
99, 111, 108, 115, 105, 122, 101, 125, 34, 62, 60, 36, // colsize}"><$
123, 83, 104, 111, 119, 83, 101, 116, 116, 105, 110, 103, // {ShowSetting
115, 125, 32, 99, 111, 110, 102, 105, 103, 61, 36, 123, // s} config=${
99, 111, 110, 102, 105, 103, 125, 32, 47, 62, 60, 47, // config} /></
110, 40, 114, 32, 61, 62, 32, 114, 46, 98, 111, 100, // n(r => r.bod
121, 46, 103, 101, 116, 82, 101, 97, 100, 101, 114, 40, // y.getReader(
41, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32, 46, // )). .
116, 104, 101, 110, 40, 102, 41, 10, 32, 32, 32, 32, // then(f).
32, 32, 32, 32, 46, 99, 97, 116, 99, 104, 40, 101, // .catch(e
32, 61, 62, 32, 115, 101, 116, 84, 105, 109, 101, 111, // => setTimeo
117, 116, 40, 119, 97, 116, 99, 104, 44, 32, 49, 48, // ut(watch, 10
48, 48, 41, 41, 59, 10, 32, 32, 125, 59, 10, 10, // 00));. };..
32, 32, 117, 115, 101, 69, 102, 102, 101, 99, 116, 40, // useEffect(
40, 41, 32, 61, 62, 32, 123, 10, 32, 32, 32, 32, // () => {.
102, 101, 116, 99, 104, 40, 39, 47, 97, 112, 105, 47, // fetch('/api/
108, 111, 103, 105, 110, 39, 44, 32, 123, 104, 101, 97, // login', {hea
100, 101, 114, 115, 58, 32, 123, 65, 117, 116, 104, 111, // ders: {Autho
114, 105, 122, 97, 116, 105, 111, 110, 58, 32, 39, 39, // rization: ''
125, 125, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32, // }}).
46, 116, 104, 101, 110, 40, 114, 32, 61, 62, 32, 114, // .then(r => r
46, 106, 115, 111, 110, 40, 41, 41, 10, 32, 32, 32, // .json()).
32, 32, 32, 32, 32, 46, 116, 104, 101, 110, 40, 114, // .then(r
32, 61, 62, 32, 108, 111, 103, 105, 110, 40, 114, 41, // => login(r)
41, 10, 32, 32, 32, 32, 32, 32, 32, 32, 46, 99, // ). .c
97, 116, 99, 104, 40, 101, 114, 114, 32, 61, 62, 32, // atch(err =>
115, 101, 116, 85, 115, 101, 114, 40, 39, 39, 41, 41, // setUser(''))
59, 10, 32, 32, 32, 32, 114, 101, 102, 114, 101, 115, // ;. refres
104, 40, 41, 59, 10, 32, 32, 32, 32, 119, 97, 116, // h();. wat
99, 104, 40, 41, 59, 10, 32, 32, 125, 44, 32, 91, // ch();. }, [
93, 41, 59, 10, 10, 32, 32, 105, 102, 32, 40, 33, // ]);.. if (!
117, 115, 101, 114, 41, 32, 114, 101, 116, 117, 114, 110, // user) return
32, 104, 116, 109, 108, 96, 60, 36, 123, 76, 111, 103, // html`<${Log
105, 110, 125, 32, 108, 111, 103, 105, 110, 61, 36, 123, // in} login=${
108, 111, 103, 105, 110, 125, 32, 47, 62, 96, 59, 10, // login} />`;.
32, 32, 99, 111, 110, 115, 116, 32, 97, 100, 109, 105, // const admi
110, 32, 61, 32, 117, 115, 101, 114, 32, 61, 61, 32, // n = user ==
39, 97, 100, 109, 105, 110, 39, 59, 10, 32, 32, 99, // 'admin';. c
111, 110, 115, 116, 32, 99, 111, 108, 115, 105, 122, 101, // onst colsize
32, 61, 32, 97, 100, 109, 105, 110, 32, 63, 32, 39, // = admin ? '
99, 52, 39, 32, 58, 32, 39, 99, 54, 39, 59, 10, // c4' : 'c6';.
32, 32, 99, 111, 110, 115, 116, 32, 99, 115, 32, 61, // const cs =
32, 97, 100, 109, 105, 110, 32, 63, 32, 104, 116, 109, // admin ? htm
108, 96, 60, 36, 123, 67, 104, 97, 110, 103, 101, 83, // l`<${ChangeS
101, 116, 116, 105, 110, 103, 115, 125, 32, 99, 111, 110, // ettings} con
102, 105, 103, 61, 36, 123, 99, 111, 110, 102, 105, 103, // fig=${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
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}"
62, 36, 123, 99, 115, 125, 60, 47, 100, 105, 118, 62, // >${cs}</div>
10, 32, 32, 32, 32, 60, 100, 105, 118, 32, 99, 108, // . <div cl
97, 115, 115, 61, 34, 99, 111, 108, 32, 36, 123, 99, // ass="col ${c
111, 108, 115, 105, 122, 101, 125, 34, 62, 60, 36, 123, // olsize}"><${
67, 104, 97, 116, 125, 32, 109, 101, 115, 115, 97, 103, // Chat} messag
101, 115, 61, 36, 123, 109, 101, 115, 115, 97, 103, 101, // es=${message
115, 125, 32, 47, 62, 60, 47, 100, 105, 118, 62, 10, // s} /></div>.
32, 32, 60, 47, 100, 105, 118, 62, 10, 32, 32, 60, // </div>. <
36, 123, 70, 111, 111, 116, 101, 114, 125, 32, 47, 62, // ${Footer} />
10, 60, 47, 100, 105, 118, 62, 96, 59, 10, 125, 59, // .</div>`;.};
10, 10, 119, 105, 110, 100, 111, 119, 46, 111, 110, 108, // ..window.onl
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);.
62, 60, 36, 123, 67, 104, 97, 116, 125, 32, 109, 101, // ><${Chat} me
115, 115, 97, 103, 101, 115, 61, 36, 123, 109, 101, 115, // ssages=${mes
115, 97, 103, 101, 115, 125, 32, 47, 62, 60, 47, 100, // sages} /></d
105, 118, 62, 10, 32, 32, 60, 47, 100, 105, 118, 62, // iv>. </div>
10, 32, 32, 60, 36, 123, 70, 111, 111, 116, 101, 114, // . <${Footer
125, 32, 47, 62, 10, 60, 47, 100, 105, 118, 62, 96, // } />.</div>`
59, 10, 125, 59, 10, 10, 119, 105, 110, 100, 111, 119, // ;.};..window
46, 111, 110, 108, 111, 97, 100, 32, 61, 32, 40, 41, // .onload = ()
32, 61, 62, 32, 114, 101, 110, 100, 101, 114, 40, 104, // => render(h
40, 65, 112, 112, 41, 44, 32, 100, 111, 99, 117, 109, // (App), docum
101, 110, 116, 46, 98, 111, 100, 121, 41, 59, 10, 0 // ent.body);.
};
static const unsigned char v3[] = {
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;
} packed_files[] = {
{"/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/style.css", v4, sizeof(v4), 1652467860},
{"/web_root/user.png", v5, sizeof(v5), 1626172939},

View File

@ -187,8 +187,9 @@ const App = function(props) {
const [user, setUser] = useState('');
const [config, setConfig] = useState({});
const refresh = () =>
fetch('/api/config/get').then(r => r.json()).then(r => setConfig(r));
const refresh = () => fetch('/api/config/get', {headers: {Authorization: ''}})
.then(r => r.json())
.then(r => setConfig(r));
const login = function(u) {
document.cookie = `access_token=${u.token};path=/;max-age=3600`;
@ -214,14 +215,14 @@ const App = function(props) {
if (!result.done) return f(reader);
});
};
fetch('/api/watch')
fetch('/api/watch', {headers: {Authorization: ''}})
.then(r => r.body.getReader())
.then(f)
.catch(e => setTimeout(watch, 1000));
};
useEffect(() => {
fetch('/api/login')
fetch('/api/login', {headers: {Authorization: ''}})
.then(r => r.json())
.then(r => login(r))
.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);
}
// 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[]) {
mg_log_set(s_debug_level);
mg_log_set_callback(logfn, NULL);
mg_mgr_init(&s_mgr);
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);
}
// 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[]) {
struct mg_mgr mgr;
mg_log_set(s_debug_level);
mg_log_set_callback(logfn, NULL);
mg_mgr_init(&mgr);
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);
}
// 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[]) {
mg_log_set(s_debug_level);
mg_log_set_callback(logfn, NULL);
mg_mgr_init(&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);
}
// 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[]) {
struct mg_mgr mgr;
mg_log_set(s_debug_level);
mg_log_set_callback(logfn, NULL);
mg_mgr_init(&mgr);
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) {
putchar(c);
static const char *s_spec = "2";
static void logc(unsigned char c) {
MG_PUTCHAR(c);
}
static void logs(const char *buf, size_t len) {
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) {
MG_DEBUG(("Setting log level to %s", 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);
const char *p = strrchr(file, '/');
if (s_fn == NULL) return false;
if (p == NULL) p = strrchr(file, '\\');
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);
if (n > sizeof(buf) - 2) n = sizeof(buf) - 2;
while (n < sizeof(buf)) buf[n++] = ' ';
buf[sizeof(buf) - 1] = '\0';
s_fn(buf, n - 1, s_fn_param);
logs(buf, n - 1);
return true;
} else {
return false;
@ -2057,16 +2047,11 @@ void mg_log(const char *fmt, ...) {
va_start(ap, fmt);
len = mg_vasprintf(&buf, sizeof(mem), fmt, ap);
va_end(ap);
s_fn(buf, len, s_fn_param);
s_fn("\n", 1, s_fn_param);
logs(buf, len);
logc((unsigned char) '\n');
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) {
return (unsigned char) (c < 10 ? c + '0' : c + 'W');
}

View File

@ -338,8 +338,6 @@ struct timeval {
#include <rl_net.h>
#define MG_IO_SIZE 512
#define MG_SOCK_LISTEN_BACKLOG_SIZE 1
#define MG_ENABLE_CUSTOM_MILLIS 1
typedef int socklen_t;
#define closesocket(x) closesocket(x)
@ -564,6 +562,7 @@ typedef int socklen_t;
#include <sys/types.h>
#include <time.h>
#define MG_PUTCHAR(x) printk("%c", x)
#define strerror(x) zsock_gai_strerror(x)
#define FD_CLOEXEC 0
#define F_SETFD 0
@ -674,6 +673,10 @@ int sscanf(const char *, const char *, ...);
#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);
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_callback(void (*fn)(const void *, size_t, void *), void *param);
void mg_hexdump(const void *buf, size_t len);
#define MG_LOG(level, args) \

View File

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

View File

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

View File

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

View File

@ -1,24 +1,17 @@
#include "log.h"
#include "util.h"
static void logc(int c) {
putchar(c);
static const char *s_spec = "2";
static void logc(unsigned char c) {
MG_PUTCHAR(c);
}
static void logs(const char *buf, size_t len) {
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) {
MG_DEBUG(("Setting log level to %s", 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);
const char *p = strrchr(file, '/');
if (s_fn == NULL) return false;
if (p == NULL) p = strrchr(file, '\\');
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);
if (n > sizeof(buf) - 2) n = sizeof(buf) - 2;
while (n < sizeof(buf)) buf[n++] = ' ';
buf[sizeof(buf) - 1] = '\0';
s_fn(buf, n - 1, s_fn_param);
logs(buf, n - 1);
return true;
} else {
return false;
@ -61,16 +51,11 @@ void mg_log(const char *fmt, ...) {
va_start(ap, fmt);
len = mg_vasprintf(&buf, sizeof(mem), fmt, ap);
va_end(ap);
s_fn(buf, len, s_fn_param);
s_fn("\n", 1, s_fn_param);
logs(buf, len);
logc((unsigned char) '\n');
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) {
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);
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_callback(void (*fn)(const void *, size_t, void *), void *param);
void mg_hexdump(const void *buf, size_t len);
#define MG_LOG(level, args) \