# Please follow these guidelines when adding config.
#
# 1. The Error Config is defined as an Array of APNs identified by "ApnName"
#    1.1. Other than Apn names this can also have "*" value which
#         represents that this can be used as a generic fallback when no
#         other policy matches.
# 2. Each Apn associated with "ApnName" has an array of "ErrorTypes". Where each element
#    in "ErrorTypes" array defines the config for the Error
# 3. The element in "ErrorTypes" array has the following items
#    3.1. "ErrorType": Defines the type of error in String.
#               String should match @ErrorPolicyErrorType in @ErrorPolicyManager
#         3.1.1. "IKE_PROTOCOL_ERROR_TYPE" refers to the Notify Error coming in
#                Notify paylod. Refer to https://tools.ietf.org/html/rfc4306#section-3.10.1
#                for global errors and carrier specific requirements for other carrier specific
#                error codes.
#         3.1.2. "GENERIC_ERROR_TYPE" refers to the following Iwlan errors - "IO_EXCEPTION",
#                "TIMEOUT_EXCEPTION", "SERVER_SELECTION_FAILED" and "TUNNEL_TRANSFORM_FAILED"
#         3.1.3. "*" represents that this policy a generic fallback when no
#                other policy matches.
#    3.2. "ErrorDetails": Array of error specifics for which the policy needs to be applied to.
#         Following are the currently supported formats of elements in the array:
#         Note: Array can be a mix of number, range and string formats.
#         3.2.1. Number or Code: "24" - Number specific to the error(see 3.2.6, 3.2.7).
#         3.2.2. Range: "9000-9050" Range of specific errors.
#         3.2.3. Any: "*" value represents that this can be applied to all ErrorDetails
#                when there is no specific match. This will be a single element array.
#         3.2.4. String: String describing the specific error.
#                Currently allowed string values - "IO_EXCEPTION", "TIMEOUT_EXCEPTION",
#                "SERVER_SELECTION_FAILED" and "TUNNEL_TRANSFORM_FAILED"
#         3.2.5. "IKE_PROTOCOL_EXCEPTION" ErrorType expects the "ErrorDetail" to be
#                defined only in numbers or range of numbers.
#                Examples: ["24"] or ["9000-9050"] or ["7", "14000-14050"]
#         3.2.6. "GENERIC_ERROR_TYPE" or "*" ErrorType expects only the following to be
#                in "ErrorDetail" - "IO_EXCEPTION", "TIMEOUT_EXCEPTION",
#                "SERVER_SELECTION_FAILED", "TUNNEL_TRANSFORM_FAILED" and "*".
#                Example: ["IO_EXCEPTION", "TIMEOUT_EXCEPTION"] or ["*"]
#    3.3. "RetryArray": Array of retry times (in secs) represented in string format.
#         Following formats are currently supported.
#         3.3.1. ["0","0", "0"] Retry immediately for maximum 3 times and then Fail.
#         3.3.2. [] Empty array means to fail whenever the error happens.
#         3.3.3. ["2", "4", "8"] Retry times are 2 secs, 4secs and 8 secs - Fail after that.
#         3.3.4. ["5", "10", "15", "-1"] Here the "-1" represents infinite retires with the
#                retry time "15" (the last retry number).
#         3.3.5. ["2+r15"] 2 seconds + Random time below 15 seconds.
#    3.4. "UnthrottlingEvents": Events for which the retry time can be unthrottled.
#         String should match the events defined in @IwlanEventListener
#         Following are the currently supported UnthrottlingEvents
#         3.4.1. WIFI_DISABLE_EVENT: Wifi on to off toggle.
#         3.4.2. APM_DISABLE_EVENT: APM on to off toggle.
#         3.4.3. APM_ENABLE_EVENT: APM off to on toggle.
#         3.4.4. WIFI_AP_CHANGED_EVENT: Wifi is connected to a AP with different SSID.
#         3.4.5. WIFI_CALLING_DISABLE_EVENT: Wifi calling button on to off toggle.
#
# Note: When the value is "*" for any of "ApnName" or "ErrorType" or "ErrorDetails",
#       it means that the config definition applies to rest of the errors for which
#       the config is not defined.
#       For example, if "ApnName" is "ims" and one of the "ErrorType" in it
#       is defined as "*" - this policy will be applied to the error
#       that doesn't fall into other error types defined under "ims".
[
  {
    "ApnName": "*",
    "ErrorTypes": [
      {
        "ErrorType": "*",
        "ErrorDetails": ["*"],
        "RetryArray": ["5", "10", "-1"],
        "UnthrottlingEvents": ["APM_ENABLE_EVENT", "APM_DISABLE_EVENT", "WIFI_DISABLE_EVENT", "WIFI_AP_CHANGED_EVENT"]
      },
      {
        "ErrorType": "GENERIC_ERROR_TYPE",
        "ErrorDetails": ["IO_EXCEPTION"],
        "RetryArray": ["0", "0", "0", "60+r15", "120", "-1"],
        "UnthrottlingEvents": ["APM_ENABLE_EVENT", "APM_DISABLE_EVENT", "WIFI_DISABLE_EVENT", "WIFI_AP_CHANGED_EVENT"]
      },
      {
        "ErrorType": "IKE_PROTOCOL_ERROR_TYPE",
        "ErrorDetails": ["24"],
        "RetryArray": ["10", "20", "40", "80", "160"],
        "UnthrottlingEvents": ["APM_ENABLE_EVENT", "WIFI_DISABLE_EVENT", "WIFI_CALLING_DISABLE_EVENT"]
      }
    ]
  }
]
