// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROME_BROWSER_CHROMEOS_CROS_NETWORK_CONSTANTS_H_
#define CHROME_BROWSER_CHROMEOS_CROS_NETWORK_CONSTANTS_H_

namespace chromeos {

// This enumerates the various property indices that can be found in a
// dictionary being parsed.
enum PropertyIndex {
  PROPERTY_INDEX_ACTIVATE_OVER_NON_CELLULAR_NETWORK,
  PROPERTY_INDEX_ACTIVATION_STATE,
  PROPERTY_INDEX_ACTIVE_PROFILE,
  PROPERTY_INDEX_ARP_GATEWAY,
  PROPERTY_INDEX_AUTHENTICATION,
  PROPERTY_INDEX_AUTO_CONNECT,
  PROPERTY_INDEX_AVAILABLE_TECHNOLOGIES,
  PROPERTY_INDEX_CARRIER,
  PROPERTY_INDEX_CELLULAR_ALLOW_ROAMING,
  PROPERTY_INDEX_CELLULAR_APN,
  PROPERTY_INDEX_CELLULAR_APN_LIST,
  PROPERTY_INDEX_CELLULAR_LAST_GOOD_APN,
  PROPERTY_INDEX_CHECK_PORTAL,
  PROPERTY_INDEX_CHECK_PORTAL_LIST,
  PROPERTY_INDEX_CONNECTABLE,
  PROPERTY_INDEX_CONNECTED_TECHNOLOGIES,
  PROPERTY_INDEX_CONNECTIVITY_STATE,
  PROPERTY_INDEX_DEFAULT_TECHNOLOGY,
  PROPERTY_INDEX_DEVICE,
  PROPERTY_INDEX_DEVICES,
  PROPERTY_INDEX_EAP,
  PROPERTY_INDEX_EAP_ANONYMOUS_IDENTITY,
  PROPERTY_INDEX_EAP_CA_CERT_ID,
  PROPERTY_INDEX_EAP_CA_CERT_PEM,
  PROPERTY_INDEX_EAP_CERT_ID,
  PROPERTY_INDEX_EAP_CLIENT_CERT,
  PROPERTY_INDEX_EAP_CLIENT_CERT_NSS,
  PROPERTY_INDEX_EAP_CLIENT_CERT_PATTERN,
  PROPERTY_INDEX_EAP_IDENTITY,
  PROPERTY_INDEX_EAP_KEY_ID,
  PROPERTY_INDEX_EAP_KEY_MGMT,
  PROPERTY_INDEX_EAP_METHOD,
  PROPERTY_INDEX_EAP_PASSWORD,
  PROPERTY_INDEX_EAP_PHASE_2_AUTH,
  PROPERTY_INDEX_EAP_PIN,
  PROPERTY_INDEX_EAP_PRIVATE_KEY,
  PROPERTY_INDEX_EAP_PRIVATE_KEY_PASSWORD,
  PROPERTY_INDEX_EAP_USE_SYSTEM_CAS,
  PROPERTY_INDEX_ENABLED_TECHNOLOGIES,
  PROPERTY_INDEX_ERROR,
  PROPERTY_INDEX_ESN,
  PROPERTY_INDEX_FAVORITE,
  PROPERTY_INDEX_FIRMWARE_REVISION,
  PROPERTY_INDEX_FOUND_NETWORKS,
  PROPERTY_INDEX_GUID,
  PROPERTY_INDEX_HARDWARE_REVISION,
  PROPERTY_INDEX_HOME_PROVIDER,
  PROPERTY_INDEX_HOST,
  PROPERTY_INDEX_ICCID,
  PROPERTY_INDEX_IDENTITY,
  PROPERTY_INDEX_IMEI,
  PROPERTY_INDEX_IMSI,
  PROPERTY_INDEX_IPSEC_AUTHENTICATIONTYPE,
  PROPERTY_INDEX_IPSEC_IKEVERSION,
  PROPERTY_INDEX_ISSUER_SUBJECT_PATTERN_COMMON_NAME,
  PROPERTY_INDEX_ISSUER_SUBJECT_PATTERN_LOCALITY,
  PROPERTY_INDEX_ISSUER_SUBJECT_PATTERN_ORGANIZATION,
  PROPERTY_INDEX_ISSUER_SUBJECT_PATTERN_ORGANIZATIONAL_UNIT,
  PROPERTY_INDEX_IS_ACTIVE,
  PROPERTY_INDEX_L2TPIPSEC_CA_CERT_PEM,
  PROPERTY_INDEX_L2TPIPSEC_CLIENT_CERT_ID,
  PROPERTY_INDEX_L2TPIPSEC_CLIENT_CERT_SLOT,
  PROPERTY_INDEX_L2TPIPSEC_GROUP_NAME,
  PROPERTY_INDEX_L2TPIPSEC_PASSWORD,
  PROPERTY_INDEX_L2TPIPSEC_PIN,
  PROPERTY_INDEX_L2TPIPSEC_PSK,
  PROPERTY_INDEX_L2TPIPSEC_PSK_REQUIRED,
  PROPERTY_INDEX_L2TPIPSEC_USER,
  PROPERTY_INDEX_MANUFACTURER,
  PROPERTY_INDEX_MDN,
  PROPERTY_INDEX_MEID,
  PROPERTY_INDEX_MIN,
  PROPERTY_INDEX_MODEL_ID,
  PROPERTY_INDEX_NAME,
  PROPERTY_INDEX_NETWORKS,
  PROPERTY_INDEX_NETWORK_TECHNOLOGY,
  PROPERTY_INDEX_OFFLINE_MODE,
  PROPERTY_INDEX_OLP,
  PROPERTY_INDEX_OLP_URL,
  PROPERTY_INDEX_OPEN_VPN_AUTH,
  PROPERTY_INDEX_OPEN_VPN_AUTHNOCACHE,
  PROPERTY_INDEX_OPEN_VPN_AUTHRETRY,
  PROPERTY_INDEX_OPEN_VPN_AUTHUSERPASS,
  PROPERTY_INDEX_OPEN_VPN_CA_CERT_PEM,
  PROPERTY_INDEX_OPEN_VPN_CERT,
  PROPERTY_INDEX_OPEN_VPN_CIPHER,
  PROPERTY_INDEX_OPEN_VPN_CLIENT_CERT_ID,
  PROPERTY_INDEX_OPEN_VPN_CLIENT_CERT_SLOT,
  PROPERTY_INDEX_OPEN_VPN_COMPLZO,
  PROPERTY_INDEX_OPEN_VPN_COMPNOADAPT,
  PROPERTY_INDEX_OPEN_VPN_KEYDIRECTION,
  PROPERTY_INDEX_OPEN_VPN_MGMT_ENABLE,
  PROPERTY_INDEX_OPEN_VPN_NSCERTTYPE,
  PROPERTY_INDEX_OPEN_VPN_OTP,
  PROPERTY_INDEX_OPEN_VPN_PASSWORD,
  PROPERTY_INDEX_OPEN_VPN_PIN,
  PROPERTY_INDEX_OPEN_VPN_PKCS11_PROVIDER,
  PROPERTY_INDEX_OPEN_VPN_PORT,
  PROPERTY_INDEX_OPEN_VPN_PROTO,
  PROPERTY_INDEX_OPEN_VPN_PUSHPEERINFO,
  PROPERTY_INDEX_OPEN_VPN_REMOTECERTEKU,
  PROPERTY_INDEX_OPEN_VPN_REMOTECERTKU,
  PROPERTY_INDEX_OPEN_VPN_REMOTECERTTLS,
  PROPERTY_INDEX_OPEN_VPN_RENEGSEC,
  PROPERTY_INDEX_OPEN_VPN_SERVERPOLLTIMEOUT,
  PROPERTY_INDEX_OPEN_VPN_SHAPER,
  PROPERTY_INDEX_OPEN_VPN_STATICCHALLENGE,
  PROPERTY_INDEX_OPEN_VPN_TLSAUTHCONTENTS,
  PROPERTY_INDEX_OPEN_VPN_TLSREMOTE,
  PROPERTY_INDEX_OPEN_VPN_USER,
  PROPERTY_INDEX_OPERATOR_CODE,
  PROPERTY_INDEX_OPERATOR_NAME,
  PROPERTY_INDEX_OUT_OF_CREDITS,
  PROPERTY_INDEX_PASSPHRASE,
  PROPERTY_INDEX_PASSPHRASE_REQUIRED,
  PROPERTY_INDEX_PORTAL_URL,
  PROPERTY_INDEX_POWERED,
  PROPERTY_INDEX_PRIORITY,
  PROPERTY_INDEX_PRL_VERSION,
  PROPERTY_INDEX_PROFILE,
  PROPERTY_INDEX_PROFILES,
  PROPERTY_INDEX_PROVIDER,
  PROPERTY_INDEX_PROVIDER_HOST,
  PROPERTY_INDEX_PROVIDER_REQUIRES_ROAMING,
  PROPERTY_INDEX_PROVIDER_TYPE,
  PROPERTY_INDEX_ROAMING_STATE,
  PROPERTY_INDEX_SAVE_CREDENTIALS,
  PROPERTY_INDEX_SCANNING,
  PROPERTY_INDEX_SECURITY,
  PROPERTY_INDEX_SELECTED_NETWORK,
  PROPERTY_INDEX_SERVICES,
  PROPERTY_INDEX_SERVICE_WATCH_LIST,
  PROPERTY_INDEX_SERVING_OPERATOR,
  PROPERTY_INDEX_SIGNAL_STRENGTH,
  PROPERTY_INDEX_SIM_LOCK,
  PROPERTY_INDEX_SIM_PRESENT,
  PROPERTY_INDEX_SSID,
  PROPERTY_INDEX_STATE,
  PROPERTY_INDEX_SUPPORT_NETWORK_SCAN,
  PROPERTY_INDEX_SUPPORTED_CARRIERS,
  PROPERTY_INDEX_TECHNOLOGY_FAMILY,
  PROPERTY_INDEX_TYPE,
  PROPERTY_INDEX_UI_DATA,
  PROPERTY_INDEX_UNINITIALIZED_TECHNOLOGIES,
  PROPERTY_INDEX_UNKNOWN,
  PROPERTY_INDEX_USAGE_URL,
  PROPERTY_INDEX_VPN_DOMAIN,
  PROPERTY_INDEX_WIFI_AUTH_MODE,
  PROPERTY_INDEX_WIFI_BSSID,
  PROPERTY_INDEX_WIFI_FREQUENCY,
  PROPERTY_INDEX_WIFI_HEX_SSID,
  PROPERTY_INDEX_WIFI_HIDDEN_SSID,
  PROPERTY_INDEX_WIFI_PHY_MODE
};

// Connection enums (see flimflam/include/service.h)
enum ConnectionType {
  TYPE_UNKNOWN   = 0,
  TYPE_ETHERNET  = 1,
  TYPE_WIFI      = 2,
  TYPE_WIMAX     = 3,
  TYPE_BLUETOOTH = 4,
  TYPE_CELLULAR  = 5,
  TYPE_VPN       = 6,
};

enum ConnectionSecurity {
  SECURITY_UNKNOWN = 0,
  SECURITY_NONE    = 1,
  SECURITY_WEP     = 2,
  SECURITY_WPA     = 3,
  SECURITY_RSN     = 4,
  SECURITY_8021X   = 5,
  SECURITY_PSK     = 6,
};

enum ConnectionState {
  STATE_UNKNOWN            = 0,
  STATE_IDLE               = 1,
  STATE_CARRIER            = 2,
  STATE_ASSOCIATION        = 3,
  STATE_CONFIGURATION      = 4,
  STATE_READY              = 5,
  STATE_DISCONNECT         = 6,
  STATE_FAILURE            = 7,
  STATE_ACTIVATION_FAILURE = 8,
  STATE_PORTAL             = 9,
  STATE_ONLINE             = 10,
  STATE_CONNECT_REQUESTED  = 11,  // Chrome only state
};

// Chrome only state set for user initiated connection attempts.
enum UserConnectState {
  USER_CONNECT_NONE    = 0,
  USER_CONNECT_STARTED = 1,
  USER_CONNECT_CONNECTED = 2,
  USER_CONNECT_FAILED = 3
};

// Network enums (see flimflam/include/network.h)
enum NetworkTechnology {
  NETWORK_TECHNOLOGY_UNKNOWN      = 0,
  NETWORK_TECHNOLOGY_1XRTT        = 1,
  NETWORK_TECHNOLOGY_EVDO         = 2,
  NETWORK_TECHNOLOGY_GPRS         = 3,
  NETWORK_TECHNOLOGY_EDGE         = 4,
  NETWORK_TECHNOLOGY_UMTS         = 5,
  NETWORK_TECHNOLOGY_HSPA         = 6,
  NETWORK_TECHNOLOGY_HSPA_PLUS    = 7,
  NETWORK_TECHNOLOGY_LTE          = 8,
  NETWORK_TECHNOLOGY_LTE_ADVANCED = 9,
  NETWORK_TECHNOLOGY_GSM          = 10,
};

enum ActivationState {
  ACTIVATION_STATE_UNKNOWN             = 0,
  ACTIVATION_STATE_ACTIVATED           = 1,
  ACTIVATION_STATE_ACTIVATING          = 2,
  ACTIVATION_STATE_NOT_ACTIVATED       = 3,
  ACTIVATION_STATE_PARTIALLY_ACTIVATED = 4,
};

enum NetworkRoamingState {
  ROAMING_STATE_UNKNOWN = 0,
  ROAMING_STATE_HOME    = 1,
  ROAMING_STATE_ROAMING = 2,
};

// Device enums (see flimflam/include/device.h)
enum TechnologyFamily {
  TECHNOLOGY_FAMILY_UNKNOWN = 0,
  TECHNOLOGY_FAMILY_CDMA    = 1,
  TECHNOLOGY_FAMILY_GSM     = 2
};

// Type of a pending SIM operation.
enum SimOperationType {
  SIM_OPERATION_NONE               = 0,
  SIM_OPERATION_CHANGE_PIN         = 1,
  SIM_OPERATION_CHANGE_REQUIRE_PIN = 2,
  SIM_OPERATION_ENTER_PIN          = 3,
  SIM_OPERATION_UNBLOCK_PIN        = 4,
};

// SIMLock states (see gobi-cromo-plugin/gobi_gsm_modem.cc)
enum SimLockState {
  SIM_UNKNOWN    = 0,
  SIM_UNLOCKED   = 1,
  SIM_LOCKED_PIN = 2,
  SIM_LOCKED_PUK = 3,  // also when SIM is blocked, then retries = 0.
};

// SIM PinRequire states.
// SIM_PIN_REQUIRE_UNKNOWN - SIM card is absent or SimLockState initial value
//                           hasn't been received yet.
// SIM_PIN_REQUIRED - SIM card is locked when booted/wake from sleep and
//                    requires user to enter PIN.
// SIM_PIN_NOT_REQUIRED - SIM card is unlocked all the time and requires PIN
// only on certain operations, such as ChangeRequirePin, ChangePin, EnterPin.
enum SimPinRequire {
  SIM_PIN_REQUIRE_UNKNOWN = 0,
  SIM_PIN_NOT_REQUIRED    = 1,
  SIM_PIN_REQUIRED        = 2,
};

// Any PIN operation result (EnterPin, UnblockPin etc.).
enum PinOperationError {
  PIN_ERROR_NONE           = 0,
  PIN_ERROR_UNKNOWN        = 1,
  PIN_ERROR_INCORRECT_CODE = 2,  // Either PIN/PUK specified is incorrect.
  PIN_ERROR_BLOCKED        = 3,  // No more PIN retries left, SIM is blocked.
};

// connection errors (see flimflam/include/service.h)
enum ConnectionError {
  ERROR_NO_ERROR               = 0,
  ERROR_OUT_OF_RANGE           = 1,
  ERROR_PIN_MISSING            = 2,
  ERROR_DHCP_FAILED            = 3,
  ERROR_CONNECT_FAILED         = 4,
  ERROR_BAD_PASSPHRASE         = 5,
  ERROR_BAD_WEPKEY             = 6,
  ERROR_ACTIVATION_FAILED      = 7,
  ERROR_NEED_EVDO              = 8,
  ERROR_NEED_HOME_NETWORK      = 9,
  ERROR_OTASP_FAILED           = 10,
  ERROR_AAA_FAILED             = 11,
  ERROR_INTERNAL               = 12,
  ERROR_DNS_LOOKUP_FAILED      = 13,
  ERROR_HTTP_GET_FAILED        = 14,
  ERROR_IPSEC_PSK_AUTH_FAILED  = 15,
  ERROR_IPSEC_CERT_AUTH_FAILED = 16,
  ERROR_PPP_AUTH_FAILED        = 17,
  ERROR_EAP_AUTHENTICATION_FAILED = 18,
  ERROR_EAP_LOCAL_TLS_FAILED   = 19,
  ERROR_EAP_REMOTE_TLS_FAILED  = 20,
  ERROR_UNKNOWN                = 255
};

// We are currently only supporting setting a single EAP Method.
enum EAPMethod {
  EAP_METHOD_UNKNOWN = 0,
  EAP_METHOD_PEAP    = 1,
  EAP_METHOD_TLS     = 2,
  EAP_METHOD_TTLS    = 3,
  EAP_METHOD_LEAP    = 4
};

// We are currently only supporting setting a single EAP phase 2 authentication.
enum EAPPhase2Auth {
  EAP_PHASE_2_AUTH_AUTO     = 0,
  EAP_PHASE_2_AUTH_MD5      = 1,
  EAP_PHASE_2_AUTH_MSCHAPV2 = 2,
  EAP_PHASE_2_AUTH_MSCHAP   = 3,
  EAP_PHASE_2_AUTH_PAP      = 4,
  EAP_PHASE_2_AUTH_CHAP     = 5
};

// Misc enums
enum NetworkProfileType {
  PROFILE_NONE,    // Not in any profile (not remembered).
  PROFILE_SHARED,  // In the local profile, shared by all users on device.
  PROFILE_USER     // In the user provile, not visible to other users.
};

// Virtual Network provider type.
enum ProviderType {
  PROVIDER_TYPE_L2TP_IPSEC_PSK,
  PROVIDER_TYPE_L2TP_IPSEC_USER_CERT,
  PROVIDER_TYPE_OPEN_VPN,
  // Add new provider types before PROVIDER_TYPE_MAX.
  PROVIDER_TYPE_MAX,
};

}  // namespace chromeos

#endif  // CHROME_BROWSER_CHROMEOS_CROS_NETWORK_CONSTANTS_H_
