Package updates, added test server
[pithos-ms-client] / trunk / Pithos.Network / ICloudClient.cs
index 8bc8d07..115c7e4 100644 (file)
-#region
-/* -----------------------------------------------------------------------
- * <copyright file="ICloudClient.cs" company="GRNet">
- * 
- * Copyright 2011-2012 GRNET S.A. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or
- * without modification, are permitted provided that the following
- * conditions are met:
- *
- *   1. Redistributions of source code must retain the above
- *      copyright notice, this list of conditions and the following
- *      disclaimer.
- *
- *   2. Redistributions in binary form must reproduce the above
- *      copyright notice, this list of conditions and the following
- *      disclaimer in the documentation and/or other materials
- *      provided with the distribution.
- *
- *
- * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
- * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * The views and conclusions contained in the software and
- * documentation are those of the authors and should not be
- * interpreted as representing official policies, either expressed
- * or implied, of GRNET S.A.
- * </copyright>
- * -----------------------------------------------------------------------
- */
-#endregion
-using System;
-using System.Collections.Generic;
-using System.Diagnostics.Contracts;
-using System.Net;
-using System.Threading;
-using System.Threading.Tasks;
-using Pithos.Interfaces;
-
-namespace Pithos.Network
-{
-    [ContractClass(typeof(ICloudClientContract))]
-    public interface ICloudClient
-    {
-
-        string ApiKey { get; set; }
-        string UserName { get; set; }
-        Uri StorageUrl { get; set; }
-
-        string Token { get; set; }
-
-        bool UsePithos { get; set; }
-        AccountInfo Authenticate();
-        //WebProxy Proxy { get; set; }
-        double DownloadPercentLimit { get; set; }
-        double UploadPercentLimit { get; set; }
-        string AuthenticationUrl { get; set; }
-
-        #region Container operations
-
-        IList<ContainerInfo> ListContainers(string account);
-        IList<ObjectInfo> ListObjects(string account, string container, DateTime? since = null);
-        IList<ObjectInfo> ListObjects(string account, string container, string folder, DateTime? since = null);
-        bool ContainerExists(string account, string container);
-        ContainerInfo GetContainerInfo(string account, string container);
-        void CreateContainer(string account, string container);
-        void DeleteContainer(string account, string container);
-        #endregion
-
-        #region Object operations        
-        Task GetObject(string account, string container, string objectName, string fileName,CancellationToken cancellationToken);
-        Task PutObject(string account, string container, string objectName, string fileName, string hash = null, string contentType = "application/octet-stream");
-        void DeleteObject(string account, string container, string objectName);
-        //void DeleteObject(string container, string objectName, string account = null);
-        void MoveObject(string account, string sourceContainer, string oldObjectName, string targetContainer, string newObjectName);
-        bool ObjectExists(string account, string container, string objectName);
-        ObjectInfo GetObjectInfo(string account, string container, string objectName);
-        void CreateFolder(string account, string container, string folder);
-        #endregion
-
-        #region Hashmap operations        
-        Task<TreeHash> GetHashMap(string account, string container, string objectName);
-        Task<IList<string>> PutHashMap(string account, string container, string objectName, TreeHash hash);
-        Task PostBlock(string account, string container, byte[] block, int offset, int count,CancellationToken token);
-        Task<byte[]> GetBlock(string account, string container, Uri relativeUrl, long start, long? end,CancellationToken cancellationToken);
-        #endregion
-
-        #region Sharing operations        
-        IList<ObjectInfo> ListSharedObjects(HashSet<string> knownContainers, DateTime? since);
-        void ShareObject(string account, string container, string objectName, string shareTo, bool read, bool write);
-
-        #endregion
-
-        AccountInfo GetAccountPolicies(AccountInfo accountInfo);
-
-        void UpdateMetadata(ObjectInfo objectInfo);
-
-        void UpdateMetadata(ContainerInfo Container);
-        IList<ShareAccountInfo> ListSharingAccounts(DateTime? since=null);
-    }
-
-
-    [ContractClassFor(typeof(ICloudClient))]
-    public abstract class ICloudClientContract:ICloudClient
-    {
-
-        public string ApiKey { get; set; }
-        public string UserName { get; set; }
-        public Uri StorageUrl { get; set; }
-        public string Token { get; set; }
-        
-        public double DownloadPercentLimit { get; set; }
-        public double UploadPercentLimit { get; set; }
-
-        public string AuthenticationUrl { get; set; }
-
-        public bool UsePithos { get; set; }
-
-        public AccountInfo Authenticate()
-        {
-            Contract.Requires<ArgumentNullException>(!String.IsNullOrWhiteSpace(ApiKey), "ApiKey must be filled before calling Authenticate");
-            Contract.Requires<ArgumentNullException>(!String.IsNullOrWhiteSpace(UserName), "UserName must be filled before calling Authenticate");
-
-            return default(AccountInfo);
-        }
-
-        public IList<ContainerInfo> ListContainers(string account)
-        {
-            Contract.Requires(!String.IsNullOrWhiteSpace(Token));
-            Contract.Requires(StorageUrl!=null);            
-
-            return default(IList<ContainerInfo>);
-        }
-
-        public IList<ObjectInfo> ListSharedObjects(HashSet<string> knownContainers, DateTime? since)
-        {
-
-            Contract.Requires(knownContainers!=null);
-            Contract.Requires(!String.IsNullOrWhiteSpace(Token));
-            Contract.Requires(StorageUrl != null);
-
-            return default(IList<ObjectInfo>);
-        }
-
-        public void ShareObject(string account, string container, string objectName, string shareTo, bool read, bool write)
-        {
-            
-            Contract.Requires(!String.IsNullOrWhiteSpace(Token));
-            Contract.Requires(StorageUrl != null);
-            Contract.Requires(!String.IsNullOrWhiteSpace(container));
-            Contract.Requires(!String.IsNullOrWhiteSpace(objectName));
-            Contract.Requires(!String.IsNullOrWhiteSpace(account));
-            Contract.Requires(!String.IsNullOrWhiteSpace(shareTo));
-   
-        }
-
-        public AccountInfo GetAccountPolicies(AccountInfo accountInfo)
-        {
-            Contract.Requires(accountInfo!=null);
-
-            return default(AccountInfo);
-        }
-
-        public void UpdateMetadata(ObjectInfo objectInfo)
-        {
-            Contract.Requires(objectInfo!=null);
-
-            return ;
-        }
-        
-        public void UpdateMetadata(ContainerInfo objectInfo)
-        {
-            Contract.Requires(objectInfo!=null);
-
-            return ;
-        }
-
-        public IList<ShareAccountInfo> ListSharingAccounts(DateTime? since = new DateTime?())
-        {
-            return default(IList<ShareAccountInfo>);
-        }
-
-
-        public IList<ObjectInfo> ListObjects(string account, string container, DateTime? since = null)
-        {
-            
-            Contract.Requires(!String.IsNullOrWhiteSpace(Token));
-            Contract.Requires(StorageUrl != null);
-            Contract.Requires(!String.IsNullOrWhiteSpace(container));
-
-            return default(IList<ObjectInfo>);
-        }
-
-        public IList<ObjectInfo> ListObjects(string account, string container, string folder, DateTime? since = null)
-        {
-            
-            Contract.Requires(!String.IsNullOrWhiteSpace(Token));
-            Contract.Requires(StorageUrl != null);
-            Contract.Requires(!String.IsNullOrWhiteSpace(container));
-            //Contract.Requires(!String.IsNullOrWhiteSpace(folder));
-
-            return default(IList<ObjectInfo>);
-        }
-
-        public bool ContainerExists(string account, string container)
-        {
-            
-            Contract.Requires(!String.IsNullOrWhiteSpace(Token));
-            Contract.Requires(StorageUrl!=null);
-            Contract.Requires(!String.IsNullOrWhiteSpace(container));
-
-            return default(bool);
-        }
-
-        public ContainerInfo GetContainerInfo(string account, string container)
-        {
-            
-            Contract.Requires(!String.IsNullOrWhiteSpace(Token));
-            Contract.Requires(StorageUrl!=null);
-            Contract.Requires(!String.IsNullOrWhiteSpace(container));
-
-            return default(ContainerInfo);
-        }
-
-        public void CreateContainer(string account, string container)
-        {
-            
-            Contract.Requires(!String.IsNullOrWhiteSpace(Token));
-            Contract.Requires(StorageUrl!=null);
-            Contract.Requires(!String.IsNullOrWhiteSpace(container));
-        }
-
-        public void DeleteContainer(string account, string container)
-        {
-            
-            Contract.Requires(!String.IsNullOrWhiteSpace(Token));
-            Contract.Requires(StorageUrl!=null);
-            Contract.Requires(!String.IsNullOrWhiteSpace(container));
-        }
-
-        public Task GetObject(string account, string container, string objectName, string fileName,CancellationToken cancellationToken)
-        {
-            
-            Contract.Requires(!String.IsNullOrWhiteSpace(Token));
-            Contract.Requires(StorageUrl!=null);
-            Contract.Requires(!String.IsNullOrWhiteSpace(container));
-            Contract.Requires(!String.IsNullOrWhiteSpace(objectName));
-
-            return default(Task);
-        }
-
-        public Task PutObject(string account, string container, string objectName, string fileName, string hash = null, string contentType = "application/octet-stream")
-        {
-            
-            Contract.Requires(!String.IsNullOrWhiteSpace(Token));
-            Contract.Requires(StorageUrl!=null);
-            Contract.Requires(!String.IsNullOrWhiteSpace(container));
-            Contract.Requires(!String.IsNullOrWhiteSpace(fileName));                        
-            Contract.Requires(!String.IsNullOrWhiteSpace(objectName));
-            Contract.Requires(!String.IsNullOrWhiteSpace(contentType));
-
-            return default(Task);
-        }
-
-        public void DeleteObject(string account, string container, string objectName)
-        {
-            
-            Contract.Requires(!String.IsNullOrWhiteSpace(Token));
-            Contract.Requires(StorageUrl!=null);
-            Contract.Requires(!String.IsNullOrWhiteSpace(container));
-            Contract.Requires(!String.IsNullOrWhiteSpace(objectName));            
-        }
-
-        public void MoveObject(string account, string sourceContainer, string oldObjectName, string targetContainer, string newObjectName)
-        {
-            
-            Contract.Requires(!String.IsNullOrWhiteSpace(Token));
-            Contract.Requires(StorageUrl!=null);
-            Contract.Requires(!String.IsNullOrWhiteSpace(sourceContainer));
-            Contract.Requires(!String.IsNullOrWhiteSpace(oldObjectName));
-            Contract.Requires(!String.IsNullOrWhiteSpace(targetContainer));
-            Contract.Requires(!String.IsNullOrWhiteSpace(newObjectName));
-        }
-
-        public bool ObjectExists(string account, string container, string objectName)
-        {
-            
-            Contract.Requires(!String.IsNullOrWhiteSpace(Token));
-            Contract.Requires(StorageUrl!=null);
-            Contract.Requires(!String.IsNullOrWhiteSpace(container));
-            Contract.Requires(!String.IsNullOrWhiteSpace(objectName));
-
-            return default(bool);
-        }
-
-        public ObjectInfo GetObjectInfo(string account, string container, string objectName)
-        {
-            
-            Contract.Requires(!String.IsNullOrWhiteSpace(Token));
-            Contract.Requires(StorageUrl!=null);
-            Contract.Requires(!String.IsNullOrWhiteSpace(container));
-            Contract.Requires(!String.IsNullOrWhiteSpace(objectName));
-
-            return default(ObjectInfo);
-        }
-
-        public void CreateFolder(string account, string container, string folder)
-        {
-            
-            Contract.Requires(!String.IsNullOrWhiteSpace(Token));
-            Contract.Requires(StorageUrl != null);
-            Contract.Requires(!String.IsNullOrWhiteSpace(container));
-            Contract.Requires(!String.IsNullOrWhiteSpace(folder));            
-        }
-
-        public Task<TreeHash> GetHashMap(string account, string container, string objectName)
-        {
-            
-            Contract.Requires(!String.IsNullOrWhiteSpace(Token));
-            Contract.Requires(StorageUrl != null);
-            Contract.Requires(!String.IsNullOrWhiteSpace(container));
-            Contract.Requires(!String.IsNullOrWhiteSpace(objectName));
-
-            return default(Task<TreeHash>);
-        }
-
-        public Task<IList<string>> PutHashMap(string account, string container, string objectName, TreeHash hash)
-        {
-            
-            Contract.Requires(!String.IsNullOrWhiteSpace(Token));
-            Contract.Requires(StorageUrl != null);
-            Contract.Requires(!String.IsNullOrWhiteSpace(container));
-            Contract.Requires(!String.IsNullOrWhiteSpace(objectName));
-            Contract.Requires(hash != null);
-
-            return default(Task<IList<string>>);
-        }
-
-        public Task PostBlock(string account, string container, byte[] block, int offset, int count,CancellationToken token)
-        {
-            
-            Contract.Requires(!String.IsNullOrWhiteSpace(Token));
-            Contract.Requires(StorageUrl != null);
-            Contract.Requires(!String.IsNullOrWhiteSpace(container));
-            Contract.Requires(block != null);
-            Contract.Requires(offset>=0);
-            Contract.Requires(offset < block.Length);
-            Contract.Requires(count>=0);
-            Contract.Requires(count <= block.Length);
-            
-            return default(Task);
-        }
-
-        public Task<byte[]> GetBlock(string account, string container, Uri relativeUrl, long start, long? end,CancellationToken cancellationToken)
-        {
-            
-            Contract.Requires(!String.IsNullOrWhiteSpace(Token));
-            Contract.Requires(StorageUrl != null);
-            Contract.Requires(!String.IsNullOrWhiteSpace(container));
-            Contract.Requires(relativeUrl!=null);
-            Contract.Requires(start>=0);
-            Contract.Requires(end==null || end>=0);
-
-            return default(Task<byte[]>);
-        }
-
-    }
-}
+#region\r
+/* -----------------------------------------------------------------------\r
+ * <copyright file="ICloudClient.cs" company="GRNet">\r
+ * \r
+ * Copyright 2011-2012 GRNET S.A. All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or\r
+ * without modification, are permitted provided that the following\r
+ * conditions are met:\r
+ *\r
+ *   1. Redistributions of source code must retain the above\r
+ *      copyright notice, this list of conditions and the following\r
+ *      disclaimer.\r
+ *\r
+ *   2. Redistributions in binary form must reproduce the above\r
+ *      copyright notice, this list of conditions and the following\r
+ *      disclaimer in the documentation and/or other materials\r
+ *      provided with the distribution.\r
+ *\r
+ *\r
+ * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS\r
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\r
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR\r
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF\r
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED\r
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\r
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ * POSSIBILITY OF SUCH DAMAGE.\r
+ *\r
+ * The views and conclusions contained in the software and\r
+ * documentation are those of the authors and should not be\r
+ * interpreted as representing official policies, either expressed\r
+ * or implied, of GRNET S.A.\r
+ * </copyright>\r
+ * -----------------------------------------------------------------------\r
+ */\r
+#endregion\r
+using System;\r
+using System.Collections.Generic;\r
+using System.Diagnostics.Contracts;\r
+using System.Net;\r
+using System.Threading;\r
+using System.Threading.Tasks;\r
+using Pithos.Interfaces;\r
+\r
+namespace Pithos.Network\r
+{\r
+    [ContractClass(typeof(ICloudClientContract))]\r
+    public interface ICloudClient\r
+    {\r
+\r
+        string ApiKey { get; set; }\r
+        string UserName { get; set; }\r
+        Uri StorageUrl { get; set; }\r
+\r
+        string Token { get; set; }\r
+\r
+        bool UsePithos { get; set; }\r
+        Task<AccountInfo> Authenticate();\r
+        //WebProxy Proxy { get; set; }\r
+        double DownloadPercentLimit { get; set; }\r
+        double UploadPercentLimit { get; set; }\r
+        string AuthenticationUrl { get; set; }\r
+\r
+        #region Container operations\r
+\r
+        Task<IList<ContainerInfo>> ListContainers(string account);\r
+        IList<ObjectInfo> ListObjects(string account, Uri container, DateTimeOffset? since = null);\r
+        IList<ObjectInfo> ListObjects(string account, Uri container, Uri folder, DateTimeOffset? since = null);\r
+        Task<bool> ContainerExists(string account, Uri container);\r
+        Task<ContainerInfo> GetContainerInfo(string account, Uri container);\r
+        Task CreateContainer(string account, Uri container);\r
+        Task DeleteContainer(string account, Uri container);\r
+        #endregion\r
+\r
+        #region Object operations        \r
+        Task GetObject(string account, Uri container, Uri objectName, string fileName, CancellationToken cancellationToken);\r
+        Task PutObject(string account, Uri container, Uri objectName, string fileName, string hash = null, string contentType = "application/octet-stream");\r
+        Task DeleteObject(string account, Uri container, Uri objectName, bool isDirectory);\r
+        //void DeleteObject(string container, string objectName, string account = null);\r
+        Task MoveObject(string account, Uri sourceContainer, Uri oldObjectName, Uri targetContainer, Uri newObjectName);\r
+        Task<bool> ObjectExists(string account, Uri container, Uri objectName);\r
+        Task<ObjectInfo> GetObjectInfo(string account, Uri container, Uri objectName);\r
+        Task CreateFolder(string account, Uri container, Uri folder);\r
+        #endregion\r
+\r
+        #region Hashmap operations        \r
+        Task<TreeHash> GetHashMap(string account, Uri container, Uri objectName);\r
+        Task<IList<string>> PutHashMap(string account, Uri container, Uri objectName, TreeHash hash);\r
+        Task PostBlock(string account, Uri container, byte[] block, int offset, int count,string blockHash, CancellationToken token);\r
+        Task<byte[]> GetBlock(string account, Uri container, Uri relativeUrl, long start, long? end, CancellationToken cancellationToken);\r
+        #endregion\r
+\r
+        #region Sharing operations        \r
+        IList<ObjectInfo> ListSharedObjects(HashSet<string> knownContainers, DateTimeOffset? since);\r
+        void ShareObject(string account, Uri container, Uri objectName, string shareTo, bool read, bool write);\r
+\r
+        #endregion\r
+\r
+        Task<AccountInfo> GetAccountPolicies(AccountInfo accountInfo);\r
+\r
+        void UpdateMetadata(ObjectInfo objectInfo);\r
+\r
+        void UpdateMetadata(ContainerInfo Container);\r
+        IList<ShareAccountInfo> ListSharingAccounts(DateTime? since=null);\r
+        Task WipeContainer(string account, Uri container);\r
+    }\r
+\r
+\r
+    [ContractClassFor(typeof(ICloudClient))]\r
+    public abstract class ICloudClientContract:ICloudClient\r
+    {\r
+\r
+        public string ApiKey { get; set; }\r
+        public string UserName { get; set; }\r
+        public Uri StorageUrl { get; set; }\r
+        public string Token { get; set; }\r
+        \r
+        public double DownloadPercentLimit { get; set; }\r
+        public double UploadPercentLimit { get; set; }\r
+\r
+        public string AuthenticationUrl { get; set; }\r
+\r
+        public bool UsePithos { get; set; }\r
+\r
+        public Task<AccountInfo> Authenticate()\r
+        {\r
+            Contract.Requires<ArgumentNullException>(!String.IsNullOrWhiteSpace(ApiKey), "ApiKey must be filled before calling Authenticate");\r
+            Contract.Requires<ArgumentNullException>(!String.IsNullOrWhiteSpace(UserName), "UserName must be filled before calling Authenticate");\r
+\r
+            return default(Task<AccountInfo>);\r
+        }\r
+\r
+        public Task<IList<ContainerInfo>> ListContainers(string account)\r
+        {\r
+            Contract.Requires(!String.IsNullOrWhiteSpace(Token));\r
+            Contract.Requires(StorageUrl!=null);            \r
+\r
+            return default(Task<IList<ContainerInfo>>);\r
+        }\r
+\r
+        public IList<ObjectInfo> ListSharedObjects(HashSet<string> knownContainers, DateTimeOffset? since)\r
+        {\r
+\r
+            Contract.Requires(knownContainers!=null);\r
+            Contract.Requires(!String.IsNullOrWhiteSpace(Token));\r
+            Contract.Requires(StorageUrl != null);\r
+\r
+            return default(IList<ObjectInfo>);\r
+        }\r
+\r
+        public void ShareObject(string account, Uri container, Uri objectName, string shareTo, bool read, bool write)\r
+        {\r
+            \r
+            Contract.Requires(!String.IsNullOrWhiteSpace(Token));\r
+            Contract.Requires(StorageUrl != null);\r
+            Contract.Requires(container!=null);\r
+            Contract.Requires(!container.IsAbsoluteUri);\r
+            Contract.Requires(objectName != null);\r
+            Contract.Requires(!objectName.IsAbsoluteUri);\r
+            Contract.Requires(!String.IsNullOrWhiteSpace(account));\r
+            Contract.Requires(!String.IsNullOrWhiteSpace(shareTo));\r
+   \r
+        }\r
+\r
+        public Task<AccountInfo> GetAccountPolicies(AccountInfo accountInfo)\r
+        {\r
+            Contract.Requires(accountInfo!=null);\r
+\r
+            return default(Task<AccountInfo>);\r
+        }\r
+\r
+        public void UpdateMetadata(ObjectInfo objectInfo)\r
+        {\r
+            Contract.Requires(objectInfo!=null);\r
+\r
+            return ;\r
+        }\r
+        \r
+        public void UpdateMetadata(ContainerInfo objectInfo)\r
+        {\r
+            Contract.Requires(objectInfo!=null);\r
+\r
+            return ;\r
+        }\r
+\r
+        public IList<ShareAccountInfo> ListSharingAccounts(DateTime? since = new DateTime?())\r
+        {\r
+            return default(IList<ShareAccountInfo>);\r
+        }\r
+\r
+        public Task WipeContainer(string account, Uri container)\r
+        {\r
+            Contract.Requires(!String.IsNullOrWhiteSpace(Token));\r
+            Contract.Requires(StorageUrl != null);\r
+            Contract.Requires(container != null);\r
+            Contract.Requires(!container.IsAbsoluteUri);\r
+\r
+            return default(Task);\r
+        }\r
+\r
+\r
+        public IList<ObjectInfo> ListObjects(string account, Uri container, DateTimeOffset? since = null)\r
+        {\r
+            \r
+            Contract.Requires(!String.IsNullOrWhiteSpace(Token));\r
+            Contract.Requires(StorageUrl != null);\r
+            Contract.Requires(container != null);\r
+            Contract.Requires(!container.IsAbsoluteUri);\r
+\r
+            return default(IList<ObjectInfo>);\r
+        }\r
+\r
+        public IList<ObjectInfo> ListObjects(string account, Uri container, Uri folder, DateTimeOffset? since = null)\r
+        {\r
+            \r
+            Contract.Requires(!String.IsNullOrWhiteSpace(Token));\r
+            Contract.Requires(StorageUrl != null);\r
+            Contract.Requires(container != null);\r
+            Contract.Requires(!container.IsAbsoluteUri);\r
+\r
+            //Contract.Requires(!String.IsNullOrWhiteSpace(folder));\r
+\r
+            return default(IList<ObjectInfo>);\r
+        }\r
+\r
+        public Task<bool> ContainerExists(string account, Uri container)\r
+        {\r
+            \r
+            Contract.Requires(!String.IsNullOrWhiteSpace(Token));\r
+            Contract.Requires(StorageUrl!=null);\r
+            Contract.Requires(container != null);\r
+            Contract.Requires(!container.IsAbsoluteUri);\r
+\r
+            return default(Task<bool>);\r
+        }\r
+\r
+        public Task<ContainerInfo> GetContainerInfo(string account, Uri container)\r
+        {\r
+            \r
+            Contract.Requires(!String.IsNullOrWhiteSpace(Token));\r
+            Contract.Requires(StorageUrl!=null);\r
+            Contract.Requires(container != null);\r
+            Contract.Requires(!container.IsAbsoluteUri);\r
+\r
+            return default(Task<ContainerInfo>);\r
+        }\r
+\r
+        public Task CreateContainer(string account, Uri container)\r
+        {\r
+            \r
+            Contract.Requires(!String.IsNullOrWhiteSpace(Token));\r
+            Contract.Requires(StorageUrl!=null);\r
+            Contract.Requires(container != null);\r
+            Contract.Requires(!container.IsAbsoluteUri);\r
+\r
+            return default(Task);\r
+        }\r
+\r
+        public Task DeleteContainer(string account, Uri container)\r
+        {\r
+            \r
+            Contract.Requires(!String.IsNullOrWhiteSpace(Token));\r
+            Contract.Requires(StorageUrl!=null);\r
+            Contract.Requires(container != null);\r
+            Contract.Requires(!container.IsAbsoluteUri);\r
+\r
+            return default(Task);\r
+        }\r
+\r
+        public Task GetObject(string account, Uri container, Uri objectName, string fileName, CancellationToken cancellationToken)\r
+        {\r
+            \r
+            Contract.Requires(!String.IsNullOrWhiteSpace(Token));\r
+            Contract.Requires(StorageUrl!=null);\r
+            Contract.Requires(container != null);\r
+            Contract.Requires(!container.IsAbsoluteUri);\r
+            Contract.Requires(objectName != null);\r
+            Contract.Requires(!objectName.IsAbsoluteUri);\r
+\r
+            return default(Task);\r
+        }\r
+\r
+        public Task PutObject(string account, Uri container, Uri objectName, string fileName, string hash = null, string contentType = "application/octet-stream")\r
+        {\r
+            \r
+            Contract.Requires(!String.IsNullOrWhiteSpace(Token));\r
+            Contract.Requires(StorageUrl!=null);\r
+            Contract.Requires(!String.IsNullOrWhiteSpace(fileName));\r
+            Contract.Requires(container != null);\r
+            Contract.Requires(!container.IsAbsoluteUri);\r
+            Contract.Requires(objectName != null);\r
+            Contract.Requires(!objectName.IsAbsoluteUri);\r
+            Contract.Requires(!String.IsNullOrWhiteSpace(contentType));\r
+\r
+            return default(Task);\r
+        }\r
+\r
+        public Task DeleteObject(string account, Uri container, Uri objectName, bool isDirectory)\r
+        {\r
+            \r
+            Contract.Requires(!String.IsNullOrWhiteSpace(Token));\r
+            Contract.Requires(StorageUrl!=null);\r
+            Contract.Requires(container != null);\r
+            Contract.Requires(!container.IsAbsoluteUri);\r
+            Contract.Requires(objectName != null);\r
+            Contract.Requires(!objectName.IsAbsoluteUri);\r
+\r
+            return default(Task);\r
+        }\r
+\r
+        public Task MoveObject(string account, Uri sourceContainer, Uri oldObjectName, Uri targetContainer, Uri newObjectName)\r
+        {\r
+            \r
+            Contract.Requires(!String.IsNullOrWhiteSpace(Token));\r
+            Contract.Requires(StorageUrl!=null);\r
+            Contract.Requires(sourceContainer != null);\r
+            Contract.Requires(!sourceContainer.IsAbsoluteUri);\r
+            Contract.Requires(oldObjectName != null);\r
+            Contract.Requires(!oldObjectName.IsAbsoluteUri);\r
+\r
+            Contract.Requires(targetContainer != null);\r
+            Contract.Requires(!targetContainer.IsAbsoluteUri);\r
+            Contract.Requires(newObjectName != null);\r
+            Contract.Requires(!newObjectName.IsAbsoluteUri);\r
+\r
+            return default(Task);\r
+        }\r
+\r
+        public Task<bool> ObjectExists(string account, Uri container, Uri objectName)\r
+        {\r
+            \r
+            Contract.Requires(!String.IsNullOrWhiteSpace(Token));\r
+            Contract.Requires(StorageUrl!=null);\r
+            Contract.Requires(container != null);\r
+            Contract.Requires(!container.IsAbsoluteUri);\r
+            Contract.Requires(objectName != null);\r
+            Contract.Requires(!objectName.IsAbsoluteUri);\r
+\r
+            return default(Task<bool>);\r
+        }\r
+\r
+        public Task<ObjectInfo> GetObjectInfo(string account, Uri container, Uri objectName)\r
+        {\r
+            \r
+            Contract.Requires(!String.IsNullOrWhiteSpace(Token));\r
+            Contract.Requires(StorageUrl!=null);\r
+            Contract.Requires(container != null);\r
+            Contract.Requires(!container.IsAbsoluteUri);\r
+            Contract.Requires(objectName != null);\r
+            Contract.Requires(!objectName.IsAbsoluteUri);\r
+\r
+            return default(Task<ObjectInfo>);\r
+        }\r
+\r
+        public Task CreateFolder(string account, Uri container, Uri folder)\r
+        {\r
+            \r
+            Contract.Requires(!String.IsNullOrWhiteSpace(Token));\r
+            Contract.Requires(StorageUrl != null);\r
+            Contract.Requires(container != null);\r
+            Contract.Requires(!container.IsAbsoluteUri);\r
+            Contract.Requires(folder != null);\r
+            Contract.Requires(!folder .IsAbsoluteUri);\r
+\r
+            return default(Task);\r
+        }\r
+\r
+        public Task<TreeHash> GetHashMap(string account, Uri container, Uri objectName)\r
+        {\r
+            \r
+            Contract.Requires(!String.IsNullOrWhiteSpace(Token));\r
+            Contract.Requires(StorageUrl != null);\r
+            Contract.Requires(container != null);\r
+            Contract.Requires(!container.IsAbsoluteUri);\r
+            Contract.Requires(objectName != null);\r
+            Contract.Requires(!objectName.IsAbsoluteUri);\r
+\r
+            return default(Task<TreeHash>);\r
+        }\r
+\r
+        public Task<IList<string>> PutHashMap(string account, Uri container, Uri objectName, TreeHash hash)\r
+        {\r
+            \r
+            Contract.Requires(!String.IsNullOrWhiteSpace(Token));\r
+            Contract.Requires(StorageUrl != null);\r
+            Contract.Requires(container != null);\r
+            Contract.Requires(!container.IsAbsoluteUri);\r
+            Contract.Requires(objectName != null);\r
+            Contract.Requires(!objectName.IsAbsoluteUri);\r
+            Contract.Requires(hash != null);\r
+\r
+            return default(Task<IList<string>>);\r
+        }\r
+\r
+        public Task PostBlock(string account, Uri container, byte[] block, int offset, int count, string blockHash,CancellationToken token)\r
+        {\r
+            \r
+            Contract.Requires(!String.IsNullOrWhiteSpace(Token));\r
+            Contract.Requires(StorageUrl != null);\r
+            Contract.Requires(container != null);\r
+            Contract.Requires(!container.IsAbsoluteUri);\r
+            Contract.Requires(block != null);\r
+            Contract.Requires(offset>=0);\r
+            Contract.Requires(offset < block.Length);\r
+            Contract.Requires(count>=0);\r
+            Contract.Requires(count <= block.Length);\r
+            \r
+            return default(Task);\r
+        }\r
+\r
+        public Task<byte[]> GetBlock(string account, Uri container, Uri relativeUrl, long start, long? end, CancellationToken cancellationToken)\r
+        {\r
+            \r
+            Contract.Requires(!String.IsNullOrWhiteSpace(Token));\r
+            Contract.Requires(StorageUrl != null);\r
+            Contract.Requires(container != null);\r
+            Contract.Requires(!container.IsAbsoluteUri);\r
+            Contract.Requires(relativeUrl != null);\r
+            Contract.Requires(start>=0);\r
+            Contract.Requires(end==null || end>=0);\r
+\r
+            return default(Task<byte[]>);\r
+        }\r
+\r
+    }\r
+}\r