/// <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="FileDirectoryProperties"/></param> /// <param name="defaultValue">The default value to set if properties.lastWriteTimeToSet is null</param> private static void AddLastWriteTime( StorageRequestMessage request, FileDirectoryProperties 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="FileDirectoryProperties"/></param> /// <param name="defaultValue">The default value to set if properties.ntfsAttributesToSet is null</param> private static void AddNtfsFileAttributes( StorageRequestMessage request, FileDirectoryProperties 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> /// Sets the SMB related file properties. /// </summary> /// <param name="response">The web response.</param> /// <param name="properties">The properties to modify.</param> public static void UpdateSmbProperties(HttpResponseMessage response, FileDirectoryProperties properties) { properties.filePermissionKey = HttpResponseParsers.GetHeader(response, Constants.HeaderConstants.FilePermissionKey); properties.ntfsAttributes = CloudFileNtfsAttributesHelper.ToAttributes(HttpResponseParsers.GetHeader(response, Constants.HeaderConstants.FileAttributes)); properties.creationTime = DateTimeOffset.Parse(HttpResponseParsers.GetHeader(response, Constants.HeaderConstants.FileCreationTime)); properties.lastWriteTime = DateTimeOffset.Parse(HttpResponseParsers.GetHeader(response, Constants.HeaderConstants.FileLastWriteTime)); properties.ChangeTime = DateTimeOffset.Parse(HttpResponseParsers.GetHeader(response, Constants.HeaderConstants.FileChangeTime)); properties.DirectoryId = HttpResponseParsers.GetHeader(response, Constants.HeaderConstants.FileId); properties.ParentId = HttpResponseParsers.GetHeader(response, Constants.HeaderConstants.FileParentId); properties.filePermissionKeyToSet = null; properties.ntfsAttributesToSet = null; properties.creationTimeToSet = null; properties.lastWriteTimeToSet = null; }
/// <summary> /// Gets the directory's properties from the response. /// </summary> /// <param name="response">The web response.</param> /// <returns>The directory's attributes.</returns> public static FileDirectoryProperties GetProperties(HttpWebResponse response) { CommonUtility.AssertNotNull("response", response); FileDirectoryProperties directoryProperties = new FileDirectoryProperties(); directoryProperties.ETag = HttpResponseParsers.GetETag(response); #if WINDOWS_PHONE directoryProperties.LastModified = HttpResponseParsers.GetLastModified(response); #else directoryProperties.LastModified = response.LastModified.ToUniversalTime(); #endif return directoryProperties; }
/// <summary> /// Gets the directory's properties from the response. /// </summary> /// <param name="response">The web response.</param> /// <returns>The directory's attributes.</returns> public static FileDirectoryProperties GetProperties(HttpWebResponse response) { CommonUtility.AssertNotNull("response", response); FileDirectoryProperties directoryProperties = new FileDirectoryProperties(); directoryProperties.ETag = HttpResponseParsers.GetETag(response); #if WINDOWS_PHONE directoryProperties.LastModified = HttpResponseParsers.GetLastModified(response); #else directoryProperties.LastModified = response.LastModified.ToUniversalTime(); #endif return(directoryProperties); }
/// <summary> /// Gets the directory's properties from the response. /// </summary> /// <param name="response">The web response.</param> /// <returns>The directory's attributes.</returns> public static FileDirectoryProperties GetProperties(HttpResponseMessage response) { // Set the directory properties FileDirectoryProperties directoryProperties = new FileDirectoryProperties(); directoryProperties.ETag = (response.Headers.ETag == null) ? null : response.Headers.ETag.ToString(); if (response.Content != null) { directoryProperties.LastModified = response.Content.Headers.LastModified; } else { directoryProperties.LastModified = null; } return directoryProperties; }
/// <summary> /// Gets the directory's properties from the response. /// </summary> /// <param name="response">The web response.</param> /// <returns>The directory's attributes.</returns> public static FileDirectoryProperties GetProperties(HttpWebResponse response) { CommonUtility.AssertNotNull("response", response); FileDirectoryProperties directoryProperties = new FileDirectoryProperties(); directoryProperties.ETag = HttpResponseParsers.GetETag(response); string directoryEncryption = response.Headers[Constants.HeaderConstants.ServerEncrypted]; directoryProperties.IsServerEncrypted = string.Equals(directoryEncryption, Constants.HeaderConstants.TrueHeader, StringComparison.OrdinalIgnoreCase); #if WINDOWS_PHONE directoryProperties.LastModified = HttpResponseParsers.GetLastModified(response); #else directoryProperties.LastModified = response.LastModified.ToUniversalTime(); #endif return(directoryProperties); }
/// <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="FileDirectoryProperties"/></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, FileDirectoryProperties 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> /// Gets the directory's properties from the response. /// </summary> /// <param name="response">The web response.</param> /// <returns>The directory's attributes.</returns> public static FileDirectoryProperties GetProperties(HttpResponseMessage response) { // Set the directory properties FileDirectoryProperties directoryProperties = new FileDirectoryProperties(); directoryProperties.ETag = (response.Headers.ETag == null) ? null : response.Headers.ETag.ToString(); if (response.Content != null) { directoryProperties.LastModified = response.Content.Headers.LastModified; } else { directoryProperties.LastModified = null; } return(directoryProperties); }
/// <summary> /// Constructs a web request to create a new directory. /// </summary> /// <param name="uri">The absolute URI to the directory.</param> /// <param name="timeout">The server timeout interval.</param> /// <param name="properties">The properties to set for the directory.</param> /// <param name="filePermissionToSet">The file permissions to set for the directory.</param> /// <param name="content">HttpContent for 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, FileDirectoryProperties properties, string filePermissionToSet, HttpContent content, OperationContext operationContext, ICanonicalizer canonicalizer, StorageCredentials credentials) { UriQueryBuilder directoryBuilder = GetDirectoryUriQueryBuilder(); StorageRequestMessage request = HttpRequestMessageFactory.Create(uri, timeout, directoryBuilder, content, operationContext, canonicalizer, credentials); 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); return(request); }
/// <summary> /// Gets the directory's properties from the response. /// </summary> /// <param name="response">The web response.</param> /// <returns>The directory's attributes.</returns> public static FileDirectoryProperties GetProperties(HttpResponseMessage response) { // Set the directory properties FileDirectoryProperties directoryProperties = new FileDirectoryProperties(); directoryProperties.ETag = (response.Headers.ETag == null) ? null : response.Headers.ETag.ToString(); string directoryEncryption = response.Headers.GetHeaderSingleValueOrDefault(Constants.HeaderConstants.ServerEncrypted); directoryProperties.IsServerEncrypted = string.Equals(directoryEncryption, Constants.HeaderConstants.TrueHeader, StringComparison.OrdinalIgnoreCase); if (response.Content != null) { directoryProperties.LastModified = response.Content.Headers.LastModified; } else { directoryProperties.LastModified = null; } return(directoryProperties); }
/// <summary> /// Constructs a web request to set system properties for a directory. /// </summary> /// <param name="uri">The absolute URI to the file.</param> /// <param name="timeout">The server timeout interval.</param> /// <param name="properties">The directory's properties.</param> /// <param name="filePermissionToSet">The file's file permission</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, FileDirectoryProperties properties, string filePermissionToSet, HttpContent content, OperationContext operationContext, ICanonicalizer canonicalizer, StorageCredentials credentials) { CommonUtility.AssertNotNull("properties", properties); UriQueryBuilder builder = GetDirectoryUriQueryBuilder(); builder.Add(Constants.QueryConstants.Component, "properties"); StorageRequestMessage request = HttpRequestMessageFactory.CreateRequestMessage(HttpMethod.Put, uri, timeout, builder, content, operationContext, canonicalizer, credentials); 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); return(request); }
/// <summary> /// Parses a file directory entry in a file listing response. /// </summary> /// <returns>File listing entry</returns> private static async Task <IListFileEntry> ParseFileDirectoryEntryAsync(XmlReader reader, Uri baseUri, CancellationToken token) { token.ThrowIfCancellationRequested(); FileDirectoryProperties properties = new FileDirectoryProperties(); string name = null; await reader.ReadStartElementAsync().ConfigureAwait(false); while (await reader.IsStartElementAsync().ConfigureAwait(false)) { token.ThrowIfCancellationRequested(); if (reader.IsEmptyElement) { await reader.SkipAsync().ConfigureAwait(false); } else { switch (reader.Name) { case Constants.NameElement: name = await reader.ReadElementContentAsStringAsync().ConfigureAwait(false); break; case Constants.PropertiesElement: await reader.ReadStartElementAsync().ConfigureAwait(false); while (await reader.IsStartElementAsync().ConfigureAwait(false)) { token.ThrowIfCancellationRequested(); if (reader.IsEmptyElement) { await reader.SkipAsync().ConfigureAwait(false); } else { switch (reader.Name) { case Constants.LastModifiedElement: properties.LastModified = (await reader.ReadElementContentAsStringAsync().ConfigureAwait(false)).ToUTCTime(); break; case Constants.EtagElement: properties.ETag = string.Format(CultureInfo.InvariantCulture, "\"{0}\"", await reader.ReadElementContentAsStringAsync().ConfigureAwait(false)); break; default: await reader.SkipAsync().ConfigureAwait(false); break; } } } await reader.ReadEndElementAsync().ConfigureAwait(false); break; default: await reader.SkipAsync().ConfigureAwait(false); break; } } } await reader.ReadEndElementAsync().ConfigureAwait(false); Uri uri = NavigationHelper.AppendPathToSingleUri(baseUri, name); return(new ListFileDirectoryEntry(name, uri, properties)); }
/// <summary> /// Initializes a new instance of the <see cref="ListFileDirectoryEntry"/> class. /// </summary> /// <param name="name">The name of the directory.</param> /// <param name="uri">The Uri of the directory.</param> /// <param name="properties">The directory's properties.</param> internal ListFileDirectoryEntry(string name, Uri uri, FileDirectoryProperties properties) { this.Name = name; this.Uri = uri; this.Properties = properties; }
/// <summary> /// Initializes a new instance of the <see cref="ListFileDirectoryEntry"/> class. /// </summary> /// <param name="name">The name of the directory.</param> /// <param name="uri">The Uri of the directory.</param> /// <param name="properties">The directory's properties.</param> internal ListFileDirectoryEntry(string name, Uri uri, FileDirectoryProperties properties) { this.Name = name; this.Uri = uri; this.Properties = properties; }
internal ListFileDirectoryEntry(string name, Uri uri, FileDirectoryProperties properties) { throw new System.NotImplementedException(); }
/// <summary> /// Parses a file directory entry in a file listing response. /// </summary> /// <returns>File listing entry</returns> private IListFileEntry ParseFileDirectoryEntry(Uri baseUri) { FileDirectoryProperties properties = new FileDirectoryProperties(); string name = null; this.reader.ReadStartElement(); while (this.reader.IsStartElement()) { if (this.reader.IsEmptyElement) { this.reader.Skip(); } else { switch (this.reader.Name) { case Constants.NameElement: name = reader.ReadElementContentAsString(); break; case Constants.PropertiesElement: this.reader.ReadStartElement(); while (this.reader.IsStartElement()) { if (this.reader.IsEmptyElement) { this.reader.Skip(); } else { switch (this.reader.Name) { case Constants.LastModifiedElement: properties.LastModified = reader.ReadElementContentAsString().ToUTCTime(); break; case Constants.EtagElement: properties.ETag = string.Format(CultureInfo.InvariantCulture, "\"{0}\"", reader.ReadElementContentAsString()); break; default: this.reader.Skip(); break; } } } this.reader.ReadEndElement(); break; default: this.reader.Skip(); break; } } } this.reader.ReadEndElement(); Uri uri = NavigationHelper.AppendPathToSingleUri(baseUri, name); return(new ListFileDirectoryEntry(name, uri, properties)); }