[Libwebsockets] Tests server v-2.0 - POST doesn't work

Andy Green andy at warmcat.com
Tue Jun 7 10:19:14 CEST 2016



On 06/07/2016 03:28 PM, Thomas Spitz wrote:
> Hi Andy,
>
> I manage to make POST example work on PC and on an embedded ARM using
> test-server.c (v2.0 stable release) and CMAKE. Here below the log:
>
>     lwsts[28878]: lws_http_serve: /formtest
>     lwsts[28878]: HTTP connect from localhost (127.0.0.1)
>     lwsts[28878]: LWS_CALLBACK_HTTP_BODY: len 22
>     lwsts[28878]: LWS_CALLBACK_HTTP_BODY_COMPLETION
>     lwsts[28878]: lws_http_serve: /postresults
>     lwsts[28878]: HTTP connect from localhost (127.0.0.1)
>     lwsts[28878]: lws_http_serve: /favicon.ico
>     lwsts[28878]: HTTP connect from localhost (127.0.0.1)
>     lwsts[28878]: test_server_fops_open: opening
>     ./share/libwebsockets-test-server/favicon.ico, ret 9, len 1406
>
>
> However, when I try to embed this example in a dummy C test project,
> when I clik on POST form, I get back the correct URL:
> 192.168.1.74/postresults <http://192.168.1.74/postresults> BUT with the
> following error mentionned by the browser : ERR_CONTENT_LENGTH_MISMATCH
> The lws log says something similar:
>
>     lwsts[6175]: lws_http_serve: /formtest
>
>     lwsts[6175]: HTTP connect from ::ffff:192.168.1.65 (192.168.1.65)
>     lwsts[6175]: LWS_CALLBACK_HTTP_BODY: len 22
>     lwsts[6175]: LWS_CALLBACK_HTTP_BODY_COMPLETION
>     lwsts[6175]: lws_http_serve: /postresults
>     lwsts[6175]: HTTP connect from ::ffff:192.168.1.65 (192.168.1.65)
>     lwsts[6175]: ****** 2bbc8 Sending new, pending truncated ...

This is a sure sign you're writing things outside of the writable callback.

-Andy

>     lwsts[6175]: lws_http_serve: /postresults
>     lwsts[6175]: HTTP connect from ::ffff:192.168.1.65 (192.168.1.65)
>     lwsts[6175]: ****** 2a958 Sending new, pending truncated ...
>     lwsts[6175]: lws_http_serve: /postresults
>     lwsts[6175]: HTTP connect from ::ffff:192.168.1.65 (192.168.1.65)
>     lwsts[6175]: ****** 2a958 Sending new, pending truncated ...
>     lwsts[6175]: lws_http_serve: /postresults
>     lwsts[6175]: HTTP connect from ::ffff:192.168.1.65 (192.168.1.65)
>     lwsts[6175]: ****** 2a958 Sending new, pending truncated ...
>     lwsts[6175]: lws_http_serve: /postresults
>     lwsts[6175]: HTTP connect from ::ffff:192.168.1.65 (192.168.1.65)
>     lwsts[6175]: ****** 2a958 Sending new, pending truncated ...
>     lwsts[6175]: lws_http_serve: /postresults
>     lwsts[6175]: HTTP connect from ::ffff:192.168.1.65 (192.168.1.65)
>     lwsts[6175]: ****** 2a958 Sending new, pending truncated ...
>     lwsts[6175]: lws_http_serve: /postresults
>     lwsts[6175]: HTTP connect from ::ffff:192.168.1.65 (192.168.1.65)
>     lwsts[6175]: ****** 2a958 Sending new, pending truncated ...
>
>
> I just copied/pasted test-server.c, test-server.h and test-server-http.c
> in a C project and I got the error. I must miss something but I don't
> see what yet. I enclosed my eclipse project.
> Best regards,
> Thomas
>
> 2016-05-15 21:42 GMT+02:00 Andy Green <andy at warmcat.com
> <mailto:andy at warmcat.com>>:
>
>
>
>     On May 16, 2016 3:29:03 AM GMT+08:00, Thomas Spitz
>     <thomas.spitz at hestia-france.com
>     <mailto:thomas.spitz at hestia-france.com>> wrote:
>     >Hello Andy,
>     >
>     >I applied the changes from your patch but I didn't manage to make the
>     >POST
>     >example work...
>     >
>     >What I did is just the following changes from the CmakeLists.txt:
>     >
>     >> option(LWS_WITH_LIBEV "Compile with support for libev" ON)#change
>     >> option(LWS_WITH_LIBUV "Compile with support for libuv" ON)#change
>     >> option(LWS_WITH_CGI "Include CGI (spawn process with
>     >network-connected
>     >> stdin/out/err) APIs" ON)#change
>     >> option(LWS_WITH_LWSWS "Libwebsockets Webserver" ON)#change
>     >> option(LWS_WITH_PLUGINS "Support plugins for protocols and
>     >extensions"
>     >> ON)#change
>     >
>     >And I also moved the share folder in the bin folder in order to make
>     >webserver files reachables
>     >
>     >No reaction from Firefox, here the server logs:
>     >
>     >> lwsts[17529]: LWS_CALLBACK_WS_PEER_INITIATED_CLOSE: len 2
>     >> lwsts[17529]:  0: 0x03
>     >> lwsts[17529]:  1: 0xE9
>     >> lwsts[17529]: CLOSING pss 0x239d2b0 ********
>     >> lwsts[17529]: cache_len 94
>     >> lwsts[17529]: lws_http_serve: /formtest
>     >> lwsts[17529]: HTTP connect from localhost (127.0.0.1)
>     >> lwsts[17529]: LWS_CALLBACK_HTTP_BODY: len 22
>     >> lwsts[17529]: LWS_CALLBACK_HTTP_BODY_COMPLETION
>     >> lwsts[17529]: 127.0.0.1 - - [15/May/2016:21:26:04 +0200] "POST
>     >/formtest
>     >> http/1.1" 303 116 Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:46.0)
>     >> Gecko/20100101 Firefox/46.0
>     >> lwsts[17529]: lws_http_serve: /postresults
>     >> lwsts[17529]: HTTP connect from localhost (127.0.0.1)
>     >> lwsts[17529]: ****** 23775b0 Sending new, pending truncated ...
>
>     At this point lws has assert()ed, so no mystery about why it's 'not
>     responding'.
>
>     Make sure you're using current master if this is master from the
>     last few days.
>
>     As a sanity check you can always try the public test server
>
>     https://libwebsockets.org/testserver/
>
>     He's running stuff from Saturday and has no problems with POST.
>
>     -Andy
>
>     >> lwsts[17529]: 127.0.0.1 - - [15/May/2016:21:26:04 +0200] "GET
>     >/postresults
>     >> http/1.1" 200 155 Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:46.0)
>     >> Gecko/20100101 Firefox/46.0
>     >
>     >Error page "The localhost page isn’t working. localhost unexpectedly
>     >closed
>     >the connection." from Chromium, here the server logs:
>     >
>     >> lwsts[17529]: lws_http_serve: /formtest
>     >> lwsts[17529]: HTTP connect from localhost (127.0.0.1)
>     >> lwsts[17529]: LWS_CALLBACK_HTTP_BODY: len 22
>     >> lwsts[17529]: LWS_CALLBACK_HTTP_BODY_COMPLETION
>     >> lwsts[17529]: 127.0.0.1 - - [15/May/2016:21:27:12 +0200] "POST
>     >/formtest
>     >> http/1.1" 303 116 Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36
>     >> (KHTML, like Gecko) Ubuntu Chromium/49.0.2623.108
>     >Chrome/49.0.2623.108
>     >> Safari/537.36
>     >> lwsts[17529]: lws_http_serve: /postresults
>     >> lwsts[17529]: HTTP connect from localhost (127.0.0.1)
>     >> lwsts[17529]: ****** 23775b0 Sending new, pending truncated ...
>     >> lwsts[17529]: 127.0.0.1 - - [15/May/2016:21:27:12 +0200] "GET
>     >/postresults
>     >> http/1.1" 200 155 Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36
>     >> (KHTML, like Gecko) Ubuntu Chromium/49.0.2623.108
>     >Chrome/49.0.2623.108
>     >> Safari/537.36
>     >> lwsts[17529]: LWS_CALLBACK_WS_PEER_INITIATED_CLOSE: len 2
>     >> lwsts[17529]:  0: 0x03
>     >> lwsts[17529]:  1: 0xE9
>     >> lwsts[17529]: CLOSING pss 0x239d280 ********
>     >> lwsts[17529]: cache_len 94
>     >> lwsts[17529]: lws_http_serve: /postresults
>     >> lwsts[17529]: HTTP connect from localhost (127.0.0.1)
>     >> lwsts[17529]: ****** 23775b0 Sending new, pending truncated ...
>     >> lwsts[17529]: 127.0.0.1 - - [15/May/2016:21:27:12 +0200] "GET
>     >/postresults
>     >> http/1.1" 200 133 Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36
>     >> (KHTML, like Gecko) Ubuntu Chromium/49.0.2623.108
>     >Chrome/49.0.2623.108
>     >> Safari/537.36
>     >
>     >
>     >
>     >Best regards,
>     >Thomas
>     >
>     >
>     >2016-05-09 4:15 GMT+02:00 Andy Green <andy at warmcat.com
>     <mailto:andy at warmcat.com>>:
>     >
>     >>
>     >>
>     >> On 05/08/2016 06:45 PM, Andy Green wrote:
>     >>
>     >>>
>     >>>
>     >>> On 05/08/2016 03:29 PM, Colin Adams wrote:
>     >>>
>     >>>> Trying out the v 2.0 test-server - everything works except in the
>     >POST
>     >>>> tab, pressing on the "Send the form" button (apparently) does
>     >nothing.
>     >>>>
>     >>>> Might this be because of a compile-time #define needed?
>     >>>>
>     >>>
>     >>> No... it's because the test-server-v2.0.c just uses a mount to do
>     >the
>     >>> HTTP serving from inside the library, without any user code
>     >involved.
>     >>>
>     >>> That covers everything "normal" the test server does with HTTP, but
>     >the
>     >>> POST needs to be handled by user code.
>     >>>
>     >>> I'll have a think about how to handle that nicely.
>     >>>
>     >>
>     >> I pushed a patch on master
>     >>
>     >>
>     >>
>     >https://github.com/warmcat/libwebsockets/commit/b24aaeb82261c480ab8e03baebda7aebedbc7d87
>     >>
>     >> that introduces a new mount type "callback://".
>     >>
>     >> Using that you can associate areas of your URL space with the
>     >callback of
>     >> a named protocol.  In lwsws config JSON, it looks like this
>     >>
>     >>        {
>     >>         "mountpoint": "/formtest",
>     >>         "origin": "callback://protocol-post-demo"
>     >>        }
>     >>
>     >> The patch also adds a new protocol plugin called
>     >"protocol-post-demo",
>     >> whose callback handles the form post test in the test html.
>     >>
>     >> test-server-v2.0.c also gets an extra mount in code to use it.
>     >>
>     >> static const struct lws_http_mount mount_post = {
>     >>         NULL,           /* linked-list pointer to next*/
>     >>         "/formtest",            /* mountpoint in URL namespace on
>     >this
>     >> vhost */
>     >>         "protocol-post-demo",   /* handler */
>     >>         NULL,   /* default filename if none given */
>     >>         NULL,
>     >>         0,
>     >>         0,
>     >>         0,
>     >>         0,
>     >>         0,
>     >>         LWSMPRO_CALLBACK,       /* origin points to a callback */
>     >>         9,                      /* strlen("/formtest"), ie length of
>     >the
>     >> mountpoint */
>     >> };
>     >>
>     >> With that, it's possible to cleanly map URL namespace to callbacks by
>     >> name, and the test-server-v2.0 can do the POST part of the demo html
>     >nicely.
>     >>
>     >> -Andy
>     >>
>     >>
>     >> -Andy
>     >>>
>     >>>
>     >>>> _______________________________________________
>     >>>> Libwebsockets mailing list
>     >>>> Libwebsockets at ml.libwebsockets.org
>     <mailto:Libwebsockets at ml.libwebsockets.org>
>     >>>> http://libwebsockets.org/mailman/listinfo/libwebsockets
>     >>>>
>     >>>> _______________________________________________
>     >>> Libwebsockets mailing list
>     >>> Libwebsockets at ml.libwebsockets.org
>     <mailto:Libwebsockets at ml.libwebsockets.org>
>     >>> http://libwebsockets.org/mailman/listinfo/libwebsockets
>     >>>
>     >> _______________________________________________
>     >> Libwebsockets mailing list
>     >> Libwebsockets at ml.libwebsockets.org
>     <mailto:Libwebsockets at ml.libwebsockets.org>
>     >> http://libwebsockets.org/mailman/listinfo/libwebsockets
>     >>
>
>



More information about the Libwebsockets mailing list