internal static IEnumerable <IfHeaderCondition> Parse([NotNull] StringSource source, [NotNull] EntityTagComparer entityTagComparer) { while (!source.SkipWhiteSpace()) { var isNot = false; EntityTag?etag = null; if (source.AdvanceIf("Not", StringComparison.OrdinalIgnoreCase)) { isNot = true; source.SkipWhiteSpace(); } Uri stateToken; if (CodedUrlParser.TryParse(source, out stateToken)) { // Coded-URL found } else if (source.Get() == '[') { // Entity-tag found etag = EntityTag.Parse(source).Single(); if (!source.AdvanceIf("]")) { throw new ArgumentException($"{source.Remaining} is not a valid condition (ETag not ending with ']')", nameof(source)); } } else { source.Back(); break; } yield return(new IfHeaderCondition(isNot, stateToken, etag, entityTagComparer)); } }
public static LockTokenHeader Parse(string s) { Uri stateToken; if (!CodedUrlParser.TryParse(s, out stateToken)) { throw new ArgumentException($"{s} is not a valid lock token", nameof(s)); } return(new LockTokenHeader(stateToken)); }
internal static IEnumerable <IfHeaderList> Parse([NotNull] StringSource source, [NotNull] EntityTagComparer etagComparer, [NotNull] IWebDavContext context) { Uri previousResourceTag = context.PublicAbsoluteRequestUrl; while (!source.SkipWhiteSpace()) { if (CodedUrlParser.TryParse(source, out var resourceTag)) { // Coded-URL found if (!resourceTag.IsAbsoluteUri) { resourceTag = new Uri(context.PublicRootUrl, resourceTag); } previousResourceTag = resourceTag; source.SkipWhiteSpace(); } else { resourceTag = previousResourceTag; } if (!source.AdvanceIf("(")) { throw new ArgumentException($"{source.Remaining} is not a valid list (not starting with a '(')", nameof(source)); } var conditions = IfHeaderCondition.Parse(source, etagComparer).ToList(); if (!source.AdvanceIf(")")) { throw new ArgumentException($"{source.Remaining} is not a valid list (not ending with a ')')", nameof(source)); } var relativeHref = context.PublicControllerUrl.IsBaseOf(resourceTag) ? AddRootSlashToUri(context.PublicControllerUrl.MakeRelativeUri(resourceTag)) : resourceTag; var path = context.PublicControllerUrl.IsBaseOf(resourceTag) ? context.PublicControllerUrl.MakeRelativeUri(resourceTag) : resourceTag; yield return(new IfHeaderList(resourceTag, relativeHref, path, conditions)); } }