/// <summary> /// Parses the int values of port. /// </summary> /// <param name="stringValue">A string value.</param> /// <returns>The port couple</returns> public static PortCouple Parse(string stringValue) { if (stringValue == null) { throw new ArgumentNullException(nameof(stringValue)); } Contract.Requires(!string.IsNullOrEmpty(stringValue)); string [] values = stringValue.Split('-'); int.TryParse(values [0], out int tempValue); PortCouple result = new PortCouple(tempValue); tempValue = 0; if (values.Length > 1) { int.TryParse(values [1], out tempValue); } result.Second = tempValue; return(result); }
/// <summary> /// Parses the specified transport string. /// </summary> /// <param name="aTransportString">A transport string.</param> /// <returns>The transport class.</returns> /// <exception cref="ArgumentNullException"><paramref name="aTransportString"/> is null.</exception> public static RtspTransport Parse(string aTransportString) { if (aTransportString == null) { throw new ArgumentNullException("aTransportString"); } Contract.EndContractBlock(); RtspTransport returnValue = new RtspTransport(); string [] transportPart = aTransportString.Split(';'); string [] transportProtocolPart = transportPart [0].Split('/'); ReadTransport(returnValue, transportProtocolPart); ReadProfile(returnValue, transportProtocolPart); ReadLowerTransport(returnValue, transportProtocolPart); foreach (string part in transportPart) { string [] subPart = part.Split('='); switch (subPart [0].ToUpperInvariant()) { case "UNICAST": returnValue.IsMulticast = false; break; case "MULTICAST": returnValue.IsMulticast = true; break; case "DESTINATION": if (subPart.Length == 2) { returnValue.Destination = subPart [1]; } break; case "SOURCE": if (subPart.Length == 2) { returnValue.Source = subPart [1]; } break; case "INTERLEAVED": returnValue.IsMulticast = false; if (subPart.Length < 2) { throw new ArgumentException("interleaved value invalid", "aTransportString"); } returnValue.Interleaved = PortCouple.Parse(subPart [1]); break; case "APPEND": returnValue.IsAppend = true; break; case "TTL": int ttl = 0; if (subPart.Length < 2 || !int.TryParse(subPart [1], out ttl)) { throw new ArgumentException("TTL value invalid", "aTransportString"); } returnValue.TTL = ttl; break; case "LAYERS": int layers = 0; if (subPart.Length < 2 || !int.TryParse(subPart [1], out layers)) { throw new ArgumentException("Layers value invalid", "aTransportString"); } returnValue.TTL = layers; break; case "PORT": if (subPart.Length < 2) { throw new ArgumentException("Port value invalid", "aTransportString"); } returnValue.Port = PortCouple.Parse(subPart [1]); break; case "CLIENT_PORT": if (subPart.Length < 2) { throw new ArgumentException("client_port value invalid", "aTransportString"); } returnValue.ClientPort = PortCouple.Parse(subPart [1]); break; case "SERVER_PORT": if (subPart.Length < 2) { throw new ArgumentException("server_port value invalid", "aTransportString"); } returnValue.ServerPort = PortCouple.Parse(subPart [1]); break; case "SSRC": if (subPart.Length < 2) { throw new ArgumentException("ssrc value invalid", "aTransportString"); } returnValue.SSrc = subPart [1]; break; case "MODE": if (subPart.Length < 2) { throw new ArgumentException("mode value invalid", "aTransportString"); } returnValue.Mode = subPart [1]; break; default: // TODO log invalid part break; } } return(returnValue); }