diff --git a/examples/embedded-filesystem/packed_fs.c b/examples/embedded-filesystem/packed_fs.c index 6b3d62c8..eafd9064 100644 --- a/examples/embedded-filesystem/packed_fs.c +++ b/examples/embedded-filesystem/packed_fs.c @@ -48,6 +48,232 @@ static const unsigned char v1[] = { 47, 104, 116, 109, 108, 62, 10, 0 // /html>. }; static const unsigned char v2[] = { + 39, 117, 115, 101, 32, 115, 116, 114, 105, 99, 116, 39, // 'use strict' + 59, 10, 105, 109, 112, 111, 114, 116, 32, 123, 32, 104, // ;.import { h + 44, 32, 104, 116, 109, 108, 44, 32, 114, 101, 110, 100, // , html, rend + 101, 114, 32, 125, 32, 102, 114, 111, 109, 32, 39, 46, // er } from '. + 47, 112, 114, 101, 97, 99, 116, 46, 109, 105, 110, 46, // /preact.min. + 106, 115, 39, 59, 10, 10, 10, 99, 111, 110, 115, 116, // js';...const + 32, 88, 32, 61, 32, 102, 117, 110, 99, 116, 105, 111, // X = functio + 110, 32, 40, 41, 32, 123, 10, 10, 32, 32, 114, 101, // n () {.. re + 116, 117, 114, 110, 32, 104, 116, 109, 108, 96, 10, 32, // turn html`. + 32, 60, 100, 105, 118, 32, 99, 108, 97, 115, 115, 61, //
+ 10, 32, 32, 32, 32, 60, 104, 50, 32, 99, 108, 97, // .

ABOUT US.
+ 10, 32, 32, 32, 32, 32, 32, 60, 100, 105, 118, 32, // .
. < + 112, 62, 32, 32, 32, 32, 32, 32, 10, 32, 32, 32, // p> . + 32, 32, 32, 32, 32, 32, 32, 67, 101, 115, 97, 110, // Cesan + 116, 97, 32, 83, 111, 102, 116, 119, 97, 114, 101, 32, // ta Software + 76, 116, 100, 46, 32, 105, 115, 32, 104, 101, 97, 100, // Ltd. is head + 113, 117, 97, 114, 116, 101, 114, 101, 100, 194, 160, 105, // quartered..i + 110, 32, 68, 117, 98, 108, 105, 110, 44, 32, 82, 101, // n Dublin, Re + 112, 117, 98, 108, 105, 99, 32, 111, 102, 32, 73, 114, // public of Ir + 101, 108, 97, 110, 100, 46, 10, 32, 32, 32, 32, 32, // eland.. + 32, 32, 32, 60, 47, 112, 62, 10, 32, 32, 32, 32, //

. + 32, 32, 32, 32, 60, 112, 62, 60, 47, 112, 62, 10, //

. + 32, 32, 32, 32, 32, 32, 32, 32, 79, 117, 114, 32, // Our + 115, 116, 111, 114, 121, 32, 114, 111, 111, 116, 115, 32, // story roots + 98, 97, 99, 107, 32, 116, 111, 32, 50, 48, 48, 52, // back to 2004 + 44, 32, 119, 104, 101, 110, 32, 77, 111, 110, 103, 111, // , when Mongo + 111, 115, 101, 32, 87, 101, 98, 32, 83, 101, 114, 118, // ose Web Serv + 101, 114, 32, 76, 105, 98, 114, 97, 114, 121, 194, 160, // er Library.. + 100, 101, 118, 101, 108, 111, 112, 109, 101, 110, 116, 32, // development + 115, 116, 97, 114, 116, 101, 100, 46, 32, 60, 98, 114, // started.
.. A + 115, 32, 77, 111, 110, 103, 111, 111, 115, 101, 32, 87, // s Mongoose W + 101, 98, 32, 83, 101, 114, 118, 101, 114, 32, 103, 114, // eb Server gr + 101, 119, 32, 105, 110, 32, 112, 111, 112, 117, 108, 97, // ew in popula + 114, 105, 116, 121, 32, 97, 110, 100, 32, 109, 97, 116, // rity and mat + 117, 114, 101, 100, 32, 111, 118, 101, 114, 32, 116, 104, // ured over th + 101, 32, 102, 111, 108, 108, 111, 119, 105, 110, 103, 32, // e following + 121, 101, 97, 114, 115, 44, 32, 105, 110, 32, 50, 48, // years, in 20 + 49, 51, 32, 67, 101, 115, 97, 110, 116, 97, 32, 119, // 13 Cesanta w + 97, 115, 32, 101, 115, 116, 97, 98, 108, 105, 115, 104, // as establish + 101, 100, 32, 116, 111, 32, 99, 111, 110, 116, 105, 110, // ed to contin + 117, 101, 32, 105, 116, 115, 32, 100, 101, 118, 101, 108, // ue its devel + 111, 112, 109, 101, 110, 116, 32, 97, 110, 100, 32, 10, // opment and . + 32, 32, 32, 32, 32, 32, 32, 32, 112, 114, 111, 118, // prov + 105, 100, 101, 32, 115, 117, 112, 112, 111, 114, 116, 32, // ide support + 116, 111, 32, 111, 117, 114, 32, 118, 97, 108, 117, 101, // to our value + 100, 32, 99, 117, 115, 116, 111, 109, 101, 114, 115, 46, // d customers. + 10, 32, 32, 32, 32, 32, 32, 32, 32, 60, 47, 112, // .

.

We are prou + 100, 32, 116, 111, 32, 104, 97, 118, 101, 32, 97, 109, // d to have am + 111, 110, 103, 32, 111, 117, 114, 32, 99, 117, 115, 116, // ong our cust + 111, 109, 101, 114, 115, 32, 109, 97, 110, 121, 32, 60, // omers many < + 105, 62, 70, 111, 114, 116, 117, 110, 101, 32, 53, 48, // i>Fortune 50 + 48, 60, 47, 105, 62, 32, 99, 111, 109, 112, 97, 110, // 0 compan + 105, 101, 115, 32, 97, 115, 32, 119, 101, 108, 108, 32, // ies as well + 97, 115, 32, 109, 101, 100, 105, 117, 109, 32, 97, 110, // as medium an + 100, 32, 115, 109, 97, 108, 108, 32, 115, 105, 122, 101, // d small size + 32, 98, 117, 115, 105, 110, 101, 115, 115, 101, 115, 46, // businesses. + 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 83, // . S + 101, 99, 117, 114, 105, 116, 121, 32, 97, 110, 100, 32, // ecurity and + 113, 117, 97, 108, 105, 116, 121, 32, 111, 102, 32, 111, // quality of o + 117, 114, 32, 115, 111, 108, 117, 116, 105, 111, 110, 115, // ur solutions + 32, 105, 115, 32, 97, 32, 112, 97, 114, 97, 109, 111, // is a paramo + 117, 110, 116, 32, 102, 111, 114, 32, 117, 115, 32, 97, // unt for us a + 110, 100, 32, 116, 104, 101, 32, 102, 97, 99, 116, 32, // nd the fact + 116, 104, 97, 116, 32, 77, 111, 110, 103, 111, 111, 115, // that Mongoos + 101, 32, 87, 101, 98, 32, 83, 101, 114, 118, 101, 114, // e Web Server + 32, 105, 115, 32, 117, 115, 101, 100, 32, 98, 121, 32, // is used by + 78, 65, 83, 65, 32, 97, 98, 111, 97, 114, 100, 32, // NASA aboard + 116, 104, 101, 32, 73, 110, 116, 101, 114, 110, 97, 116, // the Internat + 105, 111, 110, 97, 108, 32, 83, 112, 97, 99, 101, 32, // ional Space + 83, 116, 97, 116, 105, 111, 110, 32, 105, 115, 32, 10, // Station is . + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 116, 104, // th + 101, 32, 98, 101, 115, 116, 32, 99, 111, 110, 102, 105, // e best confi + 114, 109, 97, 116, 105, 111, 110, 32, 116, 111, 32, 105, // rmation to i + 116, 46, 60, 47, 112, 62, 10, 32, 32, 32, 32, 32, // t.

. + 32, 32, 32, 32, 32, 60, 112, 62, 83, 105, 110, 99, //

Sinc + 101, 32, 50, 48, 49, 51, 44, 32, 67, 101, 115, 97, // e 2013, Cesa + 110, 116, 97, 32, 104, 97, 115, 32, 101, 120, 112, 97, // nta has expa + 110, 100, 101, 100, 32, 105, 116, 115, 32, 112, 114, 111, // nded its pro + 100, 117, 99, 116, 32, 112, 111, 114, 116, 102, 111, 108, // duct portfol + 105, 111, 46, 32, 87, 101, 32, 100, 101, 118, 101, 108, // io. We devel + 111, 112, 32, 97, 110, 100, 32, 100, 105, 115, 116, 114, // op and distr + 105, 98, 117, 116, 101, 32, 101, 109, 98, 101, 100, 100, // ibute embedd + 101, 100, 32, 115, 111, 102, 116, 119, 97, 114, 101, 32, // ed software + 97, 110, 100, 32, 104, 97, 114, 100, 119, 97, 114, 101, // and hardware + 32, 119, 105, 116, 104, 32, 102, 111, 99, 117, 115, 32, // with focus + 111, 110, 32, 99, 111, 110, 110, 101, 99, 116, 101, 100, // on connected + 32, 112, 114, 111, 100, 117, 99, 116, 115, 32, 97, 110, // products an + 100, 32, 116, 104, 101, 32, 73, 110, 116, 101, 114, 110, // d the Intern + 101, 116, 32, 111, 102, 32, 84, 104, 105, 110, 103, 115, // et of Things + 46, 60, 47, 112, 62, 10, 10, 32, 32, 32, 32, 32, // .

.. + 32, 60, 47, 100, 105, 118, 62, 10, 32, 32, 32, 32, //
. + 60, 47, 100, 105, 118, 62, 10, 32, 32, 60, 47, 100, //
. .`;.};..c + 111, 110, 115, 116, 32, 89, 32, 61, 32, 102, 117, 110, // onst Y = fun + 99, 116, 105, 111, 110, 32, 40, 41, 32, 123, 10, 10, // ction () {.. + 32, 32, 114, 101, 116, 117, 114, 110, 32, 104, 116, 109, // return htm + 108, 96, 10, 32, 32, 60, 100, 105, 118, 32, 99, 108, // l`.
.

Among o + 117, 114, 32, 112, 114, 111, 100, 117, 99, 116, 115, 32, // ur products + 97, 114, 101, 58, 60, 47, 104, 51, 62, 10, 32, 32, // are:

. + 32, 32, 60, 100, 105, 118, 32, 99, 108, 97, 115, 115, //
. + 32, 32, 60, 100, 105, 118, 32, 99, 108, 97, 115, 115, //
. + 32, 32, 32, 32, 32, 60, 117, 108, 62, 10, 32, 32, //
    . + 32, 32, 32, 32, 32, 32, 32, 60, 108, 105, 62, 10, //
  • . + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 60, // < + 97, 32, 104, 114, 101, 102, 61, 34, 104, 116, 116, 112, // a href="http + 115, 58, 47, 47, 109, 111, 110, 103, 111, 111, 115, 101, // s://mongoose + 46, 119, 115, 47, 34, 62, 77, 111, 110, 103, 111, 111, // .ws/">Mongoo + 115, 101, 32, 87, 101, 98, 32, 83, 101, 114, 118, 101, // se Web Serve + 114, 60, 47, 97, 62, 10, 32, 32, 32, 32, 32, 32, // r. + 32, 32, 32, 32, 32, 45, 32, 97, 110, 32, 101, 109, // - an em + 98, 101, 100, 100, 101, 100, 32, 119, 101, 98, 32, 115, // bedded web s + 101, 114, 118, 101, 114, 32, 97, 110, 100, 32, 110, 101, // erver and ne + 116, 119, 111, 114, 107, 105, 110, 103, 32, 108, 105, 98, // tworking lib + 114, 97, 114, 121, 10, 32, 32, 32, 32, 32, 32, 32, // rary. + 32, 32, 60, 47, 108, 105, 62, 10, 32, 32, 32, 32, //
  • . + 32, 32, 32, 32, 32, 60, 108, 105, 62, 10, 32, 32, //
  • . + 32, 32, 32, 32, 32, 32, 32, 32, 32, 60, 97, 32, // + 86, 67, 79, 78, 46, 105, 111, 60, 47, 97, 62, 10, // VCON.io. + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 45, // - + 32, 65, 114, 100, 117, 105, 110, 111, 45, 99, 111, 109, // Arduino-com + 112, 97, 116, 105, 98, 108, 101, 32, 98, 111, 97, 114, // patible boar + 100, 115, 32, 119, 105, 116, 104, 32, 98, 117, 105, 108, // ds with buil + 116, 45, 105, 110, 32, 102, 105, 114, 109, 119, 97, 114, // t-in firmwar + 101, 32, 79, 84, 65, 32, 117, 112, 100, 97, 116, 101, // e OTA update + 115, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, // s. + 32, 97, 110, 100, 32, 109, 97, 110, 97, 103, 101, 109, // and managem + 101, 110, 116, 32, 100, 97, 115, 104, 98, 111, 97, 114, // ent dashboar + 100, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 60, // d. < + 47, 108, 105, 62, 10, 32, 32, 32, 32, 32, 32, 32, // /li>. + 32, 32, 60, 108, 105, 62, 10, 32, 32, 32, 32, 32, //
  • . + 32, 32, 32, 32, 32, 32, 60, 97, 32, 104, 114, 101, // m + 68, 97, 115, 104, 46, 110, 101, 116, 60, 47, 97, 62, // Dash.net + 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, // . + 45, 32, 97, 110, 32, 97, 108, 108, 45, 105, 110, 45, // - an all-in- + 111, 110, 101, 32, 73, 111, 84, 32, 80, 108, 97, 116, // one IoT Plat + 102, 111, 114, 109, 10, 32, 32, 32, 32, 32, 32, 32, // form. + 32, 32, 60, 47, 108, 105, 62, 10, 32, 32, 32, 32, //
  • . + 32, 32, 32, 32, 32, 60, 108, 105, 62, 10, 32, 32, //
  • . + 32, 32, 32, 32, 32, 32, 32, 32, 32, 60, 97, 32, // Mongo + 111, 115, 101, 32, 79, 83, 60, 47, 97, 62, 10, 32, // ose OS. + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 45, 32, // - + 97, 110, 32, 111, 112, 101, 114, 97, 116, 105, 110, 103, // an operating + 32, 115, 121, 115, 116, 101, 109, 32, 102, 111, 114, 32, // system for + 108, 111, 119, 45, 112, 111, 119, 101, 114, 32, 109, 105, // low-power mi + 99, 114, 111, 99, 111, 110, 116, 114, 111, 108, 108, 101, // crocontrolle + 114, 115, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, // rs. + 60, 47, 108, 105, 62, 10, 10, 32, 32, 32, 32, 32, //
  • .. + 32, 32, 32, 32, 60, 108, 105, 62, 10, 32, 32, 32, //
  • . + 32, 32, 32, 32, 32, 32, 32, 32, 60, 97, 32, 104, // mJS. + 32, 32, 32, 32, 32, 32, 32, 32, 45, 32, 97, 110, // - an + 32, 101, 109, 98, 101, 100, 100, 101, 100, 32, 74, 97, // embedded Ja + 118, 97, 83, 99, 114, 105, 112, 116, 32, 101, 110, 103, // vaScript eng + 105, 110, 101, 32, 102, 111, 114, 32, 67, 47, 67, 43, // ine for C/C+ + 43, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 60, // +. < + 47, 108, 105, 62, 10, 32, 32, 32, 32, 32, 32, 32, // /li>. + 60, 47, 117, 108, 62, 10, 32, 32, 32, 32, 32, 32, //
. + 60, 47, 100, 105, 118, 62, 10, 32, 32, 32, 32, 32, //
. + 32, 60, 100, 105, 118, 32, 99, 108, 97, 115, 115, 61, //
. + 32, 32, 32, 32, 32, 60, 112, 62, 60, 98, 62, 79, //

O + 117, 114, 32, 115, 111, 108, 117, 116, 105, 111, 110, 115, // ur solutions + 32, 97, 114, 101, 58, 60, 47, 98, 62, 60, 47, 112, // are:

. . + 32, 60, 108, 105, 62, 105, 110, 116, 101, 103, 114, 97, //
  • integra + 116, 101, 100, 32, 105, 110, 116, 111, 32, 116, 104, 111, // ted into tho + 117, 115, 97, 110, 100, 115, 32, 111, 102, 32, 99, 111, // usands of co + 109, 109, 101, 114, 99, 105, 97, 108, 32, 112, 114, 111, // mmercial pro + 100, 117, 99, 116, 115, 60, 47, 108, 105, 62, 10, 32, // ducts
  • . + 32, 32, 32, 32, 32, 32, 32, 32, 32, 60, 108, 105, //
  • deployed to + 32, 104, 117, 110, 100, 114, 101, 100, 115, 32, 111, 102, // hundreds of + 32, 109, 105, 108, 108, 105, 111, 110, 115, 32, 100, 101, // millions de + 118, 105, 99, 101, 115, 32, 105, 110, 32, 112, 114, 111, // vices in pro + 100, 117, 99, 116, 105, 111, 110, 32, 101, 110, 118, 105, // duction envi + 114, 111, 110, 109, 101, 110, 116, 115, 60, 47, 108, 105, // ronments
  • . . . .
    + 10, 96, 59, 10, 125, 59, 10, 10, 99, 111, 110, 115, // .`;.};..cons + 116, 32, 65, 112, 112, 32, 61, 32, 102, 117, 110, 99, // t App = func + 116, 105, 111, 110, 32, 40, 112, 114, 111, 112, 115, 41, // tion (props) + 32, 123, 10, 10, 32, 32, 114, 101, 116, 117, 114, 110, // {.. return + 32, 104, 116, 109, 108, 96, 10, 60, 104, 49, 62, 66, // html`.

    B + 97, 115, 105, 99, 32, 69, 109, 98, 101, 100, 100, 101, // asic Embedde + 100, 32, 70, 105, 108, 101, 115, 121, 115, 116, 101, 109, // d Filesystem + 32, 100, 101, 109, 111, 60, 47, 104, 49, 62, 10, 60, // demo

    .< + 100, 105, 118, 62, 10, 32, 32, 36, 123, 104, 40, 88, // div>. ${h(X + 41, 125, 10, 60, 47, 100, 105, 118, 62, 10, 60, 100, // )}.
    .. ${h(Y) + 125, 10, 60, 47, 100, 105, 118, 62, 96, 59, 10, 125, // }.
    `;.} + 59, 10, 10, 119, 105, 110, 100, 111, 119, 46, 111, 110, // ;..window.on + 108, 111, 97, 100, 32, 61, 32, 40, 41, 32, 61, 62, // load = () => + 32, 114, 101, 110, 100, 101, 114, 40, 104, 40, 65, 112, // render(h(Ap + 112, 41, 44, 32, 100, 111, 99, 117, 109, 101, 110, 116, // p), document + 46, 98, 111, 100, 121, 41, 59, 10, 0 // .body);. +}; +static const unsigned char v3[] = { 118, 97, 114, 32, 101, 44, 110, 44, 95, 44, 116, 44, // var e,n,_,t, 111, 44, 114, 44, 117, 44, 108, 61, 123, 125, 44, 105, // o,r,u,l={},i 61, 91, 93, 44, 99, 61, 47, 97, 99, 105, 116, 124, // =[],c=/acit| @@ -1149,7 +1375,7 @@ static const unsigned char v2[] = { 115, 101, 69, 114, 114, 111, 114, 66, 111, 117, 110, 100, // seErrorBound 97, 114, 121, 125, 59, 10, 0 // ary};. }; -static const unsigned char v3[] = { +static const unsigned char v4[] = { 42, 32, 123, 32, 98, 111, 120, 45, 115, 105, 122, 105, // * { box-sizi 110, 103, 58, 32, 98, 111, 114, 100, 101, 114, 45, 98, // ng: border-b 111, 120, 59, 32, 125, 10, 104, 116, 109, 108, 44, 32, // ox; }.html, @@ -1304,232 +1530,6 @@ static const unsigned char v3[] = { 123, 32, 119, 105, 100, 116, 104, 58, 32, 49, 48, 48, // { width: 100 37, 59, 32, 125, 32, 125, 10, 0 // %; } }. }; -static const unsigned char v4[] = { - 39, 117, 115, 101, 32, 115, 116, 114, 105, 99, 116, 39, // 'use strict' - 59, 10, 105, 109, 112, 111, 114, 116, 32, 123, 32, 104, // ;.import { h - 44, 32, 104, 116, 109, 108, 44, 32, 114, 101, 110, 100, // , html, rend - 101, 114, 32, 125, 32, 102, 114, 111, 109, 32, 39, 46, // er } from '. - 47, 112, 114, 101, 97, 99, 116, 46, 109, 105, 110, 46, // /preact.min. - 106, 115, 39, 59, 10, 10, 10, 99, 111, 110, 115, 116, // js';...const - 32, 88, 32, 61, 32, 102, 117, 110, 99, 116, 105, 111, // X = functio - 110, 32, 40, 41, 32, 123, 10, 10, 32, 32, 114, 101, // n () {.. re - 116, 117, 114, 110, 32, 104, 116, 109, 108, 96, 10, 32, // turn html`. - 32, 60, 100, 105, 118, 32, 99, 108, 97, 115, 115, 61, //
    - 10, 32, 32, 32, 32, 60, 104, 50, 32, 99, 108, 97, // .

    ABOUT US.
    - 10, 32, 32, 32, 32, 32, 32, 60, 100, 105, 118, 32, // .
    . < - 112, 62, 32, 32, 32, 32, 32, 32, 10, 32, 32, 32, // p> . - 32, 32, 32, 32, 32, 32, 32, 67, 101, 115, 97, 110, // Cesan - 116, 97, 32, 83, 111, 102, 116, 119, 97, 114, 101, 32, // ta Software - 76, 116, 100, 46, 32, 105, 115, 32, 104, 101, 97, 100, // Ltd. is head - 113, 117, 97, 114, 116, 101, 114, 101, 100, 194, 160, 105, // quartered..i - 110, 32, 68, 117, 98, 108, 105, 110, 44, 32, 82, 101, // n Dublin, Re - 112, 117, 98, 108, 105, 99, 32, 111, 102, 32, 73, 114, // public of Ir - 101, 108, 97, 110, 100, 46, 10, 32, 32, 32, 32, 32, // eland.. - 32, 32, 32, 60, 47, 112, 62, 10, 32, 32, 32, 32, //

    . - 32, 32, 32, 32, 60, 112, 62, 60, 47, 112, 62, 10, //

    . - 32, 32, 32, 32, 32, 32, 32, 32, 79, 117, 114, 32, // Our - 115, 116, 111, 114, 121, 32, 114, 111, 111, 116, 115, 32, // story roots - 98, 97, 99, 107, 32, 116, 111, 32, 50, 48, 48, 52, // back to 2004 - 44, 32, 119, 104, 101, 110, 32, 77, 111, 110, 103, 111, // , when Mongo - 111, 115, 101, 32, 87, 101, 98, 32, 83, 101, 114, 118, // ose Web Serv - 101, 114, 32, 76, 105, 98, 114, 97, 114, 121, 194, 160, // er Library.. - 100, 101, 118, 101, 108, 111, 112, 109, 101, 110, 116, 32, // development - 115, 116, 97, 114, 116, 101, 100, 46, 32, 60, 98, 114, // started.
    .. A - 115, 32, 77, 111, 110, 103, 111, 111, 115, 101, 32, 87, // s Mongoose W - 101, 98, 32, 83, 101, 114, 118, 101, 114, 32, 103, 114, // eb Server gr - 101, 119, 32, 105, 110, 32, 112, 111, 112, 117, 108, 97, // ew in popula - 114, 105, 116, 121, 32, 97, 110, 100, 32, 109, 97, 116, // rity and mat - 117, 114, 101, 100, 32, 111, 118, 101, 114, 32, 116, 104, // ured over th - 101, 32, 102, 111, 108, 108, 111, 119, 105, 110, 103, 32, // e following - 121, 101, 97, 114, 115, 44, 32, 105, 110, 32, 50, 48, // years, in 20 - 49, 51, 32, 67, 101, 115, 97, 110, 116, 97, 32, 119, // 13 Cesanta w - 97, 115, 32, 101, 115, 116, 97, 98, 108, 105, 115, 104, // as establish - 101, 100, 32, 116, 111, 32, 99, 111, 110, 116, 105, 110, // ed to contin - 117, 101, 32, 105, 116, 115, 32, 100, 101, 118, 101, 108, // ue its devel - 111, 112, 109, 101, 110, 116, 32, 97, 110, 100, 32, 10, // opment and . - 32, 32, 32, 32, 32, 32, 32, 32, 112, 114, 111, 118, // prov - 105, 100, 101, 32, 115, 117, 112, 112, 111, 114, 116, 32, // ide support - 116, 111, 32, 111, 117, 114, 32, 118, 97, 108, 117, 101, // to our value - 100, 32, 99, 117, 115, 116, 111, 109, 101, 114, 115, 46, // d customers. - 10, 32, 32, 32, 32, 32, 32, 32, 32, 60, 47, 112, // .

    .

    We are prou - 100, 32, 116, 111, 32, 104, 97, 118, 101, 32, 97, 109, // d to have am - 111, 110, 103, 32, 111, 117, 114, 32, 99, 117, 115, 116, // ong our cust - 111, 109, 101, 114, 115, 32, 109, 97, 110, 121, 32, 60, // omers many < - 105, 62, 70, 111, 114, 116, 117, 110, 101, 32, 53, 48, // i>Fortune 50 - 48, 60, 47, 105, 62, 32, 99, 111, 109, 112, 97, 110, // 0 compan - 105, 101, 115, 32, 97, 115, 32, 119, 101, 108, 108, 32, // ies as well - 97, 115, 32, 109, 101, 100, 105, 117, 109, 32, 97, 110, // as medium an - 100, 32, 115, 109, 97, 108, 108, 32, 115, 105, 122, 101, // d small size - 32, 98, 117, 115, 105, 110, 101, 115, 115, 101, 115, 46, // businesses. - 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 83, // . S - 101, 99, 117, 114, 105, 116, 121, 32, 97, 110, 100, 32, // ecurity and - 113, 117, 97, 108, 105, 116, 121, 32, 111, 102, 32, 111, // quality of o - 117, 114, 32, 115, 111, 108, 117, 116, 105, 111, 110, 115, // ur solutions - 32, 105, 115, 32, 97, 32, 112, 97, 114, 97, 109, 111, // is a paramo - 117, 110, 116, 32, 102, 111, 114, 32, 117, 115, 32, 97, // unt for us a - 110, 100, 32, 116, 104, 101, 32, 102, 97, 99, 116, 32, // nd the fact - 116, 104, 97, 116, 32, 77, 111, 110, 103, 111, 111, 115, // that Mongoos - 101, 32, 87, 101, 98, 32, 83, 101, 114, 118, 101, 114, // e Web Server - 32, 105, 115, 32, 117, 115, 101, 100, 32, 98, 121, 32, // is used by - 78, 65, 83, 65, 32, 97, 98, 111, 97, 114, 100, 32, // NASA aboard - 116, 104, 101, 32, 73, 110, 116, 101, 114, 110, 97, 116, // the Internat - 105, 111, 110, 97, 108, 32, 83, 112, 97, 99, 101, 32, // ional Space - 83, 116, 97, 116, 105, 111, 110, 32, 105, 115, 32, 10, // Station is . - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 116, 104, // th - 101, 32, 98, 101, 115, 116, 32, 99, 111, 110, 102, 105, // e best confi - 114, 109, 97, 116, 105, 111, 110, 32, 116, 111, 32, 105, // rmation to i - 116, 46, 60, 47, 112, 62, 10, 32, 32, 32, 32, 32, // t.

    . - 32, 32, 32, 32, 32, 60, 112, 62, 83, 105, 110, 99, //

    Sinc - 101, 32, 50, 48, 49, 51, 44, 32, 67, 101, 115, 97, // e 2013, Cesa - 110, 116, 97, 32, 104, 97, 115, 32, 101, 120, 112, 97, // nta has expa - 110, 100, 101, 100, 32, 105, 116, 115, 32, 112, 114, 111, // nded its pro - 100, 117, 99, 116, 32, 112, 111, 114, 116, 102, 111, 108, // duct portfol - 105, 111, 46, 32, 87, 101, 32, 100, 101, 118, 101, 108, // io. We devel - 111, 112, 32, 97, 110, 100, 32, 100, 105, 115, 116, 114, // op and distr - 105, 98, 117, 116, 101, 32, 101, 109, 98, 101, 100, 100, // ibute embedd - 101, 100, 32, 115, 111, 102, 116, 119, 97, 114, 101, 32, // ed software - 97, 110, 100, 32, 104, 97, 114, 100, 119, 97, 114, 101, // and hardware - 32, 119, 105, 116, 104, 32, 102, 111, 99, 117, 115, 32, // with focus - 111, 110, 32, 99, 111, 110, 110, 101, 99, 116, 101, 100, // on connected - 32, 112, 114, 111, 100, 117, 99, 116, 115, 32, 97, 110, // products an - 100, 32, 116, 104, 101, 32, 73, 110, 116, 101, 114, 110, // d the Intern - 101, 116, 32, 111, 102, 32, 84, 104, 105, 110, 103, 115, // et of Things - 46, 60, 47, 112, 62, 10, 10, 32, 32, 32, 32, 32, // .

    .. - 32, 60, 47, 100, 105, 118, 62, 10, 32, 32, 32, 32, //
    . - 60, 47, 100, 105, 118, 62, 10, 32, 32, 60, 47, 100, //
    . .`;.};..c - 111, 110, 115, 116, 32, 89, 32, 61, 32, 102, 117, 110, // onst Y = fun - 99, 116, 105, 111, 110, 32, 40, 41, 32, 123, 10, 10, // ction () {.. - 32, 32, 114, 101, 116, 117, 114, 110, 32, 104, 116, 109, // return htm - 108, 96, 10, 32, 32, 60, 100, 105, 118, 32, 99, 108, // l`.
    .

    Among o - 117, 114, 32, 112, 114, 111, 100, 117, 99, 116, 115, 32, // ur products - 97, 114, 101, 58, 60, 47, 104, 51, 62, 10, 32, 32, // are:

    . - 32, 32, 60, 100, 105, 118, 32, 99, 108, 97, 115, 115, //
    . - 32, 32, 60, 100, 105, 118, 32, 99, 108, 97, 115, 115, //
    . - 32, 32, 32, 32, 32, 60, 117, 108, 62, 10, 32, 32, //
      . - 32, 32, 32, 32, 32, 32, 32, 60, 108, 105, 62, 10, //
    • . - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 60, // < - 97, 32, 104, 114, 101, 102, 61, 34, 104, 116, 116, 112, // a href="http - 115, 58, 47, 47, 109, 111, 110, 103, 111, 111, 115, 101, // s://mongoose - 46, 119, 115, 47, 34, 62, 77, 111, 110, 103, 111, 111, // .ws/">Mongoo - 115, 101, 32, 87, 101, 98, 32, 83, 101, 114, 118, 101, // se Web Serve - 114, 60, 47, 97, 62, 10, 32, 32, 32, 32, 32, 32, // r. - 32, 32, 32, 32, 32, 45, 32, 97, 110, 32, 101, 109, // - an em - 98, 101, 100, 100, 101, 100, 32, 119, 101, 98, 32, 115, // bedded web s - 101, 114, 118, 101, 114, 32, 97, 110, 100, 32, 110, 101, // erver and ne - 116, 119, 111, 114, 107, 105, 110, 103, 32, 108, 105, 98, // tworking lib - 114, 97, 114, 121, 10, 32, 32, 32, 32, 32, 32, 32, // rary. - 32, 32, 60, 47, 108, 105, 62, 10, 32, 32, 32, 32, //
    • . - 32, 32, 32, 32, 32, 60, 108, 105, 62, 10, 32, 32, //
    • . - 32, 32, 32, 32, 32, 32, 32, 32, 32, 60, 97, 32, // - 86, 67, 79, 78, 46, 105, 111, 60, 47, 97, 62, 10, // VCON.io. - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 45, // - - 32, 65, 114, 100, 117, 105, 110, 111, 45, 99, 111, 109, // Arduino-com - 112, 97, 116, 105, 98, 108, 101, 32, 98, 111, 97, 114, // patible boar - 100, 115, 32, 119, 105, 116, 104, 32, 98, 117, 105, 108, // ds with buil - 116, 45, 105, 110, 32, 102, 105, 114, 109, 119, 97, 114, // t-in firmwar - 101, 32, 79, 84, 65, 32, 117, 112, 100, 97, 116, 101, // e OTA update - 115, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, // s. - 32, 97, 110, 100, 32, 109, 97, 110, 97, 103, 101, 109, // and managem - 101, 110, 116, 32, 100, 97, 115, 104, 98, 111, 97, 114, // ent dashboar - 100, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 60, // d. < - 47, 108, 105, 62, 10, 32, 32, 32, 32, 32, 32, 32, // /li>. - 32, 32, 60, 108, 105, 62, 10, 32, 32, 32, 32, 32, //
    • . - 32, 32, 32, 32, 32, 32, 60, 97, 32, 104, 114, 101, // m - 68, 97, 115, 104, 46, 110, 101, 116, 60, 47, 97, 62, // Dash.net - 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, // . - 45, 32, 97, 110, 32, 97, 108, 108, 45, 105, 110, 45, // - an all-in- - 111, 110, 101, 32, 73, 111, 84, 32, 80, 108, 97, 116, // one IoT Plat - 102, 111, 114, 109, 10, 32, 32, 32, 32, 32, 32, 32, // form. - 32, 32, 60, 47, 108, 105, 62, 10, 32, 32, 32, 32, //
    • . - 32, 32, 32, 32, 32, 60, 108, 105, 62, 10, 32, 32, //
    • . - 32, 32, 32, 32, 32, 32, 32, 32, 32, 60, 97, 32, // Mongo - 111, 115, 101, 32, 79, 83, 60, 47, 97, 62, 10, 32, // ose OS. - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 45, 32, // - - 97, 110, 32, 111, 112, 101, 114, 97, 116, 105, 110, 103, // an operating - 32, 115, 121, 115, 116, 101, 109, 32, 102, 111, 114, 32, // system for - 108, 111, 119, 45, 112, 111, 119, 101, 114, 32, 109, 105, // low-power mi - 99, 114, 111, 99, 111, 110, 116, 114, 111, 108, 108, 101, // crocontrolle - 114, 115, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, // rs. - 60, 47, 108, 105, 62, 10, 10, 32, 32, 32, 32, 32, //
    • .. - 32, 32, 32, 32, 60, 108, 105, 62, 10, 32, 32, 32, //
    • . - 32, 32, 32, 32, 32, 32, 32, 32, 60, 97, 32, 104, // mJS. - 32, 32, 32, 32, 32, 32, 32, 32, 45, 32, 97, 110, // - an - 32, 101, 109, 98, 101, 100, 100, 101, 100, 32, 74, 97, // embedded Ja - 118, 97, 83, 99, 114, 105, 112, 116, 32, 101, 110, 103, // vaScript eng - 105, 110, 101, 32, 102, 111, 114, 32, 67, 47, 67, 43, // ine for C/C+ - 43, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 60, // +. < - 47, 108, 105, 62, 10, 32, 32, 32, 32, 32, 32, 32, // /li>. - 60, 47, 117, 108, 62, 10, 32, 32, 32, 32, 32, 32, //
    . - 60, 47, 100, 105, 118, 62, 10, 32, 32, 32, 32, 32, //
    . - 32, 60, 100, 105, 118, 32, 99, 108, 97, 115, 115, 61, //
    . - 32, 32, 32, 32, 32, 60, 112, 62, 60, 98, 62, 79, //

    O - 117, 114, 32, 115, 111, 108, 117, 116, 105, 111, 110, 115, // ur solutions - 32, 97, 114, 101, 58, 60, 47, 98, 62, 60, 47, 112, // are:

    . . - 32, 60, 108, 105, 62, 105, 110, 116, 101, 103, 114, 97, //
  • integra - 116, 101, 100, 32, 105, 110, 116, 111, 32, 116, 104, 111, // ted into tho - 117, 115, 97, 110, 100, 115, 32, 111, 102, 32, 99, 111, // usands of co - 109, 109, 101, 114, 99, 105, 97, 108, 32, 112, 114, 111, // mmercial pro - 100, 117, 99, 116, 115, 60, 47, 108, 105, 62, 10, 32, // ducts
  • . - 32, 32, 32, 32, 32, 32, 32, 32, 32, 60, 108, 105, //
  • deployed to - 32, 104, 117, 110, 100, 114, 101, 100, 115, 32, 111, 102, // hundreds of - 32, 109, 105, 108, 108, 105, 111, 110, 115, 32, 100, 101, // millions de - 118, 105, 99, 101, 115, 32, 105, 110, 32, 112, 114, 111, // vices in pro - 100, 117, 99, 116, 105, 111, 110, 32, 101, 110, 118, 105, // duction envi - 114, 111, 110, 109, 101, 110, 116, 115, 60, 47, 108, 105, // ronments
  • . . . .
    - 10, 96, 59, 10, 125, 59, 10, 10, 99, 111, 110, 115, // .`;.};..cons - 116, 32, 65, 112, 112, 32, 61, 32, 102, 117, 110, 99, // t App = func - 116, 105, 111, 110, 32, 40, 112, 114, 111, 112, 115, 41, // tion (props) - 32, 123, 10, 10, 32, 32, 114, 101, 116, 117, 114, 110, // {.. return - 32, 104, 116, 109, 108, 96, 10, 60, 104, 49, 62, 66, // html`.

    B - 97, 115, 105, 99, 32, 69, 109, 98, 101, 100, 100, 101, // asic Embedde - 100, 32, 70, 105, 108, 101, 115, 121, 115, 116, 101, 109, // d Filesystem - 32, 100, 101, 109, 111, 60, 47, 104, 49, 62, 10, 60, // demo

    .< - 100, 105, 118, 62, 10, 32, 32, 36, 123, 104, 40, 88, // div>. ${h(X - 41, 125, 10, 60, 47, 100, 105, 118, 62, 10, 60, 100, // )}.
    .. ${h(Y) - 125, 10, 60, 47, 100, 105, 118, 62, 96, 59, 10, 125, // }.
    `;.} - 59, 10, 10, 119, 105, 110, 100, 111, 119, 46, 111, 110, // ;..window.on - 108, 111, 97, 100, 32, 61, 32, 40, 41, 32, 61, 62, // load = () => - 32, 114, 101, 110, 100, 101, 114, 40, 104, 40, 65, 112, // render(h(Ap - 112, 41, 44, 32, 100, 111, 99, 117, 109, 101, 110, 116, // p), document - 46, 98, 111, 100, 121, 41, 59, 10, 0 // .body);. -}; static const struct packed_file { const char *name; @@ -1537,10 +1537,10 @@ static const struct packed_file { size_t size; time_t mtime; } packed_files[] = { - {"/web_root/index.html", v1, sizeof(v1), 1660140294}, - {"/web_root/preact.min.js", v2, sizeof(v2), 1660138387}, - {"/web_root/style.css", v3, sizeof(v3), 1660138387}, - {"/web_root/main.js", v4, sizeof(v4), 1660142672}, + {"/web_root/index.html", v1, sizeof(v1), 1660216320}, + {"/web_root/main.js", v2, sizeof(v2), 1660216320}, + {"/web_root/preact.min.js", v3, sizeof(v3), 1660216320}, + {"/web_root/style.css", v4, sizeof(v4), 1660216320}, {NULL, NULL, 0, 0} }; diff --git a/mongoose.c b/mongoose.c index 34942341..997053d6 100644 --- a/mongoose.c +++ b/mongoose.c @@ -2092,9 +2092,9 @@ static int uri_to_path2(struct mg_connection *c, struct mg_http_message *hm, (tmp = fs->st(path, NULL, NULL)) != 0))) { flags = tmp; } else if ((mg_snprintf(path + n, path_size - n, "/" MG_HTTP_INDEX ".gz") > 0 && - (tmp = fs->st(path, NULL, NULL)) != 0)) { + (tmp = fs->st(path, NULL, NULL)) != 0)) { // check for gzipped index flags = tmp; - path[n + 1 + strlen(MG_HTTP_INDEX)] = '\0'; // Remove appended .gz + path[n + 1 + strlen(MG_HTTP_INDEX)] = '\0'; // Remove appended .gz in index file name } else { path[n] = '\0'; // Remove appended index file name } @@ -5705,19 +5705,18 @@ struct ws_msg { }; size_t mg_ws_vprintf(struct mg_connection *c, int op, const char *fmt, - va_list ap) { - char mem[256], *buf = mem; - size_t len = mg_vasprintf(&buf, sizeof(mem), fmt, ap); - len = mg_ws_send(c, buf, len, op); - if (buf != mem) free(buf); - return len; + va_list *ap) { + size_t len = c->send.len; + size_t n = mg_vrprintf(mg_pfn_iobuf, &c->send, fmt, ap); + mg_ws_wrap(c, c->send.len - len, op); + return n; } size_t mg_ws_printf(struct mg_connection *c, int op, const char *fmt, ...) { size_t len = 0; va_list ap; va_start(ap, fmt); - len = mg_ws_vprintf(c, op, fmt, ap); + len = mg_ws_vprintf(c, op, fmt, &ap); va_end(ap); return len; } @@ -5752,6 +5751,11 @@ static void ws_handshake(struct mg_connection *c, const struct mg_str *wskey, mg_send(c, "\r\n", 2); } +static uint32_t be32(const uint8_t *p) { + return (((uint32_t) p[3]) << 0) | (((uint32_t) p[2]) << 8) | + (((uint32_t) p[1]) << 16) | (((uint32_t) p[0]) << 24); +} + static size_t ws_process(uint8_t *buf, size_t len, struct ws_msg *msg) { size_t i, n = 0, mask_len = 0; memset(msg, 0, sizeof(*msg)); @@ -5764,12 +5768,11 @@ static size_t ws_process(uint8_t *buf, size_t len, struct ws_msg *msg) { msg->header_len = 2 + mask_len; } else if (n == 126 && len >= 4 + mask_len) { msg->header_len = 4 + mask_len; - msg->data_len = mg_ntohs(*(uint16_t *) &buf[2]); + msg->data_len = (((size_t) buf[2]) << 8) | buf[3]; } else if (len >= 10 + mask_len) { msg->header_len = 10 + mask_len; msg->data_len = - (size_t) (((uint64_t) mg_ntohl(*(uint32_t *) &buf[2])) << 32) + - mg_ntohl(*(uint32_t *) &buf[6]); + (size_t) (((uint64_t) be32(buf + 2) << 32) + be32(buf + 6)); } } // Sanity check, and integer overflow protection for the boundary check below @@ -5797,9 +5800,9 @@ static size_t mkhdr(size_t len, int op, bool is_client, uint8_t *buf) { } else { uint32_t tmp; buf[1] = 127; - tmp = mg_htonl((uint32_t) ((uint64_t) len >> 32)); + tmp = mg_htonl((uint32_t) (len >> 32)); memcpy(&buf[2], &tmp, sizeof(tmp)); - tmp = mg_htonl((uint32_t) (len & 0xffffffff)); + tmp = mg_htonl((uint32_t) (len & 0xffffffffU)); memcpy(&buf[6], &tmp, sizeof(tmp)); n = 10; } diff --git a/mongoose.h b/mongoose.h index 41eb1f8d..14791527 100644 --- a/mongoose.h +++ b/mongoose.h @@ -1262,7 +1262,8 @@ void mg_ws_upgrade(struct mg_connection *, struct mg_http_message *, size_t mg_ws_send(struct mg_connection *, const void *buf, size_t len, int op); size_t mg_ws_wrap(struct mg_connection *, size_t len, int op); size_t mg_ws_printf(struct mg_connection *c, int op, const char *fmt, ...); -size_t mg_ws_vprintf(struct mg_connection *c, int op, const char *fmt, va_list); +size_t mg_ws_vprintf(struct mg_connection *c, int op, const char *fmt, + va_list *); diff --git a/src/ws.c b/src/ws.c index fbf97750..4eba7c5b 100644 --- a/src/ws.c +++ b/src/ws.c @@ -15,19 +15,18 @@ struct ws_msg { }; size_t mg_ws_vprintf(struct mg_connection *c, int op, const char *fmt, - va_list ap) { - char mem[256], *buf = mem; - size_t len = mg_vasprintf(&buf, sizeof(mem), fmt, ap); - len = mg_ws_send(c, buf, len, op); - if (buf != mem) free(buf); - return len; + va_list *ap) { + size_t len = c->send.len; + size_t n = mg_vrprintf(mg_pfn_iobuf, &c->send, fmt, ap); + mg_ws_wrap(c, c->send.len - len, op); + return n; } size_t mg_ws_printf(struct mg_connection *c, int op, const char *fmt, ...) { size_t len = 0; va_list ap; va_start(ap, fmt); - len = mg_ws_vprintf(c, op, fmt, ap); + len = mg_ws_vprintf(c, op, fmt, &ap); va_end(ap); return len; } @@ -62,6 +61,11 @@ static void ws_handshake(struct mg_connection *c, const struct mg_str *wskey, mg_send(c, "\r\n", 2); } +static uint32_t be32(const uint8_t *p) { + return (((uint32_t) p[3]) << 0) | (((uint32_t) p[2]) << 8) | + (((uint32_t) p[1]) << 16) | (((uint32_t) p[0]) << 24); +} + static size_t ws_process(uint8_t *buf, size_t len, struct ws_msg *msg) { size_t i, n = 0, mask_len = 0; memset(msg, 0, sizeof(*msg)); @@ -74,12 +78,11 @@ static size_t ws_process(uint8_t *buf, size_t len, struct ws_msg *msg) { msg->header_len = 2 + mask_len; } else if (n == 126 && len >= 4 + mask_len) { msg->header_len = 4 + mask_len; - msg->data_len = mg_ntohs(*(uint16_t *) &buf[2]); + msg->data_len = (((size_t) buf[2]) << 8) | buf[3]; } else if (len >= 10 + mask_len) { msg->header_len = 10 + mask_len; msg->data_len = - (size_t) (((uint64_t) mg_ntohl(*(uint32_t *) &buf[2])) << 32) + - mg_ntohl(*(uint32_t *) &buf[6]); + (size_t) (((uint64_t) be32(buf + 2) << 32) + be32(buf + 6)); } } // Sanity check, and integer overflow protection for the boundary check below @@ -107,9 +110,9 @@ static size_t mkhdr(size_t len, int op, bool is_client, uint8_t *buf) { } else { uint32_t tmp; buf[1] = 127; - tmp = mg_htonl((uint32_t) ((uint64_t) len >> 32)); + tmp = mg_htonl((uint32_t) (len >> 32)); memcpy(&buf[2], &tmp, sizeof(tmp)); - tmp = mg_htonl((uint32_t) (len & 0xffffffff)); + tmp = mg_htonl((uint32_t) (len & 0xffffffffU)); memcpy(&buf[6], &tmp, sizeof(tmp)); n = 10; } diff --git a/src/ws.h b/src/ws.h index 244889ee..46698716 100644 --- a/src/ws.h +++ b/src/ws.h @@ -22,4 +22,5 @@ void mg_ws_upgrade(struct mg_connection *, struct mg_http_message *, size_t mg_ws_send(struct mg_connection *, const void *buf, size_t len, int op); size_t mg_ws_wrap(struct mg_connection *, size_t len, int op); size_t mg_ws_printf(struct mg_connection *c, int op, const char *fmt, ...); -size_t mg_ws_vprintf(struct mg_connection *c, int op, const char *fmt, va_list); +size_t mg_ws_vprintf(struct mg_connection *c, int op, const char *fmt, + va_list *); diff --git a/test/unit_test.c b/test/unit_test.c index f9b07119..06184899 100644 --- a/test/unit_test.c +++ b/test/unit_test.c @@ -573,8 +573,8 @@ static void wcb(struct mg_connection *c, int ev, void *ev_data, void *fn_data) { struct mg_http_message *hm = (struct mg_http_message *) ev_data; struct mg_str *wsproto = mg_http_get_header(hm, "Sec-WebSocket-Protocol"); ASSERT(wsproto != NULL); - mg_ws_send(c, "boo", 3, WEBSOCKET_OP_BINARY); - mg_ws_send(c, "foobar", 6, WEBSOCKET_OP_BINARY); + mg_ws_printf(c, WEBSOCKET_OP_BINARY, "%.3s", "boo!!!!"); + mg_ws_printf(c, WEBSOCKET_OP_BINARY, "%s", "foobar"); mg_ws_send(c, "", 0, WEBSOCKET_OP_PING); p[0] += 100; } else if (ev == MG_EV_WS_MSG) { @@ -588,6 +588,27 @@ static void wcb(struct mg_connection *c, int ev, void *ev_data, void *fn_data) { } } +static void ew2(struct mg_connection *c, int ev, void *ev_data, void *fn_data) { + if (ev == MG_EV_WS_OPEN) { + char *msg = mg_file_read(&mg_fs_posix, "mongoose.c", NULL); + mg_ws_printf(c, WEBSOCKET_OP_TEXT, "%s", msg); + free(msg); + c->recv.align = 16 * 1024; + } else if (ev == MG_EV_WS_MSG) { + struct mg_ws_message *wm = (struct mg_ws_message *) ev_data; + if (wm->data.len == 6) { + // Ignore the "opened" message from server + } else { + char *msg = mg_file_read(&mg_fs_posix, "mongoose.c", NULL); + // MG_INFO(("%lu %lu", wm->data.len, strlen(msg))); + ASSERT(mg_vcmp(&wm->data, msg) == 0); + ASSERT(wm->data.len > 70000); // Message must be > 64k + free(msg); + *(int *) fn_data = 1; + } + } +} + static void test_ws(void) { char buf[FETCH_BUF_SIZE]; const char *url = "ws://LOCALHOST:12343/ws"; @@ -604,6 +625,12 @@ static void test_ws(void) { // Test that non-WS requests fail ASSERT(fetch(&mgr, buf, url, "GET /ws HTTP/1.0\r\n\n") == 426); + // Test large WS frames, over 64k + done = 0; + mg_ws_connect(&mgr, url, ew2, &done, NULL); + for (i = 0; i < 1000 && done == 0; i++) mg_mgr_poll(&mgr, 1); + ASSERT(done == 1); + mg_mgr_free(&mgr); ASSERT(mgr.conns == NULL); } @@ -2232,8 +2259,8 @@ static void w3(struct mg_connection *c, int ev, void *ev_data, void *fn_data) { memset(buf, 'A', sizeof(buf)); mg_ws_send(c, "hi there!", 9, WEBSOCKET_OP_TEXT); mg_printf(c, "%s", "boo"); - mg_ws_wrap(c, 3, WEBSOCKET_OP_TEXT), - mg_ws_send(c, buf, sizeof(buf), WEBSOCKET_OP_TEXT); + mg_ws_wrap(c, 3, WEBSOCKET_OP_TEXT); + mg_ws_send(c, buf, sizeof(buf), WEBSOCKET_OP_TEXT); } else if (ev == MG_EV_WS_MSG) { struct mg_ws_message *wm = (struct mg_ws_message *) ev_data; ASSERT(mg_strcmp(wm->data, mg_str("lebowski")) == 0); @@ -2266,11 +2293,14 @@ static void w2(struct mg_connection *c, int ev, void *ev_data, void *fn_data) { } } else if (ev == MG_EV_WS_MSG) { struct mg_ws_message *wm = (struct mg_ws_message *) ev_data; + MG_INFO(("Got WS, %lu", wm->data.len)); + mg_hexdump(wm->data.ptr, wm->data.len); if (wm->data.len == 9) { ASSERT(mg_strcmp(wm->data, mg_str("hi there!")) == 0); } else if (wm->data.len == 3) { ASSERT(mg_strcmp(wm->data, mg_str("boo")) == 0); } else { + MG_INFO(("%lu", wm->data.len)); ASSERT(wm->data.len == 8192); } }