private static bool FetchDataFromResponse(HttpWebResponse response, Bucket.ObjectHead objectHead, bool withData) { if (objectHead == null) return false; objectHead.Size = response.ContentLength; objectHead.ContentType = response.ContentType; objectHead.ETag = response.Headers["ETag"]; objectHead.LastModified = response.LastModified; if (withData) { objectHead.Content = new byte[objectHead.Size]; var read = (long)0; var stream = response.GetResponseStream(); if (stream != null) { while (read < objectHead.Size) { var toread = (int) ((objectHead.Size - read)%4048); read += stream.Read(objectHead.Content, 0, toread); } return true; } } return false; }
public static IBucket FromXml(XElement element, SharpGsClient connector) { var bucket = new Bucket(connector) { Name = element.Descendants("Name").First().Value, CreationDate = DateTime.Parse(element.Descendants("CreationDate").First().Value) }; return bucket; }
public string Request(string authValue, DateTime date, Stream content, string contentType, Bucket.ObjectHead objectHead, bool withData) { try { var request = CreateRequest(authValue, date, content, contentType); using (var response = (HttpWebResponse)request.GetResponse()) { if (response.StatusCode == HttpStatusCode.OK && FetchDataFromResponse(response, objectHead, withData)) return String.Empty; return StreamToString(response.GetResponseStream()); } } catch (WebException exception) { return StreamToString(exception.Response.GetResponseStream()); } }
internal XDocument Request(RequestMethod requestMethod = RequestMethod.GET, string bucket = null, string path = null, byte[] content = null, string contentType = null, Bucket.ObjectHead objectHead = null, bool withData = false, string parameters = null) { var stream = content == null ? null : new MemoryStream(content); try { return RequestStream(requestMethod, bucket, path, stream, contentType, objectHead, withData, parameters); } finally { if (stream != null) stream.Close(); } }
internal XDocument RequestStream(RequestMethod requestMethod = RequestMethod.GET, string bucket = null, string path = null, Stream content = null, string contentType = null, Bucket.ObjectHead objectHead = null, bool withData = false, string parameters = null) { var contentTypeFixed = contentType ?? @"application/xml"; var dateO = DateTime.UtcNow; var date = dateO.ToString(@"ddd, dd MMM yyyy HH':'mm':'ss 'GMT'", CultureInfo.GetCultureInfo("EN-US")); var canonicalHeaders = SyndicateCanonicalHeaders(requestMethod, content == null ? null : Convert.ToBase64String( MD5.Create().ComputeHash(content)), contentTypeFixed, date); var canonicalResource = SyndicateCanonicalResource(requestMethod, bucket, path); var signatureOrigin = String.Format("{0}{1}", canonicalHeaders, canonicalResource); var signature = Convert.ToBase64String( new HMACSHA1(Encoding.UTF8.GetBytes(AuthSecret)).ComputeHash(Encoding.UTF8.GetBytes(signatureOrigin))); var api = new RestApiClient(ConnectionUrl(requestMethod, bucket, path, parameters), requestMethod, WebProxy); if (objectHead != null) objectHead.Key = path; var result = api.Request(SyndicateAuthValue(AuthKey, signature), dateO, content, contentTypeFixed, objectHead, withData); if (String.IsNullOrEmpty(result)) return null; var responce = XDocument.Parse(FilterResponse(result)); var error = responce.Descendants(@"Error").FirstOrDefault(); if (error == null) return responce; throw error.FindException(); }