syntax = "proto2";

import "steammessages_base.proto";

option optimize_for = SPEED;
option cc_generic_services = false;

message CMsgClientUDSP2PSessionStarted {
  optional fixed64 steamid_remote = 1;
  optional int32 appid = 2;
}

message CMsgClientUDSP2PSessionEnded {
  optional fixed64 steamid_remote = 1;
  optional int32 appid = 2;
  optional int32 session_length_sec = 3;
  optional int32 session_error = 4;
  optional int32 nattype = 5;
  optional int32 bytes_recv = 6;
  optional int32 bytes_sent = 7;
  optional int32 bytes_sent_relay = 8;
  optional int32 bytes_recv_relay = 9;
  optional int32 time_to_connect_ms = 10;
}

message CMsgClientGetClientDetails {
}

message CMsgClientGetClientDetailsResponse {
  message Game {
    optional uint32 appid = 1;
    optional string extra_info = 2;
    optional uint32 time_running_sec = 3;
  }
  optional uint32 package_version = 1;
  optional string os = 2;
  optional string machine_name = 3;
  optional string ip_public = 4;
  optional string ip_private = 5;
  repeated CMsgClientGetClientDetailsResponse.Game games_running = 6;
  optional uint64 bytes_available = 7;
  optional uint32 protocol_version = 8;
  optional uint32 clientcomm_version = 9;
  repeated uint32 local_users = 10;
}

message CMsgClientGetClientAppList {
  optional bool media = 1;
  optional bool tools = 2;
  optional bool games = 3;
  optional bool only_installed = 4;
  optional bool only_changing = 5;
  optional bool comics = 6;
  optional bool include_client_info = 7;
  repeated uint32 filter_appids = 8;
}

message CMsgClientGetClientAppListResponse {
  message App {
    message DLC {
      optional uint32 appid = 1;
      optional bool installed = 2;
    }
    optional uint32 appid = 1;
    optional string category = 2;
    optional string app_type = 10;
    optional bool favorite = 3;
    optional bool installed = 4;
    optional bool auto_update = 5;
    optional uint64 bytes_downloaded = 6;
    optional uint64 bytes_to_download = 7;
    optional uint32 bytes_download_rate = 8;
    repeated CMsgClientGetClientAppListResponse.App.DLC dlcs = 9;
    optional bool download_paused = 11;
    optional uint32 num_downloading = 12;
    optional bool changing = 14;
    optional bool available_on_platform = 15;
    optional uint64 bytes_staged = 16;
    optional uint64 bytes_to_stage = 17;
    optional uint64 bytes_required = 18;
    optional uint32 source_buildid = 19;
    optional uint32 target_buildid = 20;
    optional uint32 estimated_seconds_remaining = 21;
    optional int32 queue_position = 22;
    optional bool uninstalling = 23;
    optional uint32 rt_time_scheduled = 24;
    optional bool running = 25;
    optional uint32 update_percentage = 26;
  }
  repeated CMsgClientGetClientAppListResponse.App apps = 1;
  optional uint64 bytes_available = 2;
  optional CMsgClientGetClientDetailsResponse client_info = 3;
}

message CMsgClientInstallClientApp {
  optional uint32 appid = 1;
}

message CMsgClientInstallClientAppResponse {
  optional uint32 result = 1;
}

message CMsgClientUninstallClientApp {
  optional uint32 appid = 1;
}

message CMsgClientUninstallClientAppResponse {
  optional uint32 result = 1;
}

message CMsgClientSetClientAppUpdateState {
  optional uint32 appid = 1;
  optional bool update = 2;
}

message CMsgClientSetClientAppUpdateStateResponse {
  optional uint32 result = 1;
}

message CMsgClientLaunchClientApp {
  optional uint32 appid = 1;
  optional uint32 language = 2;
  optional uint32 launch_option_type = 3;
  optional uint32 launch_option = 4;
  optional uint32 launch_source = 5;
  optional string args = 6;
  optional string query_params = 7;
}

message CMsgClientLaunchClientAppResponse {
  optional uint32 result = 1;
}

message CMsgClientEnableOrDisableDownloads {
  optional bool enable = 1;
}

message CMsgClientEnableOrDisableDownloadsResponse {
  optional uint32 result = 1;
}

