From 6d2b3192aa1d51b540a2a9a6a174a0eaf9d4dfb3 Mon Sep 17 00:00:00 2001 From: Andy Green Date: Thu, 14 Feb 2013 22:23:54 +0800 Subject: [PATCH] introduce LWS_CALLBACK_HTTP_WRITEABLE Signed-off-by: Andy Green --- changelog | 10 ++++++++++ lib/libwebsockets.h | 4 ++++ lib/server.c | 13 ++++++++++++- 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/changelog b/changelog index fc866de..ea3cdf0 100644 --- a/changelog +++ b/changelog @@ -1,6 +1,16 @@ Changelog --------- +(development since 1.22) + +User api additions +------------------ + + - You can now call libwebsocket_callback_on_writable() on http connectons, + and get a LWS_CALLBACK_HTTP_WRITEABLE callback, the same way you can + regulate writes with a websocket protocol connection. + + v1.21-chrome26-firefox18 ======================== diff --git a/lib/libwebsockets.h b/lib/libwebsockets.h index d038a44..3b1e837 100644 --- a/lib/libwebsockets.h +++ b/lib/libwebsockets.h @@ -134,6 +134,7 @@ enum libwebsocket_callback_reasons { LWS_CALLBACK_SERVER_WRITEABLE, LWS_CALLBACK_HTTP, LWS_CALLBACK_HTTP_FILE_COMPLETION, + LWS_CALLBACK_HTTP_WRITEABLE, LWS_CALLBACK_FILTER_NETWORK_CONNECTION, LWS_CALLBACK_FILTER_PROTOCOL_CONNECTION, LWS_CALLBACK_OPENSSL_LOAD_EXTRA_CLIENT_VERIFY_CERTS, @@ -436,6 +437,9 @@ struct libwebsocket_extension; * total number of client connections allowed set * by MAX_CLIENTS. * + * LWS_CALLBACK_HTTP_WRITEABLE: you can write more down the http protocol + * link now. + * * LWS_CALLBACK_HTTP_FILE_COMPLETION: a file requested to be send down * http link has completed. * diff --git a/lib/server.c b/lib/server.c index 3e81290..72d9e08 100644 --- a/lib/server.c +++ b/lib/server.c @@ -192,8 +192,19 @@ int lws_server_socket_service(struct libwebsocket_context *context, /* one shot */ pollfd->events &= ~POLLOUT; - if (wsi->state != WSI_STATE_HTTP_ISSUING_FILE) + if (wsi->state != WSI_STATE_HTTP_ISSUING_FILE) { + n = user_callback_handle_rxflow( + wsi->protocol->callback, + wsi->protocol->owning_server, + wsi, LWS_CALLBACK_HTTP_WRITEABLE, + wsi->user_space, + NULL, + 0); + if (n < 0) + libwebsocket_close_and_free_session( + context, wsi, LWS_CLOSE_STATUS_NOSTATUS); break; + } /* nonzero for completion or error */ if (libwebsockets_serve_http_file_fragment(context, wsi)) -- 2.7.4