syntax = "proto3"; package versevdi.tunnel.v1; import "google/protobuf/timestamp.proto"; option go_package = "git.sechmachine.io.vn/sechmachine/VerseVDI-Protocol/gen/go/tunnel"; message VersionNegotiation { repeated string supported_versions = 1; repeated string features = 2; } message AdmissionRequest { string session_id = 1; string protocol_version = 2; string audience = 3; string purpose = 4; string grant = 5; } message AdmissionResult { bool admitted = 1; string session_id = 2; string failure_code = 3; int64 session_version = 4; } message SessionClose { string session_id = 1; string code = 2; string reason = 3; google.protobuf.Timestamp occurred_at = 4; } message Health { string session_id = 1; int64 sequence = 2; google.protobuf.Timestamp observed_at = 3; } message BoundedError { string code = 1; string message = 2; } message ChannelOpen { string channel_id = 1; string direction = 2; uint32 maximum_frame_bytes = 3; } message CapabilityProfile { string transport = 1; string framing = 2; string media = 3; reserved 4; string source_rate_control = 5; reserved 6; repeated VideoProfile video_profiles = 7; repeated AudioProfile audio_profiles = 8; } message VideoProfile { string codec = 1; uint32 bit_depth = 2; string chroma_subsampling = 3; string color_space = 4; string transfer_function = 5; } message AudioProfile { string codec = 1; uint32 sample_rate_hz = 2; uint32 channels = 3; string channel_layout = 4; uint32 packet_duration_ms = 5; } message DisplayMode { uint32 resolution_width = 1; uint32 resolution_height = 2; uint32 fps = 3; } message SessionAdjustment { string display_reason = 1; string bitrate_reason = 2; } message SelectedSessionDescriptor { VideoProfile video_profile = 1; AudioProfile audio_profile = 2; DisplayMode display_mode = 3; uint64 bitrate_target_kbps = 4; uint64 bitrate_maximum_kbps = 5; SessionAdjustment adjustment = 6; string media_timestamp_basis = 7; } message ProviderStreamPolicy { VideoProfile video_profile = 1; AudioProfile audio_profile = 2; DisplayMode display_mode = 3; uint64 bitrate_target_kbps = 4; uint64 bitrate_maximum_kbps = 5; } message GatewayRegistration { string version = 1; string gateway_id = 2; string instance_identity = 3; string certificate_identity = 4; string public_identity = 5; string address = 6; uint32 protocol_min_version = 7; uint32 protocol_max_version = 8; uint32 connection_capacity = 9; uint64 bandwidth_capacity_kbps = 10; repeated string features = 11; CapabilityProfile capabilities = 12; string provider_identity = 13; } message GatewayHeartbeat { string version = 1; string gateway_id = 2; uint64 sequence = 3; google.protobuf.Timestamp observed_at = 4; uint32 active_connections = 5; uint64 egress_kbps = 6; string state = 7; } message GatewayDrain { string version = 1; string gateway_id = 2; uint64 sequence = 3; string reason = 4; google.protobuf.Timestamp deadline = 5; } message TunnelAdmissionRequest { string version = 1; string session_id = 2; string gateway_id = 3; string audience = 4; string grant = 5; uint64 reconnect_sequence = 6; string client_nonce = 7; CapabilityProfile capabilities = 8; string device_signature = 9; } message SessionAuthority { string version = 1; string session_id = 2; string gateway_id = 3; string audience = 4; uint64 reconnect_sequence = 5; google.protobuf.Timestamp expires_at = 6; CapabilityProfile capabilities = 7; string provider_profile = 8; string provider_identity = 9; SelectedSessionDescriptor selected_descriptor = 10; } message ClientSessionAuthority { string version = 1; string session_id = 2; string gateway_id = 3; string audience = 4; uint64 reconnect_sequence = 5; google.protobuf.Timestamp expires_at = 6; CapabilityProfile capabilities = 7; SelectedSessionDescriptor selected_descriptor = 8; } message ProviderSessionWork { string version = 1; string session_id = 2; string gateway_id = 3; uint64 reconnect_sequence = 4; google.protobuf.Timestamp expires_at = 5; string provider_profile = 6; string provider_identity = 7; string policy_version_id = 8; string application_id = 9; string management_host = 10; uint32 management_port = 11; string stream_host = 12; uint32 stream_port = 13; string client_certificate_pem = 14; string client_private_key_pem = 15; string server_certificate_pem = 16; string client_id = 17; ClipboardPolicy clipboard_policy = 18; bool provider_application_termination_allowed = 19; ProviderStreamPolicy stream_policy = 20; } message GatewayQualityWorkRequest { string version = 1; string session_id = 2; string gateway_id = 3; uint64 reconnect_sequence = 4; string operation_id = 5; optional uint64 revision = 6; optional uint64 current_applied_revision = 7; string acquisition = 8; optional uint64 lease_generation = 9; } message GatewayQualityWork { string version = 1; string session_id = 2; string gateway_id = 3; uint64 reconnect_sequence = 4; string operation_id = 5; uint64 revision = 6; google.protobuf.Timestamp lease_expires_at = 7; SelectedSessionDescriptor selected_descriptor = 8; optional uint64 current_applied_revision = 9; uint64 lease_generation = 10; } message GatewayQualityAck { string version = 1; string session_id = 2; string gateway_id = 3; uint64 reconnect_sequence = 4; string operation_id = 5; uint64 revision = 6; string outcome = 7; optional uint64 current_applied_revision = 8; string failure_code = 9; uint64 lease_generation = 10; } message GatewayStopWork { string version = 1; string session_id = 2; string gateway_id = 3; uint64 reconnect_sequence = 4; string operation_id = 5; uint32 attempt = 6; } message GatewayStopWorkRequest { string version = 1; string session_id = 2; string gateway_id = 3; uint64 reconnect_sequence = 4; string operation_id = 5; string acquisition = 6; } message GatewayStopAck { string version = 1; string session_id = 2; string gateway_id = 3; uint64 reconnect_sequence = 4; string operation_id = 5; string outcome = 6; string failure_code = 7; } message ClipboardPolicy { bool client_to_provider_enabled = 1; bool provider_to_client_enabled = 2; uint32 max_text_bytes = 3; uint32 max_updates_per_minute = 4; } message ChannelFrame { string version = 1; string flow_id = 2; uint64 sequence = 3; uint32 flags = 4; uint32 fragment_index = 5; uint32 fragment_count = 6; uint64 timestamp_ms = 7; bytes payload = 8; } message ProviderState { string version = 1; string session_id = 2; string state = 3; bool cleanup_pending = 4; repeated string channels = 5; } message GatewayClipboardAudit { string version = 1; string session_id = 2; string direction = 3; string outcome = 4; uint32 text_bytes = 5; string reason = 6; } message StableError { string version = 1; string code = 2; string message = 3; bool retryable = 4; }