check for default protocol rx buf limit 98/3098/1
authorAndy Green <andy.green@linaro.org>
Thu, 14 Feb 2013 02:18:31 +0000 (10:18 +0800)
committerKevron Rees <kevron_m_rees@linux.intel.com>
Thu, 7 Mar 2013 21:01:35 +0000 (13:01 -0800)
This fixes

http://libwebsockets.org/trac/ticket/13

When using the default rx protocol buffer, the check is
performed against 0 not the default length.  That's the
case both in client and server code...

There's no problem if you actually give a max frame size
in the protocol definition.

Signed-off-by: Andy Green <andy.green@linaro.org>
lib/client-parser.c

index 707000b..3b79f3e 100644 (file)
@@ -230,12 +230,27 @@ int libwebsocket_client_rx_sm(struct libwebsocket *wsi, unsigned char c)
                                            (wsi->u.ws.frame_mask_index++) & 3];
 
                if (--wsi->u.ws.rx_packet_length == 0) {
+                       /* spill because we have the whole frame */
                        wsi->lws_rx_parse_state = LWS_RXPS_NEW;
                        goto spill;
                }
-               if (wsi->u.ws.rx_user_buffer_head !=
-                                               wsi->protocol->rx_buffer_size)
+
+               /*
+                * if there's no protocol max frame size given, we are
+                * supposed to default to LWS_MAX_SOCKET_IO_BUF
+                */
+
+               if (!wsi->protocol->rx_buffer_size &&
+                                       wsi->u.ws.rx_user_buffer_head !=
+                                                         LWS_MAX_SOCKET_IO_BUF)
                        break;
+               else
+                       if (wsi->protocol->rx_buffer_size &&
+                                       wsi->u.ws.rx_user_buffer_head !=
+                                                 wsi->protocol->rx_buffer_size)
+                       break;
+
+               /* spill because we filled our rx buffer */
 spill:
 
                handled = 0;