diff --git a/Makefile b/Makefile index cb83d4f..067326e 100644 --- a/Makefile +++ b/Makefile @@ -53,14 +53,14 @@ upload: dist register twine upload -r pypi dist/* pb_fetch: - wget -nv --show-progress -N -P ./steam/protobufs/ -i protobuf_list.txt + wget -nv --show-progress -N -P ./protobufs/ -i protobuf_list.txt pb_compile: - for filepath in `ls ./steam/protobufs/*.proto`; do \ - protoc --python_out ./steam/protobufs/ --proto_path=/usr/include --proto_path=./steam/protobufs "$$filepath"; \ + for filepath in `ls ./protobufs/*.proto`; do \ + protoc --python_out ./steam/protobufs/ --proto_path=/usr/include --proto_path=./protobufs "$$filepath"; \ done; pb_clear: - rm -f ./stema/protobufs/*.proto + rm -f ./protobufs/*.proto pb_update: pb_fetch pb_compile diff --git a/protobufs/encrypted_app_ticket.proto b/protobufs/encrypted_app_ticket.proto new file mode 100644 index 0000000..8ece6f8 --- /dev/null +++ b/protobufs/encrypted_app_ticket.proto @@ -0,0 +1,11 @@ +option optimize_for = SPEED; +option cc_generic_services = false; + +message EncryptedAppTicket { + optional uint32 ticket_version_no = 1; + optional uint32 crc_encryptedticket = 2; + optional uint32 cb_encrypteduserdata = 3; + optional uint32 cb_encrypted_appownershipticket = 4; + optional bytes encrypted_ticket = 5; +} + diff --git a/protobufs/gc.proto b/protobufs/gc.proto new file mode 100644 index 0000000..1bd9723 --- /dev/null +++ b/protobufs/gc.proto @@ -0,0 +1,20 @@ +enum GCProtoBufMsgSrc { + GCProtoBufMsgSrc_Unspecified = 0; + GCProtoBufMsgSrc_FromSystem = 1; + GCProtoBufMsgSrc_FromSteamID = 2; + GCProtoBufMsgSrc_FromGC = 3; + GCProtoBufMsgSrc_ReplySystem = 4; +} + +message CMsgProtoBufHeader { + optional fixed64 client_steam_id = 1; + optional int32 client_session_id = 2; + optional uint32 source_app_id = 3; + optional fixed64 job_id_source = 10 [default = 18446744073709551615]; + optional fixed64 job_id_target = 11 [default = 18446744073709551615]; + optional string target_job_name = 12; + optional int32 eresult = 13 [default = 2]; + optional string error_message = 14; + optional .GCProtoBufMsgSrc gc_msg_src = 200 [default = GCProtoBufMsgSrc_Unspecified]; + optional uint32 gc_dir_index_source = 201; +} diff --git a/protobufs/steammessages_base.proto b/protobufs/steammessages_base.proto new file mode 100644 index 0000000..f76d203 --- /dev/null +++ b/protobufs/steammessages_base.proto @@ -0,0 +1,84 @@ +import "google/protobuf/descriptor.proto"; + +option optimize_for = SPEED; +option cc_generic_services = false; + +extend .google.protobuf.MessageOptions { + optional int32 msgpool_soft_limit = 50000 [default = 32]; + optional int32 msgpool_hard_limit = 50001 [default = 384]; +} + +message CMsgProtoBufHeader { + optional fixed64 steamid = 1; + optional int32 client_sessionid = 2; + optional uint32 routing_appid = 3; + optional fixed64 jobid_source = 10 [default = 18446744073709551615]; + optional fixed64 jobid_target = 11 [default = 18446744073709551615]; + optional string target_job_name = 12; + optional int32 seq_num = 24; + optional int32 eresult = 13 [default = 2]; + optional string error_message = 14; + optional uint32 ip = 15; + optional uint32 auth_account_flags = 16; + optional uint32 token_source = 22; + optional bool admin_spoofing_user = 23; + optional int32 transport_error = 17 [default = 1]; + optional uint64 messageid = 18 [default = 18446744073709551615]; + optional uint32 publisher_group_id = 19; + optional uint32 sysid = 20; + optional uint64 trace_tag = 21; + optional uint32 webapi_key_id = 25; +} + +message CMsgMulti { + optional uint32 size_unzipped = 1; + optional bytes message_body = 2; +} + +message CMsgProtobufWrapped { + optional bytes message_body = 1; +} + +message CMsgAuthTicket { + optional uint32 estate = 1; + optional uint32 eresult = 2 [default = 2]; + optional fixed64 steamid = 3; + optional fixed64 gameid = 4; + optional uint32 h_steam_pipe = 5; + optional uint32 ticket_crc = 6; + optional bytes ticket = 7; +} + +message CCDDBAppDetailCommon { + optional uint32 appid = 1; + optional string name = 2; + optional string icon = 3; + optional string logo = 4; + optional string logo_small = 5; + optional bool tool = 6; + optional bool demo = 7; + optional bool media = 8; + optional bool community_visible_stats = 9; + optional string friendly_name = 10; + optional string propagation = 11; + optional bool has_adult_content = 12; +} + +message CMsgAppRights { + optional bool edit_info = 1; + optional bool publish = 2; + optional bool view_error_data = 3; + optional bool download = 4; + optional bool upload_cdkeys = 5; + optional bool generate_cdkeys = 6; + optional bool view_financials = 7; + optional bool manage_ceg = 8; + optional bool manage_signing = 9; + optional bool manage_cdkeys = 10; + optional bool edit_marketing = 11; + optional bool economy_support = 12; + optional bool economy_support_supervisor = 13; + optional bool manage_pricing = 14; + optional bool broadcast_live = 15; +} + diff --git a/protobufs/steammessages_clientserver.proto b/protobufs/steammessages_clientserver.proto new file mode 100644 index 0000000..21c4c67 --- /dev/null +++ b/protobufs/steammessages_clientserver.proto @@ -0,0 +1,1404 @@ +import "steammessages_base.proto"; +import "encrypted_app_ticket.proto"; + +option optimize_for = SPEED; +option cc_generic_services = false; + +message CMsgClientHeartBeat { +} + +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 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 CMsgClientLogon { + optional uint32 protocol_version = 1; + optional uint32 obfustucated_private_ip = 2; + optional uint32 cell_id = 3; + optional uint32 last_session_id = 4; + optional uint32 client_package_version = 5; + optional string client_language = 6; + optional uint32 client_os_type = 7; + optional bool should_remember_password = 8 [default = false]; + optional string wine_version = 9; + optional uint32 ping_ms_from_cell_search = 10; + optional uint32 public_ip = 20; + optional uint32 qos_level = 21; + optional fixed64 client_supplied_steam_id = 22; + optional bytes machine_id = 30; + optional uint32 launcher_type = 31 [default = 0]; + optional uint32 ui_mode = 32 [default = 0]; + optional bytes steam2_auth_ticket = 41; + optional string email_address = 42; + optional fixed32 rtime32_account_creation = 43; + optional string account_name = 50; + optional string password = 51; + optional string game_server_token = 52; + optional string login_key = 60; + optional bool was_converted_deprecated_msg = 70 [default = false]; + optional string anon_user_target_account_name = 80; + optional fixed64 resolved_user_steam_id = 81; + optional int32 eresult_sentryfile = 82; + optional bytes sha_sentryfile = 83; + optional string auth_code = 84; + optional int32 otp_type = 85; + optional uint32 otp_value = 86; + optional string otp_identifier = 87; + optional bool steam2_ticket_request = 88; + optional bytes sony_psn_ticket = 90; + optional string sony_psn_service_id = 91; + optional bool create_new_psn_linked_account_if_needed = 92 [default = false]; + optional string sony_psn_name = 93; + optional int32 game_server_app_id = 94; + optional bool steamguard_dont_remember_computer = 95; + optional string machine_name = 96; + optional string machine_name_userchosen = 97; + optional string country_override = 98; + optional bool is_steam_box = 99; + optional uint64 client_instance_id = 100; + optional string two_factor_code = 101; + optional bool supports_rate_limit_response = 102; +} + +message CMsgClientLogonResponse { + optional int32 eresult = 1 [default = 2]; + optional int32 out_of_game_heartbeat_seconds = 2; + optional int32 in_game_heartbeat_seconds = 3; + optional uint32 public_ip = 4; + optional fixed32 rtime32_server_time = 5; + optional uint32 account_flags = 6; + optional uint32 cell_id = 7; + optional string email_domain = 8; + optional bytes steam2_ticket = 9; + optional int32 eresult_extended = 10; + optional string webapi_authenticate_user_nonce = 11; + optional uint32 cell_id_ping_threshold = 12; + optional bool use_pics = 13; + optional string vanity_url = 14; + optional fixed64 client_supplied_steamid = 20; + optional string ip_country_code = 21; + optional bytes parental_settings = 22; + optional bytes parental_setting_signature = 23; + optional int32 count_loginfailures_to_migrate = 24; + optional int32 count_disconnects_to_migrate = 25; + optional int32 ogs_data_report_time_window = 26; + optional uint64 client_instance_id = 27; +} + +message CMsgClientRequestWebAPIAuthenticateUserNonce { +} + +message CMsgClientRequestWebAPIAuthenticateUserNonceResponse { + optional int32 eresult = 1 [default = 2]; + optional string webapi_authenticate_user_nonce = 11; +} + +message CMsgClientLogOff { +} + +message CMsgClientLoggedOff { + optional int32 eresult = 1 [default = 2]; +} + +message CMsgClientCMList { + repeated uint32 cm_addresses = 1; + repeated uint32 cm_ports = 2; +} + +message CMsgClientP2PConnectionInfo { + optional fixed64 steam_id_dest = 1; + optional fixed64 steam_id_src = 2; + optional uint32 app_id = 3; + optional bytes candidate = 4; +} + +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; +} + +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 CMsgGSServerType { + optional uint32 app_id_served = 1; + optional uint32 flags = 2; + optional uint32 game_ip_address = 3; + optional uint32 game_port = 4; + optional string game_dir = 5; + optional string game_version = 6; + optional uint32 game_query_port = 7; +} + +message CMsgGSStatusReply { + optional bool is_secure = 1; +} + +message CMsgGSPlayerList { + message Player { + optional uint64 steam_id = 1; + optional uint32 public_ip = 2; + optional bytes token = 3; + } + + repeated .CMsgGSPlayerList.Player players = 1; +} + +message CMsgGSUserPlaying { + optional fixed64 steam_id = 1; + optional uint32 public_ip = 2; + optional bytes token = 3; +} + +message CMsgGSDisconnectNotice { + optional fixed64 steam_id = 1; +} + +message CMsgClientGamesPlayed { + message GamePlayed { + optional uint64 steam_id_gs = 1; + optional fixed64 game_id = 2; + optional uint32 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; + } + + repeated .CMsgClientGamesPlayed.GamePlayed games_played = 1; + optional uint32 client_os_type = 2; +} + +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; +} + +message CMsgClientAuthListAck { + repeated uint32 ticket_crc = 1; + repeated uint32 app_ids = 2; + optional uint32 message_sequence = 3; +} + +message CMsgClientFriendsList { + message Friend { + optional fixed64 ulfriendid = 1; + optional uint32 efriendrelationship = 2; + } + + optional bool bincremental = 1; + repeated .CMsgClientFriendsList.Friend friends = 2; + optional uint32 max_friend_count = 3; + optional uint32 active_friend_count = 4; + optional bool friends_limit_hit = 5; +} + +message CMsgClientFriendsGroupsList { + message FriendGroup { + optional int32 nGroupID = 1; + optional string strGroupName = 2; + } + + message FriendGroupsMembership { + optional fixed64 ulSteamID = 1; + optional int32 nGroupID = 2; + } + + optional bool bremoval = 1; + optional bool bincremental = 2; + repeated .CMsgClientFriendsGroupsList.FriendGroup friendGroups = 3; + repeated .CMsgClientFriendsGroupsList.FriendGroupsMembership memberships = 4; +} + +message CMsgClientPlayerNicknameList { + message PlayerNickname { + optional fixed64 steamid = 1; + optional string nickname = 3; + } + + optional bool removal = 1; + optional bool incremental = 2; + repeated .CMsgClientPlayerNicknameList.PlayerNickname nicknames = 3; +} + +message CMsgClientSetPlayerNickname { + optional fixed64 steamid = 1; + optional string nickname = 2; +} + +message CMsgClientSetPlayerNicknameResponse { + optional uint32 eresult = 1; +} + +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 int32 eresult = 1 [default = 2]; + repeated .CMsgClientLicenseList.License licenses = 2; +} + +message CMsgClientLBSSetScore { + optional uint32 app_id = 1; + optional int32 leaderboard_id = 2; + optional int32 score = 3; + optional bytes details = 4; + optional int32 upload_score_method = 5; +} + +message CMsgClientLBSSetScoreResponse { + optional int32 eresult = 1 [default = 2]; + optional int32 leaderboard_entry_count = 2; + optional bool score_changed = 3; + optional int32 global_rank_previous = 4; + optional int32 global_rank_new = 5; +} + +message CMsgClientLBSSetUGC { + optional uint32 app_id = 1; + optional int32 leaderboard_id = 2; + optional fixed64 ugc_id = 3; +} + +message CMsgClientLBSSetUGCResponse { + optional int32 eresult = 1 [default = 2]; +} + +message CMsgClientLBSFindOrCreateLB { + optional uint32 app_id = 1; + optional int32 leaderboard_sort_method = 2; + optional int32 leaderboard_display_type = 3; + optional bool create_if_not_found = 4; + optional string leaderboard_name = 5; +} + +message CMsgClientLBSFindOrCreateLBResponse { + optional int32 eresult = 1 [default = 2]; + optional int32 leaderboard_id = 2; + optional int32 leaderboard_entry_count = 3; + optional int32 leaderboard_sort_method = 4 [default = 0]; + optional int32 leaderboard_display_type = 5 [default = 0]; + optional string leaderboard_name = 6; +} + +message CMsgClientLBSGetLBEntries { + optional int32 app_id = 1; + optional int32 leaderboard_id = 2; + optional int32 range_start = 3; + optional int32 range_end = 4; + optional int32 leaderboard_data_request = 5; + repeated fixed64 steamids = 6; +} + +message CMsgClientLBSGetLBEntriesResponse { + message Entry { + optional fixed64 steam_id_user = 1; + optional int32 global_rank = 2; + optional int32 score = 3; + optional bytes details = 4; + optional fixed64 ugc_id = 5; + } + + optional int32 eresult = 1 [default = 2]; + optional int32 leaderboard_entry_count = 2; + repeated .CMsgClientLBSGetLBEntriesResponse.Entry entries = 3; +} + +message CMsgClientAccountInfo { + optional string persona_name = 1; + optional string ip_country = 2; + optional int32 count_authed_computers = 5; + optional uint32 account_flags = 7; + optional uint64 facebook_id = 8; + optional string facebook_name = 9; + optional bool steamguard_notify_newmachines = 14; + optional string steamguard_machine_name_user_chosen = 15; +} + +message CMsgClientAppMinutesPlayedData { + message AppMinutesPlayedData { + optional uint32 app_id = 1; + optional int32 forever = 2; + optional int32 last_two_weeks = 3; + } + + repeated .CMsgClientAppMinutesPlayedData.AppMinutesPlayedData minutes_played = 1; +} + +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 CMsgClientRequestFriendData { + optional uint32 persona_state_requested = 1; + repeated fixed64 friends = 2; +} + +message CMsgClientChangeStatus { + optional uint32 persona_state = 1; + optional string player_name = 2; + optional bool is_auto_generated_name = 3; + optional bool high_priority = 4; + optional bool persona_set_by_user = 5; +} + +message CMsgPersonaChangeResponse { + optional uint32 result = 1; + optional string player_name = 2; +} + +message CMsgClientPersonaState { + message Friend { + optional fixed64 friendid = 1; + optional uint32 persona_state = 2; + optional uint32 game_played_app_id = 3; + optional uint32 game_server_ip = 4; + optional uint32 game_server_port = 5; + optional uint32 persona_state_flags = 6; + optional uint32 online_session_instances = 7; + optional uint32 published_instance_id = 8; + optional bool persona_set_by_user = 10; + optional string player_name = 15; + optional uint32 query_port = 20; + optional fixed64 steamid_source = 25; + optional bytes avatar_hash = 31; + optional uint32 last_logoff = 45; + optional uint32 last_logon = 46; + optional uint32 clan_rank = 50; + optional string game_name = 55; + optional fixed64 gameid = 56; + optional bytes game_data_blob = 60; + optional string clan_tag = 65; + optional string facebook_name = 66; + optional uint64 facebook_id = 67; + } + + optional uint32 status_flags = 1; + repeated .CMsgClientPersonaState.Friend friends = 2; +} + +message CMsgClientFriendProfileInfo { + optional fixed64 steamid_friend = 1; +} + +message CMsgClientFriendProfileInfoResponse { + optional int32 eresult = 1 [default = 2]; + optional fixed64 steamid_friend = 2; + optional uint32 time_created = 3; + optional string real_name = 4; + optional string city_name = 5; + optional string state_name = 6; + optional string country_name = 7; + optional string headline = 8; + optional string summary = 9; +} + +message CMsgClientServerList { + message Server { + optional uint32 server_type = 1; + optional uint32 server_ip = 2; + optional uint32 server_port = 3; + } + + repeated .CMsgClientServerList.Server servers = 1; +} + +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 CMsgClientMMSCreateLobby { + optional uint32 app_id = 1; + optional int32 max_members = 2; + optional int32 lobby_type = 3; + optional int32 lobby_flags = 4; + optional uint32 cell_id = 5; + optional uint32 public_ip = 6; + optional bytes metadata = 7; + optional string persona_name_owner = 8; +} + +message CMsgClientMMSCreateLobbyResponse { + optional uint32 app_id = 1; + optional fixed64 steam_id_lobby = 2; + optional int32 eresult = 3 [default = 2]; +} + +message CMsgClientMMSJoinLobby { + optional uint32 app_id = 1; + optional fixed64 steam_id_lobby = 2; + optional string persona_name = 3; +} + +message CMsgClientMMSJoinLobbyResponse { + message Member { + optional fixed64 steam_id = 1; + optional string persona_name = 2; + optional bytes metadata = 3; + } + + optional uint32 app_id = 1; + optional fixed64 steam_id_lobby = 2; + optional int32 chat_room_enter_response = 3; + optional int32 max_members = 4; + optional int32 lobby_type = 5; + optional int32 lobby_flags = 6; + optional fixed64 steam_id_owner = 7; + optional bytes metadata = 8; + repeated .CMsgClientMMSJoinLobbyResponse.Member members = 9; +} + +message CMsgClientMMSLeaveLobby { + optional uint32 app_id = 1; + optional fixed64 steam_id_lobby = 2; +} + +message CMsgClientMMSLeaveLobbyResponse { + optional uint32 app_id = 1; + optional fixed64 steam_id_lobby = 2; + optional int32 eresult = 3 [default = 2]; +} + +message CMsgClientMMSGetLobbyList { + message Filter { + optional string key = 1; + optional string value = 2; + optional int32 comparision = 3; + optional int32 filter_type = 4; + } + + optional uint32 app_id = 1; + optional int32 num_lobbies_requested = 3; + optional uint32 cell_id = 4; + optional uint32 public_ip = 5; + repeated .CMsgClientMMSGetLobbyList.Filter filters = 6; +} + +message CMsgClientMMSGetLobbyListResponse { + message Lobby { + optional fixed64 steam_id = 1; + optional int32 max_members = 2; + optional int32 lobby_type = 3; + optional int32 lobby_flags = 4; + optional bytes metadata = 5; + optional int32 num_members = 6; + optional float distance = 7; + optional int64 weight = 8; + } + + optional uint32 app_id = 1; + optional int32 eresult = 3 [default = 2]; + repeated .CMsgClientMMSGetLobbyListResponse.Lobby lobbies = 4; +} + +message CMsgClientMMSSetLobbyData { + optional uint32 app_id = 1; + optional fixed64 steam_id_lobby = 2; + optional fixed64 steam_id_member = 3; + optional int32 max_members = 4; + optional int32 lobby_type = 5; + optional int32 lobby_flags = 6; + optional bytes metadata = 7; +} + +message CMsgClientMMSSetLobbyDataResponse { + optional uint32 app_id = 1; + optional fixed64 steam_id_lobby = 2; + optional int32 eresult = 3 [default = 2]; +} + +message CMsgClientMMSGetLobbyData { + optional uint32 app_id = 1; + optional fixed64 steam_id_lobby = 2; +} + +message CMsgClientMMSLobbyData { + message Member { + optional fixed64 steam_id = 1; + optional string persona_name = 2; + optional bytes metadata = 3; + } + + optional uint32 app_id = 1; + optional fixed64 steam_id_lobby = 2; + optional int32 num_members = 3; + optional int32 max_members = 4; + optional int32 lobby_type = 5; + optional int32 lobby_flags = 6; + optional fixed64 steam_id_owner = 7; + optional bytes metadata = 8; + repeated .CMsgClientMMSLobbyData.Member members = 9; + optional uint32 lobby_cellid = 10; +} + +message CMsgClientMMSSendLobbyChatMsg { + optional uint32 app_id = 1; + optional fixed64 steam_id_lobby = 2; + optional fixed64 steam_id_target = 3; + optional bytes lobby_message = 4; +} + +message CMsgClientMMSLobbyChatMsg { + optional uint32 app_id = 1; + optional fixed64 steam_id_lobby = 2; + optional fixed64 steam_id_sender = 3; + optional bytes lobby_message = 4; +} + +message CMsgClientMMSSetLobbyOwner { + optional uint32 app_id = 1; + optional fixed64 steam_id_lobby = 2; + optional fixed64 steam_id_new_owner = 3; +} + +message CMsgClientMMSSetLobbyOwnerResponse { + optional uint32 app_id = 1; + optional fixed64 steam_id_lobby = 2; + optional int32 eresult = 3 [default = 2]; +} + +message CMsgClientMMSSetLobbyLinked { + optional uint32 app_id = 1; + optional fixed64 steam_id_lobby = 2; + optional fixed64 steam_id_lobby2 = 3; +} + +message CMsgClientMMSSetLobbyGameServer { + optional uint32 app_id = 1; + optional fixed64 steam_id_lobby = 2; + optional uint32 game_server_ip = 3; + optional uint32 game_server_port = 4; + optional fixed64 game_server_steam_id = 5; +} + +message CMsgClientMMSLobbyGameServerSet { + optional uint32 app_id = 1; + optional fixed64 steam_id_lobby = 2; + optional uint32 game_server_ip = 3; + optional uint32 game_server_port = 4; + optional fixed64 game_server_steam_id = 5; +} + +message CMsgClientMMSUserJoinedLobby { + optional uint32 app_id = 1; + optional fixed64 steam_id_lobby = 2; + optional fixed64 steam_id_user = 3; + optional string persona_name = 4; +} + +message CMsgClientMMSUserLeftLobby { + optional uint32 app_id = 1; + optional fixed64 steam_id_lobby = 2; + optional fixed64 steam_id_user = 3; + optional string persona_name = 4; +} + +message CMsgClientMMSInviteToLobby { + optional uint32 app_id = 1; + optional fixed64 steam_id_lobby = 2; + optional fixed64 steam_id_user_invited = 3; +} + +message CMsgClientUDSInviteToGame { + optional fixed64 steam_id_dest = 1; + optional fixed64 steam_id_src = 2; + optional string connect_string = 3; +} + +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; + } + + 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 uint32 mem_pool_msg_in_use = 20; + } + + 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 CMsgClientGetUserStats { + optional fixed64 game_id = 1; + optional uint32 crc_stats = 2; + optional int32 schema_local_version = 3; + optional fixed64 steam_id_for_user = 4; +} + +message CMsgClientGetUserStatsResponse { + message Stats { + optional uint32 stat_id = 1; + optional uint32 stat_value = 2; + } + + message Achievement_Blocks { + optional uint32 achievement_id = 1; + repeated fixed32 unlock_time = 2; + } + + optional fixed64 game_id = 1; + optional int32 eresult = 2 [default = 2]; + optional uint32 crc_stats = 3; + optional bytes schema = 4; + repeated .CMsgClientGetUserStatsResponse.Stats stats = 5; + repeated .CMsgClientGetUserStatsResponse.Achievement_Blocks achievement_blocks = 6; +} + +message CMsgClientStoreUserStatsResponse { + message Stats_Failed_Validation { + optional uint32 stat_id = 1; + optional uint32 reverted_stat_value = 2; + } + + optional fixed64 game_id = 1; + optional int32 eresult = 2 [default = 2]; + optional uint32 crc_stats = 3; + repeated .CMsgClientStoreUserStatsResponse.Stats_Failed_Validation stats_failed_validation = 4; + optional bool stats_out_of_date = 5; +} + +message CMsgClientStoreUserStats2 { + message Stats { + optional uint32 stat_id = 1; + optional uint32 stat_value = 2; + } + + optional fixed64 game_id = 1; + optional fixed64 settor_steam_id = 2; + optional fixed64 settee_steam_id = 3; + optional uint32 crc_stats = 4; + optional bool explicit_reset = 5; + repeated .CMsgClientStoreUserStats2.Stats stats = 6; +} + +message CMsgClientStatsUpdated { + message Updated_Stats { + optional uint32 stat_id = 1; + optional uint32 stat_value = 2; + } + + optional fixed64 steam_id = 1; + optional fixed64 game_id = 2; + optional uint32 crc_stats = 3; + repeated .CMsgClientStatsUpdated.Updated_Stats updated_stats = 4; +} + +message CMsgClientStoreUserStats { + message Stats_To_Store { + optional uint32 stat_id = 1; + optional uint32 stat_value = 2; + } + + optional fixed64 game_id = 1; + optional bool explicit_reset = 2; + repeated .CMsgClientStoreUserStats.Stats_To_Store stats_to_store = 3; +} + +message CMsgClientGetClientDetails { +} + +message CMsgClientReportOverlayDetourFailure { + repeated string failure_strings = 1; +} + +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 uint32 protocol_version = 8; + optional string os = 2; + optional string machine_name = 3; + optional string ip_public = 4; + optional string ip_private = 5; + optional uint64 bytes_available = 7; + repeated .CMsgClientGetClientDetailsResponse.Game games_running = 6; +} + +message CMsgClientGetClientAppList { + optional bool media = 1; + optional bool tools = 2; + optional bool games = 3; + optional bool only_installed = 4; + optional bool only_changing = 5; +} + +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_needed = 7; + optional uint32 bytes_download_rate = 8; + optional bool download_paused = 11; + optional uint32 num_downloading = 12; + optional uint32 num_paused = 13; + optional bool changing = 14; + optional bool available_on_platform = 15; + repeated .CMsgClientGetClientAppListResponse.App.DLC dlcs = 9; + } + + repeated .CMsgClientGetClientAppListResponse.App apps = 1; + optional uint64 bytes_available = 2; +} + +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 CMsgClientUFSUploadFileRequest { + optional uint32 app_id = 1; + optional uint32 file_size = 2; + optional uint32 raw_file_size = 3; + optional bytes sha_file = 4; + optional uint64 time_stamp = 5; + optional string file_name = 6; + optional uint32 platforms_to_sync_deprecated = 7; + optional uint32 platforms_to_sync = 8 [default = 4294967295]; + optional uint32 cell_id = 9; + optional bool can_encrypt = 10; +} + +message CMsgClientUFSUploadFileResponse { + optional int32 eresult = 1 [default = 2]; + optional bytes sha_file = 2; + optional bool use_http = 3; + optional string http_host = 4; + optional string http_url = 5; + optional bytes kv_headers = 6; + optional bool use_https = 7; + optional bool encrypt_file = 8; +} + +message CMsgClientUFSUploadCommit { + message File { + optional int32 eresult = 1 [default = 2]; + optional uint32 app_id = 2; + optional bytes sha_file = 3; + optional uint32 cub_file = 4; + optional string file_name = 5; + } + + repeated .CMsgClientUFSUploadCommit.File files = 1; +} + +message CMsgClientUFSUploadCommitResponse { + message File { + optional int32 eresult = 1 [default = 2]; + optional uint32 app_id = 2; + optional bytes sha_file = 3; + } + + repeated .CMsgClientUFSUploadCommitResponse.File files = 1; +} + +message CMsgClientUFSFileChunk { + optional bytes sha_file = 1; + optional uint32 file_start = 2; + optional bytes data = 3; +} + +message CMsgClientUFSTransferHeartbeat { +} + +message CMsgClientUFSUploadFileFinished { + optional int32 eresult = 1 [default = 2]; + optional bytes sha_file = 2; +} + +message CMsgClientUFSDeleteFileRequest { + optional uint32 app_id = 1; + optional string file_name = 2; + optional bool is_explicit_delete = 3; +} + +message CMsgClientUFSDeleteFileResponse { + optional int32 eresult = 1 [default = 2]; + optional string file_name = 2; +} + +message CMsgClientUFSGetFileListForApp { + repeated uint32 apps_to_query = 1; + optional bool send_path_prefixes = 2; +} + +message CMsgClientUFSGetFileListForAppResponse { + option (msgpool_soft_limit) = 8; + option (msgpool_hard_limit) = 16; + message File { + optional uint32 app_id = 1; + optional string file_name = 2; + optional bytes sha_file = 3; + optional uint64 time_stamp = 4; + optional uint32 raw_file_size = 5; + optional bool is_explicit_delete = 6; + optional uint32 platforms_to_sync = 7; + optional uint32 path_prefix_index = 8; + } + + repeated .CMsgClientUFSGetFileListForAppResponse.File files = 1; + repeated string path_prefixes = 2; +} + +message CMsgClientUFSDownloadRequest { + optional uint32 app_id = 1; + optional string file_name = 2; + optional bool can_handle_http = 3; +} + +message CMsgClientUFSDownloadResponse { + optional int32 eresult = 1 [default = 2]; + optional uint32 app_id = 2; + optional uint32 file_size = 3; + optional uint32 raw_file_size = 4; + optional bytes sha_file = 5; + optional uint64 time_stamp = 6; + optional bool is_explicit_delete = 7; + optional bool use_http = 8; + optional string http_host = 9; + optional string http_url = 10; + optional bytes kv_headers = 11; + optional bool use_https = 12; + optional bool encrypted = 13; +} + +message CMsgClientUFSLoginRequest { + optional uint32 protocol_version = 1; + optional uint64 am_session_token = 2; + repeated uint32 apps = 3; +} + +message CMsgClientUFSLoginResponse { + optional int32 eresult = 1 [default = 2]; +} + +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; +} + +message CMsgClientAppInfoUpdate { + optional uint32 last_changenumber = 1; + optional bool send_changelist = 2; +} + +message CMsgClientAppInfoChanges { + optional uint32 current_change_number = 1; + optional bool force_full_update = 2; + repeated uint32 appIDs = 3; +} + +message CMsgClientAppInfoRequest { + message App { + optional uint32 app_id = 1; + optional uint32 section_flags = 2; + repeated uint32 section_CRC = 3; + } + + repeated .CMsgClientAppInfoRequest.App apps = 1; + optional bool supports_batches = 2 [default = false]; +} + +message CMsgClientAppInfoResponse { + option (msgpool_soft_limit) = 0; + option (msgpool_hard_limit) = 0; + message App { + message Section { + optional uint32 section_id = 1; + optional bytes section_kv = 2; + } + + optional uint32 app_id = 1; + optional uint32 change_number = 2; + repeated .CMsgClientAppInfoResponse.App.Section sections = 3; + } + + repeated .CMsgClientAppInfoResponse.App apps = 1; + repeated uint32 apps_unknown = 2; + optional uint32 apps_pending = 3; +} + +message CMsgClientPackageInfoRequest { + repeated uint32 package_ids = 1; + optional bool meta_data_only = 2; +} + +message CMsgClientPackageInfoResponse { + message Package { + optional uint32 package_id = 1; + optional uint32 change_number = 2; + optional bytes sha = 3; + optional bytes buffer = 4; + } + + repeated .CMsgClientPackageInfoResponse.Package packages = 1; + repeated uint32 packages_unknown = 2; + optional uint32 packages_pending = 3; +} + +message CMsgClientPICSChangesSinceRequest { + optional uint32 since_change_number = 1; + optional bool send_app_info_changes = 2; + optional bool send_package_info_changes = 3; + optional uint32 num_app_info_cached = 4; + optional uint32 num_package_info_cached = 5; +} + +message CMsgClientPICSChangesSinceResponse { + message PackageChange { + optional uint32 packageid = 1; + optional uint32 change_number = 2; + optional bool needs_token = 3; + } + + message AppChange { + optional uint32 appid = 1; + optional uint32 change_number = 2; + optional bool needs_token = 3; + } + + optional uint32 current_change_number = 1; + optional uint32 since_change_number = 2; + optional bool force_full_update = 3; + repeated .CMsgClientPICSChangesSinceResponse.PackageChange package_changes = 4; + repeated .CMsgClientPICSChangesSinceResponse.AppChange app_changes = 5; + optional bool force_full_app_update = 6; + optional bool force_full_package_update = 7; +} + +message CMsgClientPICSProductInfoRequest { + message AppInfo { + optional uint32 appid = 1; + optional uint64 access_token = 2; + optional bool only_public = 3; + } + + message PackageInfo { + optional uint32 packageid = 1; + optional uint64 access_token = 2; + } + + repeated .CMsgClientPICSProductInfoRequest.PackageInfo packages = 1; + repeated .CMsgClientPICSProductInfoRequest.AppInfo apps = 2; + optional bool meta_data_only = 3; + optional uint32 num_prev_failed = 4; +} + +message CMsgClientPICSProductInfoResponse { + option (msgpool_soft_limit) = 0; + option (msgpool_hard_limit) = 0; + message AppInfo { + optional uint32 appid = 1; + optional uint32 change_number = 2; + optional bool missing_token = 3; + optional bytes sha = 4; + optional bytes buffer = 5; + optional bool only_public = 6; + optional uint32 size = 7; + } + + message PackageInfo { + optional uint32 packageid = 1; + optional uint32 change_number = 2; + optional bool missing_token = 3; + optional bytes sha = 4; + optional bytes buffer = 5; + optional uint32 size = 6; + } + + repeated .CMsgClientPICSProductInfoResponse.AppInfo apps = 1; + repeated uint32 unknown_appids = 2; + repeated .CMsgClientPICSProductInfoResponse.PackageInfo packages = 3; + repeated uint32 unknown_packageids = 4; + optional bool meta_data_only = 5; + optional bool response_pending = 6; + optional uint32 http_min_size = 7; + optional string http_host = 8; +} + +message CMsgClientPICSAccessTokenRequest { + repeated uint32 packageids = 1; + repeated uint32 appids = 2; +} + +message CMsgClientPICSAccessTokenResponse { + message PackageToken { + optional uint32 packageid = 1; + optional uint64 access_token = 2; + } + + message AppToken { + optional uint32 appid = 1; + optional uint64 access_token = 2; + } + + repeated .CMsgClientPICSAccessTokenResponse.PackageToken package_access_tokens = 1; + repeated uint32 package_denied_tokens = 2; + repeated .CMsgClientPICSAccessTokenResponse.AppToken app_access_tokens = 3; + repeated uint32 app_denied_tokens = 4; +} + +message CMsgClientUFSGetUGCDetails { + optional fixed64 hcontent = 1 [default = 18446744073709551615]; +} + +message CMsgClientUFSGetUGCDetailsResponse { + optional int32 eresult = 1 [default = 2]; + optional string url = 2; + optional uint32 app_id = 3; + optional string filename = 4; + optional fixed64 steamid_creator = 5; + optional uint32 file_size = 6; + optional uint32 compressed_file_size = 7; + optional string rangecheck_host = 8; + optional string file_encoded_sha1 = 9; +} + +message CMsgClientUFSGetSingleFileInfo { + optional uint32 app_id = 1; + optional string file_name = 2; +} + +message CMsgClientUFSGetSingleFileInfoResponse { + optional int32 eresult = 1 [default = 2]; + optional uint32 app_id = 2; + optional string file_name = 3; + optional bytes sha_file = 4; + optional uint64 time_stamp = 5; + optional uint32 raw_file_size = 6; + optional bool is_explicit_delete = 7; +} + +message CMsgClientUFSShareFile { + optional uint32 app_id = 1; + optional string file_name = 2; +} + +message CMsgClientUFSShareFileResponse { + optional int32 eresult = 1 [default = 2]; + optional fixed64 hcontent = 2 [default = 18446744073709551615]; +} + +message CMsgClientNewLoginKey { + optional uint32 unique_id = 1; + optional string login_key = 2; +} + +message CMsgClientNewLoginKeyAccepted { + optional uint32 unique_id = 1; +} + +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; + } + + 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 m_unStatusFlags = 2; + 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; +} + +message CMsgClientFriendMsg { + optional fixed64 steamid = 1; + optional int32 chat_entry_type = 2; + optional bytes message = 3; + optional fixed32 rtime32_server_timestamp = 4; +} + +message CMsgClientFriendMsgIncoming { + optional fixed64 steamid_from = 1; + optional int32 chat_entry_type = 2; + optional bool from_limited_account = 3; + optional bytes message = 4; + optional fixed32 rtime32_server_timestamp = 5; +} + +message CMsgClientAddFriend { + optional fixed64 steamid_to_add = 1; + optional string accountname_or_email_to_add = 2; +} + +message CMsgClientAddFriendResponse { + optional int32 eresult = 1 [default = 2]; + optional fixed64 steam_id_added = 2; + optional string persona_name_added = 3; +} + +message CMsgClientRemoveFriend { + optional fixed64 friendid = 1; +} + +message CMsgClientHideFriend { + optional fixed64 friendid = 1; + optional bool hide = 2; +} + diff --git a/protobufs/steammessages_clientserver_2.proto b/protobufs/steammessages_clientserver_2.proto new file mode 100644 index 0000000..40a2149 --- /dev/null +++ b/protobufs/steammessages_clientserver_2.proto @@ -0,0 +1,1227 @@ +import "steammessages_base.proto"; +import "encrypted_app_ticket.proto"; + +option optimize_for = SPEED; +option cc_generic_services = false; + +message CMsgClientUCMAddScreenshot { + message Tag { + optional string tag_name = 1; + optional string tag_value = 2; + } + + optional uint32 appid = 1; + optional string filename = 2; + optional string thumbname = 3; + optional fixed32 rtime32_created = 4; + optional uint32 width = 5; + optional uint32 height = 6; + optional uint32 permissions = 7; + optional string caption = 8; + optional string shortcut_name = 9; + repeated .CMsgClientUCMAddScreenshot.Tag tag = 10; + repeated fixed64 tagged_steamid = 11; + optional bool spoiler_tag = 12; + repeated uint64 tagged_publishedfileid = 13; +} + +message CMsgClientUCMAddScreenshotResponse { + optional int32 eresult = 1 [default = 2]; + optional fixed64 screenshotid = 2 [default = 18446744073709551615]; +} + +message CMsgClientUCMDeleteScreenshot { + optional fixed64 screenshotid = 1 [default = 18446744073709551615]; +} + +message CMsgClientUCMDeleteScreenshotResponse { + optional int32 eresult = 1 [default = 2]; +} + +message CMsgClientUCMPublishFile { + optional uint32 app_id = 1; + optional string file_name = 2; + optional string preview_file_name = 3; + optional uint32 consumer_app_id = 4; + optional string title = 5; + optional string description = 6; + repeated string tags = 8; + optional bool workshop_file = 9; + optional int32 visibility = 10; + optional uint32 file_type = 11; + optional string url = 12; + optional uint32 video_provider = 13; + optional string video_account_name = 14; + optional string video_identifier = 15; + optional bool in_progress = 16; +} + +message CMsgClientUCMPublishFileResponse { + optional int32 eresult = 1 [default = 2]; + optional fixed64 published_file_id = 2 [default = 18446744073709551615]; + optional bool needs_workshop_legal_agreement_acceptance = 3 [default = false]; +} + +message CMsgClientUCMUpdatePublishedFile { + message KeyValueTag { + optional string key = 1; + optional string value = 2; + } + + optional uint32 app_id = 1; + optional fixed64 published_file_id = 2; + optional string file_name = 3; + optional string preview_file_name = 4; + optional string title = 5; + optional string description = 6; + repeated string tags = 7; + optional int32 visibility = 8; + optional bool update_file = 9; + optional bool update_preview_file = 10; + optional bool update_title = 11; + optional bool update_description = 12; + optional bool update_tags = 13; + optional bool update_visibility = 14; + optional string change_description = 15; + optional bool update_url = 16; + optional string url = 17; + optional bool update_content_manifest = 18; + optional fixed64 content_manifest = 19; + optional string metadata = 20; + optional bool update_metadata = 21; + optional int32 language = 22 [default = 0]; + repeated string removed_kvtags = 23; + repeated .CMsgClientUCMUpdatePublishedFile.KeyValueTag kvtags = 24; +} + +message CMsgClientUCMUpdatePublishedFileResponse { + optional int32 eresult = 1 [default = 2]; + optional bool needs_workshop_legal_agreement_acceptance = 2 [default = false]; +} + +message CMsgClientUCMDeletePublishedFile { + optional fixed64 published_file_id = 1; +} + +message CMsgClientUCMDeletePublishedFileResponse { + optional int32 eresult = 1 [default = 2]; +} + +message CMsgClientUCMEnumerateUserPublishedFiles { + optional uint32 app_id = 1; + optional uint32 start_index = 2; + optional uint32 sort_order = 3; +} + +message CMsgClientUCMEnumerateUserPublishedFilesResponse { + message PublishedFileId { + optional fixed64 published_file_id = 1; + } + + optional int32 eresult = 1 [default = 2]; + repeated .CMsgClientUCMEnumerateUserPublishedFilesResponse.PublishedFileId published_files = 2; + optional uint32 total_results = 3; +} + +message CMsgClientUCMEnumerateUserSubscribedFiles { + optional uint32 app_id = 1; + optional uint32 start_index = 2; + optional uint32 list_type = 3 [default = 1]; + optional uint32 matching_file_type = 4 [default = 0]; + optional uint32 count = 5 [default = 50]; +} + +message CMsgClientUCMEnumerateUserSubscribedFilesResponse { + message PublishedFileId { + optional fixed64 published_file_id = 1; + optional fixed32 rtime32_subscribed = 2 [default = 0]; + } + + optional int32 eresult = 1 [default = 2]; + repeated .CMsgClientUCMEnumerateUserSubscribedFilesResponse.PublishedFileId subscribed_files = 2; + optional uint32 total_results = 3; +} + +message CMsgClientUCMEnumerateUserSubscribedFilesWithUpdates { + optional uint32 app_id = 1; + optional uint32 start_index = 2; + optional fixed32 start_time = 3; +} + +message CMsgClientUCMEnumerateUserSubscribedFilesWithUpdatesResponse { + message PublishedFileId { + optional fixed64 published_file_id = 1; + optional fixed32 rtime32_subscribed = 2 [default = 0]; + optional uint32 appid = 3; + optional fixed64 file_hcontent = 4; + optional uint32 file_size = 5; + optional fixed32 rtime32_last_updated = 6; + optional bool is_depot_content = 7; + } + + optional int32 eresult = 1 [default = 2]; + repeated .CMsgClientUCMEnumerateUserSubscribedFilesWithUpdatesResponse.PublishedFileId subscribed_files = 2; + optional uint32 total_results = 3; +} + +message CMsgClientUCMPublishedFileSubscribed { + optional fixed64 published_file_id = 1; + optional uint32 app_id = 2; + optional fixed64 file_hcontent = 3; + optional uint32 file_size = 4; + optional uint32 rtime_subscribed = 5; + optional bool is_depot_content = 6; + optional uint32 rtime_updated = 7; +} + +message CMsgClientUCMPublishedFileUnsubscribed { + optional fixed64 published_file_id = 1; + optional uint32 app_id = 2; +} + +message CMsgClientUCMPublishedFileDeleted { + optional fixed64 published_file_id = 1; + optional uint32 app_id = 2; +} + +message CMsgClientUCMPublishedFileUpdated { + optional fixed64 published_file_id = 1; + optional uint32 app_id = 2; + optional uint32 time_updated = 3; + optional fixed64 hcontent = 4; + optional fixed32 file_size = 5; + optional bool is_depot_content = 6; +} + +message CMsgClientWorkshopItemChangesRequest { + optional uint32 app_id = 1; + optional uint32 last_time_updated = 2; + optional uint32 num_items_needed = 3; +} + +message CMsgClientWorkshopItemChangesResponse { + message WorkshopItemInfo { + optional fixed64 published_file_id = 1; + optional uint32 time_updated = 2; + optional fixed64 manifest_id = 3; + } + + optional int32 eresult = 1 [default = 2]; + optional uint32 update_time = 2; + repeated .CMsgClientWorkshopItemChangesResponse.WorkshopItemInfo workshop_items = 5; +} + +message CMsgClientWorkshopItemInfoRequest { + message WorkshopItem { + optional fixed64 published_file_id = 1; + optional uint32 time_updated = 2; + } + + optional uint32 app_id = 1; + optional uint32 last_time_updated = 2; + repeated .CMsgClientWorkshopItemInfoRequest.WorkshopItem workshop_items = 3; +} + +message CMsgClientWorkshopItemInfoResponse { + message WorkshopItemInfo { + optional fixed64 published_file_id = 1; + optional uint32 time_updated = 2; + optional fixed64 manifest_id = 3; + optional bool is_legacy = 4; + } + + optional int32 eresult = 1 [default = 2]; + optional uint32 update_time = 2; + repeated .CMsgClientWorkshopItemInfoResponse.WorkshopItemInfo workshop_items = 3; + repeated fixed64 private_items = 4; +} + +message CMsgClientUCMGetPublishedFilesForUser { + optional uint32 app_id = 1; + optional fixed64 creator_steam_id = 2; + repeated string required_tags = 3; + repeated string excluded_tags = 4; + optional uint32 start_index = 5; +} + +message CMsgClientUCMGetPublishedFilesForUserResponse { + message PublishedFileId { + optional fixed64 published_file_id = 1; + } + + optional int32 eresult = 1 [default = 2]; + repeated .CMsgClientUCMGetPublishedFilesForUserResponse.PublishedFileId published_files = 2; + optional uint32 total_results = 3; +} + +message CMsgClientUCMSetUserPublishedFileAction { + optional fixed64 published_file_id = 1; + optional uint32 app_id = 2; + optional int32 action = 3; +} + +message CMsgClientUCMSetUserPublishedFileActionResponse { + optional int32 eresult = 1 [default = 2]; +} + +message CMsgClientUCMEnumeratePublishedFilesByUserAction { + optional uint32 app_id = 1; + optional uint32 start_index = 2; + optional int32 action = 3; +} + +message CMsgClientUCMEnumeratePublishedFilesByUserActionResponse { + message PublishedFileId { + optional fixed64 published_file_id = 1; + optional fixed32 rtime_time_stamp = 2 [default = 0]; + } + + optional int32 eresult = 1 [default = 2]; + repeated .CMsgClientUCMEnumeratePublishedFilesByUserActionResponse.PublishedFileId published_files = 2; + optional uint32 total_results = 3; +} + +message CMsgClientScreenshotsChanged { +} + +message CMsgClientUpdateUserGameInfo { + optional fixed64 steamid_idgs = 1; + optional fixed64 gameid = 2; + optional uint32 game_ip = 3; + optional uint32 game_port = 4; + optional bytes token = 5; +} + +message CMsgClientRichPresenceUpload { + optional bytes rich_presence_kv = 1; + repeated fixed64 steamid_broadcast = 2; +} + +message CMsgClientRichPresenceRequest { + repeated fixed64 steamid_request = 1; +} + +message CMsgClientRichPresenceInfo { + message RichPresence { + optional fixed64 steamid_user = 1; + optional bytes rich_presence_kv = 2; + } + + repeated .CMsgClientRichPresenceInfo.RichPresence rich_presence = 1; +} + +message CMsgClientCheckFileSignature { + optional uint32 app_id = 1; +} + +message CMsgClientCheckFileSignatureResponse { + optional uint32 app_id = 1; + optional uint32 pid = 2; + optional uint32 eresult = 3; + optional string filename = 4; + optional uint32 esignatureresult = 5; + optional bytes sha_file = 6; + optional bytes signatureheader = 7; + optional uint32 filesize = 8; + optional uint32 getlasterror = 9; + optional uint32 evalvesignaturecheckdetail = 10; +} + +message CMsgClientReadMachineAuth { + optional string filename = 1; + optional uint32 offset = 2; + optional uint32 cubtoread = 3; +} + +message CMsgClientReadMachineAuthResponse { + optional string filename = 1; + optional uint32 eresult = 2; + optional uint32 filesize = 3; + optional bytes sha_file = 4; + optional uint32 getlasterror = 5; + optional uint32 offset = 6; + optional uint32 cubread = 7; + optional bytes bytes_read = 8; + optional string filename_sentry = 9; +} + +message CMsgClientUpdateMachineAuth { + optional string filename = 1; + optional uint32 offset = 2; + optional uint32 cubtowrite = 3; + optional bytes bytes = 4; + optional uint32 otp_type = 5; + optional string otp_identifier = 6; + optional bytes otp_sharedsecret = 7; + optional uint32 otp_timedrift = 8; +} + +message CMsgClientUpdateMachineAuthResponse { + optional string filename = 1; + optional uint32 eresult = 2; + optional uint32 filesize = 3; + optional bytes sha_file = 4; + optional uint32 getlasterror = 5; + optional uint32 offset = 6; + optional uint32 cubwrote = 7; + optional int32 otp_type = 8; + optional uint32 otp_value = 9; + optional string otp_identifier = 10; +} + +message CMsgClientRequestMachineAuth { + optional string filename = 1; + optional uint32 eresult_sentryfile = 2; + optional uint32 filesize = 3; + optional bytes sha_sentryfile = 4; + optional int32 lock_account_action = 6; + optional uint32 otp_type = 7; + optional string otp_identifier = 8; + optional bytes otp_sharedsecret = 9; + optional uint32 otp_value = 10; + optional string machine_name = 11; + optional string machine_name_userchosen = 12; +} + +message CMsgClientRequestMachineAuthResponse { + optional uint32 eresult = 1; +} + +message CMsgClientCreateFriendsGroup { + optional fixed64 steamid = 1; + optional string groupname = 2; +} + +message CMsgClientCreateFriendsGroupResponse { + optional uint32 eresult = 1; + optional int32 groupid = 2; +} + +message CMsgClientDeleteFriendsGroup { + optional fixed64 steamid = 1; + optional int32 groupid = 2; +} + +message CMsgClientDeleteFriendsGroupResponse { + optional uint32 eresult = 1; +} + +message CMsgClientRenameFriendsGroup { + optional int32 groupid = 1; + optional string groupname = 2; +} + +message CMsgClientRenameFriendsGroupResponse { + optional uint32 eresult = 1; +} + +message CMsgClientAddFriendToGroup { + optional int32 groupid = 1; + optional fixed64 steamiduser = 2; +} + +message CMsgClientAddFriendToGroupResponse { + optional uint32 eresult = 1; +} + +message CMsgClientRemoveFriendFromGroup { + optional int32 groupid = 1; + optional fixed64 steamiduser = 2; +} + +message CMsgClientRemoveFriendFromGroupResponse { + optional uint32 eresult = 1; +} + +message CMsgClientRegisterKey { + optional string key = 1; +} + +message CMsgClientPurchaseResponse { + optional int32 eresult = 1 [default = 2]; + optional int32 purchase_result_details = 2; + optional bytes purchase_receipt_info = 3; +} + +message CMsgClientActivateOEMLicense { + optional string bios_manufacturer = 1; + optional string bios_serialnumber = 2; + optional bytes license_file = 3; + optional string mainboard_manufacturer = 4; + optional string mainboard_product = 5; + optional string mainboard_serialnumber = 6; +} + +message CMsgClientRegisterOEMMachine { + optional bytes oem_register_file = 1; +} + +message CMsgClientRegisterOEMMachineResponse { + optional uint32 eresult = 1; +} + +message CMsgClientPurchaseWithMachineID { + optional uint32 package_id = 1; + optional bytes machine_info = 2; +} + +message CMsgTrading_InitiateTradeRequest { + optional uint32 trade_request_id = 1; + optional uint64 other_steamid = 2; + optional string other_name = 3; +} + +message CMsgTrading_InitiateTradeResponse { + optional uint32 response = 1; + optional uint32 trade_request_id = 2; + optional uint64 other_steamid = 3; + optional uint32 steamguard_required_days = 4; + optional uint32 new_device_cooldown_days = 5; + optional uint32 default_password_reset_probation_days = 6; + optional uint32 password_reset_probation_days = 7; + optional uint32 default_email_change_probation_days = 8; + optional uint32 email_change_probation_days = 9; +} + +message CMsgTrading_CancelTradeRequest { + optional uint64 other_steamid = 1; +} + +message CMsgTrading_StartSession { + optional uint64 other_steamid = 1; +} + +message CMsgClientEmailChange { + optional string password = 1; + optional string email = 2; + optional string code = 3; + optional bool final = 4; + optional bool newmethod = 5; + optional string twofactor_code = 6; + optional string sms_code = 7; + optional bool client_supports_sms = 8; +} + +message CMsgClientEmailChangeResponse { + optional int32 eresult = 1 [default = 2]; + optional bool requires_sms_code = 2; +} + +message CMsgClientGetCDNAuthToken { + optional uint32 app_id = 1; + optional string host_name = 2; +} + +message CMsgClientGetDepotDecryptionKey { + optional uint32 depot_id = 1; + optional uint32 app_id = 2; +} + +message CMsgClientGetDepotDecryptionKeyResponse { + optional int32 eresult = 1 [default = 2]; + optional uint32 depot_id = 2; + optional bytes depot_encryption_key = 3; +} + +message CMsgClientGetAppBetaPasswords { + optional uint32 app_id = 1; +} + +message CMsgClientGetAppBetaPasswordsResponse { + message BetaPassword { + optional string betaname = 1; + optional string betapassword = 2; + } + + optional int32 eresult = 1 [default = 2]; + optional uint32 app_id = 2; + repeated .CMsgClientGetAppBetaPasswordsResponse.BetaPassword betapasswords = 3; +} + +message CMsgClientCheckAppBetaPassword { + optional uint32 app_id = 1; + optional string betapassword = 2; +} + +message CMsgClientCheckAppBetaPasswordResponse { + message BetaPassword { + optional string betaname = 1; + optional string betapassword = 2; + } + + optional int32 eresult = 1 [default = 2]; + repeated .CMsgClientCheckAppBetaPasswordResponse.BetaPassword betapasswords = 4; +} + +message CMsgClientUpdateAppJobReport { + optional uint32 app_id = 1; + repeated uint32 depot_ids = 2; + optional uint32 app_state = 3; + optional uint32 job_app_error = 4; + optional string error_details = 5; + optional uint32 job_duration = 6; + optional uint32 files_validation_failed = 7; + optional uint64 bytes_downloaded = 8; + optional uint64 bytes_staged = 9; + optional uint64 bytes_comitted = 10; + optional uint32 start_app_state = 11; + optional fixed64 stats_machine_id = 12; +} + +message CMsgClientDPContentStatsReport { + optional fixed64 stats_machine_id = 1; + optional string country_code = 2; + optional int32 os_type = 3; + optional int32 language = 4; + optional uint32 num_install_folders = 5; + optional uint32 num_installed_games = 6; + optional uint64 size_installed_games = 7; +} + +message CMsgClientGetCDNAuthTokenResponse { + optional uint32 eresult = 1 [default = 2]; + optional string token = 2; + optional uint32 expiration_time = 3; +} + +message CMsgDownloadRateStatistics { + message StatsInfo { + optional uint32 source_type = 1; + optional uint32 source_id = 2; + optional uint32 seconds = 3; + optional uint64 bytes = 4; + } + + optional uint32 cell_id = 1; + repeated .CMsgDownloadRateStatistics.StatsInfo stats = 2; +} + +message CMsgClientRequestAccountData { + optional string account_or_email = 1; + optional uint32 action = 2; +} + +message CMsgClientRequestAccountDataResponse { + optional uint32 action = 1; + optional uint32 eresult = 2; + optional string account_name = 3; + optional uint32 ct_matches = 4; + optional string account_name_suggestion1 = 5; + optional string account_name_suggestion2 = 6; + optional string account_name_suggestion3 = 7; +} + +message CMsgClientUGSGetGlobalStats { + optional uint64 gameid = 1; + optional uint32 history_days_requested = 2; + optional fixed32 time_last_requested = 3; + optional uint32 first_day_cached = 4; + optional uint32 days_cached = 5; +} + +message CMsgClientUGSGetGlobalStatsResponse { + message Day { + message Stat { + optional int32 stat_id = 1; + optional int64 data = 2; + } + + optional uint32 day_id = 1; + repeated .CMsgClientUGSGetGlobalStatsResponse.Day.Stat stats = 2; + } + + optional int32 eresult = 1 [default = 2]; + optional fixed32 timestamp = 2; + optional int32 day_current = 3; + repeated .CMsgClientUGSGetGlobalStatsResponse.Day days = 4; +} + +message CMsgGameServerData { + message Player { + optional fixed64 steam_id = 1; + } + + optional fixed64 steam_id_gs = 1; + optional uint32 ip = 2; + optional uint32 query_port = 3; + optional uint32 game_port = 4; + optional uint32 sourcetv_port = 5; + optional string name = 22; + optional uint32 app_id = 6; + optional string gamedir = 7; + optional string version = 8; + optional string product = 9; + optional string region = 10; + repeated .CMsgGameServerData.Player players = 11; + optional uint32 max_players = 12; + optional uint32 bot_count = 13; + optional bool password = 14; + optional bool secure = 15; + optional bool dedicated = 16; + optional string os = 17; + optional string game_data = 18; + optional uint32 game_data_version = 19; + optional string game_type = 20; + optional string map = 21; +} + +message CMsgGameServerRemove { + optional fixed64 steam_id = 1; + optional uint32 ip = 2; + optional uint32 query_port = 3; +} + +message CMsgClientGMSServerQuery { + optional uint32 app_id = 1; + optional uint32 geo_location_ip = 2; + optional uint32 region_code = 3; + optional string filter_text = 4; + optional uint32 max_servers = 5; +} + +message CMsgGMSClientServerQueryResponse { + message Server { + optional uint32 server_ip = 1; + optional uint32 server_port = 2; + optional uint32 auth_players = 3; + } + + repeated .CMsgGMSClientServerQueryResponse.Server servers = 1; + optional string error = 2; +} + +message CMsgGameServerOutOfDate { + optional fixed64 steam_id_gs = 1; + optional bool reject = 2; + optional string message = 3; +} + +message CMsgClientRedeemGuestPass { + optional fixed64 guest_pass_id = 1; +} + +message CMsgClientRedeemGuestPassResponse { + optional uint32 eresult = 1 [default = 2]; + optional uint32 package_id = 2; + optional uint32 must_own_appid = 3; +} + +message CMsgClientGetClanActivityCounts { + repeated uint64 steamid_clans = 1; +} + +message CMsgClientGetClanActivityCountsResponse { + optional uint32 eresult = 1 [default = 2]; +} + +message CMsgClientOGSReportString { + optional bool accumulated = 1; + optional uint64 sessionid = 2; + optional int32 severity = 3; + optional string formatter = 4; + optional bytes varargs = 5; +} + +message CMsgClientOGSReportBug { + optional uint64 sessionid = 1; + optional string bugtext = 2; + optional bytes screenshot = 3; +} + +message CMsgGSAssociateWithClan { + optional fixed64 steam_id_clan = 1; +} + +message CMsgGSAssociateWithClanResponse { + optional fixed64 steam_id_clan = 1; + optional uint32 eresult = 2 [default = 2]; +} + +message CMsgGSComputeNewPlayerCompatibility { + optional fixed64 steam_id_candidate = 1; +} + +message CMsgGSComputeNewPlayerCompatibilityResponse { + optional fixed64 steam_id_candidate = 1; + optional uint32 eresult = 2 [default = 2]; + optional bool is_clan_member = 3; + optional int32 ct_dont_like_you = 4; + optional int32 ct_you_dont_like = 5; + optional int32 ct_clanmembers_dont_like_you = 6; +} + +message CMsgClientSentLogs { +} + +message CMsgGCClient { + optional uint32 appid = 1; + optional uint32 msgtype = 2; + optional bytes payload = 3; + optional fixed64 steamid = 4; + optional string gcname = 5; +} + +message CMsgClientRequestFreeLicense { + repeated uint32 appids = 2; +} + +message CMsgClientRequestFreeLicenseResponse { + optional uint32 eresult = 1 [default = 2]; + repeated uint32 granted_packageids = 2; + repeated uint32 granted_appids = 3; +} + +message CMsgDRMDownloadRequestWithCrashData { + optional uint32 download_flags = 1; + optional uint32 download_types_known = 2; + optional bytes guid_drm = 3; + optional bytes guid_split = 4; + optional bytes guid_merge = 5; + optional string module_name = 6; + optional string module_path = 7; + optional bytes crash_data = 8; +} + +message CMsgDRMDownloadResponse { + optional uint32 eresult = 1 [default = 2]; + optional uint32 app_id = 2; + optional uint32 blob_download_type = 3; + optional bytes merge_guid = 4; + optional uint32 download_file_dfs_ip = 5; + optional uint32 download_file_dfs_port = 6; + optional string download_file_url = 7; + optional string module_path = 8; +} + +message CMsgDRMFinalResult { + optional uint32 eResult = 1 [default = 2]; + optional uint32 app_id = 2; + optional uint32 blob_download_type = 3; + optional uint32 error_detail = 4; + optional bytes merge_guid = 5; + optional uint32 download_file_dfs_ip = 6; + optional uint32 download_file_dfs_port = 7; + optional string download_file_url = 8; +} + +message CMsgClientDPCheckSpecialSurvey { + optional uint32 survey_id = 1; +} + +message CMsgClientDPCheckSpecialSurveyResponse { + optional uint32 eResult = 1 [default = 2]; + optional uint32 state = 2; + optional string name = 3; + optional string custom_url = 4; + optional bool include_software = 5; + optional bytes token = 6; +} + +message CMsgClientDPSendSpecialSurveyResponse { + optional uint32 survey_id = 1; + optional bytes data = 2; +} + +message CMsgClientDPSendSpecialSurveyResponseReply { + optional uint32 eResult = 1 [default = 2]; + optional bytes token = 2; +} + +message CMsgClientRequestForgottenPasswordEmail { + optional string account_name = 1; + optional string password_tried = 2; +} + +message CMsgClientRequestForgottenPasswordEmailResponse { + optional uint32 eResult = 1; + optional bool use_secret_question = 2; +} + +message CMsgClientItemAnnouncements { + optional uint32 count_new_items = 1; +} + +message CMsgClientRequestItemAnnouncements { +} + +message CMsgClientUserNotifications { + message Notification { + optional uint32 user_notification_type = 1; + optional uint32 count = 2; + } + + repeated .CMsgClientUserNotifications.Notification notifications = 1; +} + +message CMsgClientCommentNotifications { + optional uint32 count_new_comments = 1; + optional uint32 count_new_comments_owner = 2; + optional uint32 count_new_comments_subscriptions = 3; +} + +message CMsgClientRequestCommentNotifications { +} + +message CMsgClientOfflineMessageNotification { + optional uint32 offline_messages = 1; + repeated uint32 friends_with_offline_messages = 2; +} + +message CMsgClientRequestOfflineMessageCount { +} + +message CMsgClientFSGetFriendMessageHistory { + optional fixed64 steamid = 1; +} + +message CMsgClientFSGetFriendMessageHistoryResponse { + message FriendMessage { + optional uint32 accountid = 1; + optional uint32 timestamp = 2; + optional string message = 3; + optional bool unread = 4; + } + + optional fixed64 steamid = 1; + optional uint32 success = 2; + repeated .CMsgClientFSGetFriendMessageHistoryResponse.FriendMessage messages = 3; +} + +message CMsgClientFSGetFriendMessageHistoryForOfflineMessages { +} + +message CMsgClientFSGetFriendsSteamLevels { + repeated uint32 accountids = 1; +} + +message CMsgClientFSGetFriendsSteamLevelsResponse { + message Friend { + optional uint32 accountid = 1; + optional uint32 level = 2; + } + + repeated .CMsgClientFSGetFriendsSteamLevelsResponse.Friend friends = 1; +} + +message CMsgClientEmailAddrInfo { + optional string email_address = 1; + optional bool email_is_validated = 2; + optional bool email_validation_changed = 3; + optional bool credential_change_requires_code = 4; + optional bool password_or_secretqa_change_requires_code = 5; + optional bool remind_user_about_email = 6; +} + +message CMsgCREEnumeratePublishedFiles { + optional uint32 app_id = 1; + optional int32 query_type = 2; + optional uint32 start_index = 3; + optional uint32 days = 4; + optional uint32 count = 5; + repeated string tags = 6; + repeated string user_tags = 7; + optional uint32 matching_file_type = 8 [default = 13]; +} + +message CMsgCREEnumeratePublishedFilesResponse { + message PublishedFileId { + optional fixed64 published_file_id = 1; + optional int32 votes_for = 2; + optional int32 votes_against = 3; + optional int32 reports = 4; + optional float score = 5; + } + + optional int32 eresult = 1 [default = 2]; + repeated .CMsgCREEnumeratePublishedFilesResponse.PublishedFileId published_files = 2; + optional uint32 total_results = 3; +} + +message CMsgCREItemVoteSummary { + message PublishedFileId { + optional fixed64 published_file_id = 1; + } + + repeated .CMsgCREItemVoteSummary.PublishedFileId published_file_ids = 1; +} + +message CMsgCREItemVoteSummaryResponse { + message ItemVoteSummary { + optional fixed64 published_file_id = 1; + optional int32 votes_for = 2; + optional int32 votes_against = 3; + optional int32 reports = 4; + optional float score = 5; + } + + optional int32 eresult = 1 [default = 2]; + repeated .CMsgCREItemVoteSummaryResponse.ItemVoteSummary item_vote_summaries = 2; +} + +message CMsgCREUpdateUserPublishedItemVote { + optional fixed64 published_file_id = 1; + optional bool vote_up = 2; +} + +message CMsgCREUpdateUserPublishedItemVoteResponse { + optional int32 eresult = 1 [default = 2]; +} + +message CMsgCREGetUserPublishedItemVoteDetails { + message PublishedFileId { + optional fixed64 published_file_id = 1; + } + + repeated .CMsgCREGetUserPublishedItemVoteDetails.PublishedFileId published_file_ids = 1; +} + +message CMsgCREGetUserPublishedItemVoteDetailsResponse { + message UserItemVoteDetail { + optional fixed64 published_file_id = 1; + optional int32 vote = 2 [default = 0]; + } + + optional int32 eresult = 1 [default = 2]; + repeated .CMsgCREGetUserPublishedItemVoteDetailsResponse.UserItemVoteDetail user_item_vote_details = 2; +} + +message CMsgGameServerPingSample { + message Sample { + optional fixed32 ip = 1; + optional uint32 avg_ping_ms = 2; + optional uint32 stddev_ping_ms_x10 = 3; + } + + optional fixed32 my_ip = 1; + optional int32 gs_app_id = 2; + repeated .CMsgGameServerPingSample.Sample gs_samples = 3; +} + +message CMsgFSGetFollowerCount { + optional fixed64 steam_id = 1; +} + +message CMsgFSGetFollowerCountResponse { + optional int32 eresult = 1 [default = 2]; + optional int32 count = 2 [default = 0]; +} + +message CMsgFSGetIsFollowing { + optional fixed64 steam_id = 1; +} + +message CMsgFSGetIsFollowingResponse { + optional int32 eresult = 1 [default = 2]; + optional bool is_following = 2 [default = false]; +} + +message CMsgFSEnumerateFollowingList { + optional uint32 start_index = 1; +} + +message CMsgFSEnumerateFollowingListResponse { + optional int32 eresult = 1 [default = 2]; + optional int32 total_results = 2; + repeated fixed64 steam_ids = 3; +} + +message CMsgDPGetNumberOfCurrentPlayers { + optional uint32 appid = 1; +} + +message CMsgDPGetNumberOfCurrentPlayersResponse { + optional int32 eresult = 1 [default = 2]; + optional int32 player_count = 2; +} + +message CMsgClientFriendUserStatusPublished { + optional fixed64 friend_steamid = 1; + optional uint32 appid = 2; + optional string status_text = 3; +} + +message CMsgClientServiceMethod { + optional string method_name = 1; + optional bytes serialized_method = 2; + optional bool is_notification = 3; +} + +message CMsgClientServiceMethodResponse { + optional string method_name = 1; + optional bytes serialized_method_response = 2; +} + +message CMsgClientUIMode { + optional uint32 uimode = 1; +} + +message CMsgClientVanityURLChangedNotification { + optional string vanity_url = 1; +} + +message CMsgClientAuthorizeLocalDeviceRequest { + optional string device_description = 1; + optional uint32 owner_account_id = 2; +} + +message CMsgClientAuthorizeLocalDevice { + optional int32 eresult = 1 [default = 2]; + optional uint32 owner_account_id = 2; + optional uint64 authed_device_token = 3; +} + +message CMsgClientDeauthorizeDeviceRequest { + optional uint32 deauthorization_account_id = 1; + optional uint64 deauthorization_device_token = 2; +} + +message CMsgClientDeauthorizeDevice { + optional int32 eresult = 1 [default = 2]; + optional uint32 deauthorization_account_id = 2; +} + +message CMsgClientUseLocalDeviceAuthorizations { + message DeviceToken { + optional uint32 owner_account_id = 1; + optional uint64 token_id = 2; + } + + repeated uint32 authorization_account_id = 1; + repeated .CMsgClientUseLocalDeviceAuthorizations.DeviceToken device_tokens = 2; +} + +message CMsgClientGetAuthorizedDevices { +} + +message CMsgClientGetAuthorizedDevicesResponse { + message AuthorizedDevice { + optional uint64 auth_device_token = 1; + optional string device_name = 2; + optional uint32 last_access_time = 3; + optional uint32 borrower_id = 4; + optional bool is_pending = 5; + optional uint32 app_played = 6; + } + + optional int32 eresult = 1 [default = 2]; + repeated .CMsgClientGetAuthorizedDevicesResponse.AuthorizedDevice authorized_device = 2; +} + +message CMsgClientGetEmoticonList { +} + +message CMsgClientEmoticonList { + message Emoticon { + optional string name = 1; + optional int32 count = 2; + } + + repeated .CMsgClientEmoticonList.Emoticon emoticons = 1; +} + +message CMsgClientSharedLibraryLockStatus { + message LockedLibrary { + optional uint32 owner_id = 1; + optional uint32 locked_by = 2; + } + + repeated .CMsgClientSharedLibraryLockStatus.LockedLibrary locked_library = 1; + optional uint32 own_library_locked_by = 2; +} + +message CMsgClientSharedLibraryStopPlaying { + message StopApp { + optional uint32 app_id = 1; + optional uint32 owner_id = 2; + } + + optional int32 seconds_left = 1; + repeated .CMsgClientSharedLibraryStopPlaying.StopApp stop_apps = 2; +} + +message CMsgClientServiceCall { + optional bytes sysid_routing = 1; + optional uint32 call_handle = 2; + optional uint32 module_crc = 3; + optional bytes module_hash = 4; + optional uint32 function_id = 5; + optional uint32 cub_output_max = 6; + optional uint32 flags = 7; + optional bytes callparameter = 8; + optional bool ping_only = 9; + optional uint32 max_outstanding_calls = 10; +} + +message CMsgClientServiceModule { + optional uint32 module_crc = 1; + optional bytes module_hash = 2; + optional bytes module_content = 3; +} + +message CMsgClientServiceCallResponse { + optional bytes sysid_routing = 1; + optional uint32 call_handle = 2; + optional uint32 module_crc = 3; + optional bytes module_hash = 4; + optional uint32 ecallresult = 5; + optional bytes result_content = 6; + optional bytes os_version_info = 7; + optional bytes system_info = 8; + optional fixed64 load_address = 9; + optional bytes exception_record = 10; + optional bytes portable_os_version_info = 11; + optional bytes portable_system_info = 12; + optional bool was_converted = 13; + optional uint32 internal_result = 14; + optional uint32 current_count = 15; + optional uint32 last_call_handle = 16; + optional uint32 last_call_module_crc = 17; + optional bytes last_call_sysid_routing = 18; + optional uint32 last_ecallresult = 19; + optional uint32 last_callissue_delta = 20; + optional uint32 last_callcomplete_delta = 21; +} + +message CMsgAMUnlockStreaming { +} + +message CMsgAMUnlockStreamingResponse { + optional int32 eresult = 1 [default = 2]; + optional bytes encryption_key = 2; +} + +message CMsgClientPlayingSessionState { + optional bool playing_blocked = 2; + optional uint32 playing_app = 3; +} + +message CMsgClientKickPlayingSession { + optional bool only_stop_game = 1; +} + +message CMsgClientCreateAccount { + optional string account_name = 1; + optional string password = 2; + optional string email = 3; + optional uint32 launcher = 6; +} + +message CMsgClientCreateAccountResponse { + optional int32 eresult = 1 [default = 2]; + optional fixed64 steamid = 2; +} + +message CMsgClientVoiceCallPreAuthorize { + optional fixed64 caller_steamid = 1; + optional fixed64 receiver_steamid = 2; + optional int32 caller_id = 3; + optional bool hangup = 4; +} + +message CMsgClientVoiceCallPreAuthorizeResponse { + optional fixed64 caller_steamid = 1; + optional fixed64 receiver_steamid = 2; + optional int32 eresult = 3 [default = 2]; + optional int32 caller_id = 4; +} +