/// <summary> /// Constructs a web request to close one or more open handles for a file or directory. /// </summary> /// <param name="uri">The absolute URI to the file.</param> /// <param name="timeout">The server timeout interval.</param> /// <param name="shareSnapshot">A <see cref="DateTimeOffset"/> specifying the share snapshot timestamp, if the share is a snapshot.</param> /// <param name="handleId">ID of the handle to be closed, "*" if all should be closed.</param> /// <param name="recursive">Whether to recurse through this directory's subfiles and folders.</param> /// <param name="token">Continuation token for closing many handles.</param> /// <param name="accessCondition">The access condition to apply to the request.</param> /// <param name="operationContext">An <see cref="OperationContext" /> object for tracking the current operation.</param> /// <returns>A <see cref="System.Net.HttpWebRequest"/> object.</returns> public static StorageRequestMessage CloseHandle(Uri uri, int?timeout, DateTimeOffset?shareSnapshot, string handleId, bool?recursive, FileContinuationToken token, AccessCondition accessCondition, HttpContent content, OperationContext operationContext, ICanonicalizer canonicalizer, StorageCredentials credentials) { UriQueryBuilder builder = new UriQueryBuilder(); FileHttpRequestMessageFactory.AddShareSnapshot(builder, shareSnapshot); builder.Add(Constants.QueryConstants.Component, "forceclosehandles"); if (token != null && token.NextMarker != null) { builder.Add(Constants.QueryConstants.Marker, token.NextMarker); } StorageRequestMessage request = HttpRequestMessageFactory.CreateRequestMessage(HttpMethod.Put, uri, timeout, builder, content, operationContext, canonicalizer, credentials); if (handleId != null) { request.AddOptionalHeader(Constants.HeaderConstants.HandleId, handleId); } if (recursive.HasValue) { request.AddOptionalHeader(Constants.HeaderConstants.Recursive, recursive.Value.ToString()); } request.ApplyAccessCondition(accessCondition); return(request); }
/// <summary> /// <param name="uri">The absolute URI to the file.</param> /// <param name="timeout">The server timeout interval.</param> /// <param name="newFileSize">The new file size. Set this parameter to <c>null</c> to keep the existing file size.</param> /// <param name="accessCondition">The access condition to apply to the request.</param> /// <param name="content">HttpContent for the request</param> /// <param name="operationContext">An <see cref="OperationContext" /> object for tracking the current operation.</param> /// <param name="canonicalizer">A canonicalizer that converts HTTP request data into a standard form appropriate for signing.</param> /// <param name="credentials">A <see cref="StorageCredentials"/> object providing credentials for the request.</param> /// <returns>A web request to use to perform the operation.</returns> /// </summary> public static StorageRequestMessage Resize( Uri uri, int?timeout, long newFileSize, AccessCondition accessCondition, HttpContent content, OperationContext operationContext, ICanonicalizer canonicalizer, StorageCredentials credentials) { UriQueryBuilder builder = new UriQueryBuilder(); builder.Add(Constants.QueryConstants.Component, "properties"); StorageRequestMessage request = HttpRequestMessageFactory.CreateRequestMessage(HttpMethod.Put, uri, timeout, builder, content, operationContext, canonicalizer, credentials); request.Headers.Add(Constants.HeaderConstants.FileContentLengthHeader, newFileSize.ToString(NumberFormatInfo.InvariantInfo)); // Required SMB headers. request.AddOptionalHeader(Constants.HeaderConstants.FilePermission, Constants.HeaderConstants.Preserve); request.AddOptionalHeader(Constants.HeaderConstants.FileAttributes, Constants.HeaderConstants.Preserve); request.AddOptionalHeader(Constants.HeaderConstants.FileCreationTime, Constants.HeaderConstants.Preserve); request.AddOptionalHeader(Constants.HeaderConstants.FileLastWriteTime, Constants.HeaderConstants.Preserve); request.ApplyAccessCondition(accessCondition); return(request); }
/// <summary> /// Applies the append condition to the web request. /// </summary> /// <param name="request">The request to be modified.</param> /// <param name="accessCondition">Access condition to be added to the request.</param> internal static void ApplyAppendCondition(this StorageRequestMessage request, AccessCondition accessCondition) { if (accessCondition != null) { request.AddOptionalHeader(Constants.HeaderConstants.IfMaxSizeLessThanOrEqualHeader, accessCondition.IfMaxSizeLessThanOrEqual); request.AddOptionalHeader(Constants.HeaderConstants.IfAppendPositionEqualHeader, accessCondition.IfAppendPositionEqual); } }
/// <summary> /// Applies the sequence number condition to the web request. /// </summary> /// <param name="request">The request to be modified.</param> /// <param name="accessCondition">Access condition to be added to the request.</param> internal static void ApplySequenceNumberCondition(this StorageRequestMessage request, AccessCondition accessCondition) { if (accessCondition != null) { request.AddOptionalHeader(Constants.HeaderConstants.IfSequenceNumberLEHeader, accessCondition.IfSequenceNumberLessThanOrEqual); request.AddOptionalHeader(Constants.HeaderConstants.IfSequenceNumberLTHeader, accessCondition.IfSequenceNumberLessThan); request.AddOptionalHeader(Constants.HeaderConstants.IfSequenceNumberEqHeader, accessCondition.IfSequenceNumberEqual); } }
/// <summary> /// Constructs a web request to create a new file. /// </summary> /// <param name="uri">The absolute URI to the file.</param> /// <param name="timeout">The server timeout interval.</param> /// <param name="properties">The properties to set for the file.</param> /// <param name="filePermissionToSet">The file permission to set for the file.</param> /// <param name="fileSize">For a file, the size of the file. This parameter is ignored /// for block files.</param> /// <param name="accessCondition">The access condition to apply to the request.</param> /// <param name="content">The HttpContent to set on the request</param> /// <param name="operationContext">An <see cref="OperationContext"/> object that represents the context for the current operation.</param> /// <param name="canonicalizer">A canonicalizer that converts HTTP request data into a standard form appropriate for signing.</param> /// <param name="credentials">A <see cref="StorageCredentials"/> object providing credentials for the request.</param> /// <returns>A web request to use to perform the operation.</returns> public static StorageRequestMessage Create( Uri uri, int?timeout, FileProperties properties, string filePermissionToSet, long fileSize, AccessCondition accessCondition, HttpContent content, OperationContext operationContext, ICanonicalizer canonicalizer, StorageCredentials credentials) { CommonUtility.AssertNotNull("properties", properties); StorageRequestMessage request = HttpRequestMessageFactory.CreateRequestMessage(HttpMethod.Put, uri, timeout, null /* builder */, content, operationContext, canonicalizer, credentials); if (properties.CacheControl != null) { request.AddOptionalHeader(Constants.HeaderConstants.FileCacheControlHeader, properties.CacheControl); } if (properties.ContentType != null) { request.AddOptionalHeader(Constants.HeaderConstants.FileContentTypeHeader, properties.ContentType); } if (properties.ContentLanguage != null) { request.AddOptionalHeader(Constants.HeaderConstants.FileContentLanguageHeader, properties.ContentLanguage); } if (properties.ContentEncoding != null) { request.AddOptionalHeader(Constants.HeaderConstants.FileContentEncodingHeader, properties.ContentEncoding); } if (properties.ContentDisposition != null) { request.AddOptionalHeader(Constants.HeaderConstants.FileContentDispositionRequestHeader, properties.ContentDisposition); } AddFilePermissionOrFilePermissionKey(request, filePermissionToSet, properties, Constants.HeaderConstants.FilePermissionInherit); AddNtfsFileAttributes(request, properties, Constants.HeaderConstants.FileAttributesNone); AddCreationTime(request, properties, Constants.HeaderConstants.FileTimeNow); AddLastWriteTime(request, properties, Constants.HeaderConstants.FileTimeNow); request.ApplyFileContentChecksumHeaders(properties.ContentChecksum); request.Headers.Add(Constants.HeaderConstants.FileType, Constants.HeaderConstants.File); request.Headers.Add(Constants.HeaderConstants.FileContentLengthHeader, fileSize.ToString(NumberFormatInfo.InvariantInfo)); properties.Length = fileSize; request.ApplyAccessCondition(accessCondition); return(request); }
/// <summary> /// Adds the File Last Write Time to the <see cref="StorageRequestMessage"/> /// </summary> /// <param name="request">The <see cref="StorageRequestMessage"/></param> /// <param name="properties">The <see cref="FileProperties"/></param> /// <param name="defaultValue">The default value to set if properties.lastWriteTimeToSet is null</param> private static void AddLastWriteTime( StorageRequestMessage request, FileProperties properties, string defaultValue) { if (properties?.lastWriteTimeToSet != null) { request.AddOptionalHeader(Constants.HeaderConstants.FileLastWriteTime, Request.ConvertDateTimeToSnapshotString(properties.lastWriteTimeToSet.Value)); } else { request.AddOptionalHeader(Constants.HeaderConstants.FileLastWriteTime, defaultValue); } }
/// <summary> /// Adds the <see cref="CloudFileNtfsAttributes"/> to the <see cref="StorageRequestMessage"/> /// </summary> /// <param name="request">The <see cref="StorageRequestMessage"/></param> /// <param name="properties">The <see cref="FileProperties"/></param> /// <param name="defaultValue">The default value to set if properties.ntfsAttributesToSet is null</param> private static void AddNtfsFileAttributes( StorageRequestMessage request, FileProperties properties, string defaultValue) { if (properties?.ntfsAttributesToSet != null) { request.AddOptionalHeader(Constants.HeaderConstants.FileAttributes, CloudFileNtfsAttributesHelper.ToString(properties.ntfsAttributesToSet.Value)); } else { request.AddOptionalHeader(Constants.HeaderConstants.FileAttributes, defaultValue); } }
/// <summary> /// Constructs a web request to return the list of open handles for a file or directory. /// </summary> /// <param name="uri">The absolute URI to the file.</param> /// <param name="timeout">The server timeout interval.</param> /// <param name="maxResults">The maximum number of results to be returned by the server.</param> /// <param name="recursive">Whether to recurse through a directory's files and subfolders.</param> /// <param name="nextMarker">Marker returned by a previous call to continue fetching results.</param> /// <param name="accessCondition">The access condition to apply to the request.</param> /// <param name="operationContext">An <see cref="OperationContext" /> object for tracking the current operation.</param> /// <returns>A <see cref="System.Net.HttpWebRequest"/> object.</returns> public static StorageRequestMessage ListHandles(Uri uri, int?timeout, int?maxResults, bool?recursive, FileContinuationToken nextMarker, AccessCondition accessCondition, HttpContent content, OperationContext operationContext, ICanonicalizer canonicalizer, StorageCredentials credentials) { UriQueryBuilder builder = new UriQueryBuilder(); builder.Add(Constants.QueryConstants.Component, "listhandles"); if (maxResults.HasValue) { builder.Add(Constants.MaxResults, maxResults.Value.ToString()); } if (nextMarker != null) { builder.Add(Constants.HeaderConstants.Marker, nextMarker.NextMarker); } StorageRequestMessage request = HttpRequestMessageFactory.CreateRequestMessage(HttpMethod.Get, uri, timeout, builder, content, operationContext, canonicalizer, credentials); request.ApplyAccessCondition(accessCondition); if (recursive.HasValue) { request.AddOptionalHeader(Constants.HeaderConstants.Recursive, recursive.Value.ToString()); } return(request); }
/// <summary> /// Adds the lease id. /// </summary> /// <param name="request">The request.</param> /// <param name="leaseId">The lease id.</param> internal static void AddLeaseId(this StorageRequestMessage request, string leaseId) { if (leaseId != null) { request.AddOptionalHeader("x-ms-lease-id", leaseId); } }
/// <summary> /// Adds the File Permission or File Permission Key to a StorageRequest. /// </summary> /// <param name="request">The <see cref="StorageRequestMessage"/></param> /// <param name="filePermissionToSet">The File Permission</param> /// <param name="properties">The <see cref="FileProperties"/></param> /// <param name="defaultValue">The default value to set if fileermissionToSet and properties.filePermissionKeyToSet are null</param> private static void AddFilePermissionOrFilePermissionKey( StorageRequestMessage request, string filePermissionToSet, FileProperties properties, string defaultValue) { if (filePermissionToSet == null && properties?.filePermissionKeyToSet == null) { request.AddOptionalHeader(Constants.HeaderConstants.FilePermission, defaultValue); } else if (filePermissionToSet != null) { request.AddOptionalHeader(Constants.HeaderConstants.FilePermission, filePermissionToSet); } else { request.AddOptionalHeader(Constants.HeaderConstants.FilePermissionKey, properties.filePermissionKeyToSet); } }
/// <summary> /// Constructs a web request to create a new share. /// </summary> /// <param name="uri">The absolute URI to the share.</param> /// <param name="properties">Properties to set on the share.</param> /// <param name="timeout">The server timeout interval.</param> /// <returns>A web request to use to perform the operation.</returns> public static StorageRequestMessage Create(Uri uri, FileShareProperties properties, int?timeout, HttpContent content, OperationContext operationContext, ICanonicalizer canonicalizer, StorageCredentials credentials) { UriQueryBuilder shareBuilder = GetShareUriQueryBuilder(); StorageRequestMessage request = HttpRequestMessageFactory.Create(uri, timeout, shareBuilder, content, operationContext, canonicalizer, credentials); if (properties != null && properties.Quota.HasValue) { request.AddOptionalHeader(Constants.HeaderConstants.ShareQuota, properties.Quota.Value); } return(request); }
/// <summary> /// Constructs a web request to write or clear a range of pages in a file. /// </summary> /// <param name="uri">The absolute URI to the file.</param> /// <param name="timeout">The server timeout interval.</param> /// <param name="fileRange">The beginning and ending offsets.</param> /// <param name="fileRangeWrite">Action describing whether we are writing to a file or clearing a set of ranges.</param> /// <param name="accessCondition">The access condition to apply to the request.</param> /// <param name="content">The corresponding Http content.</param> /// <param name="operationContext">An object that represents the context for the current operation.</param> /// <returns>A web request to use to perform the operation.</returns> public static StorageRequestMessage PutRange(Uri uri, int?timeout, FileRange fileRange, FileRangeWrite fileRangeWrite, AccessCondition accessCondition, HttpContent content, OperationContext operationContext, ICanonicalizer canonicalizer, StorageCredentials credentials) { UriQueryBuilder builder = new UriQueryBuilder(); builder.Add(Constants.QueryConstants.Component, "range"); StorageRequestMessage request = HttpRequestMessageFactory.CreateRequestMessage(HttpMethod.Put, uri, timeout, builder, content, operationContext, canonicalizer, credentials); request.AddOptionalHeader(Constants.HeaderConstants.RangeHeader, fileRange.ToString()); request.Headers.Add(Constants.HeaderConstants.FileRangeWrite, fileRangeWrite.ToString()); request.ApplyAccessCondition(accessCondition); return(request); }
/// <summary> /// Constructs a web request to set system properties for a file. /// </summary> /// <param name="uri">The absolute URI to the file.</param> /// <param name="timeout">The server timeout interval.</param> /// <param name="properties">The file's properties.</param> /// <param name="filePermissionToSet">The file's file permission</param> /// <param name="accessCondition">The access condition to apply to the request.</param> /// <param name="content">HttpContent for the request</param> /// <param name="operationContext">An <see cref="OperationContext" /> object for tracking the current operation.</param> /// <param name="canonicalizer">A canonicalizer that converts HTTP request data into a standard form appropriate for signing.</param> /// <param name="credentials">A <see cref="StorageCredentials"/> object providing credentials for the request.</param> /// <returns>A web request to use to perform the operation.</returns> public static StorageRequestMessage SetProperties( Uri uri, int?timeout, FileProperties properties, string filePermissionToSet, AccessCondition accessCondition, HttpContent content, OperationContext operationContext, ICanonicalizer canonicalizer, StorageCredentials credentials) { CommonUtility.AssertNotNull("properties", properties); UriQueryBuilder builder = new UriQueryBuilder(); builder.Add(Constants.QueryConstants.Component, "properties"); StorageRequestMessage request = HttpRequestMessageFactory.CreateRequestMessage(HttpMethod.Put, uri, timeout, builder, content, operationContext, canonicalizer, credentials); if (properties != null) { request.AddOptionalHeader(Constants.HeaderConstants.FileCacheControlHeader, properties.CacheControl); request.AddOptionalHeader(Constants.HeaderConstants.FileContentDispositionRequestHeader, properties.ContentDisposition); request.AddOptionalHeader(Constants.HeaderConstants.FileContentEncodingHeader, properties.ContentEncoding); request.AddOptionalHeader(Constants.HeaderConstants.FileContentLanguageHeader, properties.ContentLanguage); request.AddOptionalHeader(Constants.HeaderConstants.FileContentTypeHeader, properties.ContentType); request.ApplyFileContentChecksumHeaders(properties.ContentChecksum); } AddFilePermissionOrFilePermissionKey(request, filePermissionToSet, properties, Constants.HeaderConstants.Preserve); AddNtfsFileAttributes(request, properties, Constants.HeaderConstants.Preserve); AddCreationTime(request, properties, Constants.HeaderConstants.Preserve); AddLastWriteTime(request, properties, Constants.HeaderConstants.Preserve); request.ApplyAccessCondition(accessCondition); return(request); }
/// <summary> /// Constructs a web request to set system properties for a share. /// </summary> /// <param name="uri">The absolute URI to the share.</param> /// <param name="timeout">The server timeout interval.</param> /// <param name="properties">The share's properties.</param> /// <param name="accessCondition">The access condition to apply to the request.</param> /// <returns>A web request to use to perform the operation.</returns> public static StorageRequestMessage SetProperties(Uri uri, int?timeout, FileShareProperties properties, AccessCondition accessCondition, HttpContent content, OperationContext operationContext, ICanonicalizer canonicalizer, StorageCredentials credentials) { CommonUtility.AssertNotNull("properties", properties); UriQueryBuilder shareBuilder = GetShareUriQueryBuilder(); shareBuilder.Add(Constants.QueryConstants.Component, "properties"); StorageRequestMessage request = HttpRequestMessageFactory.CreateRequestMessage(HttpMethod.Put, uri, timeout, shareBuilder, content, operationContext, canonicalizer, credentials); if (properties.Quota.HasValue) { request.AddOptionalHeader(Constants.HeaderConstants.ShareQuota, properties.Quota.Value); } request.ApplyAccessCondition(accessCondition); return(request); }
/// <summary> /// Constructs a web request to create a new file. /// </summary> /// <param name="uri">The absolute URI to the file.</param> /// <param name="timeout">The server timeout interval.</param> /// <param name="properties">The properties to set for the file.</param> /// <param name="fileSize">For a file, the size of the file. This parameter is ignored /// for block files.</param> /// <param name="accessCondition">The access condition to apply to the request.</param> /// <returns>A web request to use to perform the operation.</returns> public static StorageRequestMessage Create(Uri uri, int?timeout, FileProperties properties, long fileSize, AccessCondition accessCondition, HttpContent content, OperationContext operationContext, ICanonicalizer canonicalizer, StorageCredentials credentials) { CommonUtility.AssertNotNull("properties", properties); StorageRequestMessage request = HttpRequestMessageFactory.CreateRequestMessage(HttpMethod.Put, uri, timeout, null /* builder */, content, operationContext, canonicalizer, credentials); if (properties.CacheControl != null) { request.AddOptionalHeader(Constants.HeaderConstants.FileCacheControlHeader, properties.CacheControl); } if (properties.ContentType != null) { request.AddOptionalHeader(Constants.HeaderConstants.FileContentTypeHeader, properties.ContentType); } if (properties.ContentMD5 != null) { request.AddOptionalHeader(Constants.HeaderConstants.FileContentMD5Header, properties.ContentMD5); } if (properties.ContentLanguage != null) { request.AddOptionalHeader(Constants.HeaderConstants.FileContentLanguageHeader, properties.ContentLanguage); } if (properties.ContentEncoding != null) { request.AddOptionalHeader(Constants.HeaderConstants.FileContentEncodingHeader, properties.ContentEncoding); } if (properties.ContentDisposition != null) { request.AddOptionalHeader(Constants.HeaderConstants.FileContentDispositionRequestHeader, properties.ContentDisposition); } request.Headers.Add(Constants.HeaderConstants.FileType, Constants.HeaderConstants.File); request.Headers.Add(Constants.HeaderConstants.FileContentLengthHeader, fileSize.ToString(NumberFormatInfo.InvariantInfo)); properties.Length = fileSize; request.ApplyAccessCondition(accessCondition); return(request); }
/// <summary> /// Constructs a web request to set system properties for a file. /// </summary> /// <param name="uri">The absolute URI to the file.</param> /// <param name="timeout">The server timeout interval.</param> /// <param name="properties">The file's properties.</param> /// <param name="accessCondition">The access condition to apply to the request.</param> /// <returns>A web request to use to perform the operation.</returns> public static StorageRequestMessage SetProperties(Uri uri, int?timeout, FileProperties properties, AccessCondition accessCondition, HttpContent content, OperationContext operationContext, ICanonicalizer canonicalizer, StorageCredentials credentials) { UriQueryBuilder builder = new UriQueryBuilder(); builder.Add(Constants.QueryConstants.Component, "properties"); StorageRequestMessage request = HttpRequestMessageFactory.CreateRequestMessage(HttpMethod.Put, uri, timeout, builder, content, operationContext, canonicalizer, credentials); if (properties != null) { request.AddOptionalHeader(Constants.HeaderConstants.FileCacheControlHeader, properties.CacheControl); request.AddOptionalHeader(Constants.HeaderConstants.FileContentDispositionRequestHeader, properties.ContentDisposition); request.AddOptionalHeader(Constants.HeaderConstants.FileContentEncodingHeader, properties.ContentEncoding); request.AddOptionalHeader(Constants.HeaderConstants.FileContentLanguageHeader, properties.ContentLanguage); request.AddOptionalHeader(Constants.HeaderConstants.FileContentMD5Header, properties.ContentMD5); request.AddOptionalHeader(Constants.HeaderConstants.FileContentTypeHeader, properties.ContentType); } request.ApplyAccessCondition(accessCondition); return(request); }
internal static void ApplyFileContentChecksumHeaders(this StorageRequestMessage request, Checksum fileContentChecksum) { request.AddOptionalHeader(Constants.HeaderConstants.FileContentMD5Header, fileContentChecksum?.MD5); request.AddOptionalHeader(Constants.HeaderConstants.FileContentCRC64Header, fileContentChecksum?.CRC64); }
/// <summary> /// Adds a lease break period to a request. /// </summary> /// <param name="request">The request.</param> /// <param name="leaseBreakPeriod">The lease break period.</param> internal static void AddLeaseBreakPeriod(StorageRequestMessage request, int?leaseBreakPeriod) { request.AddOptionalHeader(Constants.HeaderConstants.LeaseBreakPeriodHeader, leaseBreakPeriod); }
/// <summary> /// Adds a lease duration to a request. /// </summary> /// <param name="request">The request.</param> /// <param name="leaseDuration">The lease duration.</param> internal static void AddLeaseDuration(StorageRequestMessage request, int?leaseDuration) { request.AddOptionalHeader(Constants.HeaderConstants.LeaseDurationHeader, leaseDuration); }
/// <summary> /// Adds a proposed lease id to a request. /// </summary> /// <param name="request">The request.</param> /// <param name="proposedLeaseId">The proposed lease id.</param> internal static void AddProposedLeaseId(StorageRequestMessage request, string proposedLeaseId) { request.AddOptionalHeader(Constants.HeaderConstants.ProposedLeaseIdHeader, proposedLeaseId); }