protected override bool ProcessConditionalHeader(ConditionalHeaders condHeaders, NameValueCollection requestHeaders, OperationTypeForConditionParsing operationType, string requestVersion, out ConditionInformation outputCondition) { DateTime?nullable; if (!ConditionExtractor.ShouldThisVersionFailMultipleConditions(requestVersion)) { if (!string.IsNullOrEmpty(condHeaders.IfRange)) { outputCondition = null; return(false); } if (string.IsNullOrEmpty(condHeaders.IfUnmodifiedSince) || !string.IsNullOrEmpty(condHeaders.IfMatch)) { outputCondition = null; return(false); } if (!string.IsNullOrEmpty(condHeaders.IfModifiedSince) || !string.IsNullOrEmpty(condHeaders.IfNoneMatch)) { outputCondition = null; return(false); } } else { if (string.IsNullOrEmpty(condHeaders.IfUnmodifiedSince)) { outputCondition = null; return(false); } if (!string.IsNullOrEmpty(condHeaders.IfMatch)) { outputCondition = null; return(false); } if (!string.IsNullOrEmpty(condHeaders.IfModifiedSince) || !string.IsNullOrEmpty(condHeaders.IfNoneMatch)) { throw new MultipleConditionHeaderProtocolException(); } } ConditionInformation conditionInformation = new ConditionInformation() { ConditionFailStatusCode = HttpStatusCode.PreconditionFailed }; if (!HttpUtilities.TryGetDateTimeFromHttpString(condHeaders.IfUnmodifiedSince, out nullable)) { throw new InvalidHeaderProtocolException("If-Unmodified-Since", condHeaders.IfUnmodifiedSince); } conditionInformation.IfNotModifiedSince = new DateTime?((nullable.Value < DateTime.MaxValue.AddSeconds(-1) ? nullable.Value.AddSeconds(1) : nullable.Value)); conditionInformation.ResourceExistsCondition = new ResourceExistenceCondition?(ResourceExistenceCondition.MayExist); outputCondition = conditionInformation; return(true); }
public bool ProcessConditionalHeader(ConditionalHeaders condHeaders, NameValueCollection requestHeaders, OperationTypeForConditionParsing operationType, string requestVersion, ConditionInformation outputCondition) { if (ConditionExtractor.ShouldThisVersionFailMultipleConditions(requestVersion)) { return(false); } if (string.IsNullOrEmpty(condHeaders.IfRange)) { return(false); } HttpRequestAccessorCommon.RemoveRangeHeaderValues(requestHeaders); return(true); }
protected override bool ProcessConditionalHeader(ConditionalHeaders condHeaders, NameValueCollection requestHeaders, OperationTypeForConditionParsing operationType, string requestVersion, out ConditionInformation outputCondition) { DateTime lastModifiedTimeFromETag; DateTime?nullable = null; if (!ConditionExtractor.ShouldThisVersionFailMultipleConditions(requestVersion)) { if (!string.IsNullOrEmpty(condHeaders.IfRange)) { outputCondition = null; return(false); } if (string.IsNullOrEmpty(condHeaders.CopySourceIfMatch)) { outputCondition = null; return(false); } if (!string.IsNullOrEmpty(condHeaders.CopySourceIfNoneMatch) || !string.IsNullOrEmpty(condHeaders.CopySourceIfModifiedSince)) { outputCondition = null; return(false); } if (Comparison.StringContains(condHeaders.CopySourceIfMatch, ",")) { throw new InvalidHeaderProtocolException("x-ms-source-if-match", condHeaders.CopySourceIfMatch); } if (!string.IsNullOrEmpty(condHeaders.CopySourceIfUnmodifiedSince) && !HttpUtilities.TryGetDateTimeFromHttpString(condHeaders.CopySourceIfUnmodifiedSince, out nullable)) { throw new InvalidHeaderProtocolException("x-ms-source-if-unmodified-since", condHeaders.CopySourceIfUnmodifiedSince); } } else { if (string.IsNullOrEmpty(condHeaders.CopySourceIfMatch)) { outputCondition = null; return(false); } if (!string.IsNullOrEmpty(condHeaders.CopySourceIfModifiedSince) || !string.IsNullOrEmpty(condHeaders.CopySourceIfNoneMatch)) { throw new MultipleConditionHeaderProtocolException(); } if (Comparison.StringContains(condHeaders.CopySourceIfMatch, ",")) { throw new MultipleConditionHeaderProtocolException(); } } ConditionInformation conditionInformation = new ConditionInformation() { ConditionFailStatusCode = HttpStatusCode.PreconditionFailed }; if (Comparison.StringEqualsIgnoreCase(condHeaders.CopySourceIfMatch, "*")) { outputCondition = null; return(false); } try { lastModifiedTimeFromETag = BasicHttpProcessor.GetLastModifiedTimeFromETag(condHeaders.CopySourceIfMatch); } catch (InvalidHeaderProtocolException invalidHeaderProtocolException1) { InvalidHeaderProtocolException invalidHeaderProtocolException = invalidHeaderProtocolException1; if (!VersioningHelper.IsPreSeptember09OrInvalidVersion(requestVersion)) { throw new UnrecognizedIfMatchConditionException(new bool?(true), invalidHeaderProtocolException); } throw; } if (!VersioningHelper.IsPreSeptember09OrInvalidVersion(requestVersion)) { conditionInformation.CopySourceIfMatch = new DateTime?(lastModifiedTimeFromETag); } else { conditionInformation.CopySourceIfNotModifiedSince = new DateTime?(lastModifiedTimeFromETag); } if (nullable.HasValue && !HttpUtilities.DateTimesEqualsUpToSeconds(nullable.Value, lastModifiedTimeFromETag)) { outputCondition = null; return(false); } outputCondition = conditionInformation; return(true); }
protected override bool ProcessConditionalHeader(ConditionalHeaders condHeaders, NameValueCollection requestHeaders, OperationTypeForConditionParsing operationType, string requestVersion, out ConditionInformation outputCondition) { DateTime lastModifiedTimeFromETag; bool? nullable; DateTime?nullable1 = null; if (!ConditionExtractor.ShouldThisVersionFailMultipleConditions(requestVersion)) { if (!string.IsNullOrEmpty(condHeaders.IfRange)) { outputCondition = null; return(false); } if (string.IsNullOrEmpty(condHeaders.IfMatch)) { outputCondition = null; return(false); } if (!string.IsNullOrEmpty(condHeaders.IfNoneMatch) || !string.IsNullOrEmpty(condHeaders.IfModifiedSince)) { outputCondition = null; return(false); } if (Comparison.StringContains(condHeaders.IfMatch, ",")) { throw new InvalidHeaderProtocolException("If-Match", condHeaders.IfMatch); } if (!string.IsNullOrEmpty(condHeaders.IfUnmodifiedSince) && !HttpUtilities.TryGetDateTimeFromHttpString(condHeaders.IfUnmodifiedSince, out nullable1)) { throw new InvalidHeaderProtocolException("If-Unmodified-Since", condHeaders.IfUnmodifiedSince); } } else { if (string.IsNullOrEmpty(condHeaders.IfMatch)) { outputCondition = null; return(false); } if (!string.IsNullOrEmpty(condHeaders.IfModifiedSince) || !string.IsNullOrEmpty(condHeaders.IfNoneMatch)) { throw new MultipleConditionHeaderProtocolException(); } if (Comparison.StringContains(condHeaders.IfMatch, ",")) { throw new MultipleConditionHeaderProtocolException(); } } ConditionInformation conditionInformation = new ConditionInformation() { ConditionFailStatusCode = HttpStatusCode.PreconditionFailed, ResourceExistsCondition = new ResourceExistenceCondition?(ResourceExistenceCondition.MustExist) }; if (!Comparison.StringEqualsIgnoreCase(condHeaders.IfMatch, "*")) { try { lastModifiedTimeFromETag = BasicHttpProcessor.GetLastModifiedTimeFromETag(condHeaders.IfMatch); } catch (InvalidHeaderProtocolException invalidHeaderProtocolException1) { InvalidHeaderProtocolException invalidHeaderProtocolException = invalidHeaderProtocolException1; if (!VersioningHelper.IsPreSeptember09OrInvalidVersion(requestVersion)) { if (operationType == OperationTypeForConditionParsing.CopyOperation) { nullable = new bool?(false); } else { nullable = null; } throw new UnrecognizedIfMatchConditionException(nullable, invalidHeaderProtocolException); } throw; } if (!VersioningHelper.IsPreSeptember09OrInvalidVersion(requestVersion)) { conditionInformation.IfMatch = new DateTime[] { lastModifiedTimeFromETag }; } else { conditionInformation.IfNotModifiedSince = new DateTime?(lastModifiedTimeFromETag); conditionInformation.ResourceExistsCondition = new ResourceExistenceCondition?(ResourceExistenceCondition.MayExist); } if (nullable1.HasValue && !HttpUtilities.DateTimesEqualsUpToSeconds(nullable1.Value, lastModifiedTimeFromETag)) { outputCondition = null; return(false); } } else { if (operationType == OperationTypeForConditionParsing.ReadOperation) { outputCondition = null; return(false); } if (nullable1.HasValue) { conditionInformation.IfNotModifiedSince = new DateTime?((nullable1.Value < DateTime.MaxValue.AddSeconds(-1) ? nullable1.Value.AddSeconds(1) : nullable1.Value)); } } outputCondition = conditionInformation; return(true); }