Example #1
0
        private static void OnHttpRequestSigningComplete(ulong id, int errorCode, string uri, HttpHeader[] headers, uint headerCount)
        {
            HttpRequestSigningCallback callback = PendingHttpRequestSignings.ReleaseStrongReference(id);

            if (callback == null)
            {
                return;
            }

            if (errorCode != 0)
            {
                callback.Result.CompleteExceptionally(new CrtException(errorCode));
            }
            else
            {
                HttpRequest sourceRequest = callback.OriginalRequest;
                HttpRequest signedRequest = new HttpRequest();
                signedRequest.Method     = sourceRequest.Method;
                signedRequest.Uri        = uri;
                signedRequest.Headers    = headers;
                signedRequest.BodyStream = sourceRequest.BodyStream;

                callback.Result.Complete(signedRequest);
            }
        }
Example #2
0
        public static CrtResult <HttpRequest> SignHttpRequest(HttpRequest request, AwsSigningConfig signingConfig)
        {
            if (request == null || signingConfig == null)
            {
                throw new CrtException("Null argument passed to SignRequest");
            }

            if (request.BodyStream != null)
            {
                if (!request.BodyStream.CanSeek)
                {
                    throw new CrtException("Http request payload stream must be seekable in order to be signed");
                }
            }

            var nativeConfig = new AwsSigningConfigNative(signingConfig);

            uint headerCount = 0;

            if (request.Headers != null)
            {
                headerCount = (uint)request.Headers.Length;
            }

            HttpRequestSigningCallback callback = new HttpRequestSigningCallback();

            callback.OriginalRequest  = request;                        /* needed to build final signed request */
            callback.ShouldSignHeader = signingConfig.ShouldSignHeader; /* prevent GC while signing */
            callback.BodyStream       = new CrtStreamWrapper(request.BodyStream);

            ulong id = PendingHttpRequestSignings.AcquireStrongReference(callback);

            API.SignRequestNative(request.Method, request.Uri, request.Headers, headerCount, callback.BodyStream.Delegates, nativeConfig, id, API.OnHttpRequestSigningComplete);

            return(callback.Result);
        }