syntax = "proto2";

import "steammessages_base.proto";
import "encrypted_app_ticket.proto";

option optimize_for = SPEED;
option cc_generic_services = false;

message CMsgClientRegisterAuthTicketWithCM {
  optional uint32 protocol_version = 1;
  optional bytes ticket = 3;
  optional uint64 client_instance_id = 4;
}

message CMsgClientTicketAuthComplete {
  optional fixed64 steam_id = 1;
  optional fixed64 game_id = 2;
  optional uint32 estate = 3;
  optional uint32 eauth_session_response = 4;
  optional bytes DEPRECATED_ticket = 5;
  optional uint32 ticket_crc = 6;
  optional uint32 ticket_sequence = 7;
  optional fixed64 owner_steam_id = 8;
}

message CMsgClientP2PConnectionInfo {
  optional fixed64 steam_id_dest = 1;
  optional fixed64 steam_id_src = 2;
  optional uint32 app_id = 3;
  optional bytes candidate = 4;
  optional fixed64 legacy_connection_id_src = 5;
  optional bytes rendezvous = 6;
  optional uint32 app_id_secondary = 7;
}

message CMsgClientP2PConnectionFailInfo {
  optional fixed64 steam_id_dest = 1;
  optional fixed64 steam_id_src = 2;
  optional uint32 app_id = 3;
  optional uint32 ep2p_session_error = 4;
  optional fixed64 connection_id_dest = 5;
  optional uint32 close_reason = 7;
  optional string close_message = 8;
}

message CMsgClientNetworkingCertRequest {
  optional bytes key_data = 2;
  optional uint32 app_id = 3;
}

message CMsgClientNetworkingCertReply {
  optional bytes cert = 4;
  optional fixed64 ca_key_id = 5;
  optional bytes ca_signature = 6;
}

message CMsgClientNetworkingMobileCertRequest {
  optional uint32 app_id = 1;
}

message CMsgClientNetworkingMobileCertReply {
  optional string encoded_cert = 1;
}

message CMsgClientGetAppOwnershipTicket {
  optional uint32 app_id = 1;
}

message CMsgClientGetAppOwnershipTicketResponse {
  optional uint32 eresult = 1 [default = 2];
  optional uint32 app_id = 2;
  optional bytes ticket = 3;
}

message CMsgClientSessionToken {
  optional uint64 token = 1;
}

message CMsgClientGameConnectTokens {
  optional uint32 max_tokens_to_keep = 1 [default = 10];
  repeated bytes tokens = 2;
}

message CMsgClientGamesPlayed {
  message ProcessInfo {
    optional uint32 process_id = 1;
    optional uint32 process_id_parent = 2;
    optional bool parent_is_steam = 3;
  }
  message GamePlayed {
    optional uint64 steam_id_gs = 1;
    optional fixed64 game_id = 2;
    optional uint32 deprecated_game_ip_address = 3;
    optional uint32 game_port = 4;
    optional bool is_secure = 5;
    optional bytes token = 6;
    optional string game_extra_info = 7;
    optional bytes game_data_blob = 8;
    optional uint32 process_id = 9;
    optional uint32 streaming_provider_id = 10;
    optional uint32 game_flags = 11;
    optional uint32 owner_id = 12;
    optional string vr_hmd_vendor = 13;
    optional string vr_hmd_model = 14;
    optional uint32 launch_option_type = 15 [default = 0];
    optional int32 primary_controller_type = 16 [default = -1];
    optional string primary_steam_controller_serial = 17 [default = ""];
    optional uint32 total_steam_controller_count = 18 [default = 0];
    optional uint32 total_non_steam_controller_count = 19 [default = 0];
    optional uint64 controller_workshop_file_id = 20 [default = 0];
    optional uint32 launch_source = 21 [default = 0];
    optional uint32 vr_hmd_runtime = 22;
    optional CMsgIPAddress game_ip_address = 23;
    optional uint32 controller_connection_type = 24 [default = 0];
    optional int32 game_os_platform = 25;
    optional uint32 game_build_id = 26;
    optional uint32 compat_tool_id = 27 [default = 0];
    optional string compat_tool_cmd = 28;
    optional uint32 compat_tool_build_id = 29;
    optional string beta_name = 30;
    optional uint32 dlc_context = 31;
    repeated CMsgClientGamesPlayed.ProcessInfo process_id_list = 32;
  }
  repeated CMsgClientGamesPlayed.GamePlayed games_played = 1;
  optional uint32 client_os_type = 2;
  optional uint32 cloud_gaming_platform = 3;
  optional bool recent_reauthentication = 4;
}

message CMsgGSApprove {
  optional fixed64 steam_id = 1;
  optional fixed64 owner_steam_id = 2;
}

message CMsgGSDeny {
  optional fixed64 steam_id = 1;
  optional int32 edeny_reason = 2;
  optional string deny_string = 3;
}

message CMsgGSKick {
  optional fixed64 steam_id = 1;
  optional int32 edeny_reason = 2;
}

message CMsgClientAuthList {
  optional uint32 tokens_left = 1;
  optional uint32 last_request_seq = 2;
  optional uint32 last_request_seq_from_server = 3;
  repeated CMsgAuthTicket tickets = 4;
  repeated uint32 app_ids = 5;
  optional uint32 message_sequence = 6;
  optional bool filtered = 7;
}

message CMsgClientAuthListAck {
  repeated uint32 ticket_crc = 1;
  repeated uint32 app_ids = 2;
  optional uint32 message_sequence = 3;
}

message CMsgGameServerPolicyUpdate {
  optional uint32 app_id = 1;
  optional uint32 app_id_aux = 2;
}

message CMsgClientLicenseList {
  message License {
    optional uint32 package_id = 1;
    optional fixed32 time_created = 2;
    optional fixed32 time_next_process = 3;
    optional int32 minute_limit = 4;
    optional int32 minutes_used = 5;
    optional uint32 payment_method = 6;
    optional uint32 flags = 7;
    optional string purchase_country_code = 8;
    optional uint32 license_type = 9;
    optional int32 territory_code = 10;
    optional int32 change_number = 11;
    optional uint32 owner_id = 12;
    optional uint32 initial_period = 13;
    optional uint32 initial_time_unit = 14;
    optional uint32 renewal_period = 15;
    optional uint32 renewal_time_unit = 16;
    optional uint64 access_token = 17;
    optional uint32 master_package_id = 18;
  }
  optional int32 eresult = 1 [default = 2];
  repeated CMsgClientLicenseList.License licenses = 2;
}

message CMsgClientIsLimitedAccount {
  optional bool bis_limited_account = 1;
  optional bool bis_community_banned = 2;
  optional bool bis_locked_account = 3;
  optional bool bis_limited_account_allowed_to_invite_friends = 4;
}

message CMsgClientRequestedClientStats {
  message StatsToSend {
    optional uint32 client_stat = 1;
    optional uint32 stat_aggregate_method = 2;
  }
  repeated CMsgClientRequestedClientStats.StatsToSend stats_to_send = 1;
}

message CMsgClientStat2 {
  message StatDetail {
    optional uint32 client_stat = 1;
    optional int64 ll_value = 2;
    optional uint32 time_of_day = 3;
    optional uint32 cell_id = 4;
    optional uint32 depot_id = 5;
    optional uint32 app_id = 6;
  }
  repeated CMsgClientStat2.StatDetail stat_detail = 1;
}

message CMsgClientInviteToGame {
  optional fixed64 steam_id_dest = 1;
  optional fixed64 steam_id_src = 2;
  optional string connect_string = 3;
  optional string remote_play = 4;
}

message CMsgClientChatInvite {
  optional fixed64 steam_id_invited = 1;
  optional fixed64 steam_id_chat = 2;
  optional fixed64 steam_id_patron = 3;
  optional int32 chatroom_type = 4;
  optional fixed64 steam_id_friend_chat = 5;
  optional string chat_name = 6;
  optional fixed64 game_id = 7;
}

message CMsgClientConnectionStats {
  message Stats_Logon {
    optional int32 connect_attempts = 1;
    optional int32 connect_successes = 2;
    optional int32 connect_failures = 3;
    optional int32 connections_dropped = 4;
    optional uint32 seconds_running = 5;
    optional uint32 msec_tologonthistime = 6;
    optional uint32 count_bad_cms = 7;
    optional bool no_udp_connectivity = 8;
    optional bool no_tcp_connectivity = 9;
    optional bool no_websocket_443_connectivity = 10;
    optional bool no_websocket_non_443_connectivity = 11;
  }
  message Stats_UDP {
    optional uint64 pkts_sent = 1;
    optional uint64 bytes_sent = 2;
    optional uint64 pkts_recv = 3;
    optional uint64 pkts_processed = 4;
    optional uint64 bytes_recv = 5;
  }
  message Stats_VConn {
    optional uint32 connections_udp = 1;
    optional uint32 connections_tcp = 2;
    optional CMsgClientConnectionStats.Stats_UDP stats_udp = 3;
    optional uint64 pkts_abandoned = 4;
    optional uint64 conn_req_received = 5;
    optional uint64 pkts_resent = 6;
    optional uint64 msgs_sent = 7;
    optional uint64 msgs_sent_failed = 8;
    optional uint64 msgs_recv = 9;
    optional uint64 datagrams_sent = 10;
    optional uint64 datagrams_recv = 11;
    optional uint64 bad_pkts_recv = 12;
    optional uint64 unknown_conn_pkts_recv = 13;
    optional uint64 missed_pkts_recv = 14;
    optional uint64 dup_pkts_recv = 15;
    optional uint64 failed_connect_challenges = 16;
    optional uint32 micro_sec_avg_latency = 17;
    optional uint32 micro_sec_min_latency = 18;
    optional uint32 micro_sec_max_latency = 19;
  }
  optional CMsgClientConnectionStats.Stats_Logon stats_logon = 1;
  optional CMsgClientConnectionStats.Stats_VConn stats_vconn = 2;
}

message CMsgClientServersAvailable {
  message Server_Types_Available {
    optional uint32 server = 1;
    optional bool changed = 2;
  }
  repeated CMsgClientServersAvailable.Server_Types_Available server_types_available = 1;
  optional uint32 server_type_for_auth_services = 2;
}

message CMsgClientReportOverlayDetourFailure {
  repeated string failure_strings = 1;
}

message CMsgClientRequestEncryptedAppTicket {
  optional uint32 app_id = 1;
  optional bytes userdata = 2;
}

message CMsgClientRequestEncryptedAppTicketResponse {
  optional uint32 app_id = 1;
  optional int32 eresult = 2 [default = 2];
  optional EncryptedAppTicket encrypted_app_ticket = 3;
}

message CMsgClientWalletInfoUpdate {
  optional bool has_wallet = 1;
  optional int32 balance = 2;
  optional int32 currency = 3;
  optional int32 balance_delayed = 4;
  optional int64 balance64 = 5;
  optional int64 balance64_delayed = 6;
  optional int32 realm = 7;
}

message CMsgClientAMGetClanOfficers {
  optional fixed64 steamid_clan = 1;
}

message CMsgClientAMGetClanOfficersResponse {
  optional int32 eresult = 1 [default = 2];
  optional fixed64 steamid_clan = 2;
  optional int32 officer_count = 3;
}

message CMsgClientAMGetPersonaNameHistory {
  message IdInstance {
    optional fixed64 steamid = 1;
  }
  optional int32 id_count = 1;
  repeated CMsgClientAMGetPersonaNameHistory.IdInstance Ids = 2;
}

message CMsgClientAMGetPersonaNameHistoryResponse {
  message NameTableInstance {
    message NameInstance {
      optional fixed32 name_since = 1;
      optional string name = 2;
    }
    optional int32 eresult = 1 [default = 2];
    optional fixed64 steamid = 2;
    repeated CMsgClientAMGetPersonaNameHistoryResponse.NameTableInstance.NameInstance names = 3;
  }
  repeated CMsgClientAMGetPersonaNameHistoryResponse.NameTableInstance responses = 2;
}

message CMsgClientDeregisterWithServer {
  optional uint32 eservertype = 1;
  optional uint32 app_id = 2;
}

message CMsgClientClanState {
  message NameInfo {
    optional string clan_name = 1;
    optional bytes sha_avatar = 2;
  }
  message UserCounts {
    optional uint32 members = 1;
    optional uint32 online = 2;
    optional uint32 chatting = 3;
    optional uint32 in_game = 4;
    optional uint32 chat_room_members = 5;
  }
  message Event {
    optional fixed64 gid = 1;
    optional uint32 event_time = 2;
    optional string headline = 3;
    optional fixed64 game_id = 4;
    optional bool just_posted = 5;
  }
  optional fixed64 steamid_clan = 1;
  optional uint32 clan_account_flags = 3;
  optional CMsgClientClanState.NameInfo name_info = 4;
  optional CMsgClientClanState.UserCounts user_counts = 5;
  repeated CMsgClientClanState.Event events = 6;
  repeated CMsgClientClanState.Event announcements = 7;
  optional bool chat_room_private = 8;
}

