MCPcopy Create free account
hub / github.com/619dev/minghe / build_response_with_headers

Function build_response_with_headers

src/sip/parser.rs:153–210  ·  view source on GitHub ↗

从 SIP 请求构建带有额外头部的响应

(
    request: &str,
    status_code: u16,
    reason: &str,
    extra_headers: &[(&str, &str)],
)

Source from the content-addressed store, hash-verified

151
152/// 从 SIP 请求构建带有额外头部的响应
153pub fn build_response_with_headers(
154 request: &str,
155 status_code: u16,
156 reason: &str,
157 extra_headers: &[(&str, &str)],
158) -> Vec<u8> {
159 let mut via_headers = Vec::new();
160 let mut from_header = String::new();
161 let mut to_header = String::new();
162 let mut call_id_header = String::new();
163 let mut cseq_header = String::new();
164
165 for line in request.lines() {
166 let line_trimmed = line.trim();
167 if line_trimmed.is_empty() {
168 break;
169 }
170 let lower = line_trimmed.to_lowercase();
171 if lower.starts_with("via:") || lower.starts_with("v:") {
172 via_headers.push(line_trimmed.to_string());
173 } else if lower.starts_with("from:") || lower.starts_with("f:") {
174 from_header = line_trimmed.to_string();
175 } else if lower.starts_with("to:") || lower.starts_with("t:") {
176 to_header = line_trimmed.to_string();
177 } else if lower.starts_with("call-id:") || lower.starts_with("i:") {
178 call_id_header = line_trimmed.to_string();
179 } else if lower.starts_with("cseq:") {
180 cseq_header = line_trimmed.to_string();
181 }
182 }
183
184 if status_code > 100 && !to_header.to_lowercase().contains("tag=") {
185 to_header = format!("{};tag={}", to_header, generate_tag());
186 }
187
188 let mut response = format!("SIP/2.0 {} {}\r\n", status_code, reason);
189 for via in &via_headers {
190 response.push_str(via);
191 response.push_str("\r\n");
192 }
193 response.push_str(&from_header);
194 response.push_str("\r\n");
195 response.push_str(&to_header);
196 response.push_str("\r\n");
197 response.push_str(&call_id_header);
198 response.push_str("\r\n");
199 response.push_str(&cseq_header);
200 response.push_str("\r\n");
201
202 for (name, value) in extra_headers {
203 response.push_str(&format!("{}: {}\r\n", name, value));
204 }
205
206 response.push_str("Content-Length: 0\r\n");
207 response.push_str("\r\n");
208
209 response.into_bytes()
210}

Callers 2

handle_registerMethod · 0.85
process_sip_messageFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected