Home | History | Annotate | Download | only in protocol
      1 // Copyright 2014 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 //
      5 // Request and reply to the "checkin server" devices poll every few hours.
      6 
      7 syntax = "proto2";
      8 
      9 option optimize_for = LITE_RUNTIME;
     10 option retain_unknown_fields = true;
     11 
     12 package checkin_proto;
     13 
     14 import "android_checkin.proto";
     15 
     16 // A concrete name/value pair sent to the device's Gservices database.
     17 message GservicesSetting {
     18   required bytes name = 1;
     19   required bytes value = 2;
     20 }
     21 
     22 // Devices send this every few hours to tell us how they're doing.
     23 message AndroidCheckinRequest {
     24   // IMEI (used by GSM phones) is sent and stored as 15 decimal
     25   // digits; the 15th is a check digit.
     26   optional string imei = 1;       // IMEI, reported but not logged.
     27 
     28   // MEID (used by CDMA phones) is sent and stored as 14 hexadecimal
     29   // digits (no check digit).
     30   optional string meid = 10;      // MEID, reported but not logged.
     31 
     32   // MAC address (used by non-phone devices).  12 hexadecimal digits;
     33   // no separators (eg "0016E6513AC2", not "00:16:E6:51:3A:C2").
     34   repeated string mac_addr = 9;   // MAC address, reported but not logged.
     35 
     36   // An array parallel to mac_addr, describing the type of interface.
     37   // Currently accepted values: "wifi", "ethernet", "bluetooth".  If
     38   // not present, "wifi" is assumed.
     39   repeated string mac_addr_type = 19;
     40 
     41   // Serial number (a manufacturer-defined unique hardware
     42   // identifier).  Alphanumeric, case-insensitive.
     43   optional string serial_number = 16;
     44 
     45   // Older CDMA networks use an ESN (8 hex digits) instead of an MEID.
     46   optional string esn = 17;       // ESN, reported but not logged
     47 
     48   optional int64 id = 2;          // Android device ID, not logged
     49   optional int64 logging_id = 7;  // Pseudonymous logging ID for Sawmill
     50   optional string digest = 3;     // Digest of device provisioning, not logged.
     51   optional string locale = 6;     // Current locale in standard (xx_XX) format
     52   required AndroidCheckinProto checkin = 4;
     53 
     54   // DEPRECATED, see AndroidCheckinProto.requested_group
     55   optional string desired_build = 5;
     56 
     57   // Blob of data from the Market app to be passed to Market API server
     58   optional string market_checkin = 8;
     59 
     60   // SID cookies of any google accounts stored on the phone.  Not logged.
     61   repeated string account_cookie = 11;
     62 
     63   // Time zone.  Not currently logged.
     64   optional string time_zone = 12;
     65 
     66   // Security token used to validate the checkin request.
     67   // Required for android IDs issued to Froyo+ devices, not for legacy IDs.
     68   optional fixed64 security_token = 13;
     69 
     70   // Version of checkin protocol.
     71   //
     72   // There are currently two versions:
     73   //
     74   // - version field missing: android IDs are assigned based on
     75   //   hardware identifiers.  unsecured in the sense that you can
     76   //   "unregister" someone's phone by sending a registration request
     77   //   with their IMEI/MEID/MAC.
     78   //
     79   // - version=2: android IDs are assigned randomly.  The device is
     80   //   sent a security token that must be included in all future
     81   //   checkins for that android id.
     82   //
     83   // - version=3: same as version 2, but the 'fragment' field is
     84   //   provided, and the device understands incremental updates to the
     85   //   gservices table (ie, only returning the keys whose values have
     86   //   changed.)
     87   //
     88   // (version=1 was skipped to avoid confusion with the "missing"
     89   // version field that is effectively version 1.)
     90   optional int32 version = 14;
     91 
     92   // OTA certs accepted by device (base-64 SHA-1 of cert files).  Not
     93   // logged.
     94   repeated string ota_cert = 15;
     95 
     96   // Honeycomb and newer devices send configuration data with their checkin.
     97   // optional DeviceConfigurationProto device_configuration = 18;
     98 
     99   // A single CheckinTask on the device may lead to multiple checkin
    100   // requests if there is too much log data to upload in a single
    101   // request.  For version 3 and up, this field will be filled in with
    102   // the number of the request, starting with 0.
    103   optional int32 fragment = 20;
    104 
    105   // For devices supporting multiple users, the name of the current
    106   // profile (they all check in independently, just as if they were
    107   // multiple physical devices).  This may not be set, even if the
    108   // device is using multiuser.  (checkin.user_number should be set to
    109   // the ordinal of the user.)
    110   optional string user_name = 21;
    111 
    112   // For devices supporting multiple user profiles, the serial number
    113   // for the user checking in.  Not logged.  May not be set, even if
    114   // the device supportes multiuser.  checkin.user_number is the
    115   // ordinal of the user (0, 1, 2, ...), which may be reused if users
    116   // are deleted and re-created.  user_serial_number is never reused
    117   // (unless the device is wiped).
    118   optional int32 user_serial_number = 22;
    119 
    120   // NEXT TAG: 23
    121 }
    122 
    123 // The response to the device.
    124 message AndroidCheckinResponse {
    125   required bool stats_ok = 1;    // Whether statistics were recorded properly.
    126   optional int64 time_msec = 3;  // Time of day from server (Java epoch).
    127   // repeated AndroidIntentProto intent = 2;
    128 
    129   // Provisioning is sent if the request included an obsolete digest.
    130   //
    131   // For version <= 2, 'digest' contains the digest that should be
    132   // sent back to the server on the next checkin, and 'setting'
    133   // contains the entire gservices table (which replaces the entire
    134   // current table on the device).
    135   //
    136   // for version >= 3, 'digest' will be absent.  If 'settings_diff'
    137   // is false, then 'setting' contains the entire table, as in version
    138   // 2.  If 'settings_diff' is true, then 'delete_setting' contains
    139   // the keys to delete, and 'setting' contains only keys to be added
    140   // or for which the value has changed.  All other keys in the
    141   // current table should be left untouched.  If 'settings_diff' is
    142   // absent, don't touch the existing gservices table.
    143   //
    144   optional string digest = 4;
    145   optional bool settings_diff = 9;
    146   repeated string delete_setting = 10;
    147   repeated GservicesSetting setting = 5;
    148 
    149   optional bool market_ok = 6;   // If Market got the market_checkin data OK.
    150 
    151   optional fixed64 android_id = 7;      // From the request, or newly assigned
    152   optional fixed64 security_token = 8;  // The associated security token
    153 
    154   optional string version_info = 11;
    155   // NEXT TAG: 12
    156 }
    157