Skip to content

Commit 2cb9752

Browse files
authored
Expose direct configuration of max in and out buffer capacity (#594)
* Expose direct configuration of max in and out buffer capacity * Correct argument duplicate typo" * Add server builder tests * rustfmt ws/src/server_builder.rs
1 parent 07a002a commit 2cb9752

File tree

2 files changed

+67
-2
lines changed

2 files changed

+67
-2
lines changed

ws/src/server.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ impl Server {
5858
executor: UninitializedExecutor,
5959
max_connections: usize,
6060
max_payload_bytes: usize,
61+
max_in_buffer_capacity: usize,
62+
max_out_buffer_capacity: usize,
6163
) -> Result<Server>
6264
where
6365
S::Future: Unpin,
@@ -68,8 +70,8 @@ impl Server {
6870
config.max_connections = max_connections;
6971
// don't accept super large requests
7072
config.max_fragment_size = max_payload_bytes;
71-
config.max_in_buffer_capacity = max_payload_bytes;
72-
config.max_out_buffer_capacity = max_payload_bytes;
73+
config.max_in_buffer_capacity = max_in_buffer_capacity;
74+
config.max_out_buffer_capacity = max_out_buffer_capacity;
7375
// don't grow non-final fragments (to prevent DOS)
7476
config.fragments_grow = false;
7577
config.fragments_capacity = cmp::max(1, max_payload_bytes / config.fragment_size);

ws/src/server_builder.rs

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ pub struct ServerBuilder<M: core::Metadata, S: core::Middleware<M>> {
2424
executor: UninitializedExecutor,
2525
max_connections: usize,
2626
max_payload_bytes: usize,
27+
max_in_buffer_capacity: usize,
28+
max_out_buffer_capacity: usize,
2729
}
2830

2931
impl<M: core::Metadata + Default, S: core::Middleware<M>> ServerBuilder<M, S>
@@ -61,6 +63,8 @@ where
6163
executor: UninitializedExecutor::Unspawned,
6264
max_connections: 100,
6365
max_payload_bytes: 5 * 1024 * 1024,
66+
max_in_buffer_capacity: 10 * 1024 * 1024,
67+
max_out_buffer_capacity: 10 * 1024 * 1024,
6468
}
6569
}
6670

@@ -115,6 +119,20 @@ where
115119
self
116120
}
117121

122+
/// The maximum size to which the incoming buffer can grow.
123+
/// Default: 10,485,760
124+
pub fn max_in_buffer_capacity(mut self, max_in_buffer_capacity: usize) -> Self {
125+
self.max_in_buffer_capacity = max_in_buffer_capacity;
126+
self
127+
}
128+
129+
/// The maximum size to which the outgoing buffer can grow.
130+
/// Default: 10,485,760
131+
pub fn max_out_buffer_capacity(mut self, max_out_buffer_capacity: usize) -> Self {
132+
self.max_out_buffer_capacity = max_out_buffer_capacity;
133+
self
134+
}
135+
118136
/// Starts a new `WebSocket` server in separate thread.
119137
/// Returns a `Server` handle which closes the server when droped.
120138
pub fn start(self, addr: &SocketAddr) -> Result<Server> {
@@ -129,6 +147,51 @@ where
129147
self.executor,
130148
self.max_connections,
131149
self.max_payload_bytes,
150+
self.max_in_buffer_capacity,
151+
self.max_out_buffer_capacity,
132152
)
133153
}
134154
}
155+
156+
#[cfg(test)]
157+
mod tests {
158+
use super::*;
159+
160+
fn basic_server_builder() -> ServerBuilder<(), jsonrpc_core::middleware::Noop> {
161+
let io = core::IoHandler::default();
162+
ServerBuilder::new(io)
163+
}
164+
#[test]
165+
fn config_usize_vals_have_correct_defaults() {
166+
let server = basic_server_builder();
167+
168+
assert_eq!(server.max_connections, 100);
169+
assert_eq!(server.max_payload_bytes, 5 * 1024 * 1024);
170+
assert_eq!(server.max_in_buffer_capacity, 10 * 1024 * 1024);
171+
assert_eq!(server.max_out_buffer_capacity, 10 * 1024 * 1024);
172+
}
173+
174+
#[test]
175+
fn config_usize_vals_can_be_set() {
176+
let server = basic_server_builder();
177+
178+
// We can set them individually
179+
let server = server.max_connections(10);
180+
assert_eq!(server.max_connections, 10);
181+
182+
let server = server.max_payload(29);
183+
assert_eq!(server.max_payload_bytes, 29);
184+
185+
let server = server.max_in_buffer_capacity(38);
186+
assert_eq!(server.max_in_buffer_capacity, 38);
187+
188+
let server = server.max_out_buffer_capacity(47);
189+
assert_eq!(server.max_out_buffer_capacity, 47);
190+
191+
// Setting values consecutively does not impact other values
192+
assert_eq!(server.max_connections, 10);
193+
assert_eq!(server.max_payload_bytes, 29);
194+
assert_eq!(server.max_in_buffer_capacity, 38);
195+
assert_eq!(server.max_out_buffer_capacity, 47);
196+
}
197+
}

0 commit comments

Comments
 (0)