option optimize_for = SPEED;

enum ERemoteClientBroadcastMsg {
	k_ERemoteClientBroadcastMsgDiscovery = 0;
	k_ERemoteClientBroadcastMsgStatus = 1;
	k_ERemoteClientBroadcastMsgOffline = 2;
	k_ERemoteDeviceAuthorizationRequest = 3;
	k_ERemoteDeviceAuthorizationResponse = 4;
	k_ERemoteDeviceStreamingRequest = 5;
	k_ERemoteDeviceStreamingResponse = 6;
	k_ERemoteDeviceProofRequest = 7;
	k_ERemoteDeviceProofResponse = 8;
	k_ERemoteDeviceAuthorizationCancelRequest = 9;
	k_ERemoteDeviceStreamingCancelRequest = 10;
}

enum ERemoteClientService {
	k_ERemoteClientServiceNone = 0;
	k_ERemoteClientServiceRemoteControl = 1;
	k_ERemoteClientServiceGameStreaming = 2;
}

enum ERemoteDeviceAuthorizationResult {
	k_ERemoteDeviceAuthorizationSuccess = 0;
	k_ERemoteDeviceAuthorizationDenied = 1;
	k_ERemoteDeviceAuthorizationNotLoggedIn = 2;
	k_ERemoteDeviceAuthorizationOffline = 3;
	k_ERemoteDeviceAuthorizationBusy = 4;
	k_ERemoteDeviceAuthorizationInProgress = 5;
	k_ERemoteDeviceAuthorizationTimedOut = 6;
	k_ERemoteDeviceAuthorizationFailed = 7;
	k_ERemoteDeviceAuthorizationCanceled = 8;
}

enum ERemoteDeviceStreamingResult {
	k_ERemoteDeviceStreamingSuccess = 0;
	k_ERemoteDeviceStreamingUnauthorized = 1;
	k_ERemoteDeviceStreamingScreenLocked = 2;
	k_ERemoteDeviceStreamingFailed = 3;
	k_ERemoteDeviceStreamingBusy = 4;
	k_ERemoteDeviceStreamingInProgress = 5;
	k_ERemoteDeviceStreamingCanceled = 6;
}

message CMsgRemoteClientBroadcastHeader {
	optional uint64 client_id = 1;
	optional .ERemoteClientBroadcastMsg msg_type = 2 [default = k_ERemoteClientBroadcastMsgDiscovery];
	optional uint64 instance_id = 3;
}

message CMsgRemoteClientBroadcastStatus {
	message User {
		optional fixed64 steamid = 1;
		optional uint32 auth_key_id = 2;
	}

	optional int32 version = 1;
	optional int32 min_version = 2;
	optional uint32 connect_port = 3;
	optional string hostname = 4;
	optional uint32 enabled_services = 6;
	optional int32 ostype = 7 [default = 0];
	optional bool is64bit = 8 [default = false];
	repeated .CMsgRemoteClientBroadcastStatus.User users = 9;
	optional int32 euniverse = 11;
	optional uint32 timestamp = 12;
}

message CMsgRemoteClientBroadcastDiscovery {
	optional uint32 seq_num = 1;
}

message CMsgRemoteDeviceAuthorizationRequest {
	message CKeyEscrow_Ticket {
		optional bytes password = 1;
		optional uint64 identifier = 2;
		optional bytes payload = 3;
		optional uint32 timestamp = 4;
		optional .CMsgRemoteDeviceAuthorizationRequest.EKeyEscrowUsage usage = 5 [default = k_EKeyEscrowUsageStreamingDevice];
	}

	enum EKeyEscrowUsage {
		k_EKeyEscrowUsageStreamingDevice = 0;
	}

	required bytes device_token = 1;
	optional string device_name = 2;
	required bytes encrypted_request = 3;
}

message CMsgRemoteDeviceAuthorizationCancelRequest {
}

message CMsgRemoteDeviceAuthorizationResponse {
	required .ERemoteDeviceAuthorizationResult result = 1 [default = k_ERemoteDeviceAuthorizationSuccess];
}

message CMsgRemoteDeviceStreamingRequest {
	required uint32 request_id = 1;
}

message CMsgRemoteDeviceStreamingCancelRequest {
	required uint32 request_id = 1;
}

message CMsgRemoteDeviceStreamingResponse {
	required uint32 request_id = 1;
	required .ERemoteDeviceStreamingResult result = 2 [default = k_ERemoteDeviceStreamingSuccess];
	optional uint32 port = 3;
	optional bytes encrypted_session_key = 4;
}

message CMsgRemoteDeviceProofRequest {
	required bytes challenge = 1;
}

message CMsgRemoteDeviceProofResponse {
	required bytes response = 1;
}

