MCPcopy Create free account
hub / github.com/Dstack-TEE/dstack / read_v2_header

Function read_v2_header

gateway/src/pp.rs:127–158  ·  view source on GitHub ↗
(
    mut stream: I,
    buffer: &mut [u8; READ_BUFFER_LEN],
)

Source from the content-addressed store, hash-verified

125}
126
127async fn read_v2_header<I>(
128 mut stream: I,
129 buffer: &mut [u8; READ_BUFFER_LEN],
130) -> Result<Option<Vec<u8>>>
131where
132 I: AsyncRead + Unpin,
133{
134 let length =
135 u16::from_be_bytes([buffer[V2_LENGTH_INDEX], buffer[V2_LENGTH_INDEX + 1]]) as usize;
136 let full_length = V2_MINIMUM_LEN + length;
137
138 if full_length > V2_MAX_LENGTH {
139 bail!("v2 proxy protocol header is too long");
140 }
141
142 if full_length > READ_BUFFER_LEN {
143 let mut dynamic_buffer = Vec::with_capacity(full_length);
144 dynamic_buffer.extend_from_slice(&buffer[..V2_MINIMUM_LEN]);
145 dynamic_buffer.resize(full_length, 0);
146 stream
147 .read_exact(&mut dynamic_buffer[V2_MINIMUM_LEN..full_length])
148 .await?;
149
150 Ok(Some(dynamic_buffer))
151 } else {
152 stream
153 .read_exact(&mut buffer[V2_MINIMUM_LEN..full_length])
154 .await?;
155
156 Ok(None)
157 }
158}
159
160async fn read_v1_header<I>(mut stream: I, buffer: &mut [u8; READ_BUFFER_LEN]) -> Result<()>
161where

Callers 1

read_proxy_headerFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected