コード例 #1
0
 /// <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);
     }
 }
コード例 #2
0
 /// <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);
     }
 }
コード例 #3
0
        /// <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;
        }
コード例 #4
0
        /// <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;
        }
コード例 #5
0
        /// <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);
        }
コード例 #6
0
        /// <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;
        }
コード例 #7
0
        /// <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);
        }
コード例 #8
0
 /// <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);
     }
 }
コード例 #9
0
        /// <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);
        }
コード例 #10
0
        /// <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);
        }
コード例 #11
0
        /// <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);
        }
コード例 #12
0
        /// <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);
        }
コード例 #13
0
        /// <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));
        }
コード例 #14
0
 /// <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;
 }
コード例 #15
0
 /// <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();
 }
コード例 #17
0
        /// <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));
        }