Skip to main content

steam_protos/messages/
base.rs

1//! Base protobuf messages used across Steam protocol
2
3use prost::Message;
4
5/// IP address - can be either IPv4 or IPv6
6#[derive(Clone, PartialEq, Message)]
7#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
8pub struct CMsgIPAddress {
9    #[prost(oneof = "cmsg_ip_address::Ip", tags = "1, 2")]
10    pub ip: Option<cmsg_ip_address::Ip>,
11}
12
13pub mod cmsg_ip_address {
14    #[derive(Clone, PartialEq, prost::Oneof)]
15    #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
16    pub enum Ip {
17        #[prost(fixed32, tag = "1")]
18        V4(u32),
19        #[prost(bytes, tag = "2")]
20        V6(Vec<u8>),
21    }
22}
23
24/// Protobuf header for Steam messages
25#[derive(Clone, PartialEq, Message)]
26pub struct CMsgProtoBufHeader {
27    #[prost(fixed64, optional, tag = "1")]
28    pub steamid: Option<u64>,
29    #[prost(int32, optional, tag = "2")]
30    pub client_sessionid: Option<i32>,
31    #[prost(uint32, optional, tag = "3")]
32    pub routing_appid: Option<u32>,
33    #[prost(fixed64, optional, tag = "10")]
34    pub jobid_source: Option<u64>,
35    #[prost(fixed64, optional, tag = "11")]
36    pub jobid_target: Option<u64>,
37    #[prost(string, optional, tag = "12")]
38    pub target_job_name: Option<String>,
39    #[prost(int32, optional, tag = "24")]
40    pub seq_num: Option<i32>,
41    #[prost(int32, optional, tag = "13")]
42    pub eresult: Option<i32>,
43    #[prost(string, optional, tag = "14")]
44    pub error_message: Option<String>,
45    #[prost(uint32, optional, tag = "16")]
46    pub auth_account_flags: Option<u32>,
47    #[prost(uint32, optional, tag = "22")]
48    pub token_source: Option<u32>,
49    #[prost(bool, optional, tag = "23")]
50    pub admin_spoofing_user: Option<bool>,
51    #[prost(int32, optional, tag = "17")]
52    pub transport_error: Option<i32>,
53    #[prost(uint64, optional, tag = "18")]
54    pub messageid: Option<u64>,
55    #[prost(uint32, optional, tag = "19")]
56    pub publisher_group_id: Option<u32>,
57    #[prost(uint32, optional, tag = "20")]
58    pub sysid: Option<u32>,
59    #[prost(uint64, optional, tag = "36")]
60    pub token_id: Option<u64>,
61    #[prost(uint32, optional, tag = "31")]
62    pub launcher_type: Option<u32>,
63    #[prost(uint32, optional, tag = "32")]
64    pub realm: Option<u32>,
65    #[prost(int32, optional, tag = "33")]
66    pub timeout_ms: Option<i32>,
67    #[prost(string, optional, tag = "34")]
68    pub debug_source: Option<String>,
69    #[prost(uint32, optional, tag = "35")]
70    pub debug_source_string_index: Option<u32>,
71    #[prost(oneof = "cmsg_proto_buf_header::IpAddr", tags = "15, 29")]
72    pub ip_addr: Option<cmsg_proto_buf_header::IpAddr>,
73}
74
75pub mod cmsg_proto_buf_header {
76    #[derive(Clone, PartialEq, prost::Oneof)]
77    pub enum IpAddr {
78        #[prost(uint32, tag = "15")]
79        Ip(u32),
80        #[prost(bytes, tag = "29")]
81        IpV6(Vec<u8>),
82    }
83}
84
85/// Multi message - contains compressed payload
86#[derive(Clone, PartialEq, Message)]
87pub struct CMsgMulti {
88    #[prost(uint32, optional, tag = "1")]
89    pub size_unzipped: Option<u32>,
90    #[prost(bytes = "vec", optional, tag = "2")]
91    pub message_body: Option<Vec<u8>>,
92}
93
94/// Authentication ticket
95#[derive(Clone, PartialEq, Message)]
96pub struct CMsgAuthTicket {
97    #[prost(uint32, optional, tag = "1")]
98    pub estate: Option<u32>,
99    #[prost(uint32, optional, tag = "2")]
100    pub eresult: Option<u32>,
101    #[prost(fixed64, optional, tag = "3")]
102    pub steamid: Option<u64>,
103    #[prost(fixed64, optional, tag = "4")]
104    pub gameid: Option<u64>,
105    #[prost(uint32, optional, tag = "5")]
106    pub h_steam_pipe: Option<u32>,
107    #[prost(uint32, optional, tag = "6")]
108    pub ticket_crc: Option<u32>,
109    #[prost(bytes = "vec", optional, tag = "7")]
110    pub ticket: Option<Vec<u8>>,
111    #[prost(bytes = "vec", optional, tag = "8")]
112    pub server_secret: Option<Vec<u8>>,
113    #[prost(uint32, optional, tag = "9")]
114    pub ticket_type: Option<u32>,
115}
116
117/// Key-value pair
118#[derive(Clone, PartialEq, Message)]
119pub struct CMsgKeyValuePair {
120    #[prost(string, optional, tag = "1")]
121    pub name: Option<String>,
122    #[prost(string, optional, tag = "2")]
123    pub value: Option<String>,
124}
125
126/// Key-value set
127#[derive(Clone, PartialEq, Message)]
128pub struct CMsgKeyValueSet {
129    #[prost(message, repeated, tag = "1")]
130    pub pairs: Vec<CMsgKeyValuePair>,
131}
132
133/// Protobuf wrapped message
134#[derive(Clone, PartialEq, Message)]
135pub struct CMsgProtobufWrapped {
136    #[prost(bytes = "vec", optional, tag = "1")]
137    pub message_body: Option<Vec<u8>>,
138}