/// <summary> /// Parses the specified origin string. /// </summary> /// <param name="originString">The string to convert to origin object.</param> /// <returns></returns> public static Origin Parse(string originString) { if (originString == null) throw new ArgumentNullException("originString"); string[] parts = originString.Split(' '); if (parts.Length != 6) throw new FormatException("Number of element invalid in origin string."); Origin result = new Origin(); result.Username = parts[0]; result.SessionId = parts[1]; result.SessionVersion = long.Parse(parts[2]); result.NetType = parts[3]; result.AddressType = parts[4]; result.UnicastAddress = parts[5]; return result; }
/// <summary> /// Reads the specified SDP stream. /// As define in RFC 4566 /// </summary> /// <param name="sdpStream">The SDP stream.</param> /// <returns></returns> public static SdpFile Read(TextReader sdpStream) { SdpFile returnValue = new SdpFile(); KeyValuePair <string, string> value = GetKeyValue(sdpStream); // Version mandatory if (value.Key == "v") { returnValue.Version = int.Parse(value.Value, CultureInfo.InvariantCulture); } else { throw new InvalidDataException(); } value = GetKeyValue(sdpStream); // Origin mandatory if (value.Key == "o") { returnValue.Origin = Origin.Parse(value.Value); } else { throw new InvalidDataException(); } value = GetKeyValue(sdpStream); // Session mandatory if (value.Key == "s") { returnValue.Session = value.Value; } else { throw new InvalidDataException(); } value = GetKeyValue(sdpStream); // Session optional if (value.Key == "i") { returnValue.SessionInformation = value.Value; value = GetKeyValue(sdpStream); } // Uri optional if (value.Key == "u") { returnValue.Url = new Uri(value.Value); value = GetKeyValue(sdpStream); } // Email optional if (value.Key == "e") { returnValue.Email = value.Value; value = GetKeyValue(sdpStream); } // Phone optional if (value.Key == "p") { returnValue.Phone = value.Value; value = GetKeyValue(sdpStream); } // Connexion optional if (value.Key == "c") { returnValue.Connection = Connection.Parse(value.Value); value = GetKeyValue(sdpStream); } // bandwidth optional if (value.Key == "b") { returnValue.Bandwidth = Bandwidth.Parse(value.Value); value = GetKeyValue(sdpStream); } //Timing while (value.Key == "t") { string timing = value.Value; string repeat = string.Empty; value = GetKeyValue(sdpStream); if (value.Key == "r") { repeat = value.Value; value = GetKeyValue(sdpStream); } returnValue.Timings.Add(new Timing(timing, repeat)); } // timezone optional if (value.Key == "z") { returnValue.TimeZone = SdpTimeZone.ParseInvariant(value.Value); value = GetKeyValue(sdpStream); } // enkription key optional if (value.Key == "k") { returnValue.EncriptionKey = EncriptionKey.ParseInvariant(value.Value); value = GetKeyValue(sdpStream); } //Attribut optional multiple while (value.Key == "a") { returnValue.Attributs.Add(Attribut.ParseInvariant(value.Value)); value = GetKeyValue(sdpStream); } while (value.Key == "m") { Media newMedia = ReadMedia(sdpStream, ref value); returnValue.Medias.Add(newMedia); } return(returnValue); }