introduce LWS_CALLBACK_HTTP_WRITEABLE 03/3103/1
authorAndy Green <andy.green@linaro.org>
Thu, 14 Feb 2013 14:23:54 +0000 (22:23 +0800)
committerKevron Rees <kevron_m_rees@linux.intel.com>
Thu, 7 Mar 2013 21:01:35 +0000 (13:01 -0800)
Signed-off-by: Andy Green <andy.green@linaro.org>
changelog
lib/libwebsockets.h
lib/server.c

index fc866de..ea3cdf0 100644 (file)
--- 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
 ========================
 
index d038a44..3b1e837 100644 (file)
@@ -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.
  *
index 3e81290..72d9e08 100644 (file)
@@ -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))