Team Fortress 2 Source Code as on 22/4/2020
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

860 lines
24 KiB

  1. //====== Copyright 1996-2010, Valve Corporation, All rights reserved. =======
  2. //
  3. // Purpose: The file defines our Google Protocol Buffers which are used in over
  4. // the wire messages between servers as well as between clients and servers.
  5. //
  6. //=============================================================================
  7. // We care more about speed than code size
  8. option optimize_for = SPEED;
  9. // We don't use the service generation functionality
  10. option cc_generic_services = false;
  11. //
  12. // STYLE NOTES:
  13. //
  14. // Use CamelCase CMsgMyMessageName style names for messages.
  15. //
  16. // Use lowercase _ delimited names like my_steam_id for field names, this is non-standard for Steam,
  17. // but plays nice with the Google formatted code generation.
  18. //
  19. // Try not to use required fields ever. Only do so if you are really really sure you'll never want them removed.
  20. // Optional should be preffered as it will make versioning easier and cleaner in the future if someone refactors
  21. // your message and wants to remove or rename fields.
  22. //
  23. // Use fixed64 for JobId_t, GID_t, or SteamID. This is appropriate for any field that is normally
  24. // going to be larger than 2^56. Otherwise use int64 for 64 bit values that are frequently smaller
  25. // than 2^56 as it will safe space on the wire in those cases.
  26. //
  27. // Similar to fixed64, use fixed32 for RTime32 or other 32 bit values that are frequently larger than
  28. // 2^28. It will safe space in those cases, otherwise use int32 which will safe space for smaller values.
  29. // An exception to this rule for RTime32 is if the value will frequently be zero rather than set to an actual
  30. // time.
  31. //
  32. import "google/protobuf/descriptor.proto";
  33. extend google.protobuf.FieldOptions {
  34. optional bool key_field = 60000 [ default = false ];
  35. }
  36. extend google.protobuf.MessageOptions{
  37. // Allows us to customize the pooling for different messages
  38. optional int32 msgpool_soft_limit = 60000 [default=32];
  39. optional int32 msgpool_hard_limit = 60001 [default=384];
  40. }
  41. enum GCProtoBufMsgSrc
  42. {
  43. GCProtoBufMsgSrc_Unspecified = 0;
  44. GCProtoBufMsgSrc_FromSystem = 1;
  45. GCProtoBufMsgSrc_FromSteamID = 2;
  46. GCProtoBufMsgSrc_FromGC = 3;
  47. GCProtoBufMsgSrc_ReplySystem = 4;
  48. };
  49. //
  50. // Message header, every protcol buffer based message starts with this.
  51. //
  52. message CMsgProtoBufHeader
  53. {
  54. option (msgpool_soft_limit) = 256;
  55. option (msgpool_hard_limit) = 1024;
  56. // All fields here are optional.
  57. // Client message header fields
  58. optional fixed64 client_steam_id = 1; // SteamID of the client sending this, typically set in all client originated messages.
  59. optional int32 client_session_id = 2; // SessionID of the client on the CM
  60. // Source appId for inter-gc messages
  61. optional uint32 source_app_id = 3; // appId of source GC message sender
  62. // Job routing (may be set on client or inter-server messages)
  63. optional fixed64 job_id_source = 10 [ default = 0xFFFFFFFFFFFFFFFF ]; // JobID that sent this message
  64. optional fixed64 job_id_target = 11 [ default = 0xFFFFFFFFFFFFFFFF ]; // The target job which is expected to be waiting on this message
  65. optional string target_job_name = 12; // the type of job to start when this message is received
  66. optional int32 eresult = 13 [default = 2]; // For response jobs, the corresponding eresult
  67. optional string error_message = 14; // Optionally an error message in case of failure. Mostly used for debugging purpose.
  68. // Where did this message originally enter the system? From a client, from another GC, etc
  69. optional GCProtoBufMsgSrc gc_msg_src = 200;
  70. // If this came from another GC, what is the GC that it came from
  71. optional uint32 gc_dir_index_source = 201;
  72. }
  73. //
  74. // Used to serialize CWebAPIKey objects.
  75. //
  76. message CMsgWebAPIKey
  77. {
  78. optional uint32 status = 1 [ default = 0xFF ];
  79. optional uint32 account_id = 2 [ default = 0 ];
  80. optional uint32 publisher_group_id = 3 [ default = 0 ];
  81. optional uint32 key_id = 4;
  82. optional string domain = 5;
  83. }
  84. //
  85. // An HTTP request message
  86. //
  87. message CMsgHttpRequest
  88. {
  89. message RequestHeader
  90. {
  91. optional string name = 1;
  92. optional string value = 2;
  93. }
  94. message QueryParam
  95. {
  96. optional string name = 1;
  97. optional bytes value = 2;
  98. }
  99. optional uint32 request_method = 1;
  100. optional string hostname = 2;
  101. optional string url = 3;
  102. repeated RequestHeader headers = 4;
  103. repeated QueryParam get_params = 5;
  104. repeated QueryParam post_params = 6;
  105. optional bytes body = 7;
  106. optional uint32 absolute_timeout = 8;
  107. }
  108. //
  109. // A web API request
  110. //
  111. message CMsgWebAPIRequest
  112. {
  113. optional string UNUSED_job_name = 1; // no longer used
  114. optional string interface_name = 2;
  115. optional string method_name = 3;
  116. optional uint32 version = 4;
  117. optional CMsgWebAPIKey api_key = 5;
  118. optional CMsgHttpRequest request = 6;
  119. optional uint32 routing_app_id = 7;
  120. }
  121. //
  122. // An HTTP response
  123. //
  124. message CMsgHttpResponse
  125. {
  126. message ResponseHeader
  127. {
  128. optional string name = 1;
  129. optional string value = 2;
  130. }
  131. optional uint32 status_code = 1;
  132. repeated ResponseHeader headers = 2;
  133. optional bytes body = 3;
  134. }
  135. //
  136. // Message struct for k_EMsgAMFindAccounts
  137. //
  138. message CMsgAMFindAccounts
  139. {
  140. optional uint32 search_type = 1;
  141. optional string search_string = 2;
  142. }
  143. //
  144. // Message struct for k_EMsgAMFindAccountsResponse
  145. //
  146. message CMsgAMFindAccountsResponse
  147. {
  148. repeated fixed64 steam_id = 1;
  149. }
  150. //
  151. // k_EMsgNotifyWatchdog
  152. //
  153. message CMsgNotifyWatchdog
  154. {
  155. optional uint32 source = 1; // Alert source
  156. optional uint32 alert_type = 2; // type of alert
  157. optional uint32 alert_destination = 3; // destination for alert
  158. optional bool critical = 4; // Is the alert critical
  159. optional uint32 time = 5; // world time that alert occurred
  160. optional uint32 appid = 6; // app to forward the alert to for alerts with alert_type set to AppID
  161. optional string text = 7; // Alert text
  162. }
  163. //
  164. // k_EGCMsgGetLicenses
  165. //
  166. message CMsgAMGetLicenses
  167. {
  168. optional fixed64 steamid = 1; // the steam ID to fetch licenses for
  169. }
  170. //
  171. // Used by CMsgAMGetLicensesResponse
  172. //
  173. message CMsgPackageLicense
  174. {
  175. optional uint32 package_id = 1; // ID of the package this license is for
  176. optional uint32 time_created = 2; // RTime32 when the license was granted
  177. optional uint32 owner_id = 3; // the original owner if this license. if this is different from given steamid, it's a borrowed package
  178. }
  179. //
  180. // k_EMsgAMGetLicensesResponse
  181. //
  182. message CMsgAMGetLicensesResponse
  183. {
  184. repeated CMsgPackageLicense license = 1; // the list of licenses the user owns
  185. optional uint32 result = 2; // result code, k_EResultOK on success
  186. }
  187. //
  188. // k_EMsgAMGetUserGameStats
  189. //
  190. message CMsgAMGetUserGameStats
  191. {
  192. optional fixed64 steam_id = 1; // ID of user
  193. optional fixed64 game_id = 2; // Game ID of stats to get
  194. repeated uint32 stats = 3;
  195. }
  196. //
  197. // k_EMsgAMGetUserGameStatsResponse
  198. //
  199. message CMsgAMGetUserGameStatsResponse
  200. {
  201. optional fixed64 steam_id = 1; // ID of user
  202. optional fixed64 game_id = 2; // Game ID
  203. optional int32 eresult = 3 [default = 2]; // EResult with result of query. (Fields following are only valid if this is EResultOK.)
  204. message Stats
  205. {
  206. optional uint32 stat_id = 1;
  207. optional uint32 stat_value = 2; // There are 4 of these, really only 8 bits each. Yay for compression!
  208. }
  209. message Achievement_Blocks
  210. {
  211. optional uint32 achievement_id = 1;
  212. optional uint32 achievement_bit_id = 2;
  213. optional fixed32 unlock_time = 3; // There are only 32 of these, matching the achievment bitfields, we check on the receiver that
  214. }
  215. repeated Stats stats = 4;
  216. repeated Achievement_Blocks achievement_blocks = 5;
  217. }
  218. // k_EMsgAdminGCGetCommandList
  219. message CMsgGCGetCommandList
  220. {
  221. optional uint32 app_id = 1;
  222. optional string command_prefix = 2; // prefix of the command to filter by
  223. };
  224. // k_EMsgAdminGCGetCommandListResponse
  225. message CMsgGCGetCommandListResponse
  226. {
  227. repeated string command_name = 1; // a list of command names
  228. };
  229. //
  230. // k_EGCMsgMemCachedGet
  231. //
  232. message CGCMsgMemCachedGet
  233. {
  234. repeated string keys = 1;
  235. }
  236. //
  237. // k_EGCMsgMemCachedGetResponse
  238. //
  239. message CGCMsgMemCachedGetResponse
  240. {
  241. message ValueTag
  242. {
  243. optional bool found = 1;
  244. optional bytes value = 2;
  245. }
  246. repeated ValueTag values = 1;
  247. }
  248. //
  249. // k_EGCMsgMemCachedSet
  250. //
  251. message CGCMsgMemCachedSet
  252. {
  253. message KeyPair
  254. {
  255. optional string name = 1;
  256. optional bytes value = 2;
  257. }
  258. repeated KeyPair keys = 1;
  259. }
  260. //
  261. // k_EGCMsgMemCachedDelete
  262. //
  263. message CGCMsgMemCachedDelete
  264. {
  265. repeated string keys = 1;
  266. }
  267. //
  268. // k_EGCMsgMemCachedStats
  269. //
  270. message CGCMsgMemCachedStats
  271. {
  272. // Nothing, yet.
  273. }
  274. //
  275. // k_EGCMsgMemCachedStatsResponse
  276. //
  277. message CGCMsgMemCachedStatsResponse
  278. {
  279. optional uint64 curr_connections = 1;
  280. optional uint64 cmd_get = 2;
  281. optional uint64 cmd_set = 3;
  282. optional uint64 cmd_flush = 4;
  283. optional uint64 get_hits = 5;
  284. optional uint64 get_misses = 6;
  285. optional uint64 delete_hits = 7;
  286. optional uint64 delete_misses = 8;
  287. optional uint64 bytes_read = 9;
  288. optional uint64 bytes_written = 10;
  289. optional uint64 limit_maxbytes = 11;
  290. optional uint64 curr_items = 12;
  291. optional uint64 evictions = 13;
  292. optional uint64 bytes = 14;
  293. }
  294. //
  295. // k_EGCMsgSQLStats
  296. //
  297. message CGCMsgSQLStats
  298. {
  299. optional uint32 schema_catalog = 1;
  300. }
  301. //
  302. // k_EGCMsgSQLStatsResponse
  303. //
  304. message CGCMsgSQLStatsResponse
  305. {
  306. optional uint32 threads = 1;
  307. optional uint32 threads_connected = 2;
  308. optional uint32 threads_active = 3;
  309. optional uint32 operations_submitted = 4;
  310. optional uint32 prepared_statements_executed = 5;
  311. optional uint32 non_prepared_statements_executed = 6;
  312. optional uint32 deadlock_retries = 7;
  313. optional uint32 operations_timed_out_in_queue = 8;
  314. optional uint32 errors = 9;
  315. }
  316. // k_EMsgAMAddFreeLicense
  317. message CMsgAMAddFreeLicense
  318. {
  319. optional fixed64 steamid = 1; // SteamID of account
  320. optional uint32 ip_public = 2; // IP of client (zero if not a client-initiated message)
  321. optional uint32 packageid = 3; // ID for package to purchase. Should be k_uPackageIdInvalid if shopping cart gid set
  322. optional string store_country_code = 4; // country code to use for purchase
  323. };
  324. // k_EMsgAMAddFreeLicenseResponse
  325. message CMsgAMAddFreeLicenseResponse
  326. {
  327. optional int32 eresult = 1 [default = 2]; // EResult with result of Purchase.
  328. optional int32 purchase_result_detail = 2; // Detailed result information
  329. optional fixed64 transid = 3; // ID of the created transaction
  330. };
  331. //
  332. // k_EGCMsgGetIPLocation
  333. //
  334. message CGCMsgGetIPLocation
  335. {
  336. repeated fixed32 ips = 1;
  337. }
  338. //
  339. // k_EGCMsgGetIPLocationResponse
  340. //
  341. message CIPLocationInfo
  342. {
  343. optional uint32 ip = 1;
  344. optional float latitude = 2;
  345. optional float longitude = 3;
  346. optional string country = 4;
  347. optional string state = 5;
  348. optional string city = 6;
  349. }
  350. message CGCMsgGetIPLocationResponse
  351. {
  352. repeated CIPLocationInfo infos = 1;
  353. }
  354. //
  355. // k_EGCMsgSystemStatsSchema
  356. //
  357. message CGCMsgSystemStatsSchema
  358. {
  359. optional uint32 gc_app_id = 1;
  360. optional bytes schema_kv = 2;
  361. }
  362. //
  363. // k_EGCMsgGetSystemStats
  364. //
  365. message CGCMsgGetSystemStats
  366. {
  367. }
  368. //
  369. // k_EGCMsgGetSystemStatsResponse
  370. //
  371. message CGCMsgGetSystemStatsResponse
  372. {
  373. optional uint32 gc_app_id = 1;
  374. optional bytes stats_kv = 2;
  375. // statically included in GCHost's stats
  376. optional uint32 active_jobs = 3;
  377. optional uint32 yielding_jobs = 4;
  378. optional uint32 user_sessions = 5;
  379. optional uint32 game_server_sessions = 6;
  380. optional uint32 socaches = 7;
  381. optional uint32 socaches_to_unload = 8;
  382. optional uint32 socaches_loading = 9;
  383. optional uint32 writeback_queue = 10;
  384. optional uint32 steamid_locks = 11;
  385. optional uint32 logon_queue = 12;
  386. optional uint32 logon_jobs = 13;
  387. }
  388. // k_EGCMsgSendEmail
  389. message CMsgAMSendEmail
  390. {
  391. message ReplacementToken
  392. {
  393. optional string token_name = 1;
  394. optional string token_value = 2;
  395. }
  396. message PersonaNameReplacementToken
  397. {
  398. optional fixed64 steamid = 1;
  399. optional string token_name = 2;
  400. }
  401. optional fixed64 steamid = 1;
  402. optional uint32 email_msg_type = 2;
  403. optional uint32 email_format = 3;
  404. repeated PersonaNameReplacementToken persona_name_tokens = 5;
  405. optional uint32 source_gc = 6;
  406. repeated ReplacementToken tokens = 7;
  407. }
  408. // k_EGCMsgSendEmailResponse
  409. message CMsgAMSendEmailResponse
  410. {
  411. optional uint32 eresult = 1 [default = 2];
  412. }
  413. // k_EGCMsgGetEmailTemplate
  414. message CMsgGCGetEmailTemplate
  415. {
  416. optional uint32 app_id = 1;
  417. optional uint32 email_msg_type = 2;
  418. optional int32 email_lang = 3;
  419. optional int32 email_format = 4;
  420. }
  421. // k_EGCMsgGetEmailTemplateResponse
  422. message CMsgGCGetEmailTemplateResponse
  423. {
  424. optional uint32 eresult = 1 [default = 2];
  425. optional bool template_exists = 2;
  426. optional string template = 3;
  427. }
  428. // k_EMsgAMGrantGuestPasses2
  429. message CMsgAMGrantGuestPasses2
  430. {
  431. optional fixed64 steam_id = 1;
  432. optional uint32 package_id = 2;
  433. optional int32 passes_to_grant = 3;
  434. optional int32 days_to_expiration = 4;
  435. optional int32 action = 5;
  436. }
  437. // k_EMsgAMGrantGuestPasses2Response
  438. message CMsgAMGrantGuestPasses2Response
  439. {
  440. optional int32 eresult = 1 [default = 2];
  441. optional int32 passes_granted = 2 [default = 0];
  442. }
  443. // k_EGCMsgGetAccountDetails
  444. message CGCSystemMsg_GetAccountDetails
  445. {
  446. option (msgpool_soft_limit) = 128;
  447. option (msgpool_hard_limit) = 512;
  448. optional fixed64 steamid = 1; // User to get details for
  449. optional uint32 appid = 2; // appid of the source GC
  450. }
  451. message CGCSystemMsg_GetAccountDetails_Response
  452. {
  453. option (msgpool_soft_limit) = 128;
  454. option (msgpool_hard_limit) = 512;
  455. optional uint32 eresult_deprecated = 1 [ default = 2 ]; // Result of the request
  456. optional string account_name = 2; // Login name for the user
  457. optional string persona_name = 3; // Diplay name for the user
  458. optional bool is_profile_public = 4; // Is the user's profile public
  459. optional bool is_inventory_public = 5; // Is the user's inventory public
  460. //optional bool is_trusted = 6; // Is the user trusted
  461. optional bool is_vac_banned = 7; // Is the user vac banned
  462. optional bool is_cyber_cafe = 8; // Is the user a cybe cafe
  463. optional bool is_school_account = 9; // Is the user a school account
  464. optional bool is_limited = 10; // Is the user limited
  465. optional bool is_subscribed = 11; // Is the user subscribed to this app
  466. optional uint32 package = 12; // The package the user owns the app through
  467. optional bool is_free_trial_account = 13; // Is the user playing the game for free
  468. optional uint32 free_trial_expiration = 14; // If the user is playing for free, when does it expire?
  469. optional bool is_low_violence = 15; // Is the user restricted to low-violence for this app
  470. optional bool is_account_locked_down = 16; // Is the user's account locked
  471. optional bool is_community_banned = 17; // Is the user banned from performing community actions
  472. optional bool is_trade_banned = 18; // Is the user banned from trading items to other users on Steam
  473. optional uint32 trade_ban_expiration = 19; // The time at which the user is unbanned from trading
  474. optional uint32 accountid = 20; // The account ID of the user we're responding about
  475. optional uint32 suspension_end_time = 21; // If suspended (ban that ends), the date/time the suspension ends
  476. optional string currency = 22; // The currency associated with this account
  477. optional uint32 steam_level = 23; // The Steam level of the user
  478. optional uint32 friend_count = 24; // Number of friends
  479. optional uint32 account_creation_time = 25; // Time when the account was created
  480. optional bool is_steamguard_enabled = 27; // Is SteamGuard enabled
  481. optional bool is_phone_verified = 28; // Has a verified phone number
  482. optional bool is_two_factor_auth_enabled = 29; // Has SteamGuard two factor auth
  483. optional uint32 two_factor_enabled_time = 30; // Time two factor was added
  484. optional uint32 phone_verification_time = 31; // Time phone was verified
  485. optional uint64 phone_id = 33; // Phone identifier
  486. optional bool is_phone_identifying = 34; // Phone is useful for identity
  487. }
  488. //
  489. // k_EGCMsgCheckClanMembership
  490. //
  491. message CMsgGCCheckClanMembership
  492. {
  493. optional fixed64 steamid = 1; // [ (description) = "User whose group memberships we want" ];
  494. optional uint32 clanid = 2; // [ (description) = "Clan to check membership against" ];
  495. }
  496. message CMsgGCCheckClanMembership_Response
  497. {
  498. optional bool ismember = 1; // [ (description) = "Whether the user in question is a member of the group in question" ];
  499. }
  500. //
  501. // k_EGCMsgGetPersonaNames
  502. //
  503. message CMsgGCGetPersonaNames
  504. {
  505. repeated fixed64 steamids = 1; // Users whose persona names we want
  506. }
  507. message CMsgGCGetPersonaNames_Response
  508. {
  509. message PersonaName
  510. {
  511. optional fixed64 steamid = 1; // User we could get a name for
  512. optional string persona_name = 2; // Display name for that user
  513. }
  514. repeated PersonaName succeeded_lookups = 1; // Users we could get names for
  515. repeated fixed64 failed_lookup_steamids = 2; // Users we failed to get a names for
  516. }
  517. //
  518. // k_EGCMsgCheckFriendship
  519. //
  520. message CMsgGCCheckFriendship
  521. {
  522. optional fixed64 steamid_left = 1; // User whose friends list we'll load
  523. optional fixed64 steamid_right = 2; // User to look for in the list we load
  524. }
  525. message CMsgGCCheckFriendship_Response
  526. {
  527. optional bool success = 1; // Whether the API calls all succeeded
  528. optional bool found_friendship = 2; // Denotes whether the users are friends (false on API failure)
  529. }
  530. //
  531. // k_EGCMsgMasterSetDirectory
  532. //
  533. message CMsgGCMsgMasterSetDirectory
  534. {
  535. message SubGC
  536. {
  537. optional uint32 dir_index = 1; // The index in the GC directory indicating what role this GC serves
  538. optional string name = 2; // A string to give the GC a name for asserts/logs/connection, etc
  539. optional string box = 3; // The box that this GC is expected to be associated with
  540. optional string command_line = 4; // Additional command line parameters to provide for this GC instance
  541. optional string gc_binary = 5; // The binary that should be launched for this GC. This can be left blank to launch the default binary
  542. }
  543. optional uint32 master_dir_index = 1; // The index of the master GC so that it knows how to setup the routing tables to include the master and sub GCs
  544. repeated SubGC dir = 2; // A listing of the various sub GCs that the GCH should create
  545. }
  546. message CMsgGCMsgMasterSetDirectory_Response
  547. {
  548. optional int32 eresult = 1 [default = 2]; // Could the GC start the processes? It doesn't mean they will all get initialized and each sub GC still needs to ack, but catches failure earlier
  549. }
  550. //
  551. // k_EGCMsgWebAPIJobRequestForwardResponse
  552. //
  553. message CMsgGCMsgWebAPIJobRequestForwardResponse
  554. {
  555. optional uint32 dir_index = 1; // The directory index of the GC which has been delegated to handle this particular WebAPI request
  556. }
  557. //
  558. // k_EGCMsgGetPurchaseTrustStatus
  559. //
  560. message CGCSystemMsg_GetPurchaseTrust_Request
  561. {
  562. optional fixed64 steamid = 1; // User to get details for
  563. }
  564. message CGCSystemMsg_GetPurchaseTrust_Response
  565. {
  566. optional bool has_prior_purchase_history = 1; // The user has prior purchase history with no recent gaps in purchase activity
  567. optional bool has_no_recent_password_resets = 2; // The user hasn't had their password reset recently
  568. optional bool is_wallet_cash_trusted = 3; // False if the user has recently used a new payment method to fund his or her wallet
  569. optional uint32 time_all_trusted = 4; // The time that the user will be trusted in all of the given fields if he or she were to complete a microtransaction right now
  570. }
  571. // k_EMsgGCHAccountVacStatusChange
  572. message CMsgGCHAccountVacStatusChange
  573. {
  574. optional fixed64 steam_id = 1;
  575. optional uint32 app_id = 2;
  576. optional uint32 rtime_vacban_starts = 3;
  577. optional bool is_banned_now = 4;
  578. optional bool is_banned_future = 5;
  579. }
  580. // k_EMsgGCHAccountTradeBanStatusChange
  581. message CMsgGCHAccountTradeBanStatusChange
  582. {
  583. optional fixed64 steamid = 1;
  584. optional uint32 appid = 2;
  585. optional bool is_banned = 3;
  586. optional uint32 time_banned_until = 4;
  587. }
  588. // k_EMsgGCHAccountLockStatusChange
  589. message CMsgGCHAccountLockStatusChange
  590. {
  591. optional fixed64 steamid = 1;
  592. optional uint32 appid = 2;
  593. optional bool is_locked = 3;
  594. }
  595. // k_EMsgGCHVacVerificationChange
  596. message CMsgGCHVacVerificationChange
  597. {
  598. optional fixed64 steamid = 1;
  599. optional uint32 appid = 2;
  600. optional bool is_verified = 3;
  601. }
  602. // k_EMsgGCHAccountPhoneNumberChange
  603. message CMsgGCHAccountPhoneNumberChange
  604. {
  605. optional fixed64 steamid = 1;
  606. optional uint32 appid = 2;
  607. optional uint64 phone_id = 3;
  608. optional bool is_verified = 4;
  609. optional bool is_identifying = 5;
  610. }
  611. // k_EMsgGCHAccountTwoFactorChange
  612. message CMsgGCHAccountTwoFactorChange
  613. {
  614. optional fixed64 steamid = 1;
  615. optional uint32 appid = 2;
  616. optional bool twofactor_enabled = 3;
  617. }
  618. //
  619. // k_EGCMsgGetPartnerAccountLink
  620. //
  621. message CMsgGCGetPartnerAccountLink
  622. {
  623. optional fixed64 steamid = 1; // User whose partner account link details we want to get
  624. }
  625. message CMsgGCGetPartnerAccountLink_Response
  626. {
  627. optional uint32 pwid = 1; // Perfect World ID (not specified if not linked)
  628. optional uint32 nexonid = 2; // Nexon ID (not specified if not linked)
  629. }
  630. //
  631. // k_EGCMsgMasterSetWebAPIRouting and k_EGCMsgMasterSetClientMsgRouting
  632. //
  633. message CMsgGCRoutingInfo
  634. {
  635. enum RoutingMethod
  636. {
  637. RANDOM = 0; // random instead of round-robin so that we don't need to track state per routing pool
  638. DISCARD = 1;
  639. CLIENT_STEAMID = 2;
  640. PROTOBUF_FIELD_UINT64 = 3;
  641. WEBAPI_PARAM_UINT64 = 4;
  642. }
  643. repeated uint32 dir_index = 1; // One or more directory indices which are potential targets for this route
  644. optional RoutingMethod method = 2 [ default = RANDOM ]; // Method by which the route choses its target from multiple dir_index values
  645. optional RoutingMethod fallback = 3 [ default = DISCARD ]; // Fallback method to use when default method is not applicable (eg, field can't be parsed)
  646. optional uint32 protobuf_field = 4; // For PROTOBUF_FIELD_UINT64, the protobuf field number to decode as a uint64 for routing
  647. optional string webapi_param = 5; // For WEBAPI_PARAM_UINT64 method, the case-insensitive name of the webapi parameter
  648. }
  649. message CMsgGCMsgMasterSetWebAPIRouting
  650. {
  651. message Entry
  652. {
  653. optional string interface_name = 1;
  654. optional string method_name = 2;
  655. optional CMsgGCRoutingInfo routing = 3;
  656. }
  657. repeated Entry entries = 1;
  658. }
  659. message CMsgGCMsgMasterSetClientMsgRouting
  660. {
  661. message Entry
  662. {
  663. optional uint32 msg_type = 1; // Client message ID to be routed; top bit is ignored for historical reasons
  664. optional CMsgGCRoutingInfo routing = 2;
  665. }
  666. repeated Entry entries = 1;
  667. }
  668. message CMsgGCMsgMasterSetWebAPIRouting_Response
  669. {
  670. optional int32 eresult = 1 [ default = 2 ]; // Success or failure code from the GCH when processing k_EGCMsgMasterSetWebAPIRouting
  671. }
  672. message CMsgGCMsgMasterSetClientMsgRouting_Response
  673. {
  674. optional int32 eresult = 1 [ default = 2 ]; // Success or failure code from the GCH when processing k_EGCMsgMasterSetClientMsgRouting
  675. }
  676. // k_EGCMsgSetOptions
  677. message CMsgGCMsgSetOptions
  678. {
  679. enum Option
  680. {
  681. // Notifications (aka "data streams" - unsoliticed messages from Steam) - default disabled, specify to opt-in
  682. NOTIFY_USER_SESSIONS = 0;
  683. NOTIFY_SERVER_SESSIONS = 1;
  684. NOTIFY_ACHIEVEMENTS = 2;
  685. NOTIFY_VAC_ACTION = 3;
  686. // todo: other options? should start options higher up, like 20+, to save room for streams?
  687. }
  688. repeated Option options = 1;
  689. // The client_msg_ranges field indicates which client messages, if any, this GC should receive copies of
  690. message MessageRange
  691. {
  692. required uint32 low = 1;
  693. required uint32 high = 2;
  694. }
  695. repeated MessageRange client_msg_ranges = 2;
  696. // The GCSQL version field is only read by the GC.EXE host to determine support for enums, etc; the GCH doesn't care
  697. enum GCSQLVersion
  698. {
  699. GCSQL_VERSION_BASELINE = 1; // baseline
  700. GCSQL_VERSION_BOOLTYPE = 2; // added explicit support for bool types (instead of int8)
  701. }
  702. optional GCSQLVersion gcsql_version = 3;
  703. }
  704. // k_EMsgGCHUpdateSession
  705. message CMsgGCHUpdateSession
  706. {
  707. optional fixed64 steam_id = 1;
  708. optional uint32 app_id = 2;
  709. optional bool online = 3;
  710. optional fixed64 server_steam_id = 4; // For a game client, the steam_id of the current server
  711. optional uint32 server_addr = 5; // The IP address of the current server (or self for server state)
  712. optional uint32 server_port = 6; // The IP port of the server (or self for server state)
  713. optional uint32 os_type = 7;
  714. optional uint32 client_addr = 8; // For a game client, the public IP address of the client
  715. message ExtraField
  716. {
  717. optional string name = 1;
  718. optional string value = 2;
  719. }
  720. repeated ExtraField extra_fields = 9;
  721. }
  722. //
  723. // k_EGCMsgVSReportedSuspiciousActivity
  724. //
  725. message CMsgNotificationOfSuspiciousActivity
  726. {
  727. optional fixed64 steamid = 1;
  728. optional uint32 appid = 2;
  729. message MultipleGameInstances
  730. {
  731. optional uint32 app_instance_count = 1;
  732. repeated fixed64 other_steamids = 2;
  733. }
  734. optional MultipleGameInstances multiple_instances = 3;
  735. }
  736. // Do not remove this comment due to a bug on the Mac OS X protobuf compiler