Inline realtime call multipart body

Co-authored-by: Codex <noreply@openai.com>
This commit is contained in:
Ahmed Ibrahim
2026-04-06 17:19:22 -07:00
parent 8af0917fc4
commit 4b44e5a3cd

View File

@@ -99,7 +99,24 @@ impl<T: HttpTransport, A: AuthProvider> RealtimeCallClient<T, A> {
session: Value,
extra_headers: HeaderMap,
) -> Result<RealtimeCallResponse, ApiError> {
let body = multipart_body(&sdp, &session)?;
let session = to_string(&session).map_err(|err| ApiError::InvalidRequest {
message: err.to_string(),
})?;
let mut body = Vec::new();
body.extend_from_slice(format!("--{MULTIPART_BOUNDARY}\r\n").as_bytes());
body.extend_from_slice(
b"Content-Disposition: form-data; name=\"sdp\"; filename=\"offer.sdp\"\r\n",
);
body.extend_from_slice(b"Content-Type: application/sdp\r\n\r\n");
body.extend_from_slice(sdp.as_bytes());
body.extend_from_slice(b"\r\n");
body.extend_from_slice(format!("--{MULTIPART_BOUNDARY}\r\n").as_bytes());
body.extend_from_slice(b"Content-Disposition: form-data; name=\"session\"\r\n");
body.extend_from_slice(b"Content-Type: application/json\r\n\r\n");
body.extend_from_slice(session.as_bytes());
body.extend_from_slice(b"\r\n");
body.extend_from_slice(format!("--{MULTIPART_BOUNDARY}--\r\n").as_bytes());
let resp = self
.session
.execute_with(
@@ -129,27 +146,6 @@ impl<T: HttpTransport, A: AuthProvider> RealtimeCallClient<T, A> {
}
}
fn multipart_body(sdp: &str, session: &Value) -> Result<Vec<u8>, ApiError> {
let session = to_string(session).map_err(|err| ApiError::InvalidRequest {
message: err.to_string(),
})?;
let mut body = Vec::new();
body.extend_from_slice(format!("--{MULTIPART_BOUNDARY}\r\n").as_bytes());
body.extend_from_slice(
b"Content-Disposition: form-data; name=\"sdp\"; filename=\"offer.sdp\"\r\n",
);
body.extend_from_slice(b"Content-Type: application/sdp\r\n\r\n");
body.extend_from_slice(sdp.as_bytes());
body.extend_from_slice(b"\r\n");
body.extend_from_slice(format!("--{MULTIPART_BOUNDARY}\r\n").as_bytes());
body.extend_from_slice(b"Content-Disposition: form-data; name=\"session\"\r\n");
body.extend_from_slice(b"Content-Type: application/json\r\n\r\n");
body.extend_from_slice(session.as_bytes());
body.extend_from_slice(b"\r\n");
body.extend_from_slice(format!("--{MULTIPART_BOUNDARY}--\r\n").as_bytes());
Ok(body)
}
#[cfg(test)]
mod tests {
use super::*;