public DeserializationState ReadValue(ReadOnlySpan <byte> data, DeserializationSession session) { if (session.ParsedValue.Uri != null) { throw new DeserializationException("No more than one URI field is allowed per session description"); } if (session.ParsedValue.MediaDescriptions != null && session.ParsedValue.MediaDescriptions.Any()) { throw new DeserializationException($"Uri MUST be specified before the first media field"); } var remainingSlice = data; //header SerializationHelpers.ParseRequiredHeader("Uri field", remainingSlice, HeaderBytes); remainingSlice = remainingSlice.Slice(HeaderBytes.Length); //uri var uriString = SerializationHelpers.ParseRequiredString("Uri field", SerializationHelpers.NextRequiredField("Uri field", remainingSlice)); if (Uri.TryCreate(uriString, UriKind.RelativeOrAbsolute, out var parsedUri)) { session.ParsedValue.Uri = parsedUri; } else { throw new DeserializationException($"Invalid Uri field value: {uriString}"); } return(OptionalValueDeSerializer.Instance.ReadValue); }
public DeserializationState ReadValue(ReadOnlySpan <byte> data, DeserializationSession session) { var remainingSlice = data; //header SerializationHelpers.ParseRequiredHeader("Session name", data, HeaderBytes); remainingSlice = remainingSlice.Slice(HeaderBytes.Length); //value session.ParsedValue.SessionName = SerializationHelpers.NextRequiredField("Session name", remainingSlice).ToArray(); return(OptionalValueDeSerializer.Instance.ReadValue); }
public DeserializationState ReadValue(ReadOnlySpan <byte> data, DeserializationSession session) { if (data.Length == 0) { throw new DeserializationException("Invalid sdp field"); } var media = session.ParsedValue.MediaDescriptions.LastOrDefault(); if (media == null) { throw new DeserializationException($"Media fields must start after m= field"); } switch (data[0]) { case MediaTitleSerializer.Identifier: media.Title = MediaTitleSerializer.Instance.ReadValue(data); break; case ConnectionDataSerializer.Identifier: media.ConnectionInfo = ConnectionDataSerializer.Instance.ReadValue(data); break; case BandwithSerializer.Identifier: media.Bandwiths = media.Bandwiths ?? new List <Bandwidth>(); media.Bandwiths.Add(BandwithSerializer.Instance.ReadValue(data)); break; case EncriptionKeySerializer.Identifier: media.EncriptionKey = EncriptionKeySerializer.Instance.ReadValue(data); break; case AttributeSerializer.Identifier: media.Attributes = media.Attributes ?? new List <string>(); media.Attributes.Add(AttributeSerializer.Instance.ReadValue(data)); break; case MediaSerializer.Identifier: session.ParsedValue.MediaDescriptions = session.ParsedValue.MediaDescriptions ?? new List <MediaDescription>(); session.ParsedValue.MediaDescriptions.Add(MediaSerializer.Instance.ReadValue(data)); return(Instance.ReadValue); default: throw new DeserializationException($"Unknown field {(char)data[0]}"); } return(this.ReadValue); }
public DeserializationState ReadValue(ReadOnlySpan <byte> data, DeserializationSession session) { var remainingSlice = data; //header SerializationHelpers.ParseRequiredHeader("Origin field", remainingSlice, HeaderBytes); remainingSlice = remainingSlice.Slice(HeaderBytes.Length); session.ParsedValue.Origin = new Origin(); //username session.ParsedValue.Origin.UserName = SerializationHelpers.ParseRequiredString("Origin field: username", SerializationHelpers.NextRequiredDelimitedField("Origin field: username", SDPSerializer.ByteSpace, remainingSlice, out var consumed)); remainingSlice = remainingSlice.Slice(consumed + 1); //sess-id session.ParsedValue.Origin.SessionId = SerializationHelpers.ParseLong("Origin field: sess-id", SerializationHelpers.NextRequiredDelimitedField("Origin field: sess-id", SDPSerializer.ByteSpace, remainingSlice, out consumed)); remainingSlice = remainingSlice.Slice(consumed + 1); //sess-version session.ParsedValue.Origin.SessionVersion = SerializationHelpers.ParseLong("Origin field: sess-version", SerializationHelpers.NextRequiredDelimitedField("Origin field: sess-version", SDPSerializer.ByteSpace, remainingSlice, out consumed)); remainingSlice = remainingSlice.Slice(consumed + 1); //nettype session.ParsedValue.Origin.Nettype = SerializationHelpers.ParseRequiredString("Origin field: nettype", SerializationHelpers.NextRequiredDelimitedField("Origin field: nettype", SDPSerializer.ByteSpace, remainingSlice, out consumed)); remainingSlice = remainingSlice.Slice(consumed + 1); //addrtype session.ParsedValue.Origin.AddrType = SerializationHelpers.ParseRequiredString("Origin field: addrtype", SerializationHelpers.NextRequiredDelimitedField("Origin field: addrtype", SDPSerializer.ByteSpace, remainingSlice, out consumed)); remainingSlice = remainingSlice.Slice(consumed + 1); // unicast-address session.ParsedValue.Origin.UnicastAddress = SerializationHelpers.ParseRequiredString("Origin field: unicast-address", remainingSlice); return(SessionNameSerializer.Instance.ReadValue); }
public DeserializationState ReadValue(ReadOnlySpan <byte> data, DeserializationSession session) { if (session.ParsedValue.MediaDescriptions != null && session.ParsedValue.MediaDescriptions.Any()) { throw new DeserializationException("Email address MUST be specified before the first media field"); } var remainingSlice = data; //header SerializationHelpers.ParseRequiredHeader("Email field", remainingSlice, HeaderBytes); remainingSlice = remainingSlice.Slice(HeaderBytes.Length); //uri var emailString = SerializationHelpers.ParseRequiredString("Email field", SerializationHelpers.NextRequiredField("Email field", remainingSlice)); session.ParsedValue.EmailNumbers = session.ParsedValue.EmailNumbers ?? new List <string>(); session.ParsedValue.EmailNumbers.Add(emailString); return(OptionalValueDeSerializer.Instance.ReadValue); }
public DeserializationState ReadValue(ReadOnlySpan <byte> data, DeserializationSession session) { session.ParsedValue = new SDP(); session.ParsedValue.Version = VersionSerializer.Instance.ReadValue(data); return(OriginSerializer.Instance.ReadValue); }
public DeserializationState ReadValue(ReadOnlySpan <byte> data, DeserializationSession session) { if (data.Length == 0) { throw new DeserializationException("Invalid SDP field"); } switch (data[0]) { case SessionInformationSerializer.Identifier: return(SessionInformationSerializer.Instance.ReadValue(data, session)); case ConnectionDataSerializer.Identifier: session.ParsedValue.ConnectionData = ConnectionDataSerializer.Instance.ReadValue(data); return(this.ReadValue); case TimingSerializer.Identifier: session.ParsedValue.Timings = session.ParsedValue.Timings ?? new List <TimingInfo>(); session.ParsedValue.Timings.Add(TimingSerializer.Instance.ReadValue(data)); return(OptionalValueDeSerializer.Instance.ReadValue); case UriSerializer.Identifier: return(UriSerializer.Instance.ReadValue(data, session)); case EmailAddressSerializer.Identifier: return(EmailAddressSerializer.Instance.ReadValue(data, session)); case PhoneNumberSerializer.Identifier: return(PhoneNumberSerializer.Instance.ReadValue(data, session)); case BandwithSerializer.Identifier: session.ParsedValue.BandWiths = session.ParsedValue.BandWiths ?? new List <Bandwidth>(); session.ParsedValue.BandWiths.Add(BandwithSerializer.Instance.ReadValue(data)); return(this.ReadValue); case RepeatTimeSerializer.Identifier: session.ParsedValue.SDPRepeatTimes = session.ParsedValue.SDPRepeatTimes ?? new List <RepeatTime>(); session.ParsedValue.SDPRepeatTimes.Add(RepeatTimeSerializer.Instance.ReadValue(data)); return(this.ReadValue); case SDPTimezonesSerializer.Identifier: session.ParsedValue.TimeZones = SDPTimezonesSerializer.Instance.ReadValue(data); return(this.ReadValue); case EncriptionKeySerializer.Identifier: session.ParsedValue.EncriptionKey = EncriptionKeySerializer.Instance.ReadValue(data); return(this.ReadValue); case AttributeSerializer.Identifier: session.ParsedValue.Attributes = session.ParsedValue.Attributes ?? new List <string>(); session.ParsedValue.Attributes.Add(AttributeSerializer.Instance.ReadValue(data)); return(this.ReadValue); case MediaSerializer.Identifier: session.ParsedValue.MediaDescriptions = session.ParsedValue.MediaDescriptions ?? new List <MediaDescription>(); session.ParsedValue.MediaDescriptions.Add(MediaSerializer.Instance.ReadValue(data)); return(MediaOptioalValueDeserializer.Instance.ReadValue); default: throw new DeserializationException($"Unknown field {(char)data[0]}"); } }