chromium/remoting/proto/remoting/v1/chromoting_event.proto

// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

syntax = "proto2";

option optimize_for = LITE_RUNTIME;

package remoting.apis.v1;

// A chromoting client or host may send a ChromotingEvent to the chromoting
// service to be logged.
// Next ID to use: 51
message ChromotingEvent {
  // The type of this event.
  // Next ID to use: 14
  enum Type {
    // Value returned when the field is not set.
    UNSPECIFIED_TYPE = 0;
    // The session state has changed.
    SESSION_STATE = 1;
    // There are new connection statistics.
    CONNECTION_STATISTICS = 2;
    // The session ID has expired, and a new one has been generated.
    // This happens every 24 hours, for sessions that live that long.
    // This event contains the expired session ID.
    SESSION_ID_OLD = 3;
    // The session ID has expired, and a new one has been generated.
    // This happens every 24 hours, for sessions that live that long.
    // This event contains the new session ID.
    // Whenever a session ID expires, the chromoting client or host sends two
    // events: one of type SESSION_ID_OLD, and one of type SESSION_ID_NEW.
    // The events are separate, to guarantee that session IDs cannot be used
    // to track a chromoting client or host for more than 24 hours.
    SESSION_ID_NEW = 4;
    // A valid heartbeat sent by either the host or the client.
    HEARTBEAT = 5;
    // An existing host restarted, and sent a heartbeat sequence id of 0.
    HEARTBEAT_REJECTED = 6;
    // An explicit restart event from hosts that support it.
    RESTART = 7;
    // Host status change: offline or online.
    HOST_STATUS = 8;
    // Signal strategy set-up progress.
    SIGNAL_STRATEGY_PROGRESS = 9;
    // For tracking features like number of ESC press in a session.
    FEATURE_TRACKING = 10;
    // Host and client screen dimensions and related information.
    SCREEN_DIMENSIONS = 11;
    // Chromoting.com migration.
    CHROMOTING_DOT_COM_MIGRATION = 12;
    // Number of network interfaces.
    NUMBER_OF_NETWORK_INTERFACES = 13;
  }

  // The type of Chromoting event.
  optional Type type = 1;

  // A session ID.
  // Unless the user opts out, the chromoting client or host randomly
  // generates a session ID at the start of each session, and clears it at the
  // end of each session. The client and host involved in one session need not
  // choose the same ID for that session. The session ID will expire, and a new
  // one will be generated, every 24 hours, for sessions that live that long.
  // The session ID is only used by chromoting.
  optional string session_id = 2;

  // Whether this event was generated by a chromoting client or a
  // chromoting host.
  // Next ID to use: 2
  enum Role {
    // The Client is the browser or app side of the connection.
    CLIENT = 0;
    // The Host is the remote side of the connection that is being accessed.
    HOST = 1;
  }

  // The role this event occurred on.
  optional Role role = 3;

  // Next ID to use: 8
  // (== suppress_warning documentation-presence ==)
  enum Os {
    // Value returned when the field is not set.
    UNSPECIFIED_OS = 0;

    CRD_LINUX = 1;
    CRD_CHROMEOS = 2;
    CRD_MAC = 3;
    CRD_WINDOWS = 4;
    CRD_OTHER = 5;
    CRD_ANDROID = 6;
    CRD_IOS = 7;
  }
  // The OS on which the client is running.
  optional Os os = 4;

  // The version of the OS on which the client is running.
  // It should be a sequence of integers, separated by periods.
  optional string os_version = 5;

  // The version of the client webapp that generated this event.
  // It should be a sequence of integers, separated by periods.
  optional string webapp_version = 7;

  // The version of the host executable that generated this event.
  // It should be a sequence of integers, separated by periods.
  optional string host_version = 20;

  // The CPU on which the client/host is running.
  optional string cpu = 8;

  // The following fields are typically associated with
  // SESSION_STATE events.

  // Types of session states.
  enum SessionState {
    // Unknown session state.
    UNKNOWN = 1 [deprecated = true];
    // The connection has been created.
    CREATED = 2 [deprecated = true];
    // The client plugin are missing or if they could not be loaded.
    BAD_PLUGIN_VERSION = 3 [deprecated = true];
    // Unknown plugin error.
    UNKNOWN_PLUGIN_ERROR = 4 [deprecated = true];
    // The session is connecting.
    CONNECTING = 5;
    // The session is being initialized.
    INITIALIZING = 6;
    // The session is connected.
    CONNECTED = 7;
    // The session is closed.
    CLOSED = 8;
    // The session failed to connect.
    CONNECTION_FAILED = 9;
    // There was an unknown error.
    UNDEFINED = 10 [deprecated = true];
    // The plugin was disabled.
    PLUGIN_DISABLED = 11 [deprecated = true];
    // The session connection dropped.
    CONNECTION_DROPPED = 12;
    // The connection is canceled by the user before it is connected.
    CONNECTION_CANCELED = 13;
    // The client has successfully authenticated with the host.
    AUTHENTICATED = 14;
    // The session has started, either by the user from an UX entry point or
    // by the client on behalf on the user (e.g. auto reconnects).
    STARTED = 15;
    // The session is establishing connection to the signaling channel.
    SIGNALING = 16;
    // The session is creating the client plugin.
    CREATING_PLUGIN = 17;
    // The client received the first video packet.
    VIDEO_STREAM_STARTED = 18;
  }
  // The session state reported by the client or host.
  optional SessionState session_state = 9;

  // Connection type definitions.
  // Next ID to use: 4
  enum ConnectionType {
    // Value returned when the field is not set.
    UNSPECIFIED_CONNECTION_TYPE = 0;
    // Peer to peer connection.
    DIRECT = 1;
    // A STUN server is used to get an external network address.
    STUN = 2;
    // Direct connection was unavailable, using a third party server to route
    // the traffic from peer to peer.
    RELAY = 3;
  }
  // The connection type reported by the client or host.
  optional ConnectionType connection_type = 10;

  // Definition of a connection error.
  // Next ID to use: 21
  enum ConnectionError {
    // No errors.
    NONE = 1;
    // The host is online.
    HOST_OFFLINE = 2;
    // Connection rejected since the host is not started.
    SESSION_REJECTED = 3;
    // The protocol does not match between host and client.
    INCOMPATIBLE_PROTOCOL = 4;
    // A network issue has prevented the remote connection.
    NETWORK_FAILURE = 5;
    // Unknown error.
    UNKNOWN_ERROR = 6;
    // The access code provided does not match the expected code.
    INVALID_ACCESS_CODE = 7;
    // The plugin on the client side is missing.
    MISSING_PLUGIN = 8;
    // Authentication has failed for the connection.
    AUTHENTICATION_FAILED = 9;
    // The plugin version does not match the expected version.
    ERROR_BAD_PLUGIN_VERSION = 10;
    // Connection rejected by the host due to an overload of failed login
    // attempts.
    HOST_OVERLOAD = 11;
    // There has been an issue connecting peer-to-peer.
    P2P_FAILURE = 12;
    // An unexpected event.
    UNEXPECTED = 13;
    // Connection dropped since the client computer is sleeping.
    CLIENT_SUSPENDED = 14;
    // The plugin fails to initialize as Native Client is disabled.
    NACL_DISABLED = 15;
    // Maximum session duration has been reached.
    MAX_SESSION_LENGTH = 16;
    // Host failed to initialize the session.
    HOST_CONFIGURATION_ERROR = 17;
    // Host failed to initialize the session.
    NACL_PLUGIN_CRASHED = 18;
    // Host security policies do not allow connections from client.
    INVALID_ACCOUNT = 19;
    // Connection fails due to invalid third-party authentication token.
    INVALID_THIRD_PARTY_TOKEN = 20;
  }
  // A connection error reported by the client or host.
  optional ConnectionError connection_error = 11;

  // The time in seconds from the start of a session to a log event.
  optional float session_duration = 12;

  // The following fields are typically associated with
  // CONNECTION_STATISTICS events.

  // The video bandwidth reported by the client, in bytes per second.
  optional float video_bandwidth = 13;

  // The capture latency reported by the client, in milliseconds.
  optional float capture_latency = 14;

  // The max capture latency reported by the client, in milliseconds.
  optional float max_capture_latency = 38;

  // The encode latency reported by the client, in milliseconds.
  optional float encode_latency = 15;

  // The max encode latency reported by the client, in milliseconds.
  optional float max_encode_latency = 39;

  // The decode latency reported by the client, in milliseconds.
  optional float decode_latency = 16;

  // The max decode latency reported by the client, in milliseconds.
  optional float max_decode_latency = 40;

  // The render latency reported by the client, in milliseconds.
  optional float render_latency = 17;

  // The max render latency reported by the client, in milliseconds.
  optional float max_render_latency = 41;

  // The roundtrip latency reported by the client, in milliseconds.
  optional float roundtrip_latency = 18;

  // The max roundtrip latency reported by the client, in milliseconds.
  optional float max_roundtrip_latency = 42;

  // Definition of mode of operation.
  enum Mode {
    // Value returned when the field is not set.
    UNSPECIFIED_MODE = 0;
    // Help/support mode.
    IT2ME = 1;
    // Personal connection.
    ME2ME = 2;
  }
  // The mode in which the client or host is operating.
  optional Mode mode = 19;

  // Signaling strategies available.
  // Next ID to use: 5
  enum SignalStrategyType {
    // Value returned when the field is not set.
    UNSPECIFIED_SIGNALING_STRATEGY_TYPE = 0;
    // XMPP, gTalk.
    XMPP = 1;
    // Web Connection Server, Babel.
    WCS = 2;
    // XMPP, Marmoset.
    LCS = 3;
    // Protobuf, Tachyon.
    FTL = 4;
  }
  // The signal strategy in use.
  optional SignalStrategyType signal_strategy_type = 24;

  // The previous state of the session.  Only used in SESSION_STATE events.
  optional SessionState previous_session_state = 28;

  // This enum identifies how a remote session is being intitiated.
  enum SessionEntryPoint {
    // Value returned when the field is not set.
    UNSPECIFIED_SESSION_ENTRY_POINT = 0;
    // The user initiates the session by clicking on the connect button (or
    // access button for IT2ME).
    CONNECT_BUTTON = 1;
    // The user initiates the connection by clicking on the reconnect button
    // on the Me2Me finished dialog.
    RECONNECT_BUTTON = 2;
    // This session is initiated on behalf on the user to auto-reconnect after
    // a connection drop.
    AUTO_RECONNECT_ON_CONNECTION_DROPPED = 3;
    // A user-initiated connection attempt has just failed with HOST_OFFLINE.
    // The client refreshes the JID of the host and initiates a new connection
    // on behalf of the user.
    AUTO_RECONNECT_ON_HOST_OFFLINE = 4;
  }
  // This field identifies how a remote session is being intitiated.
  optional SessionEntryPoint session_entry_point = 29;

  // The OS on which the host is running.
  optional Os host_os = 32;

  // The version of the OS on which the host is running.
  optional string host_os_version = 33;

  // This enum identifies how a chromoting session is being authenticated.
  enum AuthMethod {
    // Value returned when the field is not set.
    UNSPECIFIED_AUTH_METHOD = 0;
    // A numeric passcode set locally.
    PIN = 1;
    // A IT2ME style auth.
    ACCESS_CODE = 2;
    // Trusted connection without a pin.
    PINLESS = 3;
    // Other security, like a corp auth.
    THIRD_PARTY = 4;
  }
  // This field identifies how a chromoting session is being authenticated.
  optional AuthMethod auth_method = 34;
}