Add a setter for header_table_size
This commit is contained in:
		| @@ -1022,6 +1022,39 @@ impl Builder { | ||||
|         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. | ||||
|     #[cfg(feature = "unstable")] | ||||
|     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) { | ||||
|         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. | ||||
|   | ||||
| @@ -95,6 +95,11 @@ impl<T, B> Codec<T, B> { | ||||
|         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. | ||||
|     pub fn set_max_recv_header_list_size(&mut self, val: usize) { | ||||
|         self.inner.set_max_header_list_size(val); | ||||
|   | ||||
| @@ -120,12 +120,10 @@ impl Settings { | ||||
|     pub fn header_table_size(&self) -> Option<u32> { | ||||
|         self.header_table_size | ||||
|     } | ||||
|  | ||||
|     /* | ||||
|      | ||||
|     pub fn set_header_table_size(&mut self, size: Option<u32>) { | ||||
|         self.header_table_size = size; | ||||
|     } | ||||
|     */ | ||||
|  | ||||
|     pub fn load(head: Head, payload: &[u8]) -> Result<Settings, Error> { | ||||
|         use self::Setting::*; | ||||
|   | ||||
| @@ -60,6 +60,10 @@ impl Settings { | ||||
|                         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)?; | ||||
|                     self.local = Local::Synced; | ||||
|                     Ok(()) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user