diff --git a/README-test-server b/README-test-server index 500024d7..23af345b 100644 --- a/README-test-server +++ b/README-test-server @@ -75,6 +75,10 @@ There are several other possible configure options --without-testapps Just build the library not the test apps +--without-client Don't build the client part of the library nor the + test apps that need the client part. Useful to + minimize library footprint for embedded server-only + case Externally configurable important constants ------------------------------------------- diff --git a/configure.ac b/configure.ac index 60f74537..3bf09ae3 100644 --- a/configure.ac +++ b/configure.ac @@ -82,6 +82,18 @@ AC_ARG_WITH(testapps, AM_CONDITIONAL(NO_TESTAPPS, test x$no_testapps = xyes) +# +# +# +AC_ARG_WITH(client, + [ --without-client dont build the client part of the library ], + [ no_client=yes + ]) + +if test "x$no_client" = "xyes" ; then +CFLAGS="$CFLAGS -DLWS_NO_CLIENT" +fi +AM_CONDITIONAL(NO_CLIENT, test x$no_client = xyes) # # diff --git a/lib/Makefile.am b/lib/Makefile.am index 07500ad1..bf3586a6 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -3,17 +3,21 @@ include_HEADERS=libwebsockets.h dist_libwebsockets_la_SOURCES=libwebsockets.c \ handshake.c \ parsers.c \ - client.c \ - client-parser.c \ - output.c \ libwebsockets.h \ base64-decode.c \ - client-handshake.c \ + output.c \ extension.c \ extension-deflate-stream.c extension-deflate-stream.h \ extension-deflate-frame.c extension-deflate-frame.h\ private-libwebsockets.h +if NO_CLIENT +else +dist_libwebsockets_la_SOURCES+= client.c \ + client-parser.c \ + client-handshake.c +endif + if USE_BUILTIN_GETIFADDRS dist_libwebsockets_la_SOURCES += getifaddrs.c endif diff --git a/lib/handshake.c b/lib/handshake.c index c53d1d01..634ccc8d 100644 --- a/lib/handshake.c +++ b/lib/handshake.c @@ -561,6 +561,7 @@ libwebsocket_read(struct libwebsocket_context *context, //fwrite(buf, 1, len, stderr); #endif +#ifndef LWS_NO_CLIENT switch (wsi->mode) { case LWS_CONNMODE_WS_CLIENT_WAITING_PROXY_REPLY: case LWS_CONNMODE_WS_CLIENT_ISSUE_HANDSHAKE: @@ -574,7 +575,7 @@ libwebsocket_read(struct libwebsocket_context *context, default: break; } - +#endif /* LWS_CONNMODE_WS_SERVING */ for (n = 0; n < len; n++) @@ -702,6 +703,7 @@ libwebsocket_read(struct libwebsocket_context *context, case WSI_STATE_AWAITING_CLOSE_ACK: case WSI_STATE_ESTABLISHED: +#ifndef LWS_NO_CLIENT switch (wsi->mode) { case LWS_CONNMODE_WS_CLIENT: for (n = 0; n < len; n++) @@ -712,7 +714,7 @@ libwebsocket_read(struct libwebsocket_context *context, default: break; } - +#endif /* LWS_CONNMODE_WS_SERVING */ if (libwebsocket_interpret_incoming_packet(wsi, buf, len) < 0) diff --git a/lib/libwebsockets.c b/lib/libwebsockets.c index 63d286a8..ff152f11 100644 --- a/lib/libwebsockets.c +++ b/lib/libwebsockets.c @@ -773,8 +773,9 @@ libwebsocket_service_fd(struct libwebsocket_context *context, int more = 1; struct lws_tokens eff_buf; int opt = 1; +#ifndef LWS_NO_CLIENT extern int lws_client_socket_service(struct libwebsocket_context *context, struct libwebsocket *wsi, struct pollfd *pollfd); - +#endif /* * you can call us with pollfd = NULL to just allow the once-per-second * global timeout checks; if less than a second since the last check @@ -1273,7 +1274,11 @@ read_pending: break; default: +#ifdef LWS_NO_CLIENT + break; +#else return lws_client_socket_service(context, wsi, pollfd); +#endif } return 0; diff --git a/test-server/Makefile.am b/test-server/Makefile.am index 0a22b254..de0a2a21 100644 --- a/test-server/Makefile.am +++ b/test-server/Makefile.am @@ -1,48 +1,71 @@ -bin_PROGRAMS=libwebsockets-test-server libwebsockets-test-client libwebsockets-test-server-extpoll libwebsockets-test-fraggle +bin_PROGRAMS=libwebsockets-test-server libwebsockets-test-server-extpoll + +if NO_CLIENT +else +bin_PROGRAMS+=libwebsockets-test-client libwebsockets-test-fraggle +endif + libwebsockets_test_server_SOURCES=test-server.c libwebsockets_test_server_CFLAGS= libwebsockets_test_server_LDADD=-L../lib -lwebsockets -lz -libwebsockets_test_client_SOURCES=test-client.c -libwebsockets_test_client_CFLAGS= -libwebsockets_test_client_LDADD=-L../lib -lwebsockets -lz libwebsockets_test_server_extpoll_SOURCES=test-server.c libwebsockets_test_server_extpoll_CFLAGS=$(AM_CFLAGS) -DEXTERNAL_POLL libwebsockets_test_server_extpoll_LDADD=-L../lib -lwebsockets -lz +if NO_CLIENT +else +libwebsockets_test_client_SOURCES=test-client.c +libwebsockets_test_client_CFLAGS= +libwebsockets_test_client_LDADD=-L../lib -lwebsockets -lz libwebsockets_test_fraggle_SOURCES=test-fraggle.c libwebsockets_test_fraggle_CFLAGS= libwebsockets_test_fraggle_LDADD=-L../lib -lwebsockets -lz - +endif + if MINGW libwebsockets_test_server_CFLAGS+= -w -I../win32port/win32helpers -libwebsockets_test_client_CFLAGS+= -w -I../win32port/win32helpers libwebsockets_test_server_extpoll_CFLAGS+= -w -I../win32port/win32helpers +if NO_CLIENT +else +libwebsockets_test_client_CFLAGS+= -w -I../win32port/win32helpers libwebsockets_test_fraggle_CFLAGS+= -w -I../win32port/win32helpers +endif libwebsockets_test_server_LDADD+= -lm -luser32 -ladvapi32 -lkernel32 -lgcc -lws2_32 -lz -libwebsockets_test_client_LDADD+= -lm -luser32 -ladvapi32 -lkernel32 -lgcc -lws2_32 -lz libwebsockets_test_server_extpoll_LDADD+= -lm -luser32 -ladvapi32 -lkernel32 -lgcc -lws2_32 -lz +if NO_CLIENT +else +libwebsockets_test_client_LDADD+= -lm -luser32 -ladvapi32 -lkernel32 -lgcc -lws2_32 -lz libwebsockets_test_fraggle_LDADD+= -lm -luser32 -ladvapi32 -lkernel32 -lgcc -lws2_32 -lz +endif else libwebsockets_test_server_CFLAGS+= -Werror -libwebsockets_test_client_CFLAGS+= -Werror libwebsockets_test_server_extpoll_CFLAGS+= -Werror +if NO_CLIENT +else +libwebsockets_test_client_CFLAGS+= -Werror libwebsockets_test_fraggle_CFLAGS+= -Werror +endif endif libwebsockets_test_server_CFLAGS+= -Wall -std=gnu99 -pedantic -DINSTALL_DATADIR=\"@datadir@\" -DLWS_OPENSSL_CLIENT_CERTS=\"@clientcertdir@\" -libwebsockets_test_client_CFLAGS+= -Wall -std=gnu99 -pedantic -DINSTALL_DATADIR=\"@datadir@\" -DLWS_OPENSSL_CLIENT_CERTS=\"@clientcertdir@\" libwebsockets_test_server_extpoll_CFLAGS+= -Wall -std=gnu99 -pedantic -DINSTALL_DATADIR=\"@datadir@\" -DLWS_OPENSSL_CLIENT_CERTS=\"@clientcertdir@\" +if NO_CLIENT +else +libwebsockets_test_client_CFLAGS+= -Wall -std=gnu99 -pedantic -DINSTALL_DATADIR=\"@datadir@\" -DLWS_OPENSSL_CLIENT_CERTS=\"@clientcertdir@\" libwebsockets_test_fraggle_CFLAGS+= -Wall -std=gnu99 -pedantic -DINSTALL_DATADIR=\"@datadir@\" -DLWS_OPENSSL_CLIENT_CERTS=\"@clientcertdir@\" - +endif if NOPING else +if NO_CLIENT +else bin_PROGRAMS+=libwebsockets-test-ping libwebsockets_test_ping_SOURCES=test-ping.c libwebsockets_test_ping_LDADD=-L../lib -lwebsockets libwebsockets_test_ping_CFLAGS= -Wall -Werror -std=gnu99 -pedantic -DINSTALL_DATADIR=\"@datadir@\" -DLWS_OPENSSL_CLIENT_CERTS=\"@clientcertdir@\" endif +endif EXTRA_DIST=test.html favicon.ico libwebsockets.org-logo.png