Commit graph

2159 commits

Author SHA1 Message Date
Andy Green
45dead99e0 libuv report init failure
Signed-off-by: Andy Green <andy@warmcat.com>
2016-04-05 06:57:02 +08:00
Andy Green
f29fbdf78a test server libevuv set LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT on ssl
Signed-off-by: Andy Green <andy@warmcat.com>
2016-04-05 06:56:59 +08:00
Meir Yanovich
9694ebefe8 libuv win32 fixes 2
https://github.com/warmcat/libwebsockets/issues/411#issuecomment-204284368
2016-04-01 15:56:48 +08:00
Andy Green
1c428c3154 test server align rxbuf with permessage deflate rx buf size
Add a test html button that will send 9KB of junk to confirm it

https://github.com/warmcat/libwebsockets/issues/480

permessage-deflate now checks the protocol rx buffer size for being
>=128, if not, permessage-deflate is disabled on that connection.

If it is >=128 but less than the zlib decompress buffer size, the
zlib decompress buffer size for that connection is reduced to the
nearest power of two of the protocol rx buf size.

To test this, dumb_increment is left violating the >= 128 rx buffer
size and permessage-deflte can be seen to be disabled on his
connections in the test html.

Signed-off-by: Andy Green <andy@warmcat.com>
2016-04-01 08:47:05 +08:00
Andy Green
bbcd24167f libuv win32 fixes
Signed-off-by: Andy Green <andy@warmcat.com>
2016-03-31 20:12:14 +08:00
Andy Green
02ff145f50 cmake libuv fix include forcing path
Signed-off-by: Andy Green <andy@warmcat.com>
2016-03-31 09:02:25 +08:00
V.Krishn
7d5b1531ef Fix build with musl libc
Fix building libwebsockets with the musl C libary.

<sys/cdefs.h> is an internal glibc header and should be avoided in user code.

__P() was used for compatibility with some old K&R C compilers, when there were
no prototypes (which were introduced to C with C89). As supporting legacy
non-ANSI compilers is nowadays not necessary anymore get rid of the unnecessary
function prototype using __P().
2016-03-30 06:25:19 +08:00
Andy Green
1a3f17700e mbedtls and polarssl first part
polarssl is the old name for mbedtls.  Unfortunately the two are confused in eg,
Fedora.  For our purposes, polarssl or mbedtls < 2.0 has includes in
/usr/include/polarssl and polarssl_ apis and we call that "polarssl".

polarssl or mbedtls >=2.0 has includes in /usr/include/mbedtls and mbedtls_ apis,
we call that "mbedtls".

This has to be spelled out clearly because eg Fedora has a package "mbedtls" which
is 1.3.x and has the polarssl_ apis and include path.  We will deal with that as
"polarssl" despite the package name then.

This patch lets you use LWS_USE_POLARSSL or LWS_USE_MBEDTLS and set the include and
library path like this

cmake .. -DLWS_USE_POLARSSL=1 -DLWS_POLARSSL_INCLUDE_DIRS=/usr/include -DLWS_POLARSSL_LIBRARIES=/usr/lib64/libmbedtls.so.9

This patch adds the cmake support and adapts [private-]libwebsockets.h but doesn't
modify the apis in ssl[-*].c yet.

Signed-off-by: Andy Green <andy@warmcat.com>
2016-03-29 21:49:18 +08:00
Andy Green
f632e449de revert cmake remove targets from install path
Signed-off-by: Andy Green <andy@warmcat.com>
2016-03-29 21:44:30 +08:00
Andy Green
7fe02e3af5 ssl split out common server and client ssl sources
Most of ssl.c is under a #ifdef for client or server disabled...
let's get rid of it and have CMake just build the appropriate
files

Signed-off-by: Andy Green <andy@warmcat.com>
2016-03-29 08:51:42 +08:00
Andy Green
eefb13a0a7 ssl migrate client pieces to ssl.c
Some ssl-specific code was still hiding out in client.c instead of
going in ssl.c

Signed-off-by: Andy Green <andy@warmcat.com>
2016-03-28 12:43:55 +08:00
Andy Green
cd0c696a0d lwsws Libwebsockets Web Server
This makes a start on the LibWebSockets WebServer.

The app cmake build support and JSON config parsing are implemented and
the app can start, create the vhosts, listen and serve file:// mounts on
them.

Signed-off-by: Andy Green <andy@warmcat.com>
2016-03-28 10:49:57 +08:00
Andy Green
d526c50c22 introduce vhosts
This patch splits out some lws_context members into a new lws_vhost struct.

 - ssl state and options per vhost
 - SSL_CTX for serving and client per vhost
 - protocols[] per vhost
 - extensions[] per vhost

lws_context maintains a linked list of lws_vhosts.

The same lws_context_creation_info struct is used to regulate both the
context creation and to create vhosts: for backward compatibility if you
didn't provide the new LWS_SERVER_OPTION_EXPLICIT_VHOSTS option, then
a default vhost is created at context creation time using the same info
data as the context itself.

If you will have multiple vhosts though, you should give the
LWS_SERVER_OPTION_EXPLICIT_VHOSTS option at context creation time,
create the context first and then the vhosts afterwards using

  lws_create_vhost(contest, &info);

Although there is a lot of housekeeping to implement this change, there
is almost no additional overhead if you don't use multiple vhosts and
very little api impact (no changes to test apps).

Signed-off-by: Andy Green <andy@warmcat.com>
2016-03-28 10:15:25 +08:00
Andy Green
e2cf3e1cc0 SNI for server side: receive callback
This takes tha callback and binds the lws_context to the SSL_CTX so we can
get the lws_context in the callback.

It just logs the incoming hostname atm.

Signed-off-by: Andy Green <andy@warmcat.com>
2016-03-26 09:27:34 +08:00
Andy Green
476329f3f8 http2 build with alpn capable ssl no debug
Signed-off-by: Andy Green <andy@warmcat.com>
2016-03-25 21:01:11 +08:00
Andy Green
c6fd360160 LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT to default to runtime ssl disable
https://github.com/warmcat/libwebsockets/issues/468

Adds lws_check_opt() to regularize multibit flag checking.

There's a new context creation flag LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT,
this is included automatically if you give any other SSL-related option flag.
If you give no SSL-related option flag, nor this one directly, then even
though SSL support may be compiled in, it is never initialized nor used for the
whole lifetime of the lws context.

Conversely in order to prepare the context to use SSL, even though, eg, you
are not listening on SSL but will use SSL client connections later, you can
give this flag explicitly to make sure SSL is initialized.

Signed-off-by: Andy Green <andy@warmcat.com>
2016-03-23 09:22:11 +08:00
Denis Osvald
f107e4bb85 libuv: sigint API cleanup
Signed-off-by: Denis Osvald <denis.osvald@sartura.hr>
2016-03-23 07:46:39 +08:00
Denis Osvald
de9f794b27 libuv: handle signals only if requested
Signed-off-by: Denis Osvald <denis.osvald@sartura.hr>
2016-03-23 07:44:06 +08:00
Andy Green
1a13885afd cgi env
Improve cgi support so it's capable of running cgit
2016-03-21 15:17:33 +08:00
Andy Green
1e5a9ad2dc proxy rewrite
If you enable -DLWS_WITH_HTTP_PROXY=1 at cmake, the test server has a
new URI path http://localhost:7681/proxytest If you visit here, a client
connection to http://example.com:80 is spawned, and the results piped on
to your original connection.

Also with LWS_WITH_HTTP_PROXY enabled at cmake, lws wants to link to an
additional library, "libhubbub".  This allows lws to do html rewriting on the
fly, adjusting proxied urls in a lightweight and fast way.
2016-03-20 11:59:53 +08:00
Andy Green
5c8906e931 client chunked transfer encoding
Signed-off-by: Andy Green <andy.green@linaro.org>
2016-03-19 17:21:45 +08:00
Andy Green
c3c2d6d953 cgi header processing
Signed-off-by: Andy Green <andy.green@linaro.org>
2016-03-19 17:21:45 +08:00
Andy Green
8007cc6829 b64decode correct decode of some strings
https://github.com/warmcat/libwebsockets/issues/467

Signed-off-by: Andy Green <andy@warmcat.com>
2016-03-19 07:43:22 +08:00
Andy Green
7bc87ab662 clean signed mismatches and protect ssl specific code
https://github.com/warmcat/libwebsockets/issues/466

Signed-off-by: Andy Green <andy.green@linaro.org>
2016-03-18 23:55:59 +08:00
Alex Hultman
cea07d6f1f lws_write restrict chunk size 2016-03-18 15:02:27 +08:00
Andy Green
0f9904fedf ssl option for auto redir to https
Signed-off-by: Andy Green <andy.green@linaro.org>
2016-03-17 15:27:18 +08:00
Alex Hultman
599cad9436 Optimize payload exhaustion
https://github.com/warmcat/libwebsockets/pull/462

AG refactor and do loop unrolling
2016-03-17 09:41:44 +08:00
Andy Green
e32c0ba29b appveyor update 1.0.2g
Signed-off-by: Andy Green <andy.green@linaro.org>
2016-03-17 08:57:33 +08:00
Andy Green
5960158958 clang fixes 1
https://github.com/warmcat/libwebsockets/issues/461

Signed-off-by: Andy Green <andy.green@linaro.org>
2016-03-15 21:49:32 +08:00
bjqiwei
04935e28b0 client perform WSI_CREATE callback 2016-03-15 16:24:58 +08:00
Andy Green
c793944f17 socket interface bind generalize to lws_socket_bind
Move the socket bind to interface code out of server into
libwebsockets.c and make a private api for it.

Signed-off-by: Andy Green <andy.green@linaro.org>
2016-03-13 08:50:55 +08:00
Joakim Soderberg
9a720bbb50 ssl ecdh adapt if missing ecdh.h include
https://github.com/warmcat/libwebsockets/issues/457
2016-03-12 08:48:41 +08:00
Andy Green
4f5ebec3ef client ext hdr skip if no arg
https://github.com/warmcat/libwebsockets/issues/453#event-583227314

abnf does say has to be at least one arg

Signed-off-by: Andy Green <andy.green@linaro.org>
2016-03-09 23:13:31 +08:00
Andy Green
43befcba91 release checklist specfile install soname
Signed-off-by: Andy Green <andy.green@linaro.org>
2016-03-09 10:51:06 +08:00
Andy Green
4a1c6297e8 rpm specfile so install list bump
Signed-off-by: Andy Green <andy.green@linaro.org>
2016-03-09 10:50:25 +08:00
Andy Green
f66a12abb2 libev set foreign loop properly
After gaby64

https://github.com/warmcat/libwebsockets/issues/455

Signed-off-by: Andy Green <andy.green@linaro.org>
2016-03-09 07:44:49 +08:00
Andy Green
7d22c29722 windows deal with no snprintf
Signed-off-by: Andy Green <andy.green@linaro.org>
2016-03-04 10:53:51 +08:00
Andy Green
fb5f33bb2f test server http proxy
Signed-off-by: Andy Green <andy.green@linaro.org>
2016-03-02 18:57:41 +08:00
Andy Green
494418abac add explicit parent child wsi relationships
wsi can have a full tree relationship with each other using
linked lists.  closing the parent ensures the children are
closed first.

Convert cgi to use this instead of his cgi-specific sub-wsi
management.

Signed-off-by: Andy Green <andy.green@linaro.org>
2016-03-02 18:57:41 +08:00
Alex Hultman
fe16003644 libuv.c: Service fd with LWS_POLLHUP on poll errors 2016-03-02 18:57:26 +08:00
Ondraco
442ae80b87 wince minor adaptations
https://github.com/warmcat/libwebsockets/issues/444
2016-03-01 07:50:18 +08:00
Daniel Santos
f3d1d41bdd satisfy apparently bogus compiler warning somewhere 2016-03-01 07:50:17 +08:00
Andy Green
a661ee5d53 client support http without ws
Server support for http[s] as well as ws[s] is implicit.
But until now client only supported ws[s].

This allows the user code to pass an explicit http method
like "GET" in the connect_info, disabling the ws upgrade logic.

Then you can also use lws client as http client, not just ws.

Signed-off-by: Andy Green <andy.green@linaro.org>
2016-02-29 18:41:36 +08:00
Andy Green
2d8d35a1be client accept connection request even if no free ah
It can join the free ah list and pick up client connect processing
later when the ah becomes available; this simplifies the code
doing the request since he won't have to deal with unexpected
failures / retries based on dynamic ah availability.

To do this though we have to handle that the connect_info members
may not have scope that lets them still exist after we return from
the first connect call, we stash them in a malloc'd buffer so the
connect processing can have them much later even so.

Signed-off-by: Andy Green <andy.green@linaro.org>
2016-02-29 14:19:16 +08:00
Andy Green
f859e2d3ed release checklist ab
Signed-off-by: Andy Green <andy.green@linaro.org>
2016-02-29 11:26:13 +08:00
Andy Green
e3d141dae9 adopt readbuf do service
Signed-off-by: Andy Green <andy.green@linaro.org>
2016-02-29 11:04:53 +08:00
Andy Green
ee699c0036 libuv when in use skip shutdown close phase
Signed-off-by: Andy Green <andy.green@linaro.org>
2016-02-29 10:34:58 +08:00
Andy Green
442e1c850d windows listen for pollhup
After Ondraco

https://github.com/warmcat/libwebsockets/issues/441

Signed-off-by: Andy Green <andy.green@linaro.org>
2016-02-29 10:34:58 +08:00
Andy Green
83af28a747 ah move more_rx_waiting to wsi scope
Originally this was alright in wsi->u.hdr, because ah implied header
processing.  But since we allowed ah to be held across http
keep-alive transactions if we saw we had more header data, it means
we were trying to read this union member out of scope after it had
transitioned.

Moving the more_rx_waiting member to be a 1-bit bifield in the wsi
solves it and lets us check the state any time later at http
transaction completion.

https://github.com/warmcat/libwebsockets/issues/441

Signed-off-by: Andy Green <andy.green@linaro.org>
2016-02-29 10:34:58 +08:00
Andy Green
03384721e7 test server libuv support status protocol
Signed-off-by: Andy Green <andy.green@linaro.org>
2016-02-27 13:17:26 +08:00