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;
}
