From 7aa211a8d7ae2efeebd9362699a1aea4b5690e3d Mon Sep 17 00:00:00 2001 From: metamuffin Date: Sat, 6 Jul 2024 17:37:35 +0200 Subject: start on sdp impl --- src/sdp/mod.rs | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 src/sdp/mod.rs (limited to 'src/sdp') diff --git a/src/sdp/mod.rs b/src/sdp/mod.rs new file mode 100644 index 0000000..635c182 --- /dev/null +++ b/src/sdp/mod.rs @@ -0,0 +1,56 @@ +use anyhow::{anyhow, bail}; +use std::str::FromStr; + +pub struct SessionDescription { + version: String, + originator: String, + session_name: String, + session_information: Option, + description_uri: Option, + email_address: Option, + phone_number: Option, + connection_information: Vec, + bandwidth: Vec, + time_descriptions: Vec, + time_zone_adjustments: Option, + encryption_key: Option, + session_attribute: Vec, + media_descriptions: Vec, +} + +pub struct TimeDescription { + time: String, + repeat_times: Vec, +} + +pub struct MediaDescription { + name: String, + title: String, + connection_information: String, +} + +impl FromStr for SessionDescription { + type Err = anyhow::Error; + fn from_str(s: &str) -> Result { + let mut version = None; + let mut originator = None; + let mut session_name = None; + let mut session_information = None; + let mut description_uri = None; + let mut email_address = None; + let mut phone_number = None; + let mut connection_information = Vec::new(); + let mut bandwidth = Vec::new(); + for line in s.lines() { + let (r#type, value) = line.split_once("=").ok_or(anyhow!("sdp line invalid"))?; + match r#type { + "v" => version = Some(value.to_string()), + "o" => originator = Some(value.to_string()), + "s" => session_name = Some(value.to_string()), + "s" => session_name = Some(value.to_string()), + x => bail!("unknown sdp type ({x:?})"), + } + } + Ok(Self {}) + } +} -- cgit v1.2.3-70-g09d2