import "steammessages.proto";

option optimize_for = SPEED;
option cc_generic_services = false;

enum ESourceEngine {
	k_ESE_Source1 = 0;
	k_ESE_Source2 = 1;
}

enum PartnerAccountType {
	PARTNER_NONE = 0;
	PARTNER_PERFECT_WORLD = 1;
	PARTNER_NEXON = 2;
	PARTNER_INVALID = 3;
}

enum GCConnectionStatus {
	GCConnectionStatus_HAVE_SESSION = 0;
	GCConnectionStatus_GC_GOING_DOWN = 1;
	GCConnectionStatus_NO_SESSION = 2;
	GCConnectionStatus_NO_SESSION_IN_LOGON_QUEUE = 3;
	GCConnectionStatus_NO_STEAM = 4;
	GCConnectionStatus_SUSPENDED = 5;
}

message CMsgSHA1Digest {
	required fixed64 block1 = 1;
	required fixed64 block2 = 2;
	required fixed32 block3 = 3;
}

message CMsgSOIDOwner {
	optional uint32 type = 1;
	optional uint64 id = 2;
}

message CMsgSOSingleObject {
	optional int32 type_id = 2;
	optional bytes object_data = 3;
	optional fixed64 version = 4;
	optional .CMsgSOIDOwner owner_soid = 5;
	optional uint32 service_id = 6;
}

message CMsgSOMultipleObjects {
	message SingleObject {
		option (msgpool_soft_limit) = 256;
		option (msgpool_hard_limit) = 1024;
		optional int32 type_id = 1;
		optional bytes object_data = 2;
	}

	repeated .CMsgSOMultipleObjects.SingleObject objects_modified = 2;
	optional fixed64 version = 3;
	repeated .CMsgSOMultipleObjects.SingleObject objects_added = 4;
	repeated .CMsgSOMultipleObjects.SingleObject objects_removed = 5;
	optional .CMsgSOIDOwner owner_soid = 6;
	optional uint32 service_id = 7;
}

message CMsgSOCacheSubscribed {
	message SubscribedType {
		optional int32 type_id = 1;
		repeated bytes object_data = 2;
	}

	repeated .CMsgSOCacheSubscribed.SubscribedType objects = 2;
	optional fixed64 version = 3;
	optional .CMsgSOIDOwner owner_soid = 4;
	optional uint32 service_id = 5;
	repeated uint32 service_list = 6;
	optional fixed64 sync_version = 7;
}

message CMsgSOCacheSubscribedUpToDate {
	optional fixed64 version = 1;
	optional .CMsgSOIDOwner owner_soid = 2;
	optional uint32 service_id = 3;
	repeated uint32 service_list = 4;
	optional fixed64 sync_version = 5;
}

message CMsgSOCacheUnsubscribed {
	optional .CMsgSOIDOwner owner_soid = 2;
}

message CMsgSOCacheSubscriptionCheck {
	optional fixed64 version = 2;
	optional .CMsgSOIDOwner owner_soid = 3;
	optional uint32 service_id = 4;
	repeated uint32 service_list = 5;
	optional fixed64 sync_version = 6;
}

message CMsgSOCacheSubscriptionRefresh {
	optional .CMsgSOIDOwner owner_soid = 2;
}

message CMsgSOCacheVersion {
	optional fixed64 version = 1;
}

message CMsgGCMultiplexMessage {
	optional uint32 msgtype = 1;
	optional bytes payload = 2;
	repeated fixed64 steamids = 3;
}

message CGCToGCMsgMasterAck {
	message Process {
		optional uint32 dir_index = 1;
		repeated uint32 type_instances = 2;
	}

	optional uint32 dir_index = 1;
	optional string machine_name = 3;
	optional string process_name = 4;
	repeated .CGCToGCMsgMasterAck.Process directory = 6;
}

message CGCToGCMsgMasterAck_Response {
	optional int32 eresult = 1 [default = 2];
}

message CGCToGCMsgMasterStartupComplete {
	message GCInfo {
		optional uint32 dir_index = 1;
		optional string machine_name = 2;
	}

	repeated .CGCToGCMsgMasterStartupComplete.GCInfo gc_info = 1;
}

message CGCToGCMsgRouted {
	optional uint32 msg_type = 1;
	optional fixed64 sender_id = 2;
	optional bytes net_message = 3;
}

message CGCToGCMsgRoutedReply {
	optional uint32 msg_type = 1;
	optional bytes net_message = 2;
}

message CMsgGCUpdateSubGCSessionInfo {
	message CMsgUpdate {
		optional fixed64 steamid = 1;
		optional fixed32 ip = 2;
		optional bool trusted = 3;
	}

	repeated .CMsgGCUpdateSubGCSessionInfo.CMsgUpdate updates = 1;
}

message CMsgGCRequestSubGCSessionInfo {
	optional fixed64 steamid = 1;
}

message CMsgGCRequestSubGCSessionInfoResponse {
	optional fixed32 ip = 1;
	optional bool trusted = 2;
}

message CMsgSOCacheHaveVersion {
	optional .CMsgSOIDOwner soid = 1;
	optional fixed64 version = 2;
	optional uint32 service_id = 3;
	optional uint32 cached_file_version = 4;
}

message CMsgClientHello {
	optional uint32 version = 1;
	repeated .CMsgSOCacheHaveVersion socache_have_versions = 2;
	optional uint32 client_session_need = 3;
	optional .PartnerAccountType client_launcher = 4 [default = PARTNER_NONE];
	optional string secret_key = 5;
	optional uint32 client_language = 6;
	optional .ESourceEngine engine = 7 [default = k_ESE_Source1];
}

message CMsgClientWelcome {
	message Location {
		optional float latitude = 1;
		optional float longitude = 2;
		optional string country = 3;
	}

	optional uint32 version = 1;
	optional bytes game_data = 2;
	repeated .CMsgSOCacheSubscribed outofdate_subscribed_caches = 3;
	repeated .CMsgSOCacheSubscriptionCheck uptodate_subscribed_caches = 4;
	optional .CMsgClientWelcome.Location location = 5;
	optional bytes save_game_key = 6;
}

message CMsgConnectionStatus {
	optional .GCConnectionStatus status = 1 [default = GCConnectionStatus_HAVE_SESSION];
	optional uint32 client_session_need = 2;
	optional int32 queue_position = 3;
	optional int32 queue_size = 4;
	optional int32 wait_seconds = 5;
	optional int32 estimated_wait_seconds_remaining = 6;
}

message CMsgGCToGCSOCacheSubscribe {
	message CMsgHaveVersions {
		optional uint32 service_id = 1;
		optional uint64 version = 2;
	}

	optional fixed64 subscriber = 1;
	optional fixed64 subscribe_to = 2;
	optional fixed64 sync_version = 3;
	repeated .CMsgGCToGCSOCacheSubscribe.CMsgHaveVersions have_versions = 4;
}

message CMsgGCToGCSOCacheUnsubscribe {
	optional fixed64 subscriber = 1;
	optional fixed64 unsubscribe_from = 2;
}

message CMsgGCClientPing {
}

message CMsgGCToGCLoadSessionSOCache {
	optional uint32 account_id = 1;
}

message CMsgGCToGCLoadSessionSOCacheResponse {
}

message CMsgGCToGCUpdateSessionStats {
	optional uint32 user_sessions = 1;
	optional uint32 server_sessions = 2;
	optional bool in_logon_surge = 3;
}

message CWorkshop_PopulateItemDescriptions_Request {
	message SingleItemDescription {
		optional uint32 gameitemid = 1;
		optional string item_description = 2;
	}

	message ItemDescriptionsLanguageBlock {
		optional string language = 1;
		repeated .CWorkshop_PopulateItemDescriptions_Request.SingleItemDescription descriptions = 2;
	}

	optional uint32 appid = 1;
	repeated .CWorkshop_PopulateItemDescriptions_Request.ItemDescriptionsLanguageBlock languages = 2;
}

message CWorkshop_GetContributors_Request {
	optional uint32 appid = 1;
	optional uint32 gameitemid = 2;
}

message CWorkshop_GetContributors_Response {
	repeated fixed64 contributors = 1;
}

message CWorkshop_SetItemPaymentRules_Request {
	message WorkshopItemPaymentRule {
		optional uint64 workshop_file_id = 1;
		optional float revenue_percentage = 2;
		optional string rule_description = 3;
	}

	message PartnerItemPaymentRule {
		optional uint32 account_id = 1;
		optional float revenue_percentage = 2;
		optional string rule_description = 3;
	}

	optional uint32 appid = 1;
	optional uint32 gameitemid = 2;
	repeated .CWorkshop_SetItemPaymentRules_Request.WorkshopItemPaymentRule associated_workshop_files = 3;
	repeated .CWorkshop_SetItemPaymentRules_Request.PartnerItemPaymentRule partner_accounts = 4;
}

message CWorkshop_SetItemPaymentRules_Response {
}

message CBroadcast_PostGameDataFrame_Request {
	optional uint32 appid = 1;
	optional fixed64 steamid = 2;
	optional fixed64 broadcast_id = 3;
	optional bytes frame_data = 4;
}

