public static ConditionInformation GetConditionInfoFromRequest(NameValueCollection requestHeaders, OperationTypeForConditionParsing operationType, string requestVersion) { ConditionalHeaders conditionalHeadersFromRequest = ConditionExtractor.GetConditionalHeadersFromRequest(requestHeaders); if (conditionalHeadersFromRequest == null) { return(null); } if (operationType == OperationTypeForConditionParsing.ReadOperation || operationType == OperationTypeForConditionParsing.WriteOperation) { return(ConditionExtractor.ExecuteExtractors(conditionalHeadersFromRequest, requestHeaders, operationType, requestVersion, ConditionExtractor.extractors)); } NephosAssertionException.Assert(operationType == OperationTypeForConditionParsing.CopyOperation); ConditionInformation copySourceIfModifiedSince = ConditionExtractor.ExecuteExtractors(conditionalHeadersFromRequest, requestHeaders, operationType, requestVersion, ConditionExtractor.extractors); ConditionInformation conditionInformation = ConditionExtractor.ExecuteExtractors(conditionalHeadersFromRequest, requestHeaders, operationType, requestVersion, ConditionExtractor.copySourceExtractors); if (copySourceIfModifiedSince == null) { return(conditionInformation); } if (conditionInformation != null) { copySourceIfModifiedSince.CopySourceIfModifiedSince = conditionInformation.CopySourceIfModifiedSince; copySourceIfModifiedSince.CopySourceIfNotModifiedSince = conditionInformation.CopySourceIfNotModifiedSince; copySourceIfModifiedSince.CopySourceIfMatch = conditionInformation.CopySourceIfMatch; copySourceIfModifiedSince.CopySourceIfNoneMatch = conditionInformation.CopySourceIfNoneMatch; NephosAssertionException.Assert(copySourceIfModifiedSince.ConditionFailStatusCode == conditionInformation.ConditionFailStatusCode); } return(copySourceIfModifiedSince); }
public bool ProcessConditionalHeader(ConditionalHeaders condHeaders, NameValueCollection requestHeaders, OperationTypeForConditionParsing operationType, string requestVersion, ConditionInformation outputCondition) { bool?nullable; if (!string.IsNullOrEmpty(condHeaders.IfRange)) { return(false); } if (string.IsNullOrEmpty(condHeaders.IfMatch)) { return(false); } outputCondition.ConditionFailStatusCode = HttpStatusCode.PreconditionFailed; outputCondition.ResourceExistsCondition = new ResourceExistenceCondition?(ResourceExistenceCondition.MustExist); string ifMatch = condHeaders.IfMatch; string[] strArrays = new string[] { "," }; string[] strArrays1 = ifMatch.Split(strArrays, StringSplitOptions.RemoveEmptyEntries); List <DateTime> dateTimes = new List <DateTime>(); string[] strArrays2 = strArrays1; for (int i = 0; i < (int)strArrays2.Length; i++) { string str = strArrays2[i]; if (Comparison.StringEqualsIgnoreCase(str, "*")) { return(false); } try { dateTimes.Add(BasicHttpProcessor.GetLastModifiedTimeFromETag(str)); } 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 (dateTimes.Count > 0) { outputCondition.IfMatch = dateTimes.ToArray(); } if (outputCondition != null && (int)outputCondition.IfMatch.Length > 0) { return(true); } return(false); }
private static ConditionInformation ExecuteExtractors(ConditionalHeaders condHeaders, NameValueCollection requestHeaders, OperationTypeForConditionParsing operationType, string requestVersion, ConditionExtractor[] extractors) { ConditionInformation conditionInformation; ConditionInformation conditionInformation1 = null; ConditionExtractor[] conditionExtractorArray = extractors; int num = 0; Label1: while (num < (int)conditionExtractorArray.Length) { ConditionExtractor conditionExtractor = conditionExtractorArray[num]; try { if (!conditionExtractor.ProcessConditionalHeader(condHeaders, requestHeaders, operationType, requestVersion, out conditionInformation1)) { goto Label0; } else { conditionInformation = conditionInformation1; } } catch (InvalidHeaderProtocolException invalidHeaderProtocolException) { conditionInformation = null; } return(conditionInformation); } return(null); Label0: num++; goto Label1; }
public static ConditionInformation GetConditionInfoFromIncrementalCopyRequest(NameValueCollection requestHeaders, OperationTypeForConditionParsing operationType, string requestVersion) { ConditionalHeaders conditionalHeadersFromRequest = ConditionExtractor.GetConditionalHeadersFromRequest(requestHeaders); if (conditionalHeadersFromRequest == null) { return(null); } return(ConditionExtractor.ExecuteExtractors(conditionalHeadersFromRequest, requestHeaders, operationType, requestVersion, ConditionExtractor.extractors)); }
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); }
public static ConditionInformation GetConditionInfoFromRequest(NameValueCollection requestHeaders, OperationTypeForConditionParsing operationType, string requestVersion) { ConditionalHeaders conditionalHeadersFromRequest = ConditionExtractor.GetConditionalHeadersFromRequest(requestHeaders); if (conditionalHeadersFromRequest == null) { return(null); } IStringDataEventStream info = Logger <IRestProtocolHeadLogger> .Instance.Info; object[] ifModifiedSince = new object[] { conditionalHeadersFromRequest.IfModifiedSince ?? "<null>", conditionalHeadersFromRequest.IfUnmodifiedSince ?? "<null>", conditionalHeadersFromRequest.IfMatch ?? "<null>", conditionalHeadersFromRequest.IfNoneMatch ?? "<null>", conditionalHeadersFromRequest.IfRange ?? "<null>", conditionalHeadersFromRequest.CopySourceIfModifiedSince ?? "<null>", conditionalHeadersFromRequest.CopySourceIfUnmodifiedSince ?? "<null>", conditionalHeadersFromRequest.CopySourceIfMatch ?? "<null>", conditionalHeadersFromRequest.CopySourceIfNoneMatch ?? "<null>" }; info.Log("Conditional Headers:[IfModifiedSince = {0}, IfUnmodifiedSince = {1}, IfMatch = {2}, IfNoneMatch = {3}, IfRange = {4}, CopySourceIfModifiedSince = {5}, CopySourceIfUnmodifiedSince = {6}, CopySourceIfMatch = {7}, CopySourceIfNoneMatch = {8}]", ifModifiedSince); return(MultipleConditionExtractor.ExecuteExtractors(conditionalHeadersFromRequest, requestHeaders, operationType, requestVersion, MultipleConditionExtractor.Extractors)); }
public bool ProcessConditionalHeader(ConditionalHeaders condHeaders, NameValueCollection requestHeaders, OperationTypeForConditionParsing operationType, string requestVersion, ConditionInformation outputCondition) { if (!string.IsNullOrEmpty(condHeaders.IfRange)) { return(false); } if (string.IsNullOrEmpty(condHeaders.IfNoneMatch)) { return(false); } outputCondition.ConditionFailStatusCode = HttpStatusCode.NotModified; string ifNoneMatch = condHeaders.IfNoneMatch; string[] strArrays = new string[] { "," }; string[] strArrays1 = ifNoneMatch.Split(strArrays, StringSplitOptions.RemoveEmptyEntries); List <DateTime> dateTimes = new List <DateTime>(); string[] strArrays2 = strArrays1; for (int i = 0; i < (int)strArrays2.Length; i++) { string str = strArrays2[i]; if (Comparison.StringEqualsIgnoreCase(str, "*")) { if (!VersioningHelper.IsPreFebruary16OrInvalidVersion(requestVersion)) { throw new UnsatisfiableConditionException(); } return(false); } dateTimes.Add(BasicHttpProcessor.GetLastModifiedTimeFromETag(str)); } if (dateTimes.Count > 0) { outputCondition.IfNoneMatch = dateTimes.ToArray(); } if (outputCondition == null) { return(false); } return((int)outputCondition.IfNoneMatch.Length > 0); }
public bool ProcessConditionalHeader(ConditionalHeaders condHeaders, NameValueCollection requestHeaders, OperationTypeForConditionParsing operationType, string requestVersion, ConditionInformation outputCondition) { DateTime?nullable; if (!string.IsNullOrEmpty(condHeaders.IfRange)) { return(false); } if (string.IsNullOrEmpty(condHeaders.IfModifiedSince)) { return(false); } outputCondition.ConditionFailStatusCode = HttpStatusCode.NotModified; if (!HttpUtilities.TryGetDateTimeFromHttpString(condHeaders.IfModifiedSince, out nullable)) { throw new InvalidHeaderProtocolException("If-Modified-Since", condHeaders.IfModifiedSince); } outputCondition.IfModifiedSince = new DateTime?((nullable.Value < DateTime.MaxValue.AddSeconds(-1) ? nullable.Value.AddSeconds(1) : nullable.Value)); outputCondition.ResourceExistsCondition = new ResourceExistenceCondition?(ResourceExistenceCondition.MayExist); return(true); }
private static ConditionInformation ExecuteExtractors(ConditionalHeaders condHeaders, NameValueCollection requestHeaders, OperationTypeForConditionParsing operationType, string requestVersion, IConditionExtractor[] extractors) { ConditionInformation conditionInformation = new ConditionInformation() { IsMultipleConditionalHeaderEnabled = true }; IConditionExtractor[] conditionExtractorArray = extractors; for (int i = 0; i < (int)conditionExtractorArray.Length; i++) { IConditionExtractor conditionExtractor = conditionExtractorArray[i]; try { conditionExtractor.ProcessConditionalHeader(condHeaders, requestHeaders, operationType, requestVersion, conditionInformation); } catch (InvalidHeaderProtocolException invalidHeaderProtocolException) { } } return(conditionInformation); }
public static ConditionalHeaders GetConditionalHeadersFromRequest(NameValueCollection requestHeaders) { bool flag = false; ConditionalHeaders conditionalHeader = new ConditionalHeaders() { IfModifiedSince = requestHeaders["If-Modified-Since"] }; if (!string.IsNullOrEmpty(conditionalHeader.IfModifiedSince)) { flag = true; } conditionalHeader.IfUnmodifiedSince = requestHeaders["If-Unmodified-Since"]; if (!flag && !string.IsNullOrEmpty(conditionalHeader.IfUnmodifiedSince)) { flag = true; } conditionalHeader.IfMatch = requestHeaders["If-Match"]; if (!flag && !string.IsNullOrEmpty(conditionalHeader.IfMatch)) { flag = true; } conditionalHeader.IfNoneMatch = requestHeaders["If-None-Match"]; if (!flag && !string.IsNullOrEmpty(conditionalHeader.IfNoneMatch)) { flag = true; } if (!string.IsNullOrEmpty(requestHeaders["If-Range"]) && !string.IsNullOrEmpty(requestHeaders["Range"])) { conditionalHeader.IfRange = requestHeaders["If-Range"]; if (!flag && !string.IsNullOrEmpty(conditionalHeader.IfRange)) { flag = true; } } conditionalHeader.CopySourceIfModifiedSince = requestHeaders["x-ms-source-if-modified-since"]; if (!flag && !string.IsNullOrEmpty(conditionalHeader.CopySourceIfModifiedSince)) { flag = true; } conditionalHeader.CopySourceIfUnmodifiedSince = requestHeaders["x-ms-source-if-unmodified-since"]; if (!flag && !string.IsNullOrEmpty(conditionalHeader.CopySourceIfUnmodifiedSince)) { flag = true; } conditionalHeader.CopySourceIfMatch = requestHeaders["x-ms-source-if-match"]; if (!flag && !string.IsNullOrEmpty(conditionalHeader.CopySourceIfMatch)) { flag = true; } conditionalHeader.CopySourceIfNoneMatch = requestHeaders["x-ms-source-if-none-match"]; if (!flag && !string.IsNullOrEmpty(conditionalHeader.CopySourceIfNoneMatch)) { flag = true; } if (!flag) { Logger <IRestProtocolHeadLogger> .Instance.Verbose.Log("Conditional Headers: NO conditional headers are set on the request"); } else { IStringDataEventStream verbose = Logger <IRestProtocolHeadLogger> .Instance.Verbose; object[] ifModifiedSince = new object[] { conditionalHeader.IfModifiedSince ?? "<null>", conditionalHeader.IfUnmodifiedSince ?? "<null>", conditionalHeader.IfMatch ?? "<null>", conditionalHeader.IfNoneMatch ?? "<null>", conditionalHeader.IfRange ?? "<null>", conditionalHeader.CopySourceIfModifiedSince ?? "<null>", conditionalHeader.CopySourceIfUnmodifiedSince ?? "<null>", conditionalHeader.CopySourceIfMatch ?? "<null>", conditionalHeader.CopySourceIfNoneMatch ?? "<null>" }; verbose.Log("Conditional Headers:[IfModifiedSince = {0}, IfUnmodifiedSince = {1}, IfMatch = {2}, IfNoneMatch = {3}, IfRange = {4}, CopySourceIfModifiedSince = {5}, CopySourceIfUnmodifiedSince = {6}, CopySourceIfMatch = {7}, CopySourceIfNoneMatch = {8}]", ifModifiedSince); } if (!flag) { return(null); } return(conditionalHeader); }
protected abstract bool ProcessConditionalHeader(ConditionalHeaders conditionalHeaders, NameValueCollection requestHeaders, OperationTypeForConditionParsing operationType, string requestVersion, out ConditionInformation ci);
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); }