/*
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License").
* You may not use this file except in compliance with the License.
* A copy of the License is located at
*
* http://aws.amazon.com/apache2.0
*
* or in the "license" file accompanying this file. This file is distributed
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
using System;
using System.Net;
using Amazon.Runtime.Internal;
using Amazon.Runtime.Endpoints;
using Amazon.Runtime.Internal.Auth;
using Amazon.Util;
#if NETSTANDARD
using System.Net.Http;
#endif
namespace Amazon.Runtime
{
///
/// This interface is the read only access to the ClientConfig object used when setting up service clients. Once service clients
/// are initiated the config object should not be changed to avoid issues with using a service client in a multi threaded environment.
///
public partial interface IClientConfig
{
///
/// If set to true the SDK will ignore the configured endpointUrls in the config file or in the environment variables.
/// By default it is set to false.
///
bool IgnoreConfiguredEndpointUrls { get; }
///
/// The serviceId for the service, which is specified in the metadata in the ServiceModel.
/// The transformed value of the service ID (replace any spaces in the service ID
/// with underscores and uppercase all letters) is used to set service-specific endpoint urls.
/// I.e: AWS_ENDPOINT_URL_ELASTIC_BEANSTALK
/// For configuration files, replace any spaces with underscores and lowercase all letters
/// I.e. elastic_beanstalk =
/// endpoint_url = http://localhost:8000
///
string ServiceId { get; }
///
/// Specifies the profile to be used. When this is set on the ClientConfig and that config is passed to
/// the service client constructor the sdk will try to find the credentials associated with the Profile.Name property
/// If set, this will override AWS_PROFILE and AWSConfigs.ProfileName.
///
Profile Profile { get; }
///
/// For Services using Bearer authentication, this controls how
/// resolves a .
///
/// See for additional information.
///
IAWSTokenProvider AWSTokenProvider { get; }
///
/// Returns the that will be used. If none is specified,
/// than the correct one is computed by .
///
DefaultConfigurationMode DefaultConfigurationMode { get; }
///
/// Gets the RegionEndpoint property. The region constant to use that
/// determines the endpoint to use. If this is not set
/// then the client will fallback to the value of ServiceURL.
///
RegionEndpoint RegionEndpoint { get; }
///
/// The constant used to lookup in the region hash the endpoint.
///
string RegionEndpointServiceName { get; }
///
/// Gets and sets of the ServiceURL property.
/// This is an optional property if you need to set a specific service URL
/// instead setting the region with the RegionEndpoint property.
///
string ServiceURL { get; }
///
/// Gets and sets of the EndpointProvider property.
/// This property is used for endpoints resolution.
/// During service client creation it is set to service's default generated EndpointProvider,
/// but can be changed to use custom user supplied EndpointProvider.
///
IEndpointProvider EndpointProvider { get; }
///
/// Gets the UseHttp property.
/// If this property is set to true, the client attempts
/// to use HTTP protocol.
/// By default, this property is set to false.
///
bool UseHttp { get; }
///
/// Gets Service Version
///
string ServiceVersion { get; }
///
/// Gets the signatureMethod property.
///
SigningAlgorithm SignatureMethod { get; }
///
/// Gets the SignatureVersion property.
///
/// Note: This property exists for backward compatibility but is no longer
/// used by any service other than S3.
///
string SignatureVersion { get; }
///
/// Gets the AuthenticationRegion property.
/// Used in AWS4 request signing, this is an optional property;
/// change it only if the region cannot be determined from the
/// service endpoint.
///
string AuthenticationRegion { get; }
///
/// Gets the AuthenticationServiceName property.
/// Used in AWS4 request signing, this is the short-form
/// name of the service being called.
///
string AuthenticationServiceName { get; }
///
/// Gets the UserAgent property.
///
string UserAgent { get; }
///
/// Gets the DisableLogging. If true logging for this client will be disabled.
///
bool DisableLogging { get; }
///
/// Flag on whether to log metrics for service calls.
///
/// This can be set in the application's configs, as below:
///
/// <?xml version="1.0" encoding="utf-8" ?>
/// <configuration>
/// <appSettings>
/// <add key="AWSLogMetrics" value"true"/>
/// </appSettings>
/// </configuration>
///
///
bool LogMetrics { get; }
///
/// Gets the LogResponse property.
/// If this property is set to true, the service response
/// is read in its entirety and logged.
///
bool LogResponse { get; }
///
/// Gets the ReadEntireResponse.
/// If this property is set to true, the service response
/// is read in its entirety before being processed.
///
bool ReadEntireResponse { get; }
///
/// This flag controls if .NET HTTP infrastructure should follow redirection
/// responses (e.g. HTTP 307 - temporary redirect).
///
bool AllowAutoRedirect { get; }
///
/// Gets the BufferSize property.
/// The BufferSize controls the buffer used to read in from input streams and write
/// out to the request.
///
int BufferSize { get; }
///
/// Returns the flag indicating how many retry HTTP requests an SDK should
/// make for a single SDK operation invocation before giving up. This flag will
/// return 4 when the RetryMode is set to "Legacy" which is the default. For
/// RetryMode values of "Standard" or "Adaptive" this flag will return 2. In
/// addition to the values returned that are dependant on the RetryMode, the
/// value can be set to a specific value by using the AWS_MAX_ATTEMPTS environment
/// variable, max_attempts in the shared configuration file, or by setting a
/// value directly on this property. When using AWS_MAX_ATTEMPTS or max_attempts
/// the value returned from this property will be one less than the value entered
/// because this flag is the number of retry requests, not total requests. To
/// learn more about the RetryMode property that affects the values returned by
/// this flag, see .
///
int MaxErrorRetry { get; }
///
/// Determines if MaxErrorRetry has been manually set.
///
bool IsMaxErrorRetrySet { get; }
///
/// Gets the interval at which progress update events are raised
/// for upload operations. By default, the progress update events are
/// raised at every 100KB of data transferred.
///
long ProgressUpdateInterval { get; }
///
/// Flag on whether to resign requests on retry or not.
///
bool ResignRetries { get; }
///
/// Credentials to use with a proxy.
///
ICredentials ProxyCredentials { get; }
///
/// Gets the default request timeout value.
///
///
///
/// If the value is set, the value is assigned to the Timeout property of the HTTPWebRequest/HttpClient object used
/// to send requests.
///
///
/// Please specify a timeout value only if the operation will not complete within the default intervals
/// specified for an HttpWebRequest/HttpClient.
///
///
TimeSpan? Timeout { get; }
///
/// Configures the endpoint calculation for a service to go to a dual stack (ipv6 enabled) endpoint
/// for the configured region.
///
///
/// Note: AWS services are enabling dualstack endpoints over time. It is your responsibility to check
/// that the service actually supports a dualstack endpoint in the configured region before enabling
/// this option for a service.
///
bool UseDualstackEndpoint { get; }
///
/// Configures the endpoint calculation to go to a FIPS (https://aws.amazon.com/compliance/fips/) endpoint
/// for the configured region.
///
bool UseFIPSEndpoint { get; }
///
/// Configures a flag enabling to either opt in or opt out of the retry throttling service.
/// Note: set value to true to enable retry throttling feature. The Default value for this flag is false.
///
bool ThrottleRetries { get; }
///
/// Using either the RegionEndpoint or the ServiceURL determine what the URL to the service is.
///
/// The URL to the service.
[Obsolete("This operation is obsoleted because as of version 3.7.100 endpoint is resolved using a newer system that uses request level parameters to resolve the endpoint.")]
string DetermineServiceURL();
///
/// Given this client configuration, return a DNS suffix for service endpoint url.
///
[Obsolete("This operation is obsoleted because as of version 3.7.100 endpoint is resolved using a newer system that uses request level parameters to resolve the endpoint.")]
string DetermineDnsSuffix();
///
/// Performs validation on this config object.
/// Throws exception if any of the required values are missing/invalid.
///
/// The timeout specified is null.
void Validate();
///
/// Returns the clock skew adjusted utc now. This value is affected by AWSConfigs.ManualClockCorrection
///
DateTime CorrectedUtcNow { get; }
///
/// Returns the calculated clock skew value for this config's service endpoint. If AWSConfigs.CorrectForClockSkew is false,
/// this value won't be used to construct service requests.
///
TimeSpan ClockOffset { get; }
///
/// Gets the DisableHostPrefixInjection flag. If true, host prefix injection will be disabled for this client, the default value of this flag is false.
/// Host prefix injection prefixes the service endpoint with request members from APIs which use this feature.
/// Example: for a hostPrefix of "foo-name." and a endpoint of "service.region.amazonaws.com" the default behavior is to
/// prefix the endpoint with the hostPrefix resulting in a final endpoint of "foo-name.service.region.amazonaws.com". Setting
/// DisableHostPrefixInjection to true will disable hostPrefix injection resulting in a final endpoint of
/// "service.region.amazonaws.com" regardless of the value of hostPrefix. E.g. You may want to disable host prefix injection for testing against a local mock endpoint.
///
bool DisableHostPrefixInjection { get; }
///
/// Returns the flag indicating if endpoint discovery should be enabled or disabled for operations that are not required to use endpoint discovery.
///
bool EndpointDiscoveryEnabled { get; }
///
/// Returns the maximum number of discovered endpoints that can be stored within the cache for the client. The default limit is 1000 cache entries.
///
int EndpointDiscoveryCacheLimit { get; }
///
/// Returns the flag indicating the current mode in use for request
/// retries and influences the value returned from .
/// The default value is RequestRetryMode.Legacy. This flag can be configured
/// by using the AWS_RETRY_MODE environment variable, retry_mode in the
/// shared configuration file, or by setting this value directly.
///
RequestRetryMode RetryMode { get; }
///
/// Under Adaptive retry mode, this flag determines if the client should wait for
/// a send token to become available or don't block and fail the request immediately
/// if a send token is not available.
///
bool FastFailRequests { get; }
///
/// When set to true, the service client will use the x-amz-user-agent
/// header instead of the User-Agent header to report version and
/// environment information to the AWS service.
///
/// Note: This is especially useful when using a platform like WebAssembly
/// which doesn't allow to specify the User-Agent header.
///
bool UseAlternateUserAgentHeader { get; }
#if BCL
///
/// Gets the TCP keep-alive values to use for service requests. Enabling TCP keep-alive sends periodic TCP keep-alive probe packets, to prevent disconnection due to
/// network inactivity. This is useful when you make API calls that take a long time to respond. In this case, the connection could be dropped by an intermediate
/// node (e.g. proxy) as the connection is inactive for a long time. Timeout controls the duration of inactivity before a keep-alive probe packet is sent.
/// Interval controls the amount of time to wait before retrying a keep-alive probe packet in the event the server doesn't respond to a keep-alive probe.
///
TcpKeepAlive TcpKeepAlive { get; }
#endif
#if NETSTANDARD
///
/// Get the value to use for on requests.
/// If this property is null,
/// will be left at its default value of .
///
int? MaxConnectionsPerServer { get; }
///
///
/// This is a switch used for performance testing and is not intended for production applications
/// to change. This switch may be removed in a future version of the SDK as the .NET Core platform matures.
///
///
/// If true, the HttpClient is cached and reused for every request made by the service client
/// and shared with other service clients.
///
///
/// For the .NET Core platform this is default to true because the HttpClient manages the connection
/// pool.
///
///
bool CacheHttpClient { get; }
///
/// If CacheHttpClient is set to true then HttpClientCacheSize controls the number of HttpClients cached.
///
int HttpClientCacheSize { get; }
#endif
}
}