Software / code / prosody
Comparison
plugins/mod_websocket.lua @ 11109:7ec7dba7ba8b 0.11
mod_websocket: Add separate limit for frame buffer size
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Thu, 17 Sep 2020 16:42:14 +0100 |
| parent | 11108:fa1821b56f75 |
| child | 11110:67fb92e312f1 |
comparison
equal
deleted
inserted
replaced
| 11108:fa1821b56f75 | 11109:7ec7dba7ba8b |
|---|---|
| 27 local parse_close = websocket_frames.parse_close; | 27 local parse_close = websocket_frames.parse_close; |
| 28 | 28 |
| 29 local t_concat = table.concat; | 29 local t_concat = table.concat; |
| 30 | 30 |
| 31 local stanza_size_limit = module:get_option_number("c2s_stanza_size_limit", 10 * 1024 * 1024); | 31 local stanza_size_limit = module:get_option_number("c2s_stanza_size_limit", 10 * 1024 * 1024); |
| 32 local frame_buffer_limit = module:get_option_number("websocket_frame_buffer_limit", 2 * stanza_size_limit); | |
| 32 local frame_fragment_limit = module:get_option_number("websocket_frame_fragment_limit", 8); | 33 local frame_fragment_limit = module:get_option_number("websocket_frame_fragment_limit", 8); |
| 33 local stream_close_timeout = module:get_option_number("c2s_close_timeout", 5); | 34 local stream_close_timeout = module:get_option_number("c2s_close_timeout", 5); |
| 34 local consider_websocket_secure = module:get_option_boolean("consider_websocket_secure"); | 35 local consider_websocket_secure = module:get_option_boolean("consider_websocket_secure"); |
| 35 local cross_domain = module:get_option_set("cross_domain_websocket", {}); | 36 local cross_domain = module:get_option_set("cross_domain_websocket", {}); |
| 36 if cross_domain:contains("*") or cross_domain:contains(true) then | 37 if cross_domain:contains("*") or cross_domain:contains(true) then |
| 270 session.websocket_request = request; | 271 session.websocket_request = request; |
| 271 | 272 |
| 272 session.open_stream = session_open_stream; | 273 session.open_stream = session_open_stream; |
| 273 session.close = session_close; | 274 session.close = session_close; |
| 274 | 275 |
| 275 -- max frame header is 22 bytes | 276 local frameBuffer = dbuffer.new(frame_buffer_limit, frame_fragment_limit); |
| 276 local frameBuffer = dbuffer.new(stanza_size_limit + 22, frame_fragment_limit); | |
| 277 add_filter(session, "bytes/in", function(data) | 277 add_filter(session, "bytes/in", function(data) |
| 278 if not frameBuffer:write(data) then | 278 if not frameBuffer:write(data) then |
| 279 session.log("warn", "websocket frame buffer full - terminating session"); | 279 session.log("warn", "websocket frame buffer full - terminating session"); |
| 280 session:close({ condition = "resource-constraint", text = "frame buffer exceeded" }); | 280 session:close({ condition = "resource-constraint", text = "frame buffer exceeded" }); |
| 281 return; | 281 return; |