Add a setter for header_table_size
This commit is contained in:
@@ -1022,6 +1022,39 @@ impl Builder {
|
|||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Sets the header table size.
|
||||||
|
///
|
||||||
|
/// This setting informs the peer of the maximum size of the header compression
|
||||||
|
/// table used to encode header blocks, in octets. The encoder may select any value
|
||||||
|
/// equal to or less than the header table size specified by the sender.
|
||||||
|
///
|
||||||
|
/// The default value is 4,096.
|
||||||
|
///
|
||||||
|
/// # Examples
|
||||||
|
///
|
||||||
|
/// ```
|
||||||
|
/// # use tokio::io::{AsyncRead, AsyncWrite};
|
||||||
|
/// # use h2::client::*;
|
||||||
|
/// # use bytes::Bytes;
|
||||||
|
/// #
|
||||||
|
/// # async fn doc<T: AsyncRead + AsyncWrite + Unpin>(my_io: T)
|
||||||
|
/// # -> Result<((SendRequest<Bytes>, Connection<T, Bytes>)), h2::Error>
|
||||||
|
/// # {
|
||||||
|
/// // `client_fut` is a future representing the completion of the HTTP/2
|
||||||
|
/// // handshake.
|
||||||
|
/// let client_fut = Builder::new()
|
||||||
|
/// .header_table_size(1_000_000)
|
||||||
|
/// .handshake(my_io);
|
||||||
|
/// # client_fut.await
|
||||||
|
/// # }
|
||||||
|
/// #
|
||||||
|
/// # pub fn main() {}
|
||||||
|
/// ```
|
||||||
|
pub fn header_table_size(&mut self, size: u32) -> &mut Self {
|
||||||
|
self.settings.set_header_table_size(Some(size));
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
/// Sets the first stream ID to something other than 1.
|
/// Sets the first stream ID to something other than 1.
|
||||||
#[cfg(feature = "unstable")]
|
#[cfg(feature = "unstable")]
|
||||||
pub fn initial_stream_id(&mut self, stream_id: u32) -> &mut Self {
|
pub fn initial_stream_id(&mut self, stream_id: u32) -> &mut Self {
|
||||||
|
|||||||
@@ -88,6 +88,12 @@ impl<T> FramedRead<T> {
|
|||||||
pub fn set_max_header_list_size(&mut self, val: usize) {
|
pub fn set_max_header_list_size(&mut self, val: usize) {
|
||||||
self.max_header_list_size = val;
|
self.max_header_list_size = val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Update the header table size setting.
|
||||||
|
#[inline]
|
||||||
|
pub fn set_header_table_size(&mut self, val: usize) {
|
||||||
|
self.hpack.queue_size_update(val);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Decodes a frame.
|
/// Decodes a frame.
|
||||||
|
|||||||
@@ -95,6 +95,11 @@ impl<T, B> Codec<T, B> {
|
|||||||
self.framed_write().set_header_table_size(val)
|
self.framed_write().set_header_table_size(val)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Set the decoder header table size size.
|
||||||
|
pub fn set_recv_header_table_size(&mut self, val: usize) {
|
||||||
|
self.inner.set_header_table_size(val)
|
||||||
|
}
|
||||||
|
|
||||||
/// Set the max header list size that can be received.
|
/// Set the max header list size that can be received.
|
||||||
pub fn set_max_recv_header_list_size(&mut self, val: usize) {
|
pub fn set_max_recv_header_list_size(&mut self, val: usize) {
|
||||||
self.inner.set_max_header_list_size(val);
|
self.inner.set_max_header_list_size(val);
|
||||||
|
|||||||
@@ -120,12 +120,10 @@ impl Settings {
|
|||||||
pub fn header_table_size(&self) -> Option<u32> {
|
pub fn header_table_size(&self) -> Option<u32> {
|
||||||
self.header_table_size
|
self.header_table_size
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
pub fn set_header_table_size(&mut self, size: Option<u32>) {
|
pub fn set_header_table_size(&mut self, size: Option<u32>) {
|
||||||
self.header_table_size = size;
|
self.header_table_size = size;
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
pub fn load(head: Head, payload: &[u8]) -> Result<Settings, Error> {
|
pub fn load(head: Head, payload: &[u8]) -> Result<Settings, Error> {
|
||||||
use self::Setting::*;
|
use self::Setting::*;
|
||||||
|
|||||||
@@ -60,6 +60,10 @@ impl Settings {
|
|||||||
codec.set_max_recv_header_list_size(max as usize);
|
codec.set_max_recv_header_list_size(max as usize);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if let Some(val) = local.header_table_size() {
|
||||||
|
codec.set_recv_header_table_size(val as usize);
|
||||||
|
}
|
||||||
|
|
||||||
streams.apply_local_settings(local)?;
|
streams.apply_local_settings(local)?;
|
||||||
self.local = Local::Synced;
|
self.local = Local::Synced;
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|||||||
Reference in New Issue
Block a user