Meir Yanovich [Mon, 4 Apr 2016 23:31:16 +0000 (07:31 +0800)]
libuv win32 fixes 2
https://github.com/warmcat/libwebsockets/issues/411#issuecomment-
204284368
Andy Green [Mon, 4 Apr 2016 23:31:11 +0000 (07:31 +0800)]
libuv win32 fixes
Signed-off-by: Andy Green <andy@warmcat.com>
Andy Green [Sat, 2 Apr 2016 00:03:48 +0000 (08:03 +0800)]
uri processing reject paths not starting with slash
https://github.com/warmcat/libwebsockets/issues/481
Return 403 Forbidden if we don't end up with a uri path starting with /
Test server already did this, but this makes it built into the
library.
Signed-off-by: Andy Green <andy@warmcat.com>
Andy Green [Fri, 1 Apr 2016 01:45:57 +0000 (09:45 +0800)]
v1.7.5
Signed-off-by: Andy Green <andy@warmcat.com>
Andy Green [Fri, 1 Apr 2016 01:30:09 +0000 (09:30 +0800)]
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>
V.Krishn [Sun, 8 Mar 2015 09:35:27 +0000 (09:35 +0000)]
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().
Andy Green [Tue, 29 Mar 2016 13:49:47 +0000 (21:49 +0800)]
revert cmake remove targets from install path
Signed-off-by: Andy Green <andy@warmcat.com>
Andy Green [Fri, 25 Mar 2016 13:03:01 +0000 (21:03 +0800)]
http2 build with alpn capable ssl no debug
Signed-off-by: Andy Green <andy@warmcat.com>
Denis Osvald [Tue, 22 Mar 2016 14:19:10 +0000 (15:19 +0100)]
libuv: handle signals only if requested
Signed-off-by: Denis Osvald <denis.osvald@sartura.hr>
Andy Green [Tue, 22 Mar 2016 01:19:32 +0000 (09:19 +0800)]
v1.7.4
Signed-off-by: Andy Green <andy@warmcat.com>
Andy Green [Fri, 18 Mar 2016 23:48:24 +0000 (07:48 +0800)]
b64decode correct decode of some strings
https://github.com/warmcat/libwebsockets/issues/467
Signed-off-by: Andy Green <andy@warmcat.com>
Alex Hultman [Wed, 16 Mar 2016 22:56:23 +0000 (23:56 +0100)]
Optimize payload exhaustion
https://github.com/warmcat/libwebsockets/pull/462
AG refactor and do loop unrolling
Andy Green [Thu, 17 Mar 2016 00:58:12 +0000 (08:58 +0800)]
appveyor update 1.0.2g
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Tue, 15 Mar 2016 13:24:04 +0000 (21:24 +0800)]
clang fixes 1
https://github.com/warmcat/libwebsockets/issues/461
Signed-off-by: Andy Green <andy.green@linaro.org>
bjqiwei [Tue, 15 Mar 2016 08:27:49 +0000 (16:27 +0800)]
client perform WSI_CREATE callback
Joakim Soderberg [Sat, 12 Mar 2016 00:49:09 +0000 (08:49 +0800)]
ssl ecdh adapt if missing ecdh.h include
https://github.com/warmcat/libwebsockets/issues/457
Andy Green [Wed, 9 Mar 2016 15:35:41 +0000 (23:35 +0800)]
client ext hdr skip if no arg
https://github.com/warmcat/libwebsockets/issues/453
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Wed, 9 Mar 2016 02:48:49 +0000 (10:48 +0800)]
release checklist specfile install soname
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Wed, 9 Mar 2016 02:45:00 +0000 (10:45 +0800)]
rpm specfile so install list bump
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Tue, 8 Mar 2016 23:47:34 +0000 (07:47 +0800)]
libev set foreign loop properly
After gaby64
https://github.com/warmcat/libwebsockets/issues/455
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Fri, 4 Mar 2016 02:58:52 +0000 (10:58 +0800)]
windows deal with no snprintf
Signed-off-by: Andy Green <andy.green@linaro.org>
Alex Hultman [Wed, 2 Mar 2016 10:39:37 +0000 (11:39 +0100)]
libuv.c: Service fd with LWS_POLLHUP on poll errors
Ondraco [Mon, 29 Feb 2016 23:33:56 +0000 (07:33 +0800)]
wince minor adaptations
https://github.com/warmcat/libwebsockets/issues/444
Andy Green [Mon, 29 Feb 2016 03:30:07 +0000 (11:30 +0800)]
v1.7.3
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Mon, 29 Feb 2016 03:11:48 +0000 (11:11 +0800)]
libuv when in use skip shutdown close phase
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Mon, 29 Feb 2016 02:08:26 +0000 (10:08 +0800)]
windows listen for pollhup
After Ondraco
https://github.com/warmcat/libwebsockets/issues/441
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Sun, 28 Feb 2016 17:11:08 +0000 (01:11 +0800)]
test server libuv support status protocol
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Sun, 28 Feb 2016 17:09:01 +0000 (01:09 +0800)]
libuv create 1Hz background timeout check
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Sun, 28 Feb 2016 03:02:42 +0000 (11:02 +0800)]
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>
Kamil Rytarowski [Sat, 27 Feb 2016 02:18:43 +0000 (03:18 +0100)]
Don't include <sys/cdefs.h> for NetBSD
We needed it for the BSD symbol to be defined, while __NetBSD__ is defined
with a compiler.
Thanks Andy Green for the initial fix.
Signed-off-by: Kamil Rytarowski <n54@gmx.com>
Andy Green [Sat, 27 Feb 2016 01:34:48 +0000 (09:34 +0800)]
netbsd netinet include
https://github.com/warmcat/libwebsockets/issues/442
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Fri, 26 Feb 2016 02:50:04 +0000 (10:50 +0800)]
force service properly when unconsumed rxbuf in ah
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Thu, 25 Feb 2016 13:55:06 +0000 (21:55 +0800)]
close wsi must do detatch ah flow even if no ah
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Thu, 25 Feb 2016 13:54:31 +0000 (21:54 +0800)]
improve timeout and ah list comments
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Thu, 25 Feb 2016 13:54:06 +0000 (21:54 +0800)]
remove ah scan
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Thu, 25 Feb 2016 12:23:45 +0000 (20:23 +0800)]
fix missing callback return check
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Thu, 25 Feb 2016 07:15:41 +0000 (15:15 +0800)]
unix privs change group before user
Otherwise we no longer have privs to change the group after doing the user
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Thu, 25 Feb 2016 07:08:03 +0000 (15:08 +0800)]
test server log LWS_CALLBACK_HTTP
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Thu, 25 Feb 2016 02:11:01 +0000 (10:11 +0800)]
v1.7.2
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Thu, 25 Feb 2016 01:27:02 +0000 (09:27 +0800)]
lws status fix LWS_PRE
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Wed, 24 Feb 2016 13:32:31 +0000 (21:32 +0800)]
defeat POLLOUT if socket in shutdown wait
After andrejs.hanins@ubnt.com
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Wed, 24 Feb 2016 05:42:12 +0000 (13:42 +0800)]
ws union member must have actual struct at start not pointer
Signed-off-by: Andy Green <andy.green@linaro.org>
Andrejs Hanins [Wed, 24 Feb 2016 11:18:46 +0000 (19:18 +0800)]
client callback closed if not upgraded also for server connection
https://github.com/warmcat/libwebsockets/issues/437
https://github.com/warmcat/libwebsockets/pull/440
Andrejs Hanins [Mon, 22 Feb 2016 15:35:12 +0000 (23:35 +0800)]
client connect must init position_in_fds_table
Andy Green [Sun, 21 Feb 2016 13:41:22 +0000 (21:41 +0800)]
windows doesnt have localtime_r
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Sun, 21 Feb 2016 07:12:20 +0000 (15:12 +0800)]
test server status no ssl include time header
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Sun, 21 Feb 2016 05:44:07 +0000 (13:44 +0800)]
test server add lws_status
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Sun, 21 Feb 2016 05:43:53 +0000 (13:43 +0800)]
LWS_BUILD_HASH improve
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Sun, 21 Feb 2016 05:43:41 +0000 (13:43 +0800)]
test html add tabs
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Sun, 21 Feb 2016 02:49:04 +0000 (10:49 +0800)]
libwebsockets.org url updates
Signed-off-by: Andy Green <andy.green@linaro.org>
Sebastian Reimer [Sat, 20 Feb 2016 23:45:03 +0000 (07:45 +0800)]
lwsl stderr sink use formatted time
AG change to use localtime_r for threadsafety and leave old method as fallback
Andy Green [Sat, 20 Feb 2016 23:10:55 +0000 (07:10 +0800)]
ssl get rid of build_cert_chain
It's not supported on major distro SSL (Fedora is 1.1) and
libressl (on 2.x) doesn't have it either.
https://github.com/warmcat/libwebsockets/issues/435
Signed-off-by: Andy Green <andy.green@linaro.org>
Alex Hultman [Sat, 20 Feb 2016 15:01:12 +0000 (16:01 +0100)]
Stop uv loop in default signal handler, clean-ups
Alex Hultman [Sat, 20 Feb 2016 14:32:57 +0000 (15:32 +0100)]
Make sure every handle is closed before destroying the uv loop
Alex Hultman [Sat, 20 Feb 2016 10:58:49 +0000 (11:58 +0100)]
Don't destroy ev/uv loops if they haven't been created yet
Andy Green [Sat, 20 Feb 2016 01:19:54 +0000 (09:19 +0800)]
v1.7.1
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Sat, 20 Feb 2016 01:13:15 +0000 (09:13 +0800)]
changelog sync
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Sat, 20 Feb 2016 00:11:35 +0000 (08:11 +0800)]
attack.sh add check for nonexistant file processing
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Sat, 20 Feb 2016 00:02:49 +0000 (08:02 +0800)]
lws_return_http_status send content length
If we're sending content, we must do so with a
content-length on http/1.1
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Sat, 20 Feb 2016 00:04:53 +0000 (08:04 +0800)]
test server example systemd service file
Make sure you have daemonization enabled to use this
make .. -DLWS_WITHOUT_DAEMONIZE=0
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Sat, 20 Feb 2016 00:04:32 +0000 (08:04 +0800)]
daemonize work under systemd
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Sat, 20 Feb 2016 00:04:09 +0000 (08:04 +0800)]
ah pool lifetime use dynamic rxpos
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Sat, 20 Feb 2016 00:03:51 +0000 (08:03 +0800)]
test server allow set uid gid from cmdline
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Thu, 18 Feb 2016 13:02:34 +0000 (21:02 +0800)]
windows plat correct assert test in lws_poll_listen_fd
After https://github.com/warmcat/libwebsockets/issues/430
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Thu, 18 Feb 2016 11:39:24 +0000 (19:39 +0800)]
test server SSL STS header delivery example
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Thu, 18 Feb 2016 11:20:02 +0000 (19:20 +0800)]
test server allow only best quality ciphers
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Wed, 17 Feb 2016 13:11:13 +0000 (21:11 +0800)]
ssl add server ecdh curve init
Using "real" SSL certs requires some init for openssl ECDH
curve. Add a default curve "prime256v1" and allow overriding it
at context creation time.
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Wed, 17 Feb 2016 04:00:40 +0000 (12:00 +0800)]
test server allow external certs
Allow the test server to use external certs for testing
libwebsockets-test-server --ssl -C libwebsockets.org.crt -K libwebsockets.org.key -A libwebsockets.org.cer
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Wed, 17 Feb 2016 03:10:39 +0000 (11:10 +0800)]
ssl ecdh check errors properly
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Tue, 16 Feb 2016 23:47:42 +0000 (07:47 +0800)]
more documentation typos
Signed-off-by: Andy Green <andy.green@linaro.org>
Peter Pentchev [Tue, 16 Feb 2016 13:19:36 +0000 (15:19 +0200)]
Fix some typos.
Andy Green [Tue, 16 Feb 2016 10:47:24 +0000 (18:47 +0800)]
debug reduce noise
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Tue, 16 Feb 2016 04:32:18 +0000 (12:32 +0800)]
v1.7.0
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Tue, 16 Feb 2016 05:20:30 +0000 (13:20 +0800)]
appveyor update openssl url
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Mon, 15 Feb 2016 13:08:18 +0000 (21:08 +0800)]
coverity 158147 test ping sprintf bounds
Well, just in the test app arg processing, but yes...
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Mon, 15 Feb 2016 13:07:09 +0000 (21:07 +0800)]
coverity 158146 test fraggle sprintf bounds
Well, just in the test app arg processing, but yes...
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Mon, 15 Feb 2016 13:00:39 +0000 (21:00 +0800)]
coverity 158145 lws_header_table_detatch must handle no ah attached
callers should protect it so this doesn't make a problem. But
Coverity is correct the code is confused about it.
Make it okay if we close a connection before the ah got attached.
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Mon, 15 Feb 2016 12:55:29 +0000 (20:55 +0800)]
release checklist coverity
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Mon, 15 Feb 2016 12:48:00 +0000 (20:48 +0800)]
api doc update pre 1.7
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Mon, 15 Feb 2016 12:36:02 +0000 (20:36 +0800)]
timeout settable from info
This adds an info member that allows the user code to
set the library's network action timeout in seconds.
If left at the default 0, the build-time default
AWAITING_TIMEOUT continues to be used.
As suggested
https://github.com/warmcat/libwebsockets/issues/427
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Mon, 15 Feb 2016 12:38:59 +0000 (20:38 +0800)]
release checklist api updates
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Mon, 15 Feb 2016 11:05:43 +0000 (19:05 +0800)]
http_transaction_completed handle two completions in detach reset order
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Mon, 15 Feb 2016 04:37:04 +0000 (12:37 +0800)]
ah owns rxbuf
This is intended to solve a longstanding problem with the
relationship between http/1.1 keep-alive and the service
loop.
Ah now contain an rx buffer which is used during header
processing, and the ah may not be detached from the wsi
until the rx buffer is exhausted.
Having the rx buffer in the ah means we can delay using the
rx until a later service loop.
Ah which have pending rx force POLLIN service on the wsi
they are attached to automatically, so we can interleave
general service / connections with draining each ah rx
buffer.
The possible http/1.1 situations and their dispositions are:
1) exactly one set of http headers come. After processing,
the ah is detached since no pending rx left. If more
headers come later, a fresh ah is aqcuired when available
and the rx flow control blocks the read until then.
2) more that one whole set of headers come and we remain in
http mode (no upgrade). The ah is left attached and
returns to the service loop after the first set of headers.
We will get forced service due to the ah having pending
content (respecting flowcontrol) and process the pending
rx in the ah. If we use it all up, we will detach the
ah.
3) one set of http headers come with ws traffic appended.
We service the headers, do the upgrade, and keep the ah
until the remaining ws content is used. When we
exhausted the ws traffix in the ah rx buffer, we
detach the ah.
Since there can be any amount of http/1.1 pipelining on a
connection, and each may be expensive to service, it's now
enforced there is a return to the service loop after each
header set is serviced on a connection.
When I added the forced service for ah with pending buffering,
I added support for it to the windows plat code. However this
is untested.
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Mon, 15 Feb 2016 06:44:18 +0000 (14:44 +0800)]
autobahn wait for all fork completion
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Mon, 15 Feb 2016 06:23:41 +0000 (14:23 +0800)]
autobahn put back 2.10 2.11
The test ordering breaks if we try to skip them, just
leave them in.
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Mon, 15 Feb 2016 06:01:06 +0000 (14:01 +0800)]
attack.sh add http1.1 pipelining check
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Mon, 15 Feb 2016 04:37:23 +0000 (12:37 +0800)]
release checklist qa
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Sun, 14 Feb 2016 01:27:41 +0000 (09:27 +0800)]
libuv integration
This gets the libuv stuff plumbed in and working.
Currently it's only workable for some service thread, and there
is an isolated valgrind problem left
==28425== 128 bytes in 1 blocks are definitely lost in loss record 3 of 3
==28425== at 0x4C28C50: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==28425== by 0x4C2AB1E: realloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==28425== by 0x58BBB27: maybe_resize (core.c:748)
==28425== by 0x58BBB27: uv__io_start (core.c:787)
==28425== by 0x58C1B80: uv__signal_loop_once_init (signal.c:225)
==28425== by 0x58C1B80: uv_signal_init (signal.c:260)
==28425== by 0x58BF7A6: uv_loop_init (loop.c:66)
==28425== by 0x4157F5: lws_uv_initloop (libuv.c:89)
==28425== by 0x405536: main (test-server-libuv.c:284)
libuv wants to sign off on all libuv 'handles' that will close, and
callback to do the close confirmation asynchronously. The wsi close function
is adapted when libuv is in use to work with libuv accordingly and exit the uv
loop the number of remaining wsi is zero.
Signed-off-by: Andy Green <andy.green@linaro.org>
Alex Hultman [Thu, 4 Feb 2016 11:40:42 +0000 (19:40 +0800)]
port test-server-libuv.c from libev to libuv
Alex Hultman [Mon, 1 Feb 2016 00:31:54 +0000 (08:31 +0800)]
libuv initial replace libev version
Andy Green [Sat, 13 Feb 2016 04:02:26 +0000 (12:02 +0800)]
release-checklist
Dan Albert [Fri, 12 Feb 2016 00:13:27 +0000 (16:13 -0800)]
Ask sysconf for Android's getdtablesize.
Steffen Vogel [Tue, 9 Feb 2016 06:19:15 +0000 (07:19 +0100)]
fixed LWS_PRE description
Andy Green [Tue, 9 Feb 2016 01:37:11 +0000 (09:37 +0800)]
specfile add fuzxy
https://github.com/warmcat/libwebsockets/issues/419
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Tue, 9 Feb 2016 01:15:02 +0000 (09:15 +0800)]
lws_reset_header_table dont reset NULL
This is only a temporary, fragile solution.
https://github.com/warmcat/libwebsockets/issues/416
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Mon, 8 Feb 2016 00:44:21 +0000 (08:44 +0800)]
license clarification and test apps CC zero
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Sat, 6 Feb 2016 23:28:21 +0000 (07:28 +0800)]
lws_parse_uri fix test client use and add more docs
https://github.com/warmcat/libwebsockets/issues/414
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Sat, 6 Feb 2016 00:44:34 +0000 (08:44 +0800)]
ah pool take care about freeing headers after parsing
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Tue, 2 Feb 2016 23:06:52 +0000 (07:06 +0800)]
debug spew remove ah reset logging
Signed-off-by: Andy Green <andy.green@linaro.org>
Andy Green [Tue, 2 Feb 2016 01:02:24 +0000 (09:02 +0800)]
LWS_WARN_DEPRECATED and fixup older test apps
Enforce no more internal use of deprecated apis (esp in the test apps)
Also signal clearly to users what is on the way out.
Signed-off-by: Andy Green <andy.green@linaro.org>