/*
 * Licensed to the Apache Software Foundation (ASF) under one
 *  or more contributor license agreements.  See the NOTICE file
 *  distributed with this work for additional information
 *  regarding copyright ownership.  The ASF licenses this file
 *  to you under the Apache License, Version 2.0 (the
 *  "License"); you may not use this file except in compliance
 *  with the License.  You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License 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.
 */

package org.apache.hadoop.fs.swift.http;

import org.apache.hadoop.util.VersionInfo;

/**
 * Constants used in the Swift REST protocol,
 * and in the properties used to configure the {@link SwiftRestClient}.
 */
public class SwiftProtocolConstants {
  /**
   * Swift-specific header for authentication: {@value}
   */
  public static final String HEADER_AUTH_KEY = "X-Auth-Token";

  /**
   * Default port used by Swift for HTTP
   */
  public static final int SWIFT_HTTP_PORT = 8080;

  /**
   * Default port used by Swift Auth for HTTPS
   */
  public static final int SWIFT_HTTPS_PORT = 443;

  /** HTTP standard {@value} header */
  public static final String HEADER_RANGE = "Range";

  /** HTTP standard {@value} header */
  public static final String HEADER_DESTINATION = "Destination";

  /** HTTP standard {@value} header */
  public static final String HEADER_LAST_MODIFIED = "Last-Modified";

  /** HTTP standard {@value} header */
  public static final String HEADER_CONTENT_LENGTH = "Content-Length";

  /** HTTP standard {@value} header */
  public static final String HEADER_CONTENT_RANGE = "Content-Range";

  /**
   * Patten for range headers
   */
  public static final String SWIFT_RANGE_HEADER_FORMAT_PATTERN = "bytes=%d-%d";

  /**
   *  section in the JSON catalog provided after auth listing the swift FS:
   *  {@value}
   */
  public static final String SERVICE_CATALOG_SWIFT = "swift";
  /**
   *  section in the JSON catalog provided after auth listing the cloud files;
   * this is an alternate catalog entry name
   *  {@value}
   */
  public static final String SERVICE_CATALOG_CLOUD_FILES = "cloudFiles";
  /**
   *  section in the JSON catalog provided after auth listing the object store;
   * this is an alternate catalog entry name
   *  {@value}
   */
  public static final String SERVICE_CATALOG_OBJECT_STORE = "object-store";

  /**
   * entry in the swift catalog defining the prefix used to talk to objects
   *  {@value}
   */
  public static final String SWIFT_OBJECT_AUTH_ENDPOINT =
          "/object_endpoint/";
  /**
   * Swift-specific header: object manifest used in the final upload
   * of a multipart operation: {@value}
   */
  public static final String X_OBJECT_MANIFEST = "X-Object-Manifest";
  /**
   * Swift-specific header -#of objects in a container: {@value}
   */
  public static final String X_CONTAINER_OBJECT_COUNT =
          "X-Container-Object-Count";
  /**
   * Swift-specific header: no. of bytes used in a container {@value}
   */
  public static final String X_CONTAINER_BYTES_USED = "X-Container-Bytes-Used";

  /**
   * Header to set when requesting the latest version of a file: : {@value}
   */
  public static final String X_NEWEST = "X-Newest";

  /**
   * throttled response sent by some endpoints.
   */
  public static final int SC_THROTTLED_498 = 498;
  /**
   * W3C recommended status code for throttled operations
   */
  public static final int SC_TOO_MANY_REQUESTS_429 = 429;

  public static final String FS_SWIFT = "fs.swift";

  /**
   * Prefix for all instance-specific values in the configuration: {@value}
   */
  public static final String SWIFT_SERVICE_PREFIX = FS_SWIFT + ".service.";

  /**
   * timeout for all connections: {@value}
   */
  public static final String SWIFT_CONNECTION_TIMEOUT =
          FS_SWIFT + ".connect.timeout";

  /**
   * timeout for all connections: {@value}
   */
  public static final String SWIFT_SOCKET_TIMEOUT =
          FS_SWIFT + ".socket.timeout";

  /**
   * the default socket timeout in millis {@value}.
   * This controls how long the connection waits for responses from
   * servers.
   */
  public static final int DEFAULT_SOCKET_TIMEOUT = 60000;

  /**
   * connection retry count for all connections: {@value}
   */
  public static final String SWIFT_RETRY_COUNT =
          FS_SWIFT + ".connect.retry.count";

  /**
   * delay in millis between bulk (delete, rename, copy operations: {@value}
   */
  public static final String SWIFT_THROTTLE_DELAY =
          FS_SWIFT + ".connect.throttle.delay";

  /**
   * the default throttle delay in millis {@value}
   */
  public static final int DEFAULT_THROTTLE_DELAY = 0;

  /**
   * blocksize for all filesystems: {@value}
   */
  public static final String SWIFT_BLOCKSIZE =
          FS_SWIFT + ".blocksize";

  /**
   * the default blocksize for filesystems in KB: {@value}
   */
  public static final int DEFAULT_SWIFT_BLOCKSIZE = 32 * 1024;

  /**
   * partition size for all filesystems in KB: {@value}
   */
  public static final String SWIFT_PARTITION_SIZE =
    FS_SWIFT + ".partsize";

  /**
   * The default partition size for uploads: {@value}
   */
  public static final int DEFAULT_SWIFT_PARTITION_SIZE = 4608*1024;

  /**
   * request size for reads in KB: {@value}
   */
  public static final String SWIFT_REQUEST_SIZE =
    FS_SWIFT + ".requestsize";

  /**
   * The default request size for reads: {@value}
   */
  public static final int DEFAULT_SWIFT_REQUEST_SIZE = 64;


  public static final String HEADER_USER_AGENT="User-Agent";

  /**
   * The user agent sent in requests.
   */
  public static final String SWIFT_USER_AGENT= "Apache Hadoop Swift Client "
                                               + VersionInfo.getBuildVersion();

  /**
   * Key for passing the service name as a property -not read from the
   * configuration : {@value}
   */
  public static final String DOT_SERVICE = ".SERVICE-NAME";

  /**
   * Key for passing the container name as a property -not read from the
   * configuration : {@value}
   */
  public static final String DOT_CONTAINER = ".CONTAINER-NAME";

  public static final String DOT_AUTH_URL = ".auth.url";
  public static final String DOT_TENANT = ".tenant";
  public static final String DOT_USERNAME = ".username";
  public static final String DOT_PASSWORD = ".password";
  public static final String DOT_HTTP_PORT = ".http.port";
  public static final String DOT_HTTPS_PORT = ".https.port";
  public static final String DOT_REGION = ".region";
  public static final String DOT_PROXY_HOST = ".proxy.host";
  public static final String DOT_PROXY_PORT = ".proxy.port";
  public static final String DOT_LOCATION_AWARE = ".location-aware";
  public static final String DOT_APIKEY = ".apikey";
  public static final String DOT_USE_APIKEY = ".useApikey";

  /**
   * flag to say use public URL
   */
  public static final String DOT_PUBLIC = ".public";

  public static final String SWIFT_SERVICE_PROPERTY = FS_SWIFT + DOT_SERVICE;
  public static final String SWIFT_CONTAINER_PROPERTY = FS_SWIFT + DOT_CONTAINER;

  public static final String SWIFT_AUTH_PROPERTY = FS_SWIFT + DOT_AUTH_URL;
  public static final String SWIFT_TENANT_PROPERTY = FS_SWIFT + DOT_TENANT;
  public static final String SWIFT_USERNAME_PROPERTY = FS_SWIFT + DOT_USERNAME;
  public static final String SWIFT_PASSWORD_PROPERTY = FS_SWIFT + DOT_PASSWORD;
  public static final String SWIFT_APIKEY_PROPERTY = FS_SWIFT + DOT_APIKEY;
  public static final String SWIFT_HTTP_PORT_PROPERTY = FS_SWIFT + DOT_HTTP_PORT;
  public static final String SWIFT_HTTPS_PORT_PROPERTY = FS_SWIFT
          + DOT_HTTPS_PORT;
  public static final String SWIFT_REGION_PROPERTY = FS_SWIFT + DOT_REGION;
  public static final String SWIFT_PUBLIC_PROPERTY = FS_SWIFT + DOT_PUBLIC;

  public static final String SWIFT_USE_API_KEY_PROPERTY = FS_SWIFT + DOT_USE_APIKEY;

  public static final String SWIFT_LOCATION_AWARE_PROPERTY = FS_SWIFT +
            DOT_LOCATION_AWARE;

  public static final String SWIFT_PROXY_HOST_PROPERTY = FS_SWIFT + DOT_PROXY_HOST;
  public static final String SWIFT_PROXY_PORT_PROPERTY = FS_SWIFT + DOT_PROXY_PORT;
  public static final String HTTP_ROUTE_DEFAULT_PROXY =
    "http.route.default-proxy";
  /**
   * Topology to return when a block location is requested
   */
  public static final String TOPOLOGY_PATH = "/swift/unknown";
  /**
   * Block location to return when a block location is requested
   */
  public static final String BLOCK_LOCATION = "/default-rack/swift";
  /**
   * Default number of attempts to retry a connect request: {@value}
   */
  static final int DEFAULT_RETRY_COUNT = 3;
  /**
   * Default timeout in milliseconds for connection requests: {@value}
   */
  static final int DEFAULT_CONNECT_TIMEOUT = 15000;
}
