/* allow him to construct his ext instance */
- ext->callback(lws_get_context(wsi), ext, wsi,
+ if (ext->callback(lws_get_context(wsi), ext, wsi,
LWS_EXT_CB_CLIENT_CONSTRUCT,
(void *)&wsi->act_ext_user[wsi->count_act_ext],
- (void *)&opts, 0);
+ (void *)&opts, 0)) {
+ lwsl_notice(" ext %s failed construction\n", ext_name);
+ ext++;
+ continue;
+ }
/*
* allow the user code to override ext defaults if it
case LWS_EXT_CB_CLIENT_CONSTRUCT:
case LWS_EXT_CB_CONSTRUCT:
+
+ n = LWS_MAX_SOCKET_IO_BUF;
+ if (wsi->protocol->rx_buffer_size)
+ n = wsi->protocol->rx_buffer_size;
+
+ if (n < 128) {
+ lwsl_err(" permessage-deflate requires the protocol (%s) to have an RX buffer >= 128\n",
+ wsi->protocol->name);
+ return -1;
+ }
+
/* fill in **user */
priv = lws_zalloc(sizeof(*priv));
*((void **)user) = priv;
priv->args[PMD_TX_BUF_PWR2] = 10; /* ie, 1024 */
priv->args[PMD_COMP_LEVEL] = 1;
priv->args[PMD_MEM_LEVEL] = 8;
+
+ /* cap the RX buf at the nearest power of 2 to protocol rx buf */
+
+ n = LWS_MAX_SOCKET_IO_BUF;
+ if (wsi->protocol->rx_buffer_size)
+ n = wsi->protocol->rx_buffer_size;
+
+ extra = 7;
+ while (n >= 1 << (extra + 1))
+ extra++;
+
+ if (extra < priv->args[PMD_RX_BUF_PWR2]) {
+ priv->args[PMD_RX_BUF_PWR2] = extra;
+ lwsl_err(" Capping pmd rx to %d\n", 1 << extra);
+ }
+ lwsl_err(" ok\n");
+
break;
case LWS_EXT_CB_DESTROY:
/* apply it */
- if (ext_count)
- *(*p)++ = ',';
- else
- LWS_CPYAPP(*p, "\x0d\x0aSec-WebSocket-Extensions: ");
- *p += sprintf(*p, "%s", ext_name);
ext_count++;
/* instantiate the extension on this conn */
/* allow him to construct his context */
- ext->callback(lws_get_context(wsi), ext, wsi,
+ if (ext->callback(lws_get_context(wsi), ext, wsi,
LWS_EXT_CB_CONSTRUCT,
(void *)&wsi->act_ext_user[wsi->count_act_ext],
- NULL, 0);
+ NULL, 0)) {
+ lwsl_notice("ext %s failed construction\n", ext_name);
+ ext_count--;
+ ext++;
+ continue;
+ }
+
+ if (ext_count > 1)
+ *(*p)++ = ',';
+ else
+ LWS_CPYAPP(*p, "\x0d\x0aSec-WebSocket-Extensions: ");
+ *p += sprintf(*p, "%s", ext_name);
wsi->count_act_ext++;
lwsl_parser("count_act_ext <- %d\n", wsi->count_act_ext);
"dumb-increment-protocol",
callback_dumb_increment,
sizeof(struct per_session_data__dumb_increment),
- 10,
+ 10, /* rx buf size must be >= permessage-deflate rx size */
},
{
"lws-mirror-protocol",
callback_lws_mirror,
sizeof(struct per_session_data__lws_mirror),
- 128,
+ 128, /* rx buf size must be >= permessage-deflate rx size */
},
{
"lws-echogen",
callback_lws_echogen,
sizeof(struct per_session_data__echogen),
- 128,
+ 128, /* rx buf size must be >= permessage-deflate rx size */
},
{
"lws-status",
callback_lws_status,
sizeof(struct per_session_data__lws_status),
- 128,
+ 128, /* rx buf size must be >= permessage-deflate rx size */
},
{ NULL, NULL, 0, 0 } /* terminator */
};
<td align=center><div id=number style="font-size:120%;"> </div></td>
<td align=center>
<input type=button id=offset value="Reset counter" onclick="reset();" >
+ <input type=button id=junk value="Send junk" onclick="junk();" >
</td>
</tr>
</table>
document.getElementById("s_statustd").style.backgroundColor = "#40ff40";
document.getElementById("s_status").innerHTML =
" <b>websocket connection opened</b><br>" +
- san(socket_di.extensions);
+ san(socket_status.extensions);
}
socket_status.onmessage =function got_packet(msg) {
socket_di.send("reset\n");
}
+
+function junk() {
+ for(var word = ''; word.length < 9000; word += 'a'){}
+ socket_di.send(word);
+}
+
var socket_ot;
function ot_open() {
document.getElementById("wslm_statustd").style.backgroundColor = "#40ff40";
document.getElementById("wslm_status").innerHTML =
" <b>websocket connection opened</b><br>" +
- san(socket_di.extensions);
+ san(socket_lm.extensions);
}
socket_lm.onmessage =function got_packet(msg) {