public ServiceResponse Send(ServiceRequest request, ExecutionContext context) { SignRequest(request, context); var response = SendCore(request, context); HandleResponse(response, context.ResponseHandlers); return response; }
public void Sign(ServiceRequest request, ICredentials credentials) { var accessKeyId = credentials.AccessKeyId; var accessKeySecret = credentials.AccessKeySecret; var httpMethod = request.Method.ToString().ToUpperInvariant(); // Because the resource path to is different from the one in the request uri, // can't use ServiceRequest.ResourcePath here. var resourcePath = _resourcePath; if (!string.IsNullOrEmpty(accessKeySecret)) { var canonicalString = SignUtils.BuildCanonicalString(httpMethod, resourcePath, request); var signature = ServiceSignature.Create().ComputeSignature(accessKeySecret, canonicalString); request.Headers.Add(HttpHeaders.Authorization, "OSS " + accessKeyId + ":" + signature); } }
public IAsyncResult BeginSend(ServiceRequest request, ExecutionContext context, AsyncCallback callback, object state) { SignRequest(request, context); return(BeginSendCore(request, context, callback, state)); }
protected abstract IAsyncResult BeginSendCore(ServiceRequest request, ExecutionContext context, AsyncCallback callback, Object state);
protected abstract ServiceResponse SendCore(ServiceRequest request, ExecutionContext context);
protected abstract IAsyncResult BeginSendCore(ServiceRequest request, ExecutionContext context, AsyncCallback callback, Object state);
public IAsyncResult BeginSend(ServiceRequest request, ExecutionContext context, AsyncCallback callback, object state) { SignRequest(request, context); return BeginSendCore(request, context, callback, state); }
private static void SignRequest(ServiceRequest request, ExecutionContext context) { if (context.Signer != null) context.Signer.Sign(request, context.Credentials); }
protected abstract ServiceResponse SendCore(ServiceRequest request, ExecutionContext context);
private ServiceRequest BuildRequest() { var conf = OssUtils.GetClientConfiguration(Client); var request = new ServiceRequest { Method = Method, Endpoint = OssUtils.MakeBucketEndpoint(Endpoint, Bucket, conf), ResourcePath = OssUtils.MakeResourcePath(Endpoint, Bucket, Key) }; foreach (var p in Parameters) request.Parameters.Add(p.Key, p.Value); var adjustedTime = DateTime.UtcNow.AddSeconds(conf.TickOffset); request.Headers[HttpHeaders.Date] = DateUtils.FormatRfc822Date(adjustedTime); if (!Headers.ContainsKey(HttpHeaders.ContentType)) request.Headers[HttpHeaders.ContentType] = string.Empty; foreach(var h in Headers) request.Headers.Add(h.Key, h.Value); if (Context.Credentials.UseToken) request.Headers[HttpHeaders.SecurityToken] = Context.Credentials.SecurityToken; request.Content = Content; return request; }
public ServiceResponse Send(ServiceRequest request, ExecutionContext context) { return(SendImpl(request, context, 0)); }
private static void BeginSetRequestContent(HttpWebRequest webRequest, ServiceRequest serviceRequest, OssAction asyncCallback, ClientConfiguration clientConfiguration, HttpAsyncResult result) { var data = serviceRequest.BuildRequestContent(); if (data == null || (serviceRequest.Method != HttpMethod.Put && serviceRequest.Method != HttpMethod.Post)) { // Skip setting content body in this case. try { asyncCallback(); } catch (Exception e) { result.WebRequest.Abort(); result.Complete(e); } return; } // Write data to the request stream. long userSetContentLength = -1; if (serviceRequest.Headers.ContainsKey(HttpHeaders.ContentLength)) { userSetContentLength = long.Parse(serviceRequest.Headers[HttpHeaders.ContentLength]); } if (serviceRequest.UseChunkedEncoding || !data.CanSeek) // when data cannot seek, we have to use chunked encoding as there's no way to set the length { webRequest.SendChunked = true; webRequest.AllowWriteStreamBuffering = false; // when using chunked encoding, the data is likely big and thus not use write buffer; } else { long streamLength = data.Length - data.Position; webRequest.ContentLength = (userSetContentLength >= 0 && userSetContentLength <= streamLength) ? userSetContentLength : streamLength; if (webRequest.ContentLength > clientConfiguration.DirectWriteStreamThreshold) { webRequest.AllowWriteStreamBuffering = false; } } webRequest.BeginGetRequestStream( (ar) => { try { using (var requestStream = webRequest.EndGetRequestStream(ar)) { if (!webRequest.SendChunked) { IoUtils.WriteTo(data, requestStream, webRequest.ContentLength); } else { IoUtils.WriteTo(data, requestStream); } } asyncCallback(); } catch (Exception e) { result.WebRequest.Abort(); result.Complete(e); } }, null); }