syntax = "proto3";

package mobiledatadownload.logs;

option java_package = "com.google.mobiledatadownload";
option java_outer_classname = "LogEnumsProto";

// MDD client side events used for logging with MddLogData.
//
// Each feature gets a range of 1000 enums starting at X000. 1st enum specifies
// if the feature is enabled. Subsequent 999 enums can be used to define events
// within the feature. Unused enums in the range are left for future use for
// the *same* feature.
// If a feature ever exhausts it's quota of enums, it should be migrated to a
// new range of contiguous 2000 enums by deprecating the existing enums.
//
// Enums should never be deleted or reused, but they can be renamed*. Old enums
// should be left in their position with [deprecated=true] attribute.
//
// * For renaming enums, see <internal>
message MddClientEvent {
  enum Code {
    // Do not use this default value.
    EVENT_CODE_UNSPECIFIED = 0;

    // Events for Mobile Data Download (<internal>) (1000-1999).
    // Next enum for data download: 1114

    // Log in a periodic tasks.
    // Logged with DataDownloadFileGroupStats, MddFileGroupStatus.
    DATA_DOWNLOAD_FILE_GROUP_STATUS = 1044;

    // Log MddStorageStats in daily maintenance.
    DATA_DOWNLOAD_STORAGE_STATS = 1055;

    // MDD download result log.
    DATA_DOWNLOAD_RESULT_LOG = 1068;

    reserved 1000 to 1043, 1045 to 1054, 1056 to 1067, 1069 to 1113;

    reserved 2000 to 2999, 3000 to 3999, 4000 to 4099, 4100 to 4199,
        5000 to 5999, 6000 to 6999, 7000 to 7999, 8000 to 8999, 9000 to 9999,
        10000 to 10999, 11000 to 11999, 12000 to 12999, 13000, 13999,
        14000 to 14999, 15000 to 15999, 16000 to 16999, 17000 to 17999,
        18000 to 18999, 19000 to 19999;
  }
}

message MddFileGroupDownloadStatus {
  enum Code {
    INVALID = 0;
    COMPLETE = 1;
    PENDING = 2;
    FAILED = 3;
  }
}

// Result of MDD download api call.
message MddDownloadResult {
  enum Code {
    UNSPECIFIED = 0;  // unset value

    // File downloaded successfully.
    SUCCESS = 1;

    // The error we don't know.
    UNKNOWN_ERROR = 2;

    // The errors from the android downloader v1 outside MDD, which comes from:
    // http://google3/java/com/google/android/libraries/net/downloader/DownloadFailure.java?l=12&rcl=114548720
    // The block 100-199 (included) is reserved for android downloader v1.
    // Next tag: 112
    ANDROID_DOWNLOADER_UNKNOWN = 100;
    ANDROID_DOWNLOADER_CANCELED = 101;
    ANDROID_DOWNLOADER_INVALID_REQUEST = 102;
    ANDROID_DOWNLOADER_HTTP_ERROR = 103;
    ANDROID_DOWNLOADER_REQUEST_ERROR = 104;
    ANDROID_DOWNLOADER_RESPONSE_OPEN_ERROR = 105;
    ANDROID_DOWNLOADER_RESPONSE_CLOSE_ERROR = 106;
    ANDROID_DOWNLOADER_NETWORK_IO_ERROR = 107;
    ANDROID_DOWNLOADER_DISK_IO_ERROR = 108;
    ANDROID_DOWNLOADER_FILE_SYSTEM_ERROR = 109;
    ANDROID_DOWNLOADER_UNKNOWN_IO_ERROR = 110;
    ANDROID_DOWNLOADER_OAUTH_ERROR = 111;

    // The errors from the android downloader v2 outside MDD, which comes from:
    // http://google3/java/com/google/android/libraries/net/downloader2/DownloadException.java
    // The block 200-299 (included) is reserved for android downloader v2.
    // Next tag: 201
    ANDROID_DOWNLOADER2_ERROR = 200;

    // The data file group has not been added to MDD by the time the caller
    // makes download API call.
    GROUP_NOT_FOUND_ERROR = 300;

    // The DownloadListener is present but the DownloadMonitor is not provided.
    DOWNLOAD_MONITOR_NOT_PROVIDED_ERROR = 301;

    // Errors from unsatisfied download preconditions.
    INSECURE_URL_ERROR = 302;
    LOW_DISK_ERROR = 303;

    // Errors from download preparation.
    UNABLE_TO_CREATE_FILE_URI_ERROR = 304;
    SHARED_FILE_NOT_FOUND_ERROR = 305;
    MALFORMED_FILE_URI_ERROR = 306;
    UNABLE_TO_CREATE_MOBSTORE_RESPONSE_WRITER_ERROR = 307;

    // Errors from file validation.
    UNABLE_TO_VALIDATE_DOWNLOAD_FILE_ERROR = 308;
    DOWNLOADED_FILE_NOT_FOUND_ERROR = 309;
    DOWNLOADED_FILE_CHECKSUM_MISMATCH_ERROR = 310;
    CUSTOM_FILEGROUP_VALIDATION_FAILED = 330;

    // Errors from download transforms.
    UNABLE_TO_SERIALIZE_DOWNLOAD_TRANSFORM_ERROR = 311;
    DOWNLOAD_TRANSFORM_IO_ERROR = 312;
    FINAL_FILE_CHECKSUM_MISMATCH_ERROR = 313;

    // Errors from delta download.
    DELTA_DOWNLOAD_BASE_FILE_NOT_FOUND_ERROR = 314;
    DELTA_DOWNLOAD_DECODE_IO_ERROR = 315;

    // The error occurs after the file is ready.
    UNABLE_TO_UPDATE_FILE_STATE_ERROR = 316;

    // Fail to update the file group metadata.
    UNABLE_TO_UPDATE_GROUP_METADATA_ERROR = 317;

    // Errors from sharing files with the blob storage.
    // Failed to update the metadata max_expiration_date.
    UNABLE_TO_UPDATE_FILE_MAX_EXPIRATION_DATE = 318;
    UNABLE_SHARE_FILE_BEFORE_DOWNLOAD_ERROR = 319;
    UNABLE_SHARE_FILE_AFTER_DOWNLOAD_ERROR = 320;

    // Download errors related to isolated file structure
    UNABLE_TO_REMOVE_SYMLINK_STRUCTURE = 321;
    UNABLE_TO_CREATE_SYMLINK_STRUCTURE = 322;

    // Download errors related to importing inline files
    UNABLE_TO_RESERVE_FILE_ENTRY = 323;
    INVALID_INLINE_FILE_URL_SCHEME = 324;
    INLINE_FILE_IO_ERROR = 327;
    MISSING_INLINE_DOWNLOAD_PARAMS = 328;
    MISSING_INLINE_FILE_SOURCE = 329;

    // Download errors related to URL parsing
    MALFORMED_DOWNLOAD_URL = 325;
    UNSUPPORTED_DOWNLOAD_URL_SCHEME = 326;

    // Download errors for manifest file group populator.
    MANIFEST_FILE_GROUP_POPULATOR_INVALID_FLAG_ERROR = 400;
    MANIFEST_FILE_GROUP_POPULATOR_CONTENT_CHANGED_DURING_DOWNLOAD_ERROR = 401;
    MANIFEST_FILE_GROUP_POPULATOR_PARSE_MANIFEST_FILE_ERROR = 402;
    MANIFEST_FILE_GROUP_POPULATOR_DELETE_MANIFEST_FILE_ERROR = 403;
    MANIFEST_FILE_GROUP_POPULATOR_METADATA_IO_ERROR = 404;

    reserved 1000 to 3000;
  }
}