syntax = "proto2";

option optimize_for = SPEED;
option cc_generic_services = false;

enum EStreamChannel {
  k_EStreamChannelInvalid = -1;
  k_EStreamChannelDiscovery = 0;
  k_EStreamChannelControl = 1;
  k_EStreamChannelStats = 2;
  k_EStreamChannelDataChannelStart = 3;
}

enum EStreamDiscoveryMessage {
  k_EStreamDiscoveryPingRequest = 1;
  k_EStreamDiscoveryPingResponse = 2;
}

enum EStreamControlMessage {
  k_EStreamControlAuthenticationRequest = 1;
  k_EStreamControlAuthenticationResponse = 2;
  k_EStreamControlNegotiationInit = 3;
  k_EStreamControlNegotiationSetConfig = 4;
  k_EStreamControlNegotiationComplete = 5;
  k_EStreamControlClientHandshake = 6;
  k_EStreamControlServerHandshake = 7;
  k_EStreamControlStartNetworkTest = 8;
  k_EStreamControlKeepAlive = 9;
  k_EStreamControl_LAST_SETUP_MESSAGE = 15;
  k_EStreamControlStartAudioData = 50;
  k_EStreamControlStopAudioData = 51;
  k_EStreamControlStartVideoData = 52;
  k_EStreamControlStopVideoData = 53;
  k_EStreamControlInputMouseMotion = 54;
  k_EStreamControlInputMouseWheel = 55;
  k_EStreamControlInputMouseDown = 56;
  k_EStreamControlInputMouseUp = 57;
  k_EStreamControlInputKeyDown = 58;
  k_EStreamControlInputKeyUp = 59;
  k_EStreamControlInputGamepadAttached_OBSOLETE = 60;
  k_EStreamControlInputGamepadEvent_OBSOLETE = 61;
  k_EStreamControlInputGamepadDetached_OBSOLETE = 62;
  k_EStreamControlShowCursor = 63;
  k_EStreamControlHideCursor = 64;
  k_EStreamControlSetCursor = 65;
  k_EStreamControlGetCursorImage = 66;
  k_EStreamControlSetCursorImage = 67;
  k_EStreamControlDeleteCursor = 68;
  k_EStreamControlSetTargetFramerate = 69;
  k_EStreamControlInputLatencyTest = 70;
  k_EStreamControlGamepadRumble_OBSOLETE = 71;
  k_EStreamControlOverlayEnabled = 74;
  k_EStreamControlInputControllerAttached_OBSOLETE = 75;
  k_EStreamControlInputControllerState_OBSOLETE = 76;
  k_EStreamControlTriggerHapticPulse_OBSOLETE = 77;
  k_EStreamControlInputControllerDetached_OBSOLETE = 78;
  k_EStreamControlVideoDecoderInfo = 80;
  k_EStreamControlSetTitle = 81;
  k_EStreamControlSetIcon = 82;
  k_EStreamControlQuitRequest = 83;
  k_EStreamControlSetQoS = 87;
  k_EStreamControlInputControllerWirelessPresence_OBSOLETE = 88;
  k_EStreamControlSetGammaRamp = 89;
  k_EStreamControlVideoEncoderInfo = 90;
  k_EStreamControlInputControllerStateHID_OBSOLETE = 93;
  k_EStreamControlSetTargetBitrate = 94;
  k_EStreamControlSetControllerPairingEnabled_OBSOLETE = 95;
  k_EStreamControlSetControllerPairingResult_OBSOLETE = 96;
  k_EStreamControlTriggerControllerDisconnect_OBSOLETE = 97;
  k_EStreamControlSetActivity = 98;
  k_EStreamControlSetStreamingClientConfig = 99;
  k_EStreamControlSystemSuspend = 100;
  k_EStreamControlSetControllerSettings_OBSOLETE = 101;
  k_EStreamControlVirtualHereRequest = 102;
  k_EStreamControlVirtualHereReady = 103;
  k_EStreamControlVirtualHereShareDevice = 104;
  k_EStreamControlSetSpectatorMode = 105;
  k_EStreamControlRemoteHID = 106;
  k_EStreamControlStartMicrophoneData = 107;
  k_EStreamControlStopMicrophoneData = 108;
  k_EStreamControlInputText = 109;
  k_EStreamControlTouchConfigActive = 110;
  k_EStreamControlGetTouchConfigData = 111;
  k_EStreamControlSetTouchConfigData = 112;
  k_EStreamControlSaveTouchConfigLayout = 113;
  k_EStreamControlTouchActionSetActive = 114;
  k_EStreamControlGetTouchIconData = 115;
  k_EStreamControlSetTouchIconData = 116;
  k_EStreamControlInputTouchFingerDown = 117;
  k_EStreamControlInputTouchFingerMotion = 118;
  k_EStreamControlInputTouchFingerUp = 119;
  k_EStreamControlSetCaptureSize = 120;
  k_EStreamControlSetFlashState = 121;
  k_EStreamControlPause = 122;
  k_EStreamControlResume = 123;
  k_EStreamControlEnableHighResCapture = 124;
  k_EStreamControlDisableHighResCapture = 125;
  k_EStreamControlToggleMagnification = 126;
  k_EStreamControlSetCapslock = 127;
  k_EStreamControlSetKeymap = 128;
  k_EStreamControlStopRequest = 129;
  k_EStreamControlTouchActionSetLayerAdded = 130;
  k_EStreamControlTouchActionSetLayerRemoved = 131;
  k_EStreamControlRemotePlayTogetherGroupUpdate = 132;
  k_EStreamControlSetInputTemporarilyDisabled = 133;
  k_EStreamControlSetQualityOverride = 134;
  k_EStreamControlSetBitrateOverride = 135;
  k_EStreamControlShowOnScreenKeyboard = 136;
  k_EStreamControlControllerConfigMsg = 137;
  k_EStreamControlControllerPersonalizationUpdate = 138;
  k_EStreamControlEnableNeptuneData_OBSOLETE = 139;
  k_EStreamControlDisableNeptuneData_OBSOLETE = 140;
  k_EStreamControlStartNeptuneData_OBSOLETE = 141;
  k_EStreamControlStopNeptuneData_OBSOLETE = 142;
  k_EStreamControlPauseControllerInput = 143;
  k_EStreamControlResumeControllerInput = 144;
  k_EStreamControlVRConnectionReady = 145;
  k_EStreamControlSetCursorScale = 146;
}

enum EStreamVersion {
  k_EStreamVersionNone = 0;
  k_EStreamVersionCurrent = 1;
}

enum EStreamAudioCodec {
  k_EStreamAudioCodecNone = 0;
  k_EStreamAudioCodecRaw = 1;
  k_EStreamAudioCodecVorbis = 2;
  k_EStreamAudioCodecOpus = 3;
  k_EStreamAudioCodecMP3 = 4;
  k_EStreamAudioCodecAAC = 5;
}

enum EStreamVideoCodec {
  k_EStreamVideoCodecNone = 0;
  k_EStreamVideoCodecRaw = 1;
  k_EStreamVideoCodecVP8 = 2;
  k_EStreamVideoCodecVP9 = 3;
  k_EStreamVideoCodecH264 = 4;
  k_EStreamVideoCodecHEVC = 5;
  k_EStreamVideoCodecORBX1 = 6;
  k_EStreamVideoCodecORBX2 = 7;
  k_EStreamVideoCodecAV1 = 8;
}

enum EStreamQualityPreference {
  k_EStreamQualityAutomatic = -1;
  k_EStreamQualityFast = 1;
  k_EStreamQualityBalanced = 2;
  k_EStreamQualityBeautiful = 3;
}

enum EStreamBitrate {
  k_EStreamBitrateAutodetect = -1;
  k_EStreamBitrateUnlimited = 0;
}

enum EStreamColorspace {
  k_EStreamColorspace_Unknown = 0;
  k_EStreamColorspace_BT601 = 1;
  k_EStreamColorspace_BT601_Full = 2;
  k_EStreamColorspace_BT709 = 3;
  k_EStreamColorspace_BT709_Full = 4;
  k_EStreamColorspace_HDR10 = 5;
}

enum EStreamP2PScope {
  k_EStreamP2PScopeAutomatic = 0;
  k_EStreamP2PScopeDisabled = 1;
  k_EStreamP2PScopeOnlyMe = 2;
  k_EStreamP2PScopeFriends = 3;
  k_EStreamP2PScopeEveryone = 4;
}

enum EStreamHostPlayAudioPreference {
  k_EStreamHostPlayAudioDefault = 0;
  k_EStreamHostPlayAudioAlways = 1;
}

enum EStreamingDataType {
  k_EStreamingAudioData = 0;
  k_EStreamingVideoData = 1;
  k_EStreamingMicrophoneData = 2;
  k_EStreamingNeptuneData_OBSOLETE = 3;
}

enum EStreamMouseButton {
  k_EStreamMouseButtonLeft = 1;
  k_EStreamMouseButtonRight = 2;
  k_EStreamMouseButtonMiddle = 16;
  k_EStreamMouseButtonX1 = 32;
  k_EStreamMouseButtonX2 = 64;
  k_EStreamMouseButtonUnknown = 4096;
}

enum EStreamMouseWheelDirection {
  k_EStreamMouseWheelUp = 120;
  k_EStreamMouseWheelDown = -120;
  k_EStreamMouseWheelLeft = 3;
  k_EStreamMouseWheelRight = 4;
}

enum EStreamFramerateLimiter {
  k_EStreamFramerateSlowCapture = 1;
  k_EStreamFramerateSlowConvert = 2;
  k_EStreamFramerateSlowEncode = 4;
  k_EStreamFramerateSlowNetwork = 8;
  k_EStreamFramerateSlowDecode = 16;
  k_EStreamFramerateSlowGame = 32;
  k_EStreamFramerateSlowDisplay = 64;
}

enum EStreamActivity {
  k_EStreamActivityIdle = 1;
  k_EStreamActivityGame = 2;
  k_EStreamActivityDesktop = 3;
  k_EStreamActivitySecureDesktop = 4;
  k_EStreamActivityMusic = 5;
}

enum EStreamDataMessage {
  k_EStreamDataPacket = 1;
  k_EStreamDataLost = 2;
}

enum EAudioFormat {
  k_EAudioFormatNone = 0;
  k_EAudioFormat16BitLittleEndian = 1;
  k_EAudioFormatFloat = 2;
}

enum EVideoFormat {
  k_EVideoFormatNone = 0;
  k_EVideoFormatYV12 = 1;
  k_EVideoFormatAccel = 2;
}

enum EStreamStatsMessage {
  k_EStreamStatsFrameEvents = 1;
  k_EStreamStatsDebugDump = 2;
  k_EStreamStatsLogMessage = 3;
  k_EStreamStatsLogUploadBegin = 4;
  k_EStreamStatsLogUploadData = 5;
  k_EStreamStatsLogUploadComplete = 6;
}

enum EStreamFrameEvent {
  k_EStreamInputEventStart = 0;
  k_EStreamInputEventSend = 1;
  k_EStreamInputEventRecv = 2;
  k_EStreamInputEventQueued = 3;
  k_EStreamInputEventHandled = 4;
  k_EStreamFrameEventStart = 5;
  k_EStreamFrameEventCaptureBegin = 6;
  k_EStreamFrameEventCaptureEnd = 7;
  k_EStreamFrameEventConvertBegin = 8;
  k_EStreamFrameEventConvertEnd = 9;
  k_EStreamFrameEventEncodeBegin = 10;
  k_EStreamFrameEventEncodeEnd = 11;
  k_EStreamFrameEventSend = 12;
  k_EStreamFrameEventRecv = 13;
  k_EStreamFrameEventDecodeBegin = 14;
  k_EStreamFrameEventDecodeEnd = 15;
  k_EStreamFrameEventUploadBegin = 16;
  k_EStreamFrameEventUploadEnd = 17;
  k_EStreamFrameEventComplete = 18;
}

enum EStreamFrameResult {
  k_EStreamFrameResultPending = 0;
  k_EStreamFrameResultDisplayed = 1;
  k_EStreamFrameResultDroppedNetworkSlow = 2;
  k_EStreamFrameResultDroppedNetworkLost = 3;
  k_EStreamFrameResultDroppedDecodeSlow = 4;
  k_EStreamFrameResultDroppedDecodeCorrupt = 5;
  k_EStreamFrameResultDroppedLate = 6;
  k_EStreamFrameResultDroppedReset = 7;
}

enum EFrameAccumulatedStat {
  k_EFrameStatFPS = 0;
  k_EFrameStatCaptureDurationMS = 1;
  k_EFrameStatConvertDurationMS = 2;
  k_EFrameStatEncodeDurationMS = 3;
  k_EFrameStatSteamDurationMS = 4;
  k_EFrameStatServerDurationMS = 5;
  k_EFrameStatNetworkDurationMS = 6;
  k_EFrameStatDecodeDurationMS = 7;
  k_EFrameStatDisplayDurationMS = 8;
  k_EFrameStatClientDurationMS = 9;
  k_EFrameStatFrameDurationMS = 10;
  k_EFrameStatInputLatencyMS = 11;
  k_EFrameStatGameLatencyMS = 12;
  k_EFrameStatRoundTripLatencyMS = 13;
  k_EFrameStatPingTimeMS = 14;
  k_EFrameStatServerBitrateKbitPerSec = 15;
  k_EFrameStatClientBitrateKbitPerSec = 16;
  k_EFrameStatLinkBandwidthKbitPerSec = 17;
  k_EFrameStatPacketLossPercentage = 18;
}

enum ELogFileType {
  k_ELogFileSystemBoot = 0;
  k_ELogFileSystemReset = 1;
  k_ELogFileSystemDebug = 2;
}

enum EStreamControllerConfigMsg {
  k_EStreamControllerConfigMsg_RequestConfigsForApp = 0;
  k_EStreamControllerConfigMsg_ConfigResponse = 1;
  k_EStreamControllerConfigMsg_PersonalizationResponse = 2;
  k_EStreamControllerConfigMsg_ActiveConfigChange = 3;
  k_EStreamControllerConfigMsg_RequestActiveConfig = 4;
}

message CDiscoveryPingRequest {
  optional uint32 sequence = 1;
  optional uint32 packet_size_requested = 2;
}

message CDiscoveryPingResponse {
  optional uint32 sequence = 1;
  optional uint32 packet_size_received = 2;
}

message CStreamingClientHandshakeInfo {
  optional int32 network_test = 2;
}

message CClientHandshakeMsg {
  required CStreamingClientHandshakeInfo info = 1;
}

message CStreamingServerHandshakeInfo {
  optional int32 mtu = 1;
}

message CServerHandshakeMsg {
  required CStreamingServerHandshakeInfo info = 1;
}

message CAuthenticationRequestMsg {
  optional bytes token = 1;
  optional EStreamVersion version = 2;
  optional uint64 steamid = 3;
}

message CAuthenticationResponseMsg {
  enum AuthenticationResult {
    SUCCEEDED = 0;
    FAILED = 1;
  }
  optional CAuthenticationResponseMsg.AuthenticationResult result = 1;
  optional EStreamVersion version = 2;
}

message CKeepAliveMsg {
}

message CStartNetworkTestMsg {
  optional uint32 frames = 1;
  optional uint32 framerate = 2;
  optional uint32 bitrate_kbps = 3;
  optional uint32 burst_bitrate_kbps = 4;
  optional bool bandwidth_test = 5;
}

message CStreamVideoMode {
  required uint32 width = 1;
  required uint32 height = 2;
  optional uint32 refresh_rate = 3;
  optional uint32 refresh_rate_numerator = 4;
  optional uint32 refresh_rate_denominator = 5;
}

message CStreamVideoLimit {
  optional EStreamVideoCodec codec = 1;
  optional CStreamVideoMode mode = 2;
  optional int32 bitrate_kbps = 3;
  optional int32 burst_bitrate_kbps = 4;
}

message CStreamingClientCaps {
  optional string system_info = 1;
  optional bool system_can_suspend = 2;
  optional int32 maximum_decode_bitrate_kbps = 3;
  optional int32 maximum_burst_bitrate_kbps = 4;
  optional bool supports_video_hevc_OBSOLETE = 5;
  optional bool disable_steam_store = 6;
  optional bool disable_client_cursor = 7;
  optional bool disable_intel_hardware_encoding = 8;
  optional bool disable_amd_hardware_encoding = 9;
  optional bool disable_nvidia_hardware_encoding = 10;
  optional int32 form_factor = 11;
  optional bool has_on_screen_keyboard = 12;
  repeated EStreamColorspace supported_colorspaces = 13;
  repeated EStreamAudioCodec supported_audio_codecs = 14;
  repeated EStreamVideoCodec supported_video_codecs = 15;
}

message CStreamingClientConfig {
  optional EStreamQualityPreference quality = 1 [default = k_EStreamQualityBalanced];
  optional uint32 desired_resolution_x = 2;
  optional uint32 desired_resolution_y = 3;
  optional uint32 desired_framerate_numerator = 4;
  optional uint32 desired_framerate_denominator = 5;
  optional int32 desired_bitrate_kbps = 6 [default = -1];
  optional bool enable_hardware_decoding = 7 [default = true];
  optional bool enable_performance_overlay = 8 [default = false];
  optional bool enable_video_streaming = 9 [default = true];
  optional bool enable_audio_streaming = 10 [default = true];
  optional bool enable_input_streaming = 11 [default = true];
  optional int32 audio_channels = 12 [default = 2];
  optional bool enable_video_hevc = 13 [default = false];
  optional bool enable_performance_icons = 14 [default = true];
  optional bool enable_microphone_streaming = 15 [default = false];
  optional string controller_overlay_hotkey = 16;
  optional bool enable_touch_controller_OBSOLETE = 17 [default = false];
  optional EStreamP2PScope p2p_scope = 19 [default = k_EStreamP2PScopeAutomatic];
  optional bool enable_audio_uncompressed = 20 [default = false];
  optional CStreamVideoLimit display_limit = 21;
  optional CStreamVideoLimit quality_limit = 22;
  optional CStreamVideoLimit runtime_limit = 23;
  repeated CStreamVideoLimit decoder_limit = 24;
  optional bool enable_unreliable_fec = 25 [default = false];
  optional bool enable_video_av1 = 26 [default = false];
}

message CStreamingServerConfig {
  optional bool change_desktop_resolution = 1;
  optional bool dynamically_adjust_resolution_OBSOLETE = 2;
  optional bool enable_capture_nvfbc = 3;
  optional bool enable_hardware_encoding_nvidia_OBSOLETE = 4;
  optional bool enable_hardware_encoding_amd_OBSOLETE = 5;
  optional bool enable_hardware_encoding_intel_OBSOLETE = 6;
  optional int32 software_encoding_threads = 7;
  optional bool enable_traffic_priority = 8;
  optional EStreamHostPlayAudioPreference host_play_audio = 9 [default = k_EStreamHostPlayAudioDefault];
  optional bool enable_hardware_encoding = 10;
}

message CNegotiatedConfig {
  optional bool reliable_data = 1;
  optional EStreamAudioCodec selected_audio_codec = 2;
  optional EStreamVideoCodec selected_video_codec = 3;
  repeated CStreamVideoMode available_video_modes_OBSOLETE = 4;
  optional bool enable_remote_hid = 5;
  optional bool enable_touch_input = 6;
  optional bool disable_client_cursor = 7;
}

message CNegotiationInitMsg {
  optional bool reliable_data = 1;
  repeated EStreamAudioCodec supported_audio_codecs = 2;
  repeated EStreamVideoCodec supported_video_codecs = 3;
  optional bool supports_remote_hid = 4;
  optional bool supports_touch_input = 5;
  optional int32 os_type = 6;
  optional int32 gaming_device_type = 7;
}

message CNegotiationSetConfigMsg {
  required CNegotiatedConfig config = 1;
  optional CStreamingClientConfig streaming_client_config = 2;
  optional CStreamingClientCaps streaming_client_caps = 3;
}

message CNegotiationCompleteMsg {
}

message CStartAudioDataMsg {
  required uint32 channel = 2;
  optional EStreamAudioCodec codec = 3;
  optional bytes codec_data = 4;
  optional uint32 frequency = 5;
  optional uint32 channels = 6;
}

message CStopAudioDataMsg {
}

message CStartVideoDataMsg {
  required uint32 channel = 1;
  optional EStreamVideoCodec codec = 2;
  optional bytes codec_data = 3;
  optional uint32 width = 4;
  optional uint32 height = 5;
}

message CStopVideoDataMsg {
}

message CRecordedInput {
  optional EStreamControlMessage type = 1;
  optional uint32 timestamp = 2;
  oneof data {
    CInputTouchFingerDownMsg finger_down = 3;
    CInputTouchFingerMotionMsg finger_motion = 4;
    CInputTouchFingerUpMsg finger_up = 5;
    CInputMouseMotionMsg mouse_motion = 6;
    CInputMouseWheelMsg mouse_wheel = 7;
    CInputMouseDownMsg mouse_down = 8;
    CInputMouseUpMsg mouse_up = 9;
    CInputKeyDownMsg key_down = 10;
    CInputKeyUpMsg key_up = 11;
    CInputTextMsg text = 12;
    CRemoteHIDMsg hid = 13;
  }
}

message CRecordedInputStream {
  repeated CRecordedInput entries = 1;
}

message CInputLatencyTestMsg {
  required uint32 input_mark = 1;
  optional uint32 color = 2;
}

message CInputTouchFingerDownMsg {
  optional uint32 input_mark = 1;
  optional uint64 fingerid = 2;
  optional float x_normalized = 3;
  optional float y_normalized = 4;
}

message CInputTouchFingerMotionMsg {
  optional uint32 input_mark = 1;
  optional uint64 fingerid = 2;
  optional float x_normalized = 3;
  optional float y_normalized = 4;
}

message CInputTouchFingerUpMsg {
  optional uint32 input_mark = 1;
  optional uint64 fingerid = 2;
  optional float x_normalized = 3;
  optional float y_normalized = 4;
  optional bool canceled = 5;
}

message CInputMouseMotionMsg {
  optional uint32 input_mark = 1;
  optional float x_normalized = 2;
  optional float y_normalized = 3;
  optional int32 dx = 4;
  optional int32 dy = 5;
}

message CInputMouseWheelMsg {
  optional uint32 input_mark = 1;
  required EStreamMouseWheelDirection direction = 2;
  optional float amount = 3 [default = 1];
}

message CInputMouseDownMsg {
  optional uint32 input_mark = 1;
  required EStreamMouseButton button = 2;
}

message CInputMouseUpMsg {
  optional uint32 input_mark = 1;
  required EStreamMouseButton button = 2;
}

message CInputKeyDownMsg {
  optional uint32 input_mark = 1;
  required uint32 scancode = 2;
  optional uint32 modifiers = 3;
  optional uint32 keycode = 4;
}

message CInputKeyUpMsg {
  optional uint32 input_mark = 1;
  required uint32 scancode = 2;
  optional uint32 modifiers = 3;
  optional uint32 keycode = 4;
}

message CInputTextMsg {
  optional uint32 input_mark = 1;
  required string text_utf8 = 2;
}

message CSetTitleMsg {
  optional string text = 1;
}

message CSetCaptureSizeMsg {
  optional int32 width = 1;
  optional int32 height = 2;
}

message CSetIconMsg {
  optional int32 width = 1;
  optional int32 height = 2;
  optional bytes image = 3;
}

message CSetFlashStateMsg {
  optional uint32 flags = 1;
  optional uint32 count = 2;
  optional uint32 timeout_ms = 3;
}

message CShowCursorMsg {
  optional float x_normalized = 1;
  optional float y_normalized = 2;
  optional bool locked = 3;
}

message CHideCursorMsg {
}

message CSetCursorMsg {
  required uint64 cursor_id = 1;
}

message CGetCursorImageMsg {
  required uint64 cursor_id = 1;
}

message CSetCursorImageMsg {
  required uint64 cursor_id = 1;
  optional int32 width = 2;
  optional int32 height = 3;
  optional int32 hot_x = 4;
  optional int32 hot_y = 5;
  optional bytes image = 6;
}

message CSetCursorScaleMsg {
  optional float scale = 1;
}

message CVideoDecoderInfoMsg {
  optional string info = 1;
  optional int32 threads = 2;
}

message CVideoEncoderInfoMsg {
  optional string info = 1;
}

message CPauseMsg {
}

message CResumeMsg {
}

message CEnableHighResCaptureMsg {
}

message CDisableHighResCaptureMsg {
}

message CPauseControllerInputMsg {
}

message CResumeControllerInputMsg {
}

message CToggleMagnificationMsg {
}

message CSetCapslockMsg {
  optional bool pressed = 1;
}

message CStreamingKeymapEntry {
  optional int32 scancode = 1;
  optional int32 normal_keycode = 2;
  optional int32 shift_keycode = 3;
  optional int32 capslock_keycode = 4;
  optional int32 shift_capslock_keycode = 5;
  optional int32 altgr_keycode = 6;
  optional int32 altgr_shift_keycode = 7;
  optional int32 altgr_capslock_keycode = 8;
  optional int32 altgr_shift_capslock_keycode = 9;
}

message CStreamingKeymap {
  repeated CStreamingKeymapEntry entries = 1;
}

message CSetKeymapMsg {
  optional CStreamingKeymap keymap = 1;
}

message CStopRequest {
}

message CQuitRequest {
}

message CDeleteCursorMsg {
  required uint64 cursor_id = 1;
}

message CSetStreamingClientConfig {
  required CStreamingClientConfig config = 1;
}

message CSetQoSMsg {
  required bool use_qos = 1;
}

message CSetTargetFramerateMsg {
  required uint32 framerate = 1;
  optional uint32 reasons = 2;
  optional uint32 framerate_numerator = 3;
  optional uint32 framerate_denominator = 4;
}

message CSetTargetBitrateMsg {
  required int32 bitrate = 1;
}

message COverlayEnabledMsg {
  required bool enabled = 1;
}

message CSetGammaRampMsg {
  optional bytes gamma_ramp = 1;
}

message CSetActivityMsg {
  optional EStreamActivity activity = 1;
  optional uint32 appid = 2;
  optional uint64 gameid = 3;
  optional string game_name = 4;
}

message CSystemSuspendMsg {
}

message CVirtualHereRequestMsg {
  optional string hostname = 1;
}

message CVirtualHereReadyMsg {
  optional uint32 licensed_device_count = 1;
}

message CVirtualHereShareDeviceMsg {
  optional string device_address = 1;
}

message CSetSpectatorModeMsg {
  optional bool enabled = 1;
}

message CRemoteHIDMsg {
  optional bytes data = 1;
  optional bool active_input = 2;
}

message CTouchConfigActiveMsg {
  optional uint32 appid = 1;
  optional uint32 revision = 2;
  optional uint64 creator = 3;
}

message CGetTouchConfigDataMsg {
  optional uint32 appid = 1;
}

message CSetTouchConfigDataMsg {
  optional uint32 appid = 1;
  optional uint32 revision = 2;
  optional bytes data = 3;
  optional bytes layout = 4;
  optional uint64 creator = 5;
}

message CSaveTouchConfigLayoutMsg {
  optional uint32 appid = 1;
  optional bytes layout = 4;
}

message CTouchActionSetActiveMsg {
  optional uint32 appid = 1;
  optional int32 actionset_id = 2;
}

message CTouchActionSetLayerAddedMsg {
  optional uint32 appid = 1;
  optional int32 actionset_id = 2;
}

message CTouchActionSetLayerRemovedMsg {
  optional uint32 appid = 1;
  optional int32 actionset_id = 2;
}

message CGetTouchIconDataMsg {
  optional uint32 appid = 1;
  optional string icon = 2;
}

message CSetTouchIconDataMsg {
  optional uint32 appid = 1;
  optional string icon = 2;
  optional bytes data = 3;
}

message CRemotePlayTogetherGroupUpdateMsg {
  message Player {
    optional uint32 accountid = 1;
    optional uint32 guestid = 2;
    optional bool keyboard_enabled = 3;
    optional bool mouse_enabled = 4;
    optional bool controller_enabled = 5;
    repeated uint32 controller_slots = 6;
    optional bytes avatar_hash = 7;
  }
  repeated CRemotePlayTogetherGroupUpdateMsg.Player players = 1;
  optional int32 player_index = 2;
  optional string miniprofile_location = 3;
  optional string game_name = 4;
  optional string avatar_location = 5;
  optional bool direct_input = 6;
}

message CSetInputTemporarilyDisabledMsg {
  optional bool disabled = 1;
}

message CSetQualityOverrideMsg {
  optional int32 value = 1;
}

message CSetBitrateOverrideMsg {
  optional int32 value = 1;
}

message CShowOnScreenKeyboardMsg {
}

message CControllerPersonalizationUpdateMsg {
  optional string controller_path = 1;
  optional string controller_name = 2;
  optional bool reverse_diamond_button_layout = 3;
}

message CVRConnectionReady {
  optional string connect_params = 1;
}

message CStreamDataLostMsg {
  repeated uint32 packets = 1;
}

message CAudioFormat {
  required EAudioFormat format = 1;
  optional uint32 frequency = 2;
  optional uint32 channels = 3;
}

message CVideoFormat {
  required EVideoFormat format = 1;
  optional uint32 width = 2;
  optional uint32 height = 3;
}

message CFrameEvent {
  required EStreamFrameEvent event_id = 1;
  required uint32 timestamp = 2;
}

message CFrameStats {
  required uint32 frame_id = 1;
  optional uint32 input_mark = 2;
  repeated CFrameEvent events = 3;
  required EStreamFrameResult result = 4;
  optional float frame_start_delta = 5;
  optional float frame_display_delta = 6;
  optional float ping_time = 7;
  optional float server_bitrate = 8;
  optional float client_bitrate = 9;
  optional float link_bandwidth = 10;
  optional float packet_loss = 11;
  optional uint32 frame_size = 12;
}

message CFrameStatAccumulatedValue {
  required EFrameAccumulatedStat stat_type = 1;
  required int32 count = 2;
  required float average = 3;
  optional float stddev = 4;
}

message CFrameStatsListMsg {
  required EStreamingDataType data_type = 1;
  repeated CFrameStats stats = 2;
  repeated CFrameStatAccumulatedValue accumulated_stats = 3;
  required int32 latest_frame_id = 4;
}

message CStreamingSessionStats {
  optional float frame_loss_percentage = 1;
  optional float average_network_time_ms = 2;
  optional float stddev_network_time_ms = 3;
  optional string test_data = 4;
}

message CDebugDumpMsg {
  optional bytes screenshot = 1;
}

message CLogMsg {
  optional int32 type = 1;
  optional string message = 2;
}

message CLogUploadMsg {
  optional ELogFileType type = 1;
  optional bytes data = 3;
}

message CTransportSignalMsg {
  message WebRTCMessage {
    message Candidate {
      optional string sdp_mid = 1;
      optional int32 sdp_mline_index = 2;
      optional string candidate = 3;
    }
    oneof msg {
      bool greeting = 1;
      string offer = 2;
      string answer = 3;
      CTransportSignalMsg.WebRTCMessage.Candidate candidate = 4;
    }
  }
  optional CTransportSignalMsg.WebRTCMessage webrtc = 1;
  repeated bytes sdr = 2;
}

message CControllerConfigMsg {
  message ControllerConfigResponse {
    optional uint32 appid = 1;
    optional string configURL = 2;
    optional uint32 controllerType = 3;
    optional string controllerData = 4;
    optional uint32 selectionOrder = 5;
    optional bool actionBlock = 6;
  }
  message ControllerPersonalizationResponse {
    optional string personalizationData = 1;
  }
  message ControllerActiveConfigChangeResponse {
    optional string configURL = 2;
    optional uint32 controllerType = 3;
    optional string controllerData = 4;
    optional uint32 selectionOrder = 5;
  }
  message ControllerActiveConfigMsg {
    optional uint32 appid = 1;
    optional string configURL = 2;
    optional uint32 controllerType = 3;
    optional string controllerData = 4;
  }
  required EStreamControllerConfigMsg type = 1;
  optional string controllerPath = 2;
  optional uint32 appid = 3;
  optional CControllerConfigMsg.ControllerPersonalizationResponse personalizationResponse = 4;
  repeated CControllerConfigMsg.ControllerConfigResponse configResponse = 6;
  optional CControllerConfigMsg.ControllerActiveConfigMsg activeConfigChangeMsg = 7;
}

