dont close in user callback wrapper let ancestor do it
authorAndy Green <andy.green@linaro.org>
Sun, 10 Feb 2013 13:21:24 +0000 (21:21 +0800)
committerAndy Green <andy.green@linaro.org>
Sun, 10 Feb 2013 16:34:43 +0000 (00:34 +0800)
Signed-off-by: Andy Green <andy.green@linaro.org>
lib/libwebsockets.c
lib/output.c
lib/parsers.c

index c96f751..619b008 100644 (file)
@@ -1382,8 +1382,7 @@ _libwebsocket_rx_flow_control(struct libwebsocket *wsi)
        if ((wsi->u.ws.rxflow_change_to & 1) && wsi->u.ws.rxflow_buffer) {
                n = libwebsocket_interpret_incoming_packet(wsi, NULL, 0);
                if (n < 0) {
-                       lwsl_info("closing connection at libwebsocket_rx_flow_control:\n");
-                       libwebsocket_close_and_free_session(context, wsi, LWS_CLOSE_STATUS_NOSTATUS);
+                       lwsl_info("returning that we want to close connection at libwebsocket_rx_flow_control:\n");
                        return -1;
                }
                if (n)
@@ -1495,15 +1494,10 @@ int user_callback_handle_rxflow(callback_function callback_function,
        int n;
 
        n = callback_function(context, wsi, reason, user, in, len);
-       if (n) {
-               libwebsocket_close_and_free_session(context, wsi,
-                                              LWS_CLOSE_STATUS_NOSTATUS);
-               return n;
-       }
-
-       _libwebsocket_rx_flow_control(wsi);
+       if (!n)
+               n = _libwebsocket_rx_flow_control(wsi);
 
-       return 0;
+       return n;
 }
 
 
index 8e13d4b..55726f3 100644 (file)
@@ -501,8 +501,7 @@ int libwebsockets_serve_http_file_fragment(struct libwebsocket_context *context,
                        if (wsi->protocol->callback)
                                ret = user_callback_handle_rxflow(wsi->protocol->callback, context, wsi, LWS_CALLBACK_HTTP_FILE_COMPLETION, wsi->user_space,
                                        NULL, 0);
-                       /* user_callback_handle_rxflow did any close already */
-                       return 0;
+                       return ret;
                }
        }
 
index a320fef..438f103 100644 (file)
@@ -546,6 +546,7 @@ libwebsocket_rx_sm(struct libwebsocket *wsi, unsigned char c)
 {
        int n;
        struct lws_tokens eff_buf;
+       int ret = 0;
 #ifndef LWS_NO_EXTENSIONS
        int handled;
        int m;
@@ -928,10 +929,10 @@ spill:
                }
 #endif
                if (eff_buf.token_len > 0) {
-                   eff_buf.token[eff_buf.token_len] = '\0';
+                       eff_buf.token[eff_buf.token_len] = '\0';
 
-                   if (wsi->protocol->callback)
-                           user_callback_handle_rxflow(wsi->protocol->callback,
+                       if (wsi->protocol->callback)
+                               ret = user_callback_handle_rxflow(wsi->protocol->callback,
                                                    wsi->protocol->owning_server,
                                                    wsi, LWS_CALLBACK_RECEIVE,
                                                    wsi->user_space,
@@ -945,7 +946,7 @@ spill:
                break;
        }
 
-       return 0;
+       return ret;
 
 illegal_ctl_length: