Exemplo n.º 1
0
 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);
Exemplo n.º 6
0
 protected abstract IAsyncResult BeginSendCore(ServiceRequest request, ExecutionContext context, 
     AsyncCallback callback, Object state);
Exemplo n.º 7
0
 public IAsyncResult BeginSend(ServiceRequest request, ExecutionContext context, 
     AsyncCallback callback, object state)
 {
     SignRequest(request, context);
     return BeginSendCore(request, context, callback, state);
 }
Exemplo n.º 8
0
 private static void SignRequest(ServiceRequest request, ExecutionContext context)
 {
     if (context.Signer != null)
         context.Signer.Sign(request, context.Credentials);
 }
Exemplo n.º 9
0
 protected abstract ServiceResponse SendCore(ServiceRequest request, ExecutionContext context);
Exemplo n.º 10
0
        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;
        }
Exemplo n.º 11
0
 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);
        }