From 60ebd84ddfa1bca0e01b6ac1e5ff0091e2bb03ff Mon Sep 17 00:00:00 2001 From: David Zhao Date: Sat, 29 Mar 2025 23:58:25 -0700 Subject: [PATCH 1/8] update protocol to v1.36.1, version 1.0 --- livekit-protocol/livekit/protocol/agent.py | 20 +- .../livekit/protocol/agent_dispatch.py | 16 +- .../livekit/protocol/analytics.py | 16 +- livekit-protocol/livekit/protocol/egress.py | 44 ++- livekit-protocol/livekit/protocol/ingress.py | 22 +- livekit-protocol/livekit/protocol/metrics.py | 16 +- livekit-protocol/livekit/protocol/models.py | 302 ++++++++--------- livekit-protocol/livekit/protocol/models.pyi | 24 +- livekit-protocol/livekit/protocol/room.py | 30 +- livekit-protocol/livekit/protocol/room.pyi | 14 + livekit-protocol/livekit/protocol/sip.py | 306 ++++++++++-------- livekit-protocol/livekit/protocol/sip.pyi | 93 +++++- livekit-protocol/livekit/protocol/version.py | 2 +- livekit-protocol/livekit/protocol/webhook.py | 22 +- livekit-protocol/protocol | 2 +- 15 files changed, 596 insertions(+), 333 deletions(-) diff --git a/livekit-protocol/livekit/protocol/agent.py b/livekit-protocol/livekit/protocol/agent.py index 3bffaf97..920de7dc 100644 --- a/livekit-protocol/livekit/protocol/agent.py +++ b/livekit-protocol/livekit/protocol/agent.py @@ -1,12 +1,22 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE # source: livekit_agent.proto -# Protobuf Python Version: 4.25.1 +# Protobuf Python Version: 5.29.3 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version from google.protobuf import symbol_database as _symbol_database from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 5, + 29, + 3, + '', + 'livekit_agent.proto' +) # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() @@ -20,12 +30,12 @@ _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'agent', _globals) -if _descriptor._USE_C_DESCRIPTORS == False: - _globals['DESCRIPTOR']._options = None +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None _globals['DESCRIPTOR']._serialized_options = b'Z#github.com/livekit/protocol/livekit\252\002\rLiveKit.Proto\352\002\016LiveKit::Proto' - _globals['_JOB'].fields_by_name['namespace']._options = None + _globals['_JOB'].fields_by_name['namespace']._loaded_options = None _globals['_JOB'].fields_by_name['namespace']._serialized_options = b'\030\001' - _globals['_AVAILABILITYRESPONSE_PARTICIPANTATTRIBUTESENTRY']._options = None + _globals['_AVAILABILITYRESPONSE_PARTICIPANTATTRIBUTESENTRY']._loaded_options = None _globals['_AVAILABILITYRESPONSE_PARTICIPANTATTRIBUTESENTRY']._serialized_options = b'8\001' _globals['_JOBTYPE']._serialized_start=2386 _globals['_JOBTYPE']._serialized_end=2446 diff --git a/livekit-protocol/livekit/protocol/agent_dispatch.py b/livekit-protocol/livekit/protocol/agent_dispatch.py index be2384c3..5a3a9db5 100644 --- a/livekit-protocol/livekit/protocol/agent_dispatch.py +++ b/livekit-protocol/livekit/protocol/agent_dispatch.py @@ -1,12 +1,22 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE # source: livekit_agent_dispatch.proto -# Protobuf Python Version: 4.25.1 +# Protobuf Python Version: 5.29.3 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version from google.protobuf import symbol_database as _symbol_database from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 5, + 29, + 3, + '', + 'livekit_agent_dispatch.proto' +) # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() @@ -20,8 +30,8 @@ _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'agent_dispatch', _globals) -if _descriptor._USE_C_DESCRIPTORS == False: - _globals['DESCRIPTOR']._options = None +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None _globals['DESCRIPTOR']._serialized_options = b'Z#github.com/livekit/protocol/livekit\252\002\rLiveKit.Proto\352\002\016LiveKit::Proto' _globals['_CREATEAGENTDISPATCHREQUEST']._serialized_start=62 _globals['_CREATEAGENTDISPATCHREQUEST']._serialized_end=142 diff --git a/livekit-protocol/livekit/protocol/analytics.py b/livekit-protocol/livekit/protocol/analytics.py index 808ccde2..77a22cec 100644 --- a/livekit-protocol/livekit/protocol/analytics.py +++ b/livekit-protocol/livekit/protocol/analytics.py @@ -1,12 +1,22 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE # source: livekit_analytics.proto -# Protobuf Python Version: 4.25.1 +# Protobuf Python Version: 5.29.3 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version from google.protobuf import symbol_database as _symbol_database from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 5, + 29, + 3, + '', + 'livekit_analytics.proto' +) # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() @@ -25,8 +35,8 @@ _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'analytics', _globals) -if _descriptor._USE_C_DESCRIPTORS == False: - _globals['DESCRIPTOR']._options = None +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None _globals['DESCRIPTOR']._serialized_options = b'Z#github.com/livekit/protocol/livekit\252\002\rLiveKit.Proto\352\002\016LiveKit::Proto' _globals['_STREAMTYPE']._serialized_start=5232 _globals['_STREAMTYPE']._serialized_end=5274 diff --git a/livekit-protocol/livekit/protocol/egress.py b/livekit-protocol/livekit/protocol/egress.py index 50d9ff1e..57845d4d 100644 --- a/livekit-protocol/livekit/protocol/egress.py +++ b/livekit-protocol/livekit/protocol/egress.py @@ -1,12 +1,22 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE # source: livekit_egress.proto -# Protobuf Python Version: 4.25.1 +# Protobuf Python Version: 5.29.3 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version from google.protobuf import symbol_database as _symbol_database from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 5, + 29, + 3, + '', + 'livekit_egress.proto' +) # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() @@ -20,36 +30,36 @@ _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'egress', _globals) -if _descriptor._USE_C_DESCRIPTORS == False: - _globals['DESCRIPTOR']._options = None +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None _globals['DESCRIPTOR']._serialized_options = b'Z#github.com/livekit/protocol/livekit\252\002\rLiveKit.Proto\352\002\016LiveKit::Proto' - _globals['_ROOMCOMPOSITEEGRESSREQUEST'].fields_by_name['file']._options = None + _globals['_ROOMCOMPOSITEEGRESSREQUEST'].fields_by_name['file']._loaded_options = None _globals['_ROOMCOMPOSITEEGRESSREQUEST'].fields_by_name['file']._serialized_options = b'\030\001' - _globals['_ROOMCOMPOSITEEGRESSREQUEST'].fields_by_name['stream']._options = None + _globals['_ROOMCOMPOSITEEGRESSREQUEST'].fields_by_name['stream']._loaded_options = None _globals['_ROOMCOMPOSITEEGRESSREQUEST'].fields_by_name['stream']._serialized_options = b'\030\001' - _globals['_ROOMCOMPOSITEEGRESSREQUEST'].fields_by_name['segments']._options = None + _globals['_ROOMCOMPOSITEEGRESSREQUEST'].fields_by_name['segments']._loaded_options = None _globals['_ROOMCOMPOSITEEGRESSREQUEST'].fields_by_name['segments']._serialized_options = b'\030\001' - _globals['_WEBEGRESSREQUEST'].fields_by_name['file']._options = None + _globals['_WEBEGRESSREQUEST'].fields_by_name['file']._loaded_options = None _globals['_WEBEGRESSREQUEST'].fields_by_name['file']._serialized_options = b'\030\001' - _globals['_WEBEGRESSREQUEST'].fields_by_name['stream']._options = None + _globals['_WEBEGRESSREQUEST'].fields_by_name['stream']._loaded_options = None _globals['_WEBEGRESSREQUEST'].fields_by_name['stream']._serialized_options = b'\030\001' - _globals['_WEBEGRESSREQUEST'].fields_by_name['segments']._options = None + _globals['_WEBEGRESSREQUEST'].fields_by_name['segments']._loaded_options = None _globals['_WEBEGRESSREQUEST'].fields_by_name['segments']._serialized_options = b'\030\001' - _globals['_TRACKCOMPOSITEEGRESSREQUEST'].fields_by_name['file']._options = None + _globals['_TRACKCOMPOSITEEGRESSREQUEST'].fields_by_name['file']._loaded_options = None _globals['_TRACKCOMPOSITEEGRESSREQUEST'].fields_by_name['file']._serialized_options = b'\030\001' - _globals['_TRACKCOMPOSITEEGRESSREQUEST'].fields_by_name['stream']._options = None + _globals['_TRACKCOMPOSITEEGRESSREQUEST'].fields_by_name['stream']._loaded_options = None _globals['_TRACKCOMPOSITEEGRESSREQUEST'].fields_by_name['stream']._serialized_options = b'\030\001' - _globals['_TRACKCOMPOSITEEGRESSREQUEST'].fields_by_name['segments']._options = None + _globals['_TRACKCOMPOSITEEGRESSREQUEST'].fields_by_name['segments']._loaded_options = None _globals['_TRACKCOMPOSITEEGRESSREQUEST'].fields_by_name['segments']._serialized_options = b'\030\001' - _globals['_S3UPLOAD_METADATAENTRY']._options = None + _globals['_S3UPLOAD_METADATAENTRY']._loaded_options = None _globals['_S3UPLOAD_METADATAENTRY']._serialized_options = b'8\001' - _globals['_EGRESSINFO'].fields_by_name['stream']._options = None + _globals['_EGRESSINFO'].fields_by_name['stream']._loaded_options = None _globals['_EGRESSINFO'].fields_by_name['stream']._serialized_options = b'\030\001' - _globals['_EGRESSINFO'].fields_by_name['file']._options = None + _globals['_EGRESSINFO'].fields_by_name['file']._loaded_options = None _globals['_EGRESSINFO'].fields_by_name['file']._serialized_options = b'\030\001' - _globals['_EGRESSINFO'].fields_by_name['segments']._options = None + _globals['_EGRESSINFO'].fields_by_name['segments']._loaded_options = None _globals['_EGRESSINFO'].fields_by_name['segments']._serialized_options = b'\030\001' - _globals['_STREAMINFOLIST']._options = None + _globals['_STREAMINFOLIST']._loaded_options = None _globals['_STREAMINFOLIST']._serialized_options = b'\030\001' _globals['_ENCODEDFILETYPE']._serialized_start=7102 _globals['_ENCODEDFILETYPE']._serialized_end=7159 diff --git a/livekit-protocol/livekit/protocol/ingress.py b/livekit-protocol/livekit/protocol/ingress.py index 1b15de0e..ef969335 100644 --- a/livekit-protocol/livekit/protocol/ingress.py +++ b/livekit-protocol/livekit/protocol/ingress.py @@ -1,12 +1,22 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE # source: livekit_ingress.proto -# Protobuf Python Version: 4.25.1 +# Protobuf Python Version: 5.29.3 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version from google.protobuf import symbol_database as _symbol_database from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 5, + 29, + 3, + '', + 'livekit_ingress.proto' +) # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() @@ -20,14 +30,14 @@ _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'ingress', _globals) -if _descriptor._USE_C_DESCRIPTORS == False: - _globals['DESCRIPTOR']._options = None +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None _globals['DESCRIPTOR']._serialized_options = b'Z#github.com/livekit/protocol/livekit\252\002\rLiveKit.Proto\352\002\016LiveKit::Proto' - _globals['_CREATEINGRESSREQUEST'].fields_by_name['bypass_transcoding']._options = None + _globals['_CREATEINGRESSREQUEST'].fields_by_name['bypass_transcoding']._loaded_options = None _globals['_CREATEINGRESSREQUEST'].fields_by_name['bypass_transcoding']._serialized_options = b'\030\001' - _globals['_INGRESSINFO'].fields_by_name['bypass_transcoding']._options = None + _globals['_INGRESSINFO'].fields_by_name['bypass_transcoding']._loaded_options = None _globals['_INGRESSINFO'].fields_by_name['bypass_transcoding']._serialized_options = b'\030\001' - _globals['_UPDATEINGRESSREQUEST'].fields_by_name['bypass_transcoding']._options = None + _globals['_UPDATEINGRESSREQUEST'].fields_by_name['bypass_transcoding']._loaded_options = None _globals['_UPDATEINGRESSREQUEST'].fields_by_name['bypass_transcoding']._serialized_options = b'\030\001' _globals['_INGRESSINPUT']._serialized_start=2844 _globals['_INGRESSINPUT']._serialized_end=2905 diff --git a/livekit-protocol/livekit/protocol/metrics.py b/livekit-protocol/livekit/protocol/metrics.py index 51072648..33ca09d2 100644 --- a/livekit-protocol/livekit/protocol/metrics.py +++ b/livekit-protocol/livekit/protocol/metrics.py @@ -1,12 +1,22 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE # source: livekit_metrics.proto -# Protobuf Python Version: 4.25.1 +# Protobuf Python Version: 5.29.3 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version from google.protobuf import symbol_database as _symbol_database from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 5, + 29, + 3, + '', + 'livekit_metrics.proto' +) # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() @@ -20,8 +30,8 @@ _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'metrics', _globals) -if _descriptor._USE_C_DESCRIPTORS == False: - _globals['DESCRIPTOR']._options = None +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None _globals['DESCRIPTOR']._serialized_options = b'Z#github.com/livekit/protocol/livekit\252\002\rLiveKit.Proto\352\002\016LiveKit::Proto' _globals['_METRICLABEL']._serialized_start=869 _globals['_METRICLABEL']._serialized_end=1766 diff --git a/livekit-protocol/livekit/protocol/models.py b/livekit-protocol/livekit/protocol/models.py index 446cf169..bdf547ec 100644 --- a/livekit-protocol/livekit/protocol/models.py +++ b/livekit-protocol/livekit/protocol/models.py @@ -1,12 +1,22 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE # source: livekit_models.proto -# Protobuf Python Version: 4.25.1 +# Protobuf Python Version: 5.29.3 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version from google.protobuf import symbol_database as _symbol_database from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 5, + 29, + 3, + '', + 'livekit_models.proto' +) # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() @@ -16,166 +26,170 @@ from . import metrics as _metrics_ -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14livekit_models.proto\x12\x07livekit\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x15livekit_metrics.proto\"-\n\nPagination\x12\x10\n\x08\x61\x66ter_id\x18\x01 \x01(\t\x12\r\n\x05limit\x18\x02 \x01(\x05\"\xe3\x02\n\x04Room\x12\x0b\n\x03sid\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x15\n\rempty_timeout\x18\x03 \x01(\r\x12\x19\n\x11\x64\x65parture_timeout\x18\x0e \x01(\r\x12\x18\n\x10max_participants\x18\x04 \x01(\r\x12\x15\n\rcreation_time\x18\x05 \x01(\x03\x12\x18\n\x10\x63reation_time_ms\x18\x0f \x01(\x03\x12\x15\n\rturn_password\x18\x06 \x01(\t\x12&\n\x0e\x65nabled_codecs\x18\x07 \x03(\x0b\x32\x0e.livekit.Codec\x12\x10\n\x08metadata\x18\x08 \x01(\t\x12\x18\n\x10num_participants\x18\t \x01(\r\x12\x16\n\x0enum_publishers\x18\x0b \x01(\r\x12\x18\n\x10\x61\x63tive_recording\x18\n \x01(\x08\x12&\n\x07version\x18\r \x01(\x0b\x32\x15.livekit.TimedVersion\"(\n\x05\x43odec\x12\x0c\n\x04mime\x18\x01 \x01(\t\x12\x11\n\tfmtp_line\x18\x02 \x01(\t\"9\n\x0cPlayoutDelay\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0b\n\x03min\x18\x02 \x01(\r\x12\x0b\n\x03max\x18\x03 \x01(\r\"\x85\x02\n\x15ParticipantPermission\x12\x15\n\rcan_subscribe\x18\x01 \x01(\x08\x12\x13\n\x0b\x63\x61n_publish\x18\x02 \x01(\x08\x12\x18\n\x10\x63\x61n_publish_data\x18\x03 \x01(\x08\x12\x31\n\x13\x63\x61n_publish_sources\x18\t \x03(\x0e\x32\x14.livekit.TrackSource\x12\x0e\n\x06hidden\x18\x07 \x01(\x08\x12\x14\n\x08recorder\x18\x08 \x01(\x08\x42\x02\x18\x01\x12\x1b\n\x13\x63\x61n_update_metadata\x18\n \x01(\x08\x12\x11\n\x05\x61gent\x18\x0b \x01(\x08\x42\x02\x18\x01\x12\x1d\n\x15\x63\x61n_subscribe_metrics\x18\x0c \x01(\x08\"\x8e\x05\n\x0fParticipantInfo\x12\x0b\n\x03sid\x18\x01 \x01(\t\x12\x10\n\x08identity\x18\x02 \x01(\t\x12-\n\x05state\x18\x03 \x01(\x0e\x32\x1e.livekit.ParticipantInfo.State\x12\"\n\x06tracks\x18\x04 \x03(\x0b\x32\x12.livekit.TrackInfo\x12\x10\n\x08metadata\x18\x05 \x01(\t\x12\x11\n\tjoined_at\x18\x06 \x01(\x03\x12\x14\n\x0cjoined_at_ms\x18\x11 \x01(\x03\x12\x0c\n\x04name\x18\t \x01(\t\x12\x0f\n\x07version\x18\n \x01(\r\x12\x32\n\npermission\x18\x0b \x01(\x0b\x32\x1e.livekit.ParticipantPermission\x12\x0e\n\x06region\x18\x0c \x01(\t\x12\x14\n\x0cis_publisher\x18\r \x01(\x08\x12+\n\x04kind\x18\x0e \x01(\x0e\x32\x1d.livekit.ParticipantInfo.Kind\x12<\n\nattributes\x18\x0f \x03(\x0b\x32(.livekit.ParticipantInfo.AttributesEntry\x12\x34\n\x11\x64isconnect_reason\x18\x10 \x01(\x0e\x32\x19.livekit.DisconnectReason\x1a\x31\n\x0f\x41ttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\">\n\x05State\x12\x0b\n\x07JOINING\x10\x00\x12\n\n\x06JOINED\x10\x01\x12\n\n\x06\x41\x43TIVE\x10\x02\x12\x10\n\x0c\x44ISCONNECTED\x10\x03\"A\n\x04Kind\x12\x0c\n\x08STANDARD\x10\x00\x12\x0b\n\x07INGRESS\x10\x01\x12\n\n\x06\x45GRESS\x10\x02\x12\x07\n\x03SIP\x10\x03\x12\t\n\x05\x41GENT\x10\x04\"3\n\nEncryption\"%\n\x04Type\x12\x08\n\x04NONE\x10\x00\x12\x07\n\x03GCM\x10\x01\x12\n\n\x06\x43USTOM\x10\x02\"f\n\x12SimulcastCodecInfo\x12\x11\n\tmime_type\x18\x01 \x01(\t\x12\x0b\n\x03mid\x18\x02 \x01(\t\x12\x0b\n\x03\x63id\x18\x03 \x01(\t\x12#\n\x06layers\x18\x04 \x03(\x0b\x32\x13.livekit.VideoLayer\"\xae\x04\n\tTrackInfo\x12\x0b\n\x03sid\x18\x01 \x01(\t\x12 \n\x04type\x18\x02 \x01(\x0e\x32\x12.livekit.TrackType\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\r\n\x05muted\x18\x04 \x01(\x08\x12\r\n\x05width\x18\x05 \x01(\r\x12\x0e\n\x06height\x18\x06 \x01(\r\x12\x11\n\tsimulcast\x18\x07 \x01(\x08\x12\x13\n\x0b\x64isable_dtx\x18\x08 \x01(\x08\x12$\n\x06source\x18\t \x01(\x0e\x32\x14.livekit.TrackSource\x12#\n\x06layers\x18\n \x03(\x0b\x32\x13.livekit.VideoLayer\x12\x11\n\tmime_type\x18\x0b \x01(\t\x12\x0b\n\x03mid\x18\x0c \x01(\t\x12+\n\x06\x63odecs\x18\r \x03(\x0b\x32\x1b.livekit.SimulcastCodecInfo\x12\x0e\n\x06stereo\x18\x0e \x01(\x08\x12\x13\n\x0b\x64isable_red\x18\x0f \x01(\x08\x12,\n\nencryption\x18\x10 \x01(\x0e\x32\x18.livekit.Encryption.Type\x12\x0e\n\x06stream\x18\x11 \x01(\t\x12&\n\x07version\x18\x12 \x01(\x0b\x32\x15.livekit.TimedVersion\x12\x32\n\x0e\x61udio_features\x18\x13 \x03(\x0e\x32\x1a.livekit.AudioTrackFeature\x12\x37\n\x13\x62\x61\x63kup_codec_policy\x18\x14 \x01(\x0e\x32\x1a.livekit.BackupCodecPolicy\"r\n\nVideoLayer\x12&\n\x07quality\x18\x01 \x01(\x0e\x32\x15.livekit.VideoQuality\x12\r\n\x05width\x18\x02 \x01(\r\x12\x0e\n\x06height\x18\x03 \x01(\r\x12\x0f\n\x07\x62itrate\x18\x04 \x01(\r\x12\x0c\n\x04ssrc\x18\x05 \x01(\r\"\xc6\x05\n\nDataPacket\x12*\n\x04kind\x18\x01 \x01(\x0e\x32\x18.livekit.DataPacket.KindB\x02\x18\x01\x12\x1c\n\x14participant_identity\x18\x04 \x01(\t\x12\x1e\n\x16\x64\x65stination_identities\x18\x05 \x03(\t\x12#\n\x04user\x18\x02 \x01(\x0b\x32\x13.livekit.UserPacketH\x00\x12\x33\n\x07speaker\x18\x03 \x01(\x0b\x32\x1c.livekit.ActiveSpeakerUpdateB\x02\x18\x01H\x00\x12$\n\x08sip_dtmf\x18\x06 \x01(\x0b\x32\x10.livekit.SipDTMFH\x00\x12/\n\rtranscription\x18\x07 \x01(\x0b\x32\x16.livekit.TranscriptionH\x00\x12(\n\x07metrics\x18\x08 \x01(\x0b\x32\x15.livekit.MetricsBatchH\x00\x12,\n\x0c\x63hat_message\x18\t \x01(\x0b\x32\x14.livekit.ChatMessageH\x00\x12*\n\x0brpc_request\x18\n \x01(\x0b\x32\x13.livekit.RpcRequestH\x00\x12\"\n\x07rpc_ack\x18\x0b \x01(\x0b\x32\x0f.livekit.RpcAckH\x00\x12,\n\x0crpc_response\x18\x0c \x01(\x0b\x32\x14.livekit.RpcResponseH\x00\x12\x33\n\rstream_header\x18\r \x01(\x0b\x32\x1a.livekit.DataStream.HeaderH\x00\x12\x31\n\x0cstream_chunk\x18\x0e \x01(\x0b\x32\x19.livekit.DataStream.ChunkH\x00\x12\x35\n\x0estream_trailer\x18\x0f \x01(\x0b\x32\x1b.livekit.DataStream.TrailerH\x00\"\x1f\n\x04Kind\x12\x0c\n\x08RELIABLE\x10\x00\x12\t\n\x05LOSSY\x10\x01\x42\x07\n\x05value\"=\n\x13\x41\x63tiveSpeakerUpdate\x12&\n\x08speakers\x18\x01 \x03(\x0b\x32\x14.livekit.SpeakerInfo\"9\n\x0bSpeakerInfo\x12\x0b\n\x03sid\x18\x01 \x01(\t\x12\r\n\x05level\x18\x02 \x01(\x02\x12\x0e\n\x06\x61\x63tive\x18\x03 \x01(\x08\"\xaf\x02\n\nUserPacket\x12\x1b\n\x0fparticipant_sid\x18\x01 \x01(\tB\x02\x18\x01\x12 \n\x14participant_identity\x18\x05 \x01(\tB\x02\x18\x01\x12\x0f\n\x07payload\x18\x02 \x01(\x0c\x12\x1c\n\x10\x64\x65stination_sids\x18\x03 \x03(\tB\x02\x18\x01\x12\"\n\x16\x64\x65stination_identities\x18\x06 \x03(\tB\x02\x18\x01\x12\x12\n\x05topic\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x0f\n\x02id\x18\x08 \x01(\tH\x01\x88\x01\x01\x12\x17\n\nstart_time\x18\t \x01(\x04H\x02\x88\x01\x01\x12\x15\n\x08\x65nd_time\x18\n \x01(\x04H\x03\x88\x01\x01\x12\r\n\x05nonce\x18\x0b \x01(\x0c\x42\x08\n\x06_topicB\x05\n\x03_idB\r\n\x0b_start_timeB\x0b\n\t_end_time\"&\n\x07SipDTMF\x12\x0c\n\x04\x63ode\x18\x03 \x01(\r\x12\r\n\x05\x64igit\x18\x04 \x01(\t\"|\n\rTranscription\x12(\n transcribed_participant_identity\x18\x02 \x01(\t\x12\x10\n\x08track_id\x18\x03 \x01(\t\x12/\n\x08segments\x18\x04 \x03(\x0b\x32\x1d.livekit.TranscriptionSegment\"w\n\x14TranscriptionSegment\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04text\x18\x02 \x01(\t\x12\x12\n\nstart_time\x18\x03 \x01(\x04\x12\x10\n\x08\x65nd_time\x18\x04 \x01(\x04\x12\r\n\x05\x66inal\x18\x05 \x01(\x08\x12\x10\n\x08language\x18\x06 \x01(\t\"\x91\x01\n\x0b\x43hatMessage\x12\n\n\x02id\x18\x01 \x01(\t\x12\x11\n\ttimestamp\x18\x02 \x01(\x03\x12\x1b\n\x0e\x65\x64it_timestamp\x18\x03 \x01(\x03H\x00\x88\x01\x01\x12\x0f\n\x07message\x18\x04 \x01(\t\x12\x0f\n\x07\x64\x65leted\x18\x05 \x01(\x08\x12\x11\n\tgenerated\x18\x06 \x01(\x08\x42\x11\n\x0f_edit_timestamp\"g\n\nRpcRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0e\n\x06method\x18\x02 \x01(\t\x12\x0f\n\x07payload\x18\x03 \x01(\t\x12\x1b\n\x13response_timeout_ms\x18\x04 \x01(\r\x12\x0f\n\x07version\x18\x05 \x01(\r\"\x1c\n\x06RpcAck\x12\x12\n\nrequest_id\x18\x01 \x01(\t\"a\n\x0bRpcResponse\x12\x12\n\nrequest_id\x18\x01 \x01(\t\x12\x11\n\x07payload\x18\x02 \x01(\tH\x00\x12\"\n\x05\x65rror\x18\x03 \x01(\x0b\x32\x11.livekit.RpcErrorH\x00\x42\x07\n\x05value\"7\n\x08RpcError\x12\x0c\n\x04\x63ode\x18\x01 \x01(\r\x12\x0f\n\x07message\x18\x02 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\t\"@\n\x11ParticipantTracks\x12\x17\n\x0fparticipant_sid\x18\x01 \x01(\t\x12\x12\n\ntrack_sids\x18\x02 \x03(\t\"\xce\x01\n\nServerInfo\x12,\n\x07\x65\x64ition\x18\x01 \x01(\x0e\x32\x1b.livekit.ServerInfo.Edition\x12\x0f\n\x07version\x18\x02 \x01(\t\x12\x10\n\x08protocol\x18\x03 \x01(\x05\x12\x0e\n\x06region\x18\x04 \x01(\t\x12\x0f\n\x07node_id\x18\x05 \x01(\t\x12\x12\n\ndebug_info\x18\x06 \x01(\t\x12\x16\n\x0e\x61gent_protocol\x18\x07 \x01(\x05\"\"\n\x07\x45\x64ition\x12\x0c\n\x08Standard\x10\x00\x12\t\n\x05\x43loud\x10\x01\"\x8a\x03\n\nClientInfo\x12$\n\x03sdk\x18\x01 \x01(\x0e\x32\x17.livekit.ClientInfo.SDK\x12\x0f\n\x07version\x18\x02 \x01(\t\x12\x10\n\x08protocol\x18\x03 \x01(\x05\x12\n\n\x02os\x18\x04 \x01(\t\x12\x12\n\nos_version\x18\x05 \x01(\t\x12\x14\n\x0c\x64\x65vice_model\x18\x06 \x01(\t\x12\x0f\n\x07\x62rowser\x18\x07 \x01(\t\x12\x17\n\x0f\x62rowser_version\x18\x08 \x01(\t\x12\x0f\n\x07\x61\x64\x64ress\x18\t \x01(\t\x12\x0f\n\x07network\x18\n \x01(\t\x12\x12\n\nother_sdks\x18\x0b \x01(\t\"\x9c\x01\n\x03SDK\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x06\n\x02JS\x10\x01\x12\t\n\x05SWIFT\x10\x02\x12\x0b\n\x07\x41NDROID\x10\x03\x12\x0b\n\x07\x46LUTTER\x10\x04\x12\x06\n\x02GO\x10\x05\x12\t\n\x05UNITY\x10\x06\x12\x10\n\x0cREACT_NATIVE\x10\x07\x12\x08\n\x04RUST\x10\x08\x12\n\n\x06PYTHON\x10\t\x12\x07\n\x03\x43PP\x10\n\x12\r\n\tUNITY_WEB\x10\x0b\x12\x08\n\x04NODE\x10\x0c\"\x8c\x02\n\x13\x43lientConfiguration\x12*\n\x05video\x18\x01 \x01(\x0b\x32\x1b.livekit.VideoConfiguration\x12+\n\x06screen\x18\x02 \x01(\x0b\x32\x1b.livekit.VideoConfiguration\x12\x37\n\x11resume_connection\x18\x03 \x01(\x0e\x32\x1c.livekit.ClientConfigSetting\x12\x30\n\x0f\x64isabled_codecs\x18\x04 \x01(\x0b\x32\x17.livekit.DisabledCodecs\x12\x31\n\x0b\x66orce_relay\x18\x05 \x01(\x0e\x32\x1c.livekit.ClientConfigSetting\"L\n\x12VideoConfiguration\x12\x36\n\x10hardware_encoder\x18\x01 \x01(\x0e\x32\x1c.livekit.ClientConfigSetting\"Q\n\x0e\x44isabledCodecs\x12\x1e\n\x06\x63odecs\x18\x01 \x03(\x0b\x32\x0e.livekit.Codec\x12\x1f\n\x07publish\x18\x02 \x03(\x0b\x32\x0e.livekit.Codec\"\x80\x02\n\x08RTPDrift\x12.\n\nstart_time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12,\n\x08\x65nd_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x10\n\x08\x64uration\x18\x03 \x01(\x01\x12\x17\n\x0fstart_timestamp\x18\x04 \x01(\x04\x12\x15\n\rend_timestamp\x18\x05 \x01(\x04\x12\x17\n\x0frtp_clock_ticks\x18\x06 \x01(\x04\x12\x15\n\rdrift_samples\x18\x07 \x01(\x03\x12\x10\n\x08\x64rift_ms\x18\x08 \x01(\x01\x12\x12\n\nclock_rate\x18\t \x01(\x01\"\xd6\n\n\x08RTPStats\x12.\n\nstart_time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12,\n\x08\x65nd_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x10\n\x08\x64uration\x18\x03 \x01(\x01\x12\x0f\n\x07packets\x18\x04 \x01(\r\x12\x13\n\x0bpacket_rate\x18\x05 \x01(\x01\x12\r\n\x05\x62ytes\x18\x06 \x01(\x04\x12\x14\n\x0cheader_bytes\x18\' \x01(\x04\x12\x0f\n\x07\x62itrate\x18\x07 \x01(\x01\x12\x14\n\x0cpackets_lost\x18\x08 \x01(\r\x12\x18\n\x10packet_loss_rate\x18\t \x01(\x01\x12\x1e\n\x16packet_loss_percentage\x18\n \x01(\x02\x12\x19\n\x11packets_duplicate\x18\x0b \x01(\r\x12\x1d\n\x15packet_duplicate_rate\x18\x0c \x01(\x01\x12\x17\n\x0f\x62ytes_duplicate\x18\r \x01(\x04\x12\x1e\n\x16header_bytes_duplicate\x18( \x01(\x04\x12\x19\n\x11\x62itrate_duplicate\x18\x0e \x01(\x01\x12\x17\n\x0fpackets_padding\x18\x0f \x01(\r\x12\x1b\n\x13packet_padding_rate\x18\x10 \x01(\x01\x12\x15\n\rbytes_padding\x18\x11 \x01(\x04\x12\x1c\n\x14header_bytes_padding\x18) \x01(\x04\x12\x17\n\x0f\x62itrate_padding\x18\x12 \x01(\x01\x12\x1c\n\x14packets_out_of_order\x18\x13 \x01(\r\x12\x0e\n\x06\x66rames\x18\x14 \x01(\r\x12\x12\n\nframe_rate\x18\x15 \x01(\x01\x12\x16\n\x0ejitter_current\x18\x16 \x01(\x01\x12\x12\n\njitter_max\x18\x17 \x01(\x01\x12:\n\rgap_histogram\x18\x18 \x03(\x0b\x32#.livekit.RTPStats.GapHistogramEntry\x12\r\n\x05nacks\x18\x19 \x01(\r\x12\x11\n\tnack_acks\x18% \x01(\r\x12\x13\n\x0bnack_misses\x18\x1a \x01(\r\x12\x15\n\rnack_repeated\x18& \x01(\r\x12\x0c\n\x04plis\x18\x1b \x01(\r\x12,\n\x08last_pli\x18\x1c \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x0c\n\x04\x66irs\x18\x1d \x01(\r\x12,\n\x08last_fir\x18\x1e \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x13\n\x0brtt_current\x18\x1f \x01(\r\x12\x0f\n\x07rtt_max\x18 \x01(\r\x12\x12\n\nkey_frames\x18! \x01(\r\x12\x32\n\x0elast_key_frame\x18\" \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x17\n\x0flayer_lock_plis\x18# \x01(\r\x12\x37\n\x13last_layer_lock_pli\x18$ \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\'\n\x0cpacket_drift\x18, \x01(\x0b\x32\x11.livekit.RTPDrift\x12+\n\x10ntp_report_drift\x18- \x01(\x0b\x32\x11.livekit.RTPDrift\x12/\n\x14rebased_report_drift\x18. \x01(\x0b\x32\x11.livekit.RTPDrift\x12\x30\n\x15received_report_drift\x18/ \x01(\x0b\x32\x11.livekit.RTPDrift\x1a\x33\n\x11GapHistogramEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12\r\n\x05value\x18\x02 \x01(\r:\x02\x38\x01\"\xa2\x01\n\x15RTCPSenderReportState\x12\x15\n\rrtp_timestamp\x18\x01 \x01(\r\x12\x19\n\x11rtp_timestamp_ext\x18\x02 \x01(\x04\x12\x15\n\rntp_timestamp\x18\x03 \x01(\x04\x12\n\n\x02\x61t\x18\x04 \x01(\x03\x12\x13\n\x0b\x61t_adjusted\x18\x05 \x01(\x03\x12\x0f\n\x07packets\x18\x06 \x01(\r\x12\x0e\n\x06octets\x18\x07 \x01(\x04\"\xc9\x02\n\x11RTPForwarderState\x12\x0f\n\x07started\x18\x01 \x01(\x08\x12\x1f\n\x17reference_layer_spatial\x18\x02 \x01(\x05\x12\x16\n\x0epre_start_time\x18\x03 \x01(\x03\x12\x1b\n\x13\x65xt_first_timestamp\x18\x04 \x01(\x04\x12$\n\x1c\x64ummy_start_timestamp_offset\x18\x05 \x01(\x04\x12+\n\nrtp_munger\x18\x06 \x01(\x0b\x32\x17.livekit.RTPMungerState\x12-\n\nvp8_munger\x18\x07 \x01(\x0b\x32\x17.livekit.VP8MungerStateH\x00\x12;\n\x13sender_report_state\x18\x08 \x03(\x0b\x32\x1e.livekit.RTCPSenderReportStateB\x0e\n\x0c\x63odec_munger\"\xcb\x01\n\x0eRTPMungerState\x12 \n\x18\x65xt_last_sequence_number\x18\x01 \x01(\x04\x12\'\n\x1f\x65xt_second_last_sequence_number\x18\x02 \x01(\x04\x12\x1a\n\x12\x65xt_last_timestamp\x18\x03 \x01(\x04\x12!\n\x19\x65xt_second_last_timestamp\x18\x04 \x01(\x04\x12\x13\n\x0blast_marker\x18\x05 \x01(\x08\x12\x1a\n\x12second_last_marker\x18\x06 \x01(\x08\"\xb8\x01\n\x0eVP8MungerState\x12\x1b\n\x13\x65xt_last_picture_id\x18\x01 \x01(\x05\x12\x17\n\x0fpicture_id_used\x18\x02 \x01(\x08\x12\x18\n\x10last_tl0_pic_idx\x18\x03 \x01(\r\x12\x18\n\x10tl0_pic_idx_used\x18\x04 \x01(\x08\x12\x10\n\x08tid_used\x18\x05 \x01(\x08\x12\x14\n\x0clast_key_idx\x18\x06 \x01(\r\x12\x14\n\x0ckey_idx_used\x18\x07 \x01(\x08\"1\n\x0cTimedVersion\x12\x12\n\nunix_micro\x18\x01 \x01(\x03\x12\r\n\x05ticks\x18\x02 \x01(\x05\"\xc5\x07\n\nDataStream\x1a\xa4\x01\n\nTextHeader\x12\x39\n\x0eoperation_type\x18\x01 \x01(\x0e\x32!.livekit.DataStream.OperationType\x12\x0f\n\x07version\x18\x02 \x01(\x05\x12\x1a\n\x12reply_to_stream_id\x18\x03 \x01(\t\x12\x1b\n\x13\x61ttached_stream_ids\x18\x04 \x03(\t\x12\x11\n\tgenerated\x18\x05 \x01(\x08\x1a\x1a\n\nByteHeader\x12\x0c\n\x04name\x18\x01 \x01(\t\x1a\xa2\x03\n\x06Header\x12\x11\n\tstream_id\x18\x01 \x01(\t\x12\x11\n\ttimestamp\x18\x02 \x01(\x03\x12\r\n\x05topic\x18\x03 \x01(\t\x12\x11\n\tmime_type\x18\x04 \x01(\t\x12\x19\n\x0ctotal_length\x18\x05 \x01(\x04H\x01\x88\x01\x01\x12\x31\n\x0f\x65ncryption_type\x18\x07 \x01(\x0e\x32\x18.livekit.Encryption.Type\x12>\n\nattributes\x18\x08 \x03(\x0b\x32*.livekit.DataStream.Header.AttributesEntry\x12\x35\n\x0btext_header\x18\t \x01(\x0b\x32\x1e.livekit.DataStream.TextHeaderH\x00\x12\x35\n\x0b\x62yte_header\x18\n \x01(\x0b\x32\x1e.livekit.DataStream.ByteHeaderH\x00\x1a\x31\n\x0f\x41ttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x10\n\x0e\x63ontent_headerB\x0f\n\r_total_length\x1ai\n\x05\x43hunk\x12\x11\n\tstream_id\x18\x01 \x01(\t\x12\x13\n\x0b\x63hunk_index\x18\x02 \x01(\x04\x12\x0f\n\x07\x63ontent\x18\x03 \x01(\x0c\x12\x0f\n\x07version\x18\x04 \x01(\x05\x12\x0f\n\x02iv\x18\x05 \x01(\x0cH\x00\x88\x01\x01\x42\x05\n\x03_iv\x1a\xa0\x01\n\x07Trailer\x12\x11\n\tstream_id\x18\x01 \x01(\t\x12\x0e\n\x06reason\x18\x02 \x01(\t\x12?\n\nattributes\x18\x03 \x03(\x0b\x32+.livekit.DataStream.Trailer.AttributesEntry\x1a\x31\n\x0f\x41ttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"A\n\rOperationType\x12\n\n\x06\x43REATE\x10\x00\x12\n\n\x06UPDATE\x10\x01\x12\n\n\x06\x44\x45LETE\x10\x02\x12\x0c\n\x08REACTION\x10\x03*/\n\nAudioCodec\x12\x0e\n\nDEFAULT_AC\x10\x00\x12\x08\n\x04OPUS\x10\x01\x12\x07\n\x03\x41\x41\x43\x10\x02*V\n\nVideoCodec\x12\x0e\n\nDEFAULT_VC\x10\x00\x12\x11\n\rH264_BASELINE\x10\x01\x12\r\n\tH264_MAIN\x10\x02\x12\r\n\tH264_HIGH\x10\x03\x12\x07\n\x03VP8\x10\x04*)\n\nImageCodec\x12\x0e\n\nIC_DEFAULT\x10\x00\x12\x0b\n\x07IC_JPEG\x10\x01*2\n\x11\x42\x61\x63kupCodecPolicy\x12\x0e\n\nREGRESSION\x10\x00\x12\r\n\tSIMULCAST\x10\x01*+\n\tTrackType\x12\t\n\x05\x41UDIO\x10\x00\x12\t\n\x05VIDEO\x10\x01\x12\x08\n\x04\x44\x41TA\x10\x02*`\n\x0bTrackSource\x12\x0b\n\x07UNKNOWN\x10\x00\x12\n\n\x06\x43\x41MERA\x10\x01\x12\x0e\n\nMICROPHONE\x10\x02\x12\x10\n\x0cSCREEN_SHARE\x10\x03\x12\x16\n\x12SCREEN_SHARE_AUDIO\x10\x04*6\n\x0cVideoQuality\x12\x07\n\x03LOW\x10\x00\x12\n\n\x06MEDIUM\x10\x01\x12\x08\n\x04HIGH\x10\x02\x12\x07\n\x03OFF\x10\x03*@\n\x11\x43onnectionQuality\x12\x08\n\x04POOR\x10\x00\x12\x08\n\x04GOOD\x10\x01\x12\r\n\tEXCELLENT\x10\x02\x12\x08\n\x04LOST\x10\x03*;\n\x13\x43lientConfigSetting\x12\t\n\x05UNSET\x10\x00\x12\x0c\n\x08\x44ISABLED\x10\x01\x12\x0b\n\x07\x45NABLED\x10\x02*\xac\x02\n\x10\x44isconnectReason\x12\x12\n\x0eUNKNOWN_REASON\x10\x00\x12\x14\n\x10\x43LIENT_INITIATED\x10\x01\x12\x16\n\x12\x44UPLICATE_IDENTITY\x10\x02\x12\x13\n\x0fSERVER_SHUTDOWN\x10\x03\x12\x17\n\x13PARTICIPANT_REMOVED\x10\x04\x12\x10\n\x0cROOM_DELETED\x10\x05\x12\x12\n\x0eSTATE_MISMATCH\x10\x06\x12\x10\n\x0cJOIN_FAILURE\x10\x07\x12\r\n\tMIGRATION\x10\x08\x12\x10\n\x0cSIGNAL_CLOSE\x10\t\x12\x0f\n\x0bROOM_CLOSED\x10\n\x12\x14\n\x10USER_UNAVAILABLE\x10\x0b\x12\x11\n\rUSER_REJECTED\x10\x0c\x12\x15\n\x11SIP_TRUNK_FAILURE\x10\r*\x89\x01\n\x0fReconnectReason\x12\x0e\n\nRR_UNKNOWN\x10\x00\x12\x1a\n\x16RR_SIGNAL_DISCONNECTED\x10\x01\x12\x17\n\x13RR_PUBLISHER_FAILED\x10\x02\x12\x18\n\x14RR_SUBSCRIBER_FAILED\x10\x03\x12\x17\n\x13RR_SWITCH_CANDIDATE\x10\x04*T\n\x11SubscriptionError\x12\x0e\n\nSE_UNKNOWN\x10\x00\x12\x18\n\x14SE_CODEC_UNSUPPORTED\x10\x01\x12\x15\n\x11SE_TRACK_NOTFOUND\x10\x02*\xa3\x01\n\x11\x41udioTrackFeature\x12\r\n\tTF_STEREO\x10\x00\x12\r\n\tTF_NO_DTX\x10\x01\x12\x18\n\x14TF_AUTO_GAIN_CONTROL\x10\x02\x12\x18\n\x14TF_ECHO_CANCELLATION\x10\x03\x12\x18\n\x14TF_NOISE_SUPPRESSION\x10\x04\x12\"\n\x1eTF_ENHANCED_NOISE_CANCELLATION\x10\x05\x42\x46Z#github.com/livekit/protocol/livekit\xaa\x02\rLiveKit.Proto\xea\x02\x0eLiveKit::Protob\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14livekit_models.proto\x12\x07livekit\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x15livekit_metrics.proto\"-\n\nPagination\x12\x10\n\x08\x61\x66ter_id\x18\x01 \x01(\t\x12\r\n\x05limit\x18\x02 \x01(\x05\"\x19\n\nListUpdate\x12\x0b\n\x03set\x18\x01 \x03(\t\"\xe3\x02\n\x04Room\x12\x0b\n\x03sid\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x15\n\rempty_timeout\x18\x03 \x01(\r\x12\x19\n\x11\x64\x65parture_timeout\x18\x0e \x01(\r\x12\x18\n\x10max_participants\x18\x04 \x01(\r\x12\x15\n\rcreation_time\x18\x05 \x01(\x03\x12\x18\n\x10\x63reation_time_ms\x18\x0f \x01(\x03\x12\x15\n\rturn_password\x18\x06 \x01(\t\x12&\n\x0e\x65nabled_codecs\x18\x07 \x03(\x0b\x32\x0e.livekit.Codec\x12\x10\n\x08metadata\x18\x08 \x01(\t\x12\x18\n\x10num_participants\x18\t \x01(\r\x12\x16\n\x0enum_publishers\x18\x0b \x01(\r\x12\x18\n\x10\x61\x63tive_recording\x18\n \x01(\x08\x12&\n\x07version\x18\r \x01(\x0b\x32\x15.livekit.TimedVersion\"(\n\x05\x43odec\x12\x0c\n\x04mime\x18\x01 \x01(\t\x12\x11\n\tfmtp_line\x18\x02 \x01(\t\"9\n\x0cPlayoutDelay\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0b\n\x03min\x18\x02 \x01(\r\x12\x0b\n\x03max\x18\x03 \x01(\r\"\x85\x02\n\x15ParticipantPermission\x12\x15\n\rcan_subscribe\x18\x01 \x01(\x08\x12\x13\n\x0b\x63\x61n_publish\x18\x02 \x01(\x08\x12\x18\n\x10\x63\x61n_publish_data\x18\x03 \x01(\x08\x12\x31\n\x13\x63\x61n_publish_sources\x18\t \x03(\x0e\x32\x14.livekit.TrackSource\x12\x0e\n\x06hidden\x18\x07 \x01(\x08\x12\x14\n\x08recorder\x18\x08 \x01(\x08\x42\x02\x18\x01\x12\x1b\n\x13\x63\x61n_update_metadata\x18\n \x01(\x08\x12\x11\n\x05\x61gent\x18\x0b \x01(\x08\x42\x02\x18\x01\x12\x1d\n\x15\x63\x61n_subscribe_metrics\x18\x0c \x01(\x08\"\xf7\x05\n\x0fParticipantInfo\x12\x0b\n\x03sid\x18\x01 \x01(\t\x12\x10\n\x08identity\x18\x02 \x01(\t\x12-\n\x05state\x18\x03 \x01(\x0e\x32\x1e.livekit.ParticipantInfo.State\x12\"\n\x06tracks\x18\x04 \x03(\x0b\x32\x12.livekit.TrackInfo\x12\x10\n\x08metadata\x18\x05 \x01(\t\x12\x11\n\tjoined_at\x18\x06 \x01(\x03\x12\x14\n\x0cjoined_at_ms\x18\x11 \x01(\x03\x12\x0c\n\x04name\x18\t \x01(\t\x12\x0f\n\x07version\x18\n \x01(\r\x12\x32\n\npermission\x18\x0b \x01(\x0b\x32\x1e.livekit.ParticipantPermission\x12\x0e\n\x06region\x18\x0c \x01(\t\x12\x14\n\x0cis_publisher\x18\r \x01(\x08\x12+\n\x04kind\x18\x0e \x01(\x0e\x32\x1d.livekit.ParticipantInfo.Kind\x12<\n\nattributes\x18\x0f \x03(\x0b\x32(.livekit.ParticipantInfo.AttributesEntry\x12\x34\n\x11\x64isconnect_reason\x18\x10 \x01(\x0e\x32\x19.livekit.DisconnectReason\x12\x39\n\x0ckind_details\x18\x12 \x03(\x0e\x32#.livekit.ParticipantInfo.KindDetail\x1a\x31\n\x0f\x41ttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\">\n\x05State\x12\x0b\n\x07JOINING\x10\x00\x12\n\n\x06JOINED\x10\x01\x12\n\n\x06\x41\x43TIVE\x10\x02\x12\x10\n\x0c\x44ISCONNECTED\x10\x03\"A\n\x04Kind\x12\x0c\n\x08STANDARD\x10\x00\x12\x0b\n\x07INGRESS\x10\x01\x12\n\n\x06\x45GRESS\x10\x02\x12\x07\n\x03SIP\x10\x03\x12\t\n\x05\x41GENT\x10\x04\",\n\nKindDetail\x12\x0f\n\x0b\x43LOUD_AGENT\x10\x00\x12\r\n\tFORWARDED\x10\x01\"3\n\nEncryption\"%\n\x04Type\x12\x08\n\x04NONE\x10\x00\x12\x07\n\x03GCM\x10\x01\x12\n\n\x06\x43USTOM\x10\x02\"f\n\x12SimulcastCodecInfo\x12\x11\n\tmime_type\x18\x01 \x01(\t\x12\x0b\n\x03mid\x18\x02 \x01(\t\x12\x0b\n\x03\x63id\x18\x03 \x01(\t\x12#\n\x06layers\x18\x04 \x03(\x0b\x32\x13.livekit.VideoLayer\"\xae\x04\n\tTrackInfo\x12\x0b\n\x03sid\x18\x01 \x01(\t\x12 \n\x04type\x18\x02 \x01(\x0e\x32\x12.livekit.TrackType\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\r\n\x05muted\x18\x04 \x01(\x08\x12\r\n\x05width\x18\x05 \x01(\r\x12\x0e\n\x06height\x18\x06 \x01(\r\x12\x11\n\tsimulcast\x18\x07 \x01(\x08\x12\x13\n\x0b\x64isable_dtx\x18\x08 \x01(\x08\x12$\n\x06source\x18\t \x01(\x0e\x32\x14.livekit.TrackSource\x12#\n\x06layers\x18\n \x03(\x0b\x32\x13.livekit.VideoLayer\x12\x11\n\tmime_type\x18\x0b \x01(\t\x12\x0b\n\x03mid\x18\x0c \x01(\t\x12+\n\x06\x63odecs\x18\r \x03(\x0b\x32\x1b.livekit.SimulcastCodecInfo\x12\x0e\n\x06stereo\x18\x0e \x01(\x08\x12\x13\n\x0b\x64isable_red\x18\x0f \x01(\x08\x12,\n\nencryption\x18\x10 \x01(\x0e\x32\x18.livekit.Encryption.Type\x12\x0e\n\x06stream\x18\x11 \x01(\t\x12&\n\x07version\x18\x12 \x01(\x0b\x32\x15.livekit.TimedVersion\x12\x32\n\x0e\x61udio_features\x18\x13 \x03(\x0e\x32\x1a.livekit.AudioTrackFeature\x12\x37\n\x13\x62\x61\x63kup_codec_policy\x18\x14 \x01(\x0e\x32\x1a.livekit.BackupCodecPolicy\"r\n\nVideoLayer\x12&\n\x07quality\x18\x01 \x01(\x0e\x32\x15.livekit.VideoQuality\x12\r\n\x05width\x18\x02 \x01(\r\x12\x0e\n\x06height\x18\x03 \x01(\r\x12\x0f\n\x07\x62itrate\x18\x04 \x01(\r\x12\x0c\n\x04ssrc\x18\x05 \x01(\r\"\xc6\x05\n\nDataPacket\x12*\n\x04kind\x18\x01 \x01(\x0e\x32\x18.livekit.DataPacket.KindB\x02\x18\x01\x12\x1c\n\x14participant_identity\x18\x04 \x01(\t\x12\x1e\n\x16\x64\x65stination_identities\x18\x05 \x03(\t\x12#\n\x04user\x18\x02 \x01(\x0b\x32\x13.livekit.UserPacketH\x00\x12\x33\n\x07speaker\x18\x03 \x01(\x0b\x32\x1c.livekit.ActiveSpeakerUpdateB\x02\x18\x01H\x00\x12$\n\x08sip_dtmf\x18\x06 \x01(\x0b\x32\x10.livekit.SipDTMFH\x00\x12/\n\rtranscription\x18\x07 \x01(\x0b\x32\x16.livekit.TranscriptionH\x00\x12(\n\x07metrics\x18\x08 \x01(\x0b\x32\x15.livekit.MetricsBatchH\x00\x12,\n\x0c\x63hat_message\x18\t \x01(\x0b\x32\x14.livekit.ChatMessageH\x00\x12*\n\x0brpc_request\x18\n \x01(\x0b\x32\x13.livekit.RpcRequestH\x00\x12\"\n\x07rpc_ack\x18\x0b \x01(\x0b\x32\x0f.livekit.RpcAckH\x00\x12,\n\x0crpc_response\x18\x0c \x01(\x0b\x32\x14.livekit.RpcResponseH\x00\x12\x33\n\rstream_header\x18\r \x01(\x0b\x32\x1a.livekit.DataStream.HeaderH\x00\x12\x31\n\x0cstream_chunk\x18\x0e \x01(\x0b\x32\x19.livekit.DataStream.ChunkH\x00\x12\x35\n\x0estream_trailer\x18\x0f \x01(\x0b\x32\x1b.livekit.DataStream.TrailerH\x00\"\x1f\n\x04Kind\x12\x0c\n\x08RELIABLE\x10\x00\x12\t\n\x05LOSSY\x10\x01\x42\x07\n\x05value\"=\n\x13\x41\x63tiveSpeakerUpdate\x12&\n\x08speakers\x18\x01 \x03(\x0b\x32\x14.livekit.SpeakerInfo\"9\n\x0bSpeakerInfo\x12\x0b\n\x03sid\x18\x01 \x01(\t\x12\r\n\x05level\x18\x02 \x01(\x02\x12\x0e\n\x06\x61\x63tive\x18\x03 \x01(\x08\"\xaf\x02\n\nUserPacket\x12\x1b\n\x0fparticipant_sid\x18\x01 \x01(\tB\x02\x18\x01\x12 \n\x14participant_identity\x18\x05 \x01(\tB\x02\x18\x01\x12\x0f\n\x07payload\x18\x02 \x01(\x0c\x12\x1c\n\x10\x64\x65stination_sids\x18\x03 \x03(\tB\x02\x18\x01\x12\"\n\x16\x64\x65stination_identities\x18\x06 \x03(\tB\x02\x18\x01\x12\x12\n\x05topic\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x0f\n\x02id\x18\x08 \x01(\tH\x01\x88\x01\x01\x12\x17\n\nstart_time\x18\t \x01(\x04H\x02\x88\x01\x01\x12\x15\n\x08\x65nd_time\x18\n \x01(\x04H\x03\x88\x01\x01\x12\r\n\x05nonce\x18\x0b \x01(\x0c\x42\x08\n\x06_topicB\x05\n\x03_idB\r\n\x0b_start_timeB\x0b\n\t_end_time\"&\n\x07SipDTMF\x12\x0c\n\x04\x63ode\x18\x03 \x01(\r\x12\r\n\x05\x64igit\x18\x04 \x01(\t\"|\n\rTranscription\x12(\n transcribed_participant_identity\x18\x02 \x01(\t\x12\x10\n\x08track_id\x18\x03 \x01(\t\x12/\n\x08segments\x18\x04 \x03(\x0b\x32\x1d.livekit.TranscriptionSegment\"w\n\x14TranscriptionSegment\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04text\x18\x02 \x01(\t\x12\x12\n\nstart_time\x18\x03 \x01(\x04\x12\x10\n\x08\x65nd_time\x18\x04 \x01(\x04\x12\r\n\x05\x66inal\x18\x05 \x01(\x08\x12\x10\n\x08language\x18\x06 \x01(\t\"\x91\x01\n\x0b\x43hatMessage\x12\n\n\x02id\x18\x01 \x01(\t\x12\x11\n\ttimestamp\x18\x02 \x01(\x03\x12\x1b\n\x0e\x65\x64it_timestamp\x18\x03 \x01(\x03H\x00\x88\x01\x01\x12\x0f\n\x07message\x18\x04 \x01(\t\x12\x0f\n\x07\x64\x65leted\x18\x05 \x01(\x08\x12\x11\n\tgenerated\x18\x06 \x01(\x08\x42\x11\n\x0f_edit_timestamp\"g\n\nRpcRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0e\n\x06method\x18\x02 \x01(\t\x12\x0f\n\x07payload\x18\x03 \x01(\t\x12\x1b\n\x13response_timeout_ms\x18\x04 \x01(\r\x12\x0f\n\x07version\x18\x05 \x01(\r\"\x1c\n\x06RpcAck\x12\x12\n\nrequest_id\x18\x01 \x01(\t\"a\n\x0bRpcResponse\x12\x12\n\nrequest_id\x18\x01 \x01(\t\x12\x11\n\x07payload\x18\x02 \x01(\tH\x00\x12\"\n\x05\x65rror\x18\x03 \x01(\x0b\x32\x11.livekit.RpcErrorH\x00\x42\x07\n\x05value\"7\n\x08RpcError\x12\x0c\n\x04\x63ode\x18\x01 \x01(\r\x12\x0f\n\x07message\x18\x02 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\t\"@\n\x11ParticipantTracks\x12\x17\n\x0fparticipant_sid\x18\x01 \x01(\t\x12\x12\n\ntrack_sids\x18\x02 \x03(\t\"\xce\x01\n\nServerInfo\x12,\n\x07\x65\x64ition\x18\x01 \x01(\x0e\x32\x1b.livekit.ServerInfo.Edition\x12\x0f\n\x07version\x18\x02 \x01(\t\x12\x10\n\x08protocol\x18\x03 \x01(\x05\x12\x0e\n\x06region\x18\x04 \x01(\t\x12\x0f\n\x07node_id\x18\x05 \x01(\t\x12\x12\n\ndebug_info\x18\x06 \x01(\t\x12\x16\n\x0e\x61gent_protocol\x18\x07 \x01(\x05\"\"\n\x07\x45\x64ition\x12\x0c\n\x08Standard\x10\x00\x12\t\n\x05\x43loud\x10\x01\"\x8a\x03\n\nClientInfo\x12$\n\x03sdk\x18\x01 \x01(\x0e\x32\x17.livekit.ClientInfo.SDK\x12\x0f\n\x07version\x18\x02 \x01(\t\x12\x10\n\x08protocol\x18\x03 \x01(\x05\x12\n\n\x02os\x18\x04 \x01(\t\x12\x12\n\nos_version\x18\x05 \x01(\t\x12\x14\n\x0c\x64\x65vice_model\x18\x06 \x01(\t\x12\x0f\n\x07\x62rowser\x18\x07 \x01(\t\x12\x17\n\x0f\x62rowser_version\x18\x08 \x01(\t\x12\x0f\n\x07\x61\x64\x64ress\x18\t \x01(\t\x12\x0f\n\x07network\x18\n \x01(\t\x12\x12\n\nother_sdks\x18\x0b \x01(\t\"\x9c\x01\n\x03SDK\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x06\n\x02JS\x10\x01\x12\t\n\x05SWIFT\x10\x02\x12\x0b\n\x07\x41NDROID\x10\x03\x12\x0b\n\x07\x46LUTTER\x10\x04\x12\x06\n\x02GO\x10\x05\x12\t\n\x05UNITY\x10\x06\x12\x10\n\x0cREACT_NATIVE\x10\x07\x12\x08\n\x04RUST\x10\x08\x12\n\n\x06PYTHON\x10\t\x12\x07\n\x03\x43PP\x10\n\x12\r\n\tUNITY_WEB\x10\x0b\x12\x08\n\x04NODE\x10\x0c\"\x8c\x02\n\x13\x43lientConfiguration\x12*\n\x05video\x18\x01 \x01(\x0b\x32\x1b.livekit.VideoConfiguration\x12+\n\x06screen\x18\x02 \x01(\x0b\x32\x1b.livekit.VideoConfiguration\x12\x37\n\x11resume_connection\x18\x03 \x01(\x0e\x32\x1c.livekit.ClientConfigSetting\x12\x30\n\x0f\x64isabled_codecs\x18\x04 \x01(\x0b\x32\x17.livekit.DisabledCodecs\x12\x31\n\x0b\x66orce_relay\x18\x05 \x01(\x0e\x32\x1c.livekit.ClientConfigSetting\"L\n\x12VideoConfiguration\x12\x36\n\x10hardware_encoder\x18\x01 \x01(\x0e\x32\x1c.livekit.ClientConfigSetting\"Q\n\x0e\x44isabledCodecs\x12\x1e\n\x06\x63odecs\x18\x01 \x03(\x0b\x32\x0e.livekit.Codec\x12\x1f\n\x07publish\x18\x02 \x03(\x0b\x32\x0e.livekit.Codec\"\x80\x02\n\x08RTPDrift\x12.\n\nstart_time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12,\n\x08\x65nd_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x10\n\x08\x64uration\x18\x03 \x01(\x01\x12\x17\n\x0fstart_timestamp\x18\x04 \x01(\x04\x12\x15\n\rend_timestamp\x18\x05 \x01(\x04\x12\x17\n\x0frtp_clock_ticks\x18\x06 \x01(\x04\x12\x15\n\rdrift_samples\x18\x07 \x01(\x03\x12\x10\n\x08\x64rift_ms\x18\x08 \x01(\x01\x12\x12\n\nclock_rate\x18\t \x01(\x01\"\xd6\n\n\x08RTPStats\x12.\n\nstart_time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12,\n\x08\x65nd_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x10\n\x08\x64uration\x18\x03 \x01(\x01\x12\x0f\n\x07packets\x18\x04 \x01(\r\x12\x13\n\x0bpacket_rate\x18\x05 \x01(\x01\x12\r\n\x05\x62ytes\x18\x06 \x01(\x04\x12\x14\n\x0cheader_bytes\x18\' \x01(\x04\x12\x0f\n\x07\x62itrate\x18\x07 \x01(\x01\x12\x14\n\x0cpackets_lost\x18\x08 \x01(\r\x12\x18\n\x10packet_loss_rate\x18\t \x01(\x01\x12\x1e\n\x16packet_loss_percentage\x18\n \x01(\x02\x12\x19\n\x11packets_duplicate\x18\x0b \x01(\r\x12\x1d\n\x15packet_duplicate_rate\x18\x0c \x01(\x01\x12\x17\n\x0f\x62ytes_duplicate\x18\r \x01(\x04\x12\x1e\n\x16header_bytes_duplicate\x18( \x01(\x04\x12\x19\n\x11\x62itrate_duplicate\x18\x0e \x01(\x01\x12\x17\n\x0fpackets_padding\x18\x0f \x01(\r\x12\x1b\n\x13packet_padding_rate\x18\x10 \x01(\x01\x12\x15\n\rbytes_padding\x18\x11 \x01(\x04\x12\x1c\n\x14header_bytes_padding\x18) \x01(\x04\x12\x17\n\x0f\x62itrate_padding\x18\x12 \x01(\x01\x12\x1c\n\x14packets_out_of_order\x18\x13 \x01(\r\x12\x0e\n\x06\x66rames\x18\x14 \x01(\r\x12\x12\n\nframe_rate\x18\x15 \x01(\x01\x12\x16\n\x0ejitter_current\x18\x16 \x01(\x01\x12\x12\n\njitter_max\x18\x17 \x01(\x01\x12:\n\rgap_histogram\x18\x18 \x03(\x0b\x32#.livekit.RTPStats.GapHistogramEntry\x12\r\n\x05nacks\x18\x19 \x01(\r\x12\x11\n\tnack_acks\x18% \x01(\r\x12\x13\n\x0bnack_misses\x18\x1a \x01(\r\x12\x15\n\rnack_repeated\x18& \x01(\r\x12\x0c\n\x04plis\x18\x1b \x01(\r\x12,\n\x08last_pli\x18\x1c \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x0c\n\x04\x66irs\x18\x1d \x01(\r\x12,\n\x08last_fir\x18\x1e \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x13\n\x0brtt_current\x18\x1f \x01(\r\x12\x0f\n\x07rtt_max\x18 \x01(\r\x12\x12\n\nkey_frames\x18! \x01(\r\x12\x32\n\x0elast_key_frame\x18\" \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x17\n\x0flayer_lock_plis\x18# \x01(\r\x12\x37\n\x13last_layer_lock_pli\x18$ \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\'\n\x0cpacket_drift\x18, \x01(\x0b\x32\x11.livekit.RTPDrift\x12+\n\x10ntp_report_drift\x18- \x01(\x0b\x32\x11.livekit.RTPDrift\x12/\n\x14rebased_report_drift\x18. \x01(\x0b\x32\x11.livekit.RTPDrift\x12\x30\n\x15received_report_drift\x18/ \x01(\x0b\x32\x11.livekit.RTPDrift\x1a\x33\n\x11GapHistogramEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12\r\n\x05value\x18\x02 \x01(\r:\x02\x38\x01\"\xa2\x01\n\x15RTCPSenderReportState\x12\x15\n\rrtp_timestamp\x18\x01 \x01(\r\x12\x19\n\x11rtp_timestamp_ext\x18\x02 \x01(\x04\x12\x15\n\rntp_timestamp\x18\x03 \x01(\x04\x12\n\n\x02\x61t\x18\x04 \x01(\x03\x12\x13\n\x0b\x61t_adjusted\x18\x05 \x01(\x03\x12\x0f\n\x07packets\x18\x06 \x01(\r\x12\x0e\n\x06octets\x18\x07 \x01(\x04\"\xc9\x02\n\x11RTPForwarderState\x12\x0f\n\x07started\x18\x01 \x01(\x08\x12\x1f\n\x17reference_layer_spatial\x18\x02 \x01(\x05\x12\x16\n\x0epre_start_time\x18\x03 \x01(\x03\x12\x1b\n\x13\x65xt_first_timestamp\x18\x04 \x01(\x04\x12$\n\x1c\x64ummy_start_timestamp_offset\x18\x05 \x01(\x04\x12+\n\nrtp_munger\x18\x06 \x01(\x0b\x32\x17.livekit.RTPMungerState\x12-\n\nvp8_munger\x18\x07 \x01(\x0b\x32\x17.livekit.VP8MungerStateH\x00\x12;\n\x13sender_report_state\x18\x08 \x03(\x0b\x32\x1e.livekit.RTCPSenderReportStateB\x0e\n\x0c\x63odec_munger\"\xcb\x01\n\x0eRTPMungerState\x12 \n\x18\x65xt_last_sequence_number\x18\x01 \x01(\x04\x12\'\n\x1f\x65xt_second_last_sequence_number\x18\x02 \x01(\x04\x12\x1a\n\x12\x65xt_last_timestamp\x18\x03 \x01(\x04\x12!\n\x19\x65xt_second_last_timestamp\x18\x04 \x01(\x04\x12\x13\n\x0blast_marker\x18\x05 \x01(\x08\x12\x1a\n\x12second_last_marker\x18\x06 \x01(\x08\"\xb8\x01\n\x0eVP8MungerState\x12\x1b\n\x13\x65xt_last_picture_id\x18\x01 \x01(\x05\x12\x17\n\x0fpicture_id_used\x18\x02 \x01(\x08\x12\x18\n\x10last_tl0_pic_idx\x18\x03 \x01(\r\x12\x18\n\x10tl0_pic_idx_used\x18\x04 \x01(\x08\x12\x10\n\x08tid_used\x18\x05 \x01(\x08\x12\x14\n\x0clast_key_idx\x18\x06 \x01(\r\x12\x14\n\x0ckey_idx_used\x18\x07 \x01(\x08\"1\n\x0cTimedVersion\x12\x12\n\nunix_micro\x18\x01 \x01(\x03\x12\r\n\x05ticks\x18\x02 \x01(\x05\"\xc5\x07\n\nDataStream\x1a\xa4\x01\n\nTextHeader\x12\x39\n\x0eoperation_type\x18\x01 \x01(\x0e\x32!.livekit.DataStream.OperationType\x12\x0f\n\x07version\x18\x02 \x01(\x05\x12\x1a\n\x12reply_to_stream_id\x18\x03 \x01(\t\x12\x1b\n\x13\x61ttached_stream_ids\x18\x04 \x03(\t\x12\x11\n\tgenerated\x18\x05 \x01(\x08\x1a\x1a\n\nByteHeader\x12\x0c\n\x04name\x18\x01 \x01(\t\x1a\xa2\x03\n\x06Header\x12\x11\n\tstream_id\x18\x01 \x01(\t\x12\x11\n\ttimestamp\x18\x02 \x01(\x03\x12\r\n\x05topic\x18\x03 \x01(\t\x12\x11\n\tmime_type\x18\x04 \x01(\t\x12\x19\n\x0ctotal_length\x18\x05 \x01(\x04H\x01\x88\x01\x01\x12\x31\n\x0f\x65ncryption_type\x18\x07 \x01(\x0e\x32\x18.livekit.Encryption.Type\x12>\n\nattributes\x18\x08 \x03(\x0b\x32*.livekit.DataStream.Header.AttributesEntry\x12\x35\n\x0btext_header\x18\t \x01(\x0b\x32\x1e.livekit.DataStream.TextHeaderH\x00\x12\x35\n\x0b\x62yte_header\x18\n \x01(\x0b\x32\x1e.livekit.DataStream.ByteHeaderH\x00\x1a\x31\n\x0f\x41ttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x10\n\x0e\x63ontent_headerB\x0f\n\r_total_length\x1ai\n\x05\x43hunk\x12\x11\n\tstream_id\x18\x01 \x01(\t\x12\x13\n\x0b\x63hunk_index\x18\x02 \x01(\x04\x12\x0f\n\x07\x63ontent\x18\x03 \x01(\x0c\x12\x0f\n\x07version\x18\x04 \x01(\x05\x12\x0f\n\x02iv\x18\x05 \x01(\x0cH\x00\x88\x01\x01\x42\x05\n\x03_iv\x1a\xa0\x01\n\x07Trailer\x12\x11\n\tstream_id\x18\x01 \x01(\t\x12\x0e\n\x06reason\x18\x02 \x01(\t\x12?\n\nattributes\x18\x03 \x03(\x0b\x32+.livekit.DataStream.Trailer.AttributesEntry\x1a\x31\n\x0f\x41ttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"A\n\rOperationType\x12\n\n\x06\x43REATE\x10\x00\x12\n\n\x06UPDATE\x10\x01\x12\n\n\x06\x44\x45LETE\x10\x02\x12\x0c\n\x08REACTION\x10\x03*/\n\nAudioCodec\x12\x0e\n\nDEFAULT_AC\x10\x00\x12\x08\n\x04OPUS\x10\x01\x12\x07\n\x03\x41\x41\x43\x10\x02*V\n\nVideoCodec\x12\x0e\n\nDEFAULT_VC\x10\x00\x12\x11\n\rH264_BASELINE\x10\x01\x12\r\n\tH264_MAIN\x10\x02\x12\r\n\tH264_HIGH\x10\x03\x12\x07\n\x03VP8\x10\x04*)\n\nImageCodec\x12\x0e\n\nIC_DEFAULT\x10\x00\x12\x0b\n\x07IC_JPEG\x10\x01*I\n\x11\x42\x61\x63kupCodecPolicy\x12\x15\n\x11PREFER_REGRESSION\x10\x00\x12\r\n\tSIMULCAST\x10\x01\x12\x0e\n\nREGRESSION\x10\x02*+\n\tTrackType\x12\t\n\x05\x41UDIO\x10\x00\x12\t\n\x05VIDEO\x10\x01\x12\x08\n\x04\x44\x41TA\x10\x02*`\n\x0bTrackSource\x12\x0b\n\x07UNKNOWN\x10\x00\x12\n\n\x06\x43\x41MERA\x10\x01\x12\x0e\n\nMICROPHONE\x10\x02\x12\x10\n\x0cSCREEN_SHARE\x10\x03\x12\x16\n\x12SCREEN_SHARE_AUDIO\x10\x04*6\n\x0cVideoQuality\x12\x07\n\x03LOW\x10\x00\x12\n\n\x06MEDIUM\x10\x01\x12\x08\n\x04HIGH\x10\x02\x12\x07\n\x03OFF\x10\x03*@\n\x11\x43onnectionQuality\x12\x08\n\x04POOR\x10\x00\x12\x08\n\x04GOOD\x10\x01\x12\r\n\tEXCELLENT\x10\x02\x12\x08\n\x04LOST\x10\x03*;\n\x13\x43lientConfigSetting\x12\t\n\x05UNSET\x10\x00\x12\x0c\n\x08\x44ISABLED\x10\x01\x12\x0b\n\x07\x45NABLED\x10\x02*\xac\x02\n\x10\x44isconnectReason\x12\x12\n\x0eUNKNOWN_REASON\x10\x00\x12\x14\n\x10\x43LIENT_INITIATED\x10\x01\x12\x16\n\x12\x44UPLICATE_IDENTITY\x10\x02\x12\x13\n\x0fSERVER_SHUTDOWN\x10\x03\x12\x17\n\x13PARTICIPANT_REMOVED\x10\x04\x12\x10\n\x0cROOM_DELETED\x10\x05\x12\x12\n\x0eSTATE_MISMATCH\x10\x06\x12\x10\n\x0cJOIN_FAILURE\x10\x07\x12\r\n\tMIGRATION\x10\x08\x12\x10\n\x0cSIGNAL_CLOSE\x10\t\x12\x0f\n\x0bROOM_CLOSED\x10\n\x12\x14\n\x10USER_UNAVAILABLE\x10\x0b\x12\x11\n\rUSER_REJECTED\x10\x0c\x12\x15\n\x11SIP_TRUNK_FAILURE\x10\r*\x89\x01\n\x0fReconnectReason\x12\x0e\n\nRR_UNKNOWN\x10\x00\x12\x1a\n\x16RR_SIGNAL_DISCONNECTED\x10\x01\x12\x17\n\x13RR_PUBLISHER_FAILED\x10\x02\x12\x18\n\x14RR_SUBSCRIBER_FAILED\x10\x03\x12\x17\n\x13RR_SWITCH_CANDIDATE\x10\x04*T\n\x11SubscriptionError\x12\x0e\n\nSE_UNKNOWN\x10\x00\x12\x18\n\x14SE_CODEC_UNSUPPORTED\x10\x01\x12\x15\n\x11SE_TRACK_NOTFOUND\x10\x02*\xa3\x01\n\x11\x41udioTrackFeature\x12\r\n\tTF_STEREO\x10\x00\x12\r\n\tTF_NO_DTX\x10\x01\x12\x18\n\x14TF_AUTO_GAIN_CONTROL\x10\x02\x12\x18\n\x14TF_ECHO_CANCELLATION\x10\x03\x12\x18\n\x14TF_NOISE_SUPPRESSION\x10\x04\x12\"\n\x1eTF_ENHANCED_NOISE_CANCELLATION\x10\x05\x42\x46Z#github.com/livekit/protocol/livekit\xaa\x02\rLiveKit.Proto\xea\x02\x0eLiveKit::Protob\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'models', _globals) -if _descriptor._USE_C_DESCRIPTORS == False: - _globals['DESCRIPTOR']._options = None +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None _globals['DESCRIPTOR']._serialized_options = b'Z#github.com/livekit/protocol/livekit\252\002\rLiveKit.Proto\352\002\016LiveKit::Proto' - _globals['_PARTICIPANTPERMISSION'].fields_by_name['recorder']._options = None + _globals['_PARTICIPANTPERMISSION'].fields_by_name['recorder']._loaded_options = None _globals['_PARTICIPANTPERMISSION'].fields_by_name['recorder']._serialized_options = b'\030\001' - _globals['_PARTICIPANTPERMISSION'].fields_by_name['agent']._options = None + _globals['_PARTICIPANTPERMISSION'].fields_by_name['agent']._loaded_options = None _globals['_PARTICIPANTPERMISSION'].fields_by_name['agent']._serialized_options = b'\030\001' - _globals['_PARTICIPANTINFO_ATTRIBUTESENTRY']._options = None + _globals['_PARTICIPANTINFO_ATTRIBUTESENTRY']._loaded_options = None _globals['_PARTICIPANTINFO_ATTRIBUTESENTRY']._serialized_options = b'8\001' - _globals['_DATAPACKET'].fields_by_name['kind']._options = None + _globals['_DATAPACKET'].fields_by_name['kind']._loaded_options = None _globals['_DATAPACKET'].fields_by_name['kind']._serialized_options = b'\030\001' - _globals['_DATAPACKET'].fields_by_name['speaker']._options = None + _globals['_DATAPACKET'].fields_by_name['speaker']._loaded_options = None _globals['_DATAPACKET'].fields_by_name['speaker']._serialized_options = b'\030\001' - _globals['_USERPACKET'].fields_by_name['participant_sid']._options = None + _globals['_USERPACKET'].fields_by_name['participant_sid']._loaded_options = None _globals['_USERPACKET'].fields_by_name['participant_sid']._serialized_options = b'\030\001' - _globals['_USERPACKET'].fields_by_name['participant_identity']._options = None + _globals['_USERPACKET'].fields_by_name['participant_identity']._loaded_options = None _globals['_USERPACKET'].fields_by_name['participant_identity']._serialized_options = b'\030\001' - _globals['_USERPACKET'].fields_by_name['destination_sids']._options = None + _globals['_USERPACKET'].fields_by_name['destination_sids']._loaded_options = None _globals['_USERPACKET'].fields_by_name['destination_sids']._serialized_options = b'\030\001' - _globals['_USERPACKET'].fields_by_name['destination_identities']._options = None + _globals['_USERPACKET'].fields_by_name['destination_identities']._loaded_options = None _globals['_USERPACKET'].fields_by_name['destination_identities']._serialized_options = b'\030\001' - _globals['_RTPSTATS_GAPHISTOGRAMENTRY']._options = None + _globals['_RTPSTATS_GAPHISTOGRAMENTRY']._loaded_options = None _globals['_RTPSTATS_GAPHISTOGRAMENTRY']._serialized_options = b'8\001' - _globals['_DATASTREAM_HEADER_ATTRIBUTESENTRY']._options = None + _globals['_DATASTREAM_HEADER_ATTRIBUTESENTRY']._loaded_options = None _globals['_DATASTREAM_HEADER_ATTRIBUTESENTRY']._serialized_options = b'8\001' - _globals['_DATASTREAM_TRAILER_ATTRIBUTESENTRY']._options = None + _globals['_DATASTREAM_TRAILER_ATTRIBUTESENTRY']._loaded_options = None _globals['_DATASTREAM_TRAILER_ATTRIBUTESENTRY']._serialized_options = b'8\001' - _globals['_AUDIOCODEC']._serialized_start=8858 - _globals['_AUDIOCODEC']._serialized_end=8905 - _globals['_VIDEOCODEC']._serialized_start=8907 - _globals['_VIDEOCODEC']._serialized_end=8993 - _globals['_IMAGECODEC']._serialized_start=8995 - _globals['_IMAGECODEC']._serialized_end=9036 - _globals['_BACKUPCODECPOLICY']._serialized_start=9038 - _globals['_BACKUPCODECPOLICY']._serialized_end=9088 - _globals['_TRACKTYPE']._serialized_start=9090 - _globals['_TRACKTYPE']._serialized_end=9133 - _globals['_TRACKSOURCE']._serialized_start=9135 - _globals['_TRACKSOURCE']._serialized_end=9231 - _globals['_VIDEOQUALITY']._serialized_start=9233 - _globals['_VIDEOQUALITY']._serialized_end=9287 - _globals['_CONNECTIONQUALITY']._serialized_start=9289 - _globals['_CONNECTIONQUALITY']._serialized_end=9353 - _globals['_CLIENTCONFIGSETTING']._serialized_start=9355 - _globals['_CLIENTCONFIGSETTING']._serialized_end=9414 - _globals['_DISCONNECTREASON']._serialized_start=9417 - _globals['_DISCONNECTREASON']._serialized_end=9717 - _globals['_RECONNECTREASON']._serialized_start=9720 - _globals['_RECONNECTREASON']._serialized_end=9857 - _globals['_SUBSCRIPTIONERROR']._serialized_start=9859 - _globals['_SUBSCRIPTIONERROR']._serialized_end=9943 - _globals['_AUDIOTRACKFEATURE']._serialized_start=9946 - _globals['_AUDIOTRACKFEATURE']._serialized_end=10109 + _globals['_AUDIOCODEC']._serialized_start=8990 + _globals['_AUDIOCODEC']._serialized_end=9037 + _globals['_VIDEOCODEC']._serialized_start=9039 + _globals['_VIDEOCODEC']._serialized_end=9125 + _globals['_IMAGECODEC']._serialized_start=9127 + _globals['_IMAGECODEC']._serialized_end=9168 + _globals['_BACKUPCODECPOLICY']._serialized_start=9170 + _globals['_BACKUPCODECPOLICY']._serialized_end=9243 + _globals['_TRACKTYPE']._serialized_start=9245 + _globals['_TRACKTYPE']._serialized_end=9288 + _globals['_TRACKSOURCE']._serialized_start=9290 + _globals['_TRACKSOURCE']._serialized_end=9386 + _globals['_VIDEOQUALITY']._serialized_start=9388 + _globals['_VIDEOQUALITY']._serialized_end=9442 + _globals['_CONNECTIONQUALITY']._serialized_start=9444 + _globals['_CONNECTIONQUALITY']._serialized_end=9508 + _globals['_CLIENTCONFIGSETTING']._serialized_start=9510 + _globals['_CLIENTCONFIGSETTING']._serialized_end=9569 + _globals['_DISCONNECTREASON']._serialized_start=9572 + _globals['_DISCONNECTREASON']._serialized_end=9872 + _globals['_RECONNECTREASON']._serialized_start=9875 + _globals['_RECONNECTREASON']._serialized_end=10012 + _globals['_SUBSCRIPTIONERROR']._serialized_start=10014 + _globals['_SUBSCRIPTIONERROR']._serialized_end=10098 + _globals['_AUDIOTRACKFEATURE']._serialized_start=10101 + _globals['_AUDIOTRACKFEATURE']._serialized_end=10264 _globals['_PAGINATION']._serialized_start=89 _globals['_PAGINATION']._serialized_end=134 - _globals['_ROOM']._serialized_start=137 - _globals['_ROOM']._serialized_end=492 - _globals['_CODEC']._serialized_start=494 - _globals['_CODEC']._serialized_end=534 - _globals['_PLAYOUTDELAY']._serialized_start=536 - _globals['_PLAYOUTDELAY']._serialized_end=593 - _globals['_PARTICIPANTPERMISSION']._serialized_start=596 - _globals['_PARTICIPANTPERMISSION']._serialized_end=857 - _globals['_PARTICIPANTINFO']._serialized_start=860 - _globals['_PARTICIPANTINFO']._serialized_end=1514 - _globals['_PARTICIPANTINFO_ATTRIBUTESENTRY']._serialized_start=1334 - _globals['_PARTICIPANTINFO_ATTRIBUTESENTRY']._serialized_end=1383 - _globals['_PARTICIPANTINFO_STATE']._serialized_start=1385 - _globals['_PARTICIPANTINFO_STATE']._serialized_end=1447 - _globals['_PARTICIPANTINFO_KIND']._serialized_start=1449 - _globals['_PARTICIPANTINFO_KIND']._serialized_end=1514 - _globals['_ENCRYPTION']._serialized_start=1516 - _globals['_ENCRYPTION']._serialized_end=1567 - _globals['_ENCRYPTION_TYPE']._serialized_start=1530 - _globals['_ENCRYPTION_TYPE']._serialized_end=1567 - _globals['_SIMULCASTCODECINFO']._serialized_start=1569 - _globals['_SIMULCASTCODECINFO']._serialized_end=1671 - _globals['_TRACKINFO']._serialized_start=1674 - _globals['_TRACKINFO']._serialized_end=2232 - _globals['_VIDEOLAYER']._serialized_start=2234 - _globals['_VIDEOLAYER']._serialized_end=2348 - _globals['_DATAPACKET']._serialized_start=2351 - _globals['_DATAPACKET']._serialized_end=3061 - _globals['_DATAPACKET_KIND']._serialized_start=3021 - _globals['_DATAPACKET_KIND']._serialized_end=3052 - _globals['_ACTIVESPEAKERUPDATE']._serialized_start=3063 - _globals['_ACTIVESPEAKERUPDATE']._serialized_end=3124 - _globals['_SPEAKERINFO']._serialized_start=3126 - _globals['_SPEAKERINFO']._serialized_end=3183 - _globals['_USERPACKET']._serialized_start=3186 - _globals['_USERPACKET']._serialized_end=3489 - _globals['_SIPDTMF']._serialized_start=3491 - _globals['_SIPDTMF']._serialized_end=3529 - _globals['_TRANSCRIPTION']._serialized_start=3531 - _globals['_TRANSCRIPTION']._serialized_end=3655 - _globals['_TRANSCRIPTIONSEGMENT']._serialized_start=3657 - _globals['_TRANSCRIPTIONSEGMENT']._serialized_end=3776 - _globals['_CHATMESSAGE']._serialized_start=3779 - _globals['_CHATMESSAGE']._serialized_end=3924 - _globals['_RPCREQUEST']._serialized_start=3926 - _globals['_RPCREQUEST']._serialized_end=4029 - _globals['_RPCACK']._serialized_start=4031 - _globals['_RPCACK']._serialized_end=4059 - _globals['_RPCRESPONSE']._serialized_start=4061 - _globals['_RPCRESPONSE']._serialized_end=4158 - _globals['_RPCERROR']._serialized_start=4160 - _globals['_RPCERROR']._serialized_end=4215 - _globals['_PARTICIPANTTRACKS']._serialized_start=4217 - _globals['_PARTICIPANTTRACKS']._serialized_end=4281 - _globals['_SERVERINFO']._serialized_start=4284 - _globals['_SERVERINFO']._serialized_end=4490 - _globals['_SERVERINFO_EDITION']._serialized_start=4456 - _globals['_SERVERINFO_EDITION']._serialized_end=4490 - _globals['_CLIENTINFO']._serialized_start=4493 - _globals['_CLIENTINFO']._serialized_end=4887 - _globals['_CLIENTINFO_SDK']._serialized_start=4731 - _globals['_CLIENTINFO_SDK']._serialized_end=4887 - _globals['_CLIENTCONFIGURATION']._serialized_start=4890 - _globals['_CLIENTCONFIGURATION']._serialized_end=5158 - _globals['_VIDEOCONFIGURATION']._serialized_start=5160 - _globals['_VIDEOCONFIGURATION']._serialized_end=5236 - _globals['_DISABLEDCODECS']._serialized_start=5238 - _globals['_DISABLEDCODECS']._serialized_end=5319 - _globals['_RTPDRIFT']._serialized_start=5322 - _globals['_RTPDRIFT']._serialized_end=5578 - _globals['_RTPSTATS']._serialized_start=5581 - _globals['_RTPSTATS']._serialized_end=6947 - _globals['_RTPSTATS_GAPHISTOGRAMENTRY']._serialized_start=6896 - _globals['_RTPSTATS_GAPHISTOGRAMENTRY']._serialized_end=6947 - _globals['_RTCPSENDERREPORTSTATE']._serialized_start=6950 - _globals['_RTCPSENDERREPORTSTATE']._serialized_end=7112 - _globals['_RTPFORWARDERSTATE']._serialized_start=7115 - _globals['_RTPFORWARDERSTATE']._serialized_end=7444 - _globals['_RTPMUNGERSTATE']._serialized_start=7447 - _globals['_RTPMUNGERSTATE']._serialized_end=7650 - _globals['_VP8MUNGERSTATE']._serialized_start=7653 - _globals['_VP8MUNGERSTATE']._serialized_end=7837 - _globals['_TIMEDVERSION']._serialized_start=7839 - _globals['_TIMEDVERSION']._serialized_end=7888 - _globals['_DATASTREAM']._serialized_start=7891 - _globals['_DATASTREAM']._serialized_end=8856 - _globals['_DATASTREAM_TEXTHEADER']._serialized_start=7906 - _globals['_DATASTREAM_TEXTHEADER']._serialized_end=8070 - _globals['_DATASTREAM_BYTEHEADER']._serialized_start=8072 - _globals['_DATASTREAM_BYTEHEADER']._serialized_end=8098 - _globals['_DATASTREAM_HEADER']._serialized_start=8101 - _globals['_DATASTREAM_HEADER']._serialized_end=8519 - _globals['_DATASTREAM_HEADER_ATTRIBUTESENTRY']._serialized_start=1334 - _globals['_DATASTREAM_HEADER_ATTRIBUTESENTRY']._serialized_end=1383 - _globals['_DATASTREAM_CHUNK']._serialized_start=8521 - _globals['_DATASTREAM_CHUNK']._serialized_end=8626 - _globals['_DATASTREAM_TRAILER']._serialized_start=8629 - _globals['_DATASTREAM_TRAILER']._serialized_end=8789 - _globals['_DATASTREAM_TRAILER_ATTRIBUTESENTRY']._serialized_start=1334 - _globals['_DATASTREAM_TRAILER_ATTRIBUTESENTRY']._serialized_end=1383 - _globals['_DATASTREAM_OPERATIONTYPE']._serialized_start=8791 - _globals['_DATASTREAM_OPERATIONTYPE']._serialized_end=8856 + _globals['_LISTUPDATE']._serialized_start=136 + _globals['_LISTUPDATE']._serialized_end=161 + _globals['_ROOM']._serialized_start=164 + _globals['_ROOM']._serialized_end=519 + _globals['_CODEC']._serialized_start=521 + _globals['_CODEC']._serialized_end=561 + _globals['_PLAYOUTDELAY']._serialized_start=563 + _globals['_PLAYOUTDELAY']._serialized_end=620 + _globals['_PARTICIPANTPERMISSION']._serialized_start=623 + _globals['_PARTICIPANTPERMISSION']._serialized_end=884 + _globals['_PARTICIPANTINFO']._serialized_start=887 + _globals['_PARTICIPANTINFO']._serialized_end=1646 + _globals['_PARTICIPANTINFO_ATTRIBUTESENTRY']._serialized_start=1420 + _globals['_PARTICIPANTINFO_ATTRIBUTESENTRY']._serialized_end=1469 + _globals['_PARTICIPANTINFO_STATE']._serialized_start=1471 + _globals['_PARTICIPANTINFO_STATE']._serialized_end=1533 + _globals['_PARTICIPANTINFO_KIND']._serialized_start=1535 + _globals['_PARTICIPANTINFO_KIND']._serialized_end=1600 + _globals['_PARTICIPANTINFO_KINDDETAIL']._serialized_start=1602 + _globals['_PARTICIPANTINFO_KINDDETAIL']._serialized_end=1646 + _globals['_ENCRYPTION']._serialized_start=1648 + _globals['_ENCRYPTION']._serialized_end=1699 + _globals['_ENCRYPTION_TYPE']._serialized_start=1662 + _globals['_ENCRYPTION_TYPE']._serialized_end=1699 + _globals['_SIMULCASTCODECINFO']._serialized_start=1701 + _globals['_SIMULCASTCODECINFO']._serialized_end=1803 + _globals['_TRACKINFO']._serialized_start=1806 + _globals['_TRACKINFO']._serialized_end=2364 + _globals['_VIDEOLAYER']._serialized_start=2366 + _globals['_VIDEOLAYER']._serialized_end=2480 + _globals['_DATAPACKET']._serialized_start=2483 + _globals['_DATAPACKET']._serialized_end=3193 + _globals['_DATAPACKET_KIND']._serialized_start=3153 + _globals['_DATAPACKET_KIND']._serialized_end=3184 + _globals['_ACTIVESPEAKERUPDATE']._serialized_start=3195 + _globals['_ACTIVESPEAKERUPDATE']._serialized_end=3256 + _globals['_SPEAKERINFO']._serialized_start=3258 + _globals['_SPEAKERINFO']._serialized_end=3315 + _globals['_USERPACKET']._serialized_start=3318 + _globals['_USERPACKET']._serialized_end=3621 + _globals['_SIPDTMF']._serialized_start=3623 + _globals['_SIPDTMF']._serialized_end=3661 + _globals['_TRANSCRIPTION']._serialized_start=3663 + _globals['_TRANSCRIPTION']._serialized_end=3787 + _globals['_TRANSCRIPTIONSEGMENT']._serialized_start=3789 + _globals['_TRANSCRIPTIONSEGMENT']._serialized_end=3908 + _globals['_CHATMESSAGE']._serialized_start=3911 + _globals['_CHATMESSAGE']._serialized_end=4056 + _globals['_RPCREQUEST']._serialized_start=4058 + _globals['_RPCREQUEST']._serialized_end=4161 + _globals['_RPCACK']._serialized_start=4163 + _globals['_RPCACK']._serialized_end=4191 + _globals['_RPCRESPONSE']._serialized_start=4193 + _globals['_RPCRESPONSE']._serialized_end=4290 + _globals['_RPCERROR']._serialized_start=4292 + _globals['_RPCERROR']._serialized_end=4347 + _globals['_PARTICIPANTTRACKS']._serialized_start=4349 + _globals['_PARTICIPANTTRACKS']._serialized_end=4413 + _globals['_SERVERINFO']._serialized_start=4416 + _globals['_SERVERINFO']._serialized_end=4622 + _globals['_SERVERINFO_EDITION']._serialized_start=4588 + _globals['_SERVERINFO_EDITION']._serialized_end=4622 + _globals['_CLIENTINFO']._serialized_start=4625 + _globals['_CLIENTINFO']._serialized_end=5019 + _globals['_CLIENTINFO_SDK']._serialized_start=4863 + _globals['_CLIENTINFO_SDK']._serialized_end=5019 + _globals['_CLIENTCONFIGURATION']._serialized_start=5022 + _globals['_CLIENTCONFIGURATION']._serialized_end=5290 + _globals['_VIDEOCONFIGURATION']._serialized_start=5292 + _globals['_VIDEOCONFIGURATION']._serialized_end=5368 + _globals['_DISABLEDCODECS']._serialized_start=5370 + _globals['_DISABLEDCODECS']._serialized_end=5451 + _globals['_RTPDRIFT']._serialized_start=5454 + _globals['_RTPDRIFT']._serialized_end=5710 + _globals['_RTPSTATS']._serialized_start=5713 + _globals['_RTPSTATS']._serialized_end=7079 + _globals['_RTPSTATS_GAPHISTOGRAMENTRY']._serialized_start=7028 + _globals['_RTPSTATS_GAPHISTOGRAMENTRY']._serialized_end=7079 + _globals['_RTCPSENDERREPORTSTATE']._serialized_start=7082 + _globals['_RTCPSENDERREPORTSTATE']._serialized_end=7244 + _globals['_RTPFORWARDERSTATE']._serialized_start=7247 + _globals['_RTPFORWARDERSTATE']._serialized_end=7576 + _globals['_RTPMUNGERSTATE']._serialized_start=7579 + _globals['_RTPMUNGERSTATE']._serialized_end=7782 + _globals['_VP8MUNGERSTATE']._serialized_start=7785 + _globals['_VP8MUNGERSTATE']._serialized_end=7969 + _globals['_TIMEDVERSION']._serialized_start=7971 + _globals['_TIMEDVERSION']._serialized_end=8020 + _globals['_DATASTREAM']._serialized_start=8023 + _globals['_DATASTREAM']._serialized_end=8988 + _globals['_DATASTREAM_TEXTHEADER']._serialized_start=8038 + _globals['_DATASTREAM_TEXTHEADER']._serialized_end=8202 + _globals['_DATASTREAM_BYTEHEADER']._serialized_start=8204 + _globals['_DATASTREAM_BYTEHEADER']._serialized_end=8230 + _globals['_DATASTREAM_HEADER']._serialized_start=8233 + _globals['_DATASTREAM_HEADER']._serialized_end=8651 + _globals['_DATASTREAM_HEADER_ATTRIBUTESENTRY']._serialized_start=1420 + _globals['_DATASTREAM_HEADER_ATTRIBUTESENTRY']._serialized_end=1469 + _globals['_DATASTREAM_CHUNK']._serialized_start=8653 + _globals['_DATASTREAM_CHUNK']._serialized_end=8758 + _globals['_DATASTREAM_TRAILER']._serialized_start=8761 + _globals['_DATASTREAM_TRAILER']._serialized_end=8921 + _globals['_DATASTREAM_TRAILER_ATTRIBUTESENTRY']._serialized_start=1420 + _globals['_DATASTREAM_TRAILER_ATTRIBUTESENTRY']._serialized_end=1469 + _globals['_DATASTREAM_OPERATIONTYPE']._serialized_start=8923 + _globals['_DATASTREAM_OPERATIONTYPE']._serialized_end=8988 # @@protoc_insertion_point(module_scope) diff --git a/livekit-protocol/livekit/protocol/models.pyi b/livekit-protocol/livekit/protocol/models.pyi index 4f632431..c06b5ac6 100644 --- a/livekit-protocol/livekit/protocol/models.pyi +++ b/livekit-protocol/livekit/protocol/models.pyi @@ -29,8 +29,9 @@ class ImageCodec(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): class BackupCodecPolicy(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): __slots__ = () - REGRESSION: _ClassVar[BackupCodecPolicy] + PREFER_REGRESSION: _ClassVar[BackupCodecPolicy] SIMULCAST: _ClassVar[BackupCodecPolicy] + REGRESSION: _ClassVar[BackupCodecPolicy] class TrackType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): __slots__ = () @@ -115,8 +116,9 @@ H264_HIGH: VideoCodec VP8: VideoCodec IC_DEFAULT: ImageCodec IC_JPEG: ImageCodec -REGRESSION: BackupCodecPolicy +PREFER_REGRESSION: BackupCodecPolicy SIMULCAST: BackupCodecPolicy +REGRESSION: BackupCodecPolicy AUDIO: TrackType VIDEO: TrackType DATA: TrackType @@ -173,6 +175,12 @@ class Pagination(_message.Message): limit: int def __init__(self, after_id: _Optional[str] = ..., limit: _Optional[int] = ...) -> None: ... +class ListUpdate(_message.Message): + __slots__ = ("set",) + SET_FIELD_NUMBER: _ClassVar[int] + set: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, set: _Optional[_Iterable[str]] = ...) -> None: ... + class Room(_message.Message): __slots__ = ("sid", "name", "empty_timeout", "departure_timeout", "max_participants", "creation_time", "creation_time_ms", "turn_password", "enabled_codecs", "metadata", "num_participants", "num_publishers", "active_recording", "version") SID_FIELD_NUMBER: _ClassVar[int] @@ -246,7 +254,7 @@ class ParticipantPermission(_message.Message): def __init__(self, can_subscribe: bool = ..., can_publish: bool = ..., can_publish_data: bool = ..., can_publish_sources: _Optional[_Iterable[_Union[TrackSource, str]]] = ..., hidden: bool = ..., recorder: bool = ..., can_update_metadata: bool = ..., agent: bool = ..., can_subscribe_metrics: bool = ...) -> None: ... class ParticipantInfo(_message.Message): - __slots__ = ("sid", "identity", "state", "tracks", "metadata", "joined_at", "joined_at_ms", "name", "version", "permission", "region", "is_publisher", "kind", "attributes", "disconnect_reason") + __slots__ = ("sid", "identity", "state", "tracks", "metadata", "joined_at", "joined_at_ms", "name", "version", "permission", "region", "is_publisher", "kind", "attributes", "disconnect_reason", "kind_details") class State(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): __slots__ = () JOINING: _ClassVar[ParticipantInfo.State] @@ -269,6 +277,12 @@ class ParticipantInfo(_message.Message): EGRESS: ParticipantInfo.Kind SIP: ParticipantInfo.Kind AGENT: ParticipantInfo.Kind + class KindDetail(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + CLOUD_AGENT: _ClassVar[ParticipantInfo.KindDetail] + FORWARDED: _ClassVar[ParticipantInfo.KindDetail] + CLOUD_AGENT: ParticipantInfo.KindDetail + FORWARDED: ParticipantInfo.KindDetail class AttributesEntry(_message.Message): __slots__ = ("key", "value") KEY_FIELD_NUMBER: _ClassVar[int] @@ -291,6 +305,7 @@ class ParticipantInfo(_message.Message): KIND_FIELD_NUMBER: _ClassVar[int] ATTRIBUTES_FIELD_NUMBER: _ClassVar[int] DISCONNECT_REASON_FIELD_NUMBER: _ClassVar[int] + KIND_DETAILS_FIELD_NUMBER: _ClassVar[int] sid: str identity: str state: ParticipantInfo.State @@ -306,7 +321,8 @@ class ParticipantInfo(_message.Message): kind: ParticipantInfo.Kind attributes: _containers.ScalarMap[str, str] disconnect_reason: DisconnectReason - def __init__(self, sid: _Optional[str] = ..., identity: _Optional[str] = ..., state: _Optional[_Union[ParticipantInfo.State, str]] = ..., tracks: _Optional[_Iterable[_Union[TrackInfo, _Mapping]]] = ..., metadata: _Optional[str] = ..., joined_at: _Optional[int] = ..., joined_at_ms: _Optional[int] = ..., name: _Optional[str] = ..., version: _Optional[int] = ..., permission: _Optional[_Union[ParticipantPermission, _Mapping]] = ..., region: _Optional[str] = ..., is_publisher: bool = ..., kind: _Optional[_Union[ParticipantInfo.Kind, str]] = ..., attributes: _Optional[_Mapping[str, str]] = ..., disconnect_reason: _Optional[_Union[DisconnectReason, str]] = ...) -> None: ... + kind_details: _containers.RepeatedScalarFieldContainer[ParticipantInfo.KindDetail] + def __init__(self, sid: _Optional[str] = ..., identity: _Optional[str] = ..., state: _Optional[_Union[ParticipantInfo.State, str]] = ..., tracks: _Optional[_Iterable[_Union[TrackInfo, _Mapping]]] = ..., metadata: _Optional[str] = ..., joined_at: _Optional[int] = ..., joined_at_ms: _Optional[int] = ..., name: _Optional[str] = ..., version: _Optional[int] = ..., permission: _Optional[_Union[ParticipantPermission, _Mapping]] = ..., region: _Optional[str] = ..., is_publisher: bool = ..., kind: _Optional[_Union[ParticipantInfo.Kind, str]] = ..., attributes: _Optional[_Mapping[str, str]] = ..., disconnect_reason: _Optional[_Union[DisconnectReason, str]] = ..., kind_details: _Optional[_Iterable[_Union[ParticipantInfo.KindDetail, str]]] = ...) -> None: ... class Encryption(_message.Message): __slots__ = () diff --git a/livekit-protocol/livekit/protocol/room.py b/livekit-protocol/livekit/protocol/room.py index 0530a4e0..326da652 100644 --- a/livekit-protocol/livekit/protocol/room.py +++ b/livekit-protocol/livekit/protocol/room.py @@ -1,12 +1,22 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE # source: livekit_room.proto -# Protobuf Python Version: 4.25.1 +# Protobuf Python Version: 5.29.3 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version from google.protobuf import symbol_database as _symbol_database from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 5, + 29, + 3, + '', + 'livekit_room.proto' +) # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() @@ -17,17 +27,17 @@ from . import agent_dispatch as _agent__dispatch_ -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x12livekit_room.proto\x12\x07livekit\x1a\x14livekit_models.proto\x1a\x14livekit_egress.proto\x1a\x1clivekit_agent_dispatch.proto\"\xda\x02\n\x11\x43reateRoomRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0broom_preset\x18\x0c \x01(\t\x12\x15\n\rempty_timeout\x18\x02 \x01(\r\x12\x19\n\x11\x64\x65parture_timeout\x18\n \x01(\r\x12\x18\n\x10max_participants\x18\x03 \x01(\r\x12\x0f\n\x07node_id\x18\x04 \x01(\t\x12\x10\n\x08metadata\x18\x05 \x01(\t\x12#\n\x06\x65gress\x18\x06 \x01(\x0b\x32\x13.livekit.RoomEgress\x12\x19\n\x11min_playout_delay\x18\x07 \x01(\r\x12\x19\n\x11max_playout_delay\x18\x08 \x01(\r\x12\x14\n\x0csync_streams\x18\t \x01(\x08\x12\x16\n\x0ereplay_enabled\x18\r \x01(\x08\x12*\n\x06\x61gents\x18\x0e \x03(\x0b\x32\x1a.livekit.RoomAgentDispatch\"\x9e\x01\n\nRoomEgress\x12\x31\n\x04room\x18\x01 \x01(\x0b\x32#.livekit.RoomCompositeEgressRequest\x12\x33\n\x0bparticipant\x18\x03 \x01(\x0b\x32\x1e.livekit.AutoParticipantEgress\x12(\n\x06tracks\x18\x02 \x01(\x0b\x32\x18.livekit.AutoTrackEgress\";\n\tRoomAgent\x12.\n\ndispatches\x18\x01 \x03(\x0b\x32\x1a.livekit.RoomAgentDispatch\"!\n\x10ListRoomsRequest\x12\r\n\x05names\x18\x01 \x03(\t\"1\n\x11ListRoomsResponse\x12\x1c\n\x05rooms\x18\x01 \x03(\x0b\x32\r.livekit.Room\"!\n\x11\x44\x65leteRoomRequest\x12\x0c\n\x04room\x18\x01 \x01(\t\"\x14\n\x12\x44\x65leteRoomResponse\"\'\n\x17ListParticipantsRequest\x12\x0c\n\x04room\x18\x01 \x01(\t\"J\n\x18ListParticipantsResponse\x12.\n\x0cparticipants\x18\x01 \x03(\x0b\x32\x18.livekit.ParticipantInfo\"9\n\x17RoomParticipantIdentity\x12\x0c\n\x04room\x18\x01 \x01(\t\x12\x10\n\x08identity\x18\x02 \x01(\t\"\x1b\n\x19RemoveParticipantResponse\"X\n\x14MuteRoomTrackRequest\x12\x0c\n\x04room\x18\x01 \x01(\t\x12\x10\n\x08identity\x18\x02 \x01(\t\x12\x11\n\ttrack_sid\x18\x03 \x01(\t\x12\r\n\x05muted\x18\x04 \x01(\x08\":\n\x15MuteRoomTrackResponse\x12!\n\x05track\x18\x01 \x01(\x0b\x32\x12.livekit.TrackInfo\"\x88\x02\n\x18UpdateParticipantRequest\x12\x0c\n\x04room\x18\x01 \x01(\t\x12\x10\n\x08identity\x18\x02 \x01(\t\x12\x10\n\x08metadata\x18\x03 \x01(\t\x12\x32\n\npermission\x18\x04 \x01(\x0b\x32\x1e.livekit.ParticipantPermission\x12\x0c\n\x04name\x18\x05 \x01(\t\x12\x45\n\nattributes\x18\x06 \x03(\x0b\x32\x31.livekit.UpdateParticipantRequest.AttributesEntry\x1a\x31\n\x0f\x41ttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x9b\x01\n\x1aUpdateSubscriptionsRequest\x12\x0c\n\x04room\x18\x01 \x01(\t\x12\x10\n\x08identity\x18\x02 \x01(\t\x12\x12\n\ntrack_sids\x18\x03 \x03(\t\x12\x11\n\tsubscribe\x18\x04 \x01(\x08\x12\x36\n\x12participant_tracks\x18\x05 \x03(\x0b\x32\x1a.livekit.ParticipantTracks\"\x1d\n\x1bUpdateSubscriptionsResponse\"\xc0\x01\n\x0fSendDataRequest\x12\x0c\n\x04room\x18\x01 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\x12&\n\x04kind\x18\x03 \x01(\x0e\x32\x18.livekit.DataPacket.Kind\x12\x1c\n\x10\x64\x65stination_sids\x18\x04 \x03(\tB\x02\x18\x01\x12\x1e\n\x16\x64\x65stination_identities\x18\x06 \x03(\t\x12\x12\n\x05topic\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\r\n\x05nonce\x18\x07 \x01(\x0c\x42\x08\n\x06_topic\"\x12\n\x10SendDataResponse\";\n\x19UpdateRoomMetadataRequest\x12\x0c\n\x04room\x18\x01 \x01(\t\x12\x10\n\x08metadata\x18\x02 \x01(\t\"\x8a\x02\n\x11RoomConfiguration\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x15\n\rempty_timeout\x18\x02 \x01(\r\x12\x19\n\x11\x64\x65parture_timeout\x18\x03 \x01(\r\x12\x18\n\x10max_participants\x18\x04 \x01(\r\x12#\n\x06\x65gress\x18\x05 \x01(\x0b\x32\x13.livekit.RoomEgress\x12\x19\n\x11min_playout_delay\x18\x07 \x01(\r\x12\x19\n\x11max_playout_delay\x18\x08 \x01(\r\x12\x14\n\x0csync_streams\x18\t \x01(\x08\x12*\n\x06\x61gents\x18\n \x03(\x0b\x32\x1a.livekit.RoomAgentDispatch2\xe6\x06\n\x0bRoomService\x12\x37\n\nCreateRoom\x12\x1a.livekit.CreateRoomRequest\x1a\r.livekit.Room\x12\x42\n\tListRooms\x12\x19.livekit.ListRoomsRequest\x1a\x1a.livekit.ListRoomsResponse\x12\x45\n\nDeleteRoom\x12\x1a.livekit.DeleteRoomRequest\x1a\x1b.livekit.DeleteRoomResponse\x12W\n\x10ListParticipants\x12 .livekit.ListParticipantsRequest\x1a!.livekit.ListParticipantsResponse\x12L\n\x0eGetParticipant\x12 .livekit.RoomParticipantIdentity\x1a\x18.livekit.ParticipantInfo\x12Y\n\x11RemoveParticipant\x12 .livekit.RoomParticipantIdentity\x1a\".livekit.RemoveParticipantResponse\x12S\n\x12MutePublishedTrack\x12\x1d.livekit.MuteRoomTrackRequest\x1a\x1e.livekit.MuteRoomTrackResponse\x12P\n\x11UpdateParticipant\x12!.livekit.UpdateParticipantRequest\x1a\x18.livekit.ParticipantInfo\x12`\n\x13UpdateSubscriptions\x12#.livekit.UpdateSubscriptionsRequest\x1a$.livekit.UpdateSubscriptionsResponse\x12?\n\x08SendData\x12\x18.livekit.SendDataRequest\x1a\x19.livekit.SendDataResponse\x12G\n\x12UpdateRoomMetadata\x12\".livekit.UpdateRoomMetadataRequest\x1a\r.livekit.RoomBFZ#github.com/livekit/protocol/livekit\xaa\x02\rLiveKit.Proto\xea\x02\x0eLiveKit::Protob\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x12livekit_room.proto\x12\x07livekit\x1a\x14livekit_models.proto\x1a\x14livekit_egress.proto\x1a\x1clivekit_agent_dispatch.proto\"\xda\x02\n\x11\x43reateRoomRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0broom_preset\x18\x0c \x01(\t\x12\x15\n\rempty_timeout\x18\x02 \x01(\r\x12\x19\n\x11\x64\x65parture_timeout\x18\n \x01(\r\x12\x18\n\x10max_participants\x18\x03 \x01(\r\x12\x0f\n\x07node_id\x18\x04 \x01(\t\x12\x10\n\x08metadata\x18\x05 \x01(\t\x12#\n\x06\x65gress\x18\x06 \x01(\x0b\x32\x13.livekit.RoomEgress\x12\x19\n\x11min_playout_delay\x18\x07 \x01(\r\x12\x19\n\x11max_playout_delay\x18\x08 \x01(\r\x12\x14\n\x0csync_streams\x18\t \x01(\x08\x12\x16\n\x0ereplay_enabled\x18\r \x01(\x08\x12*\n\x06\x61gents\x18\x0e \x03(\x0b\x32\x1a.livekit.RoomAgentDispatch\"\x9e\x01\n\nRoomEgress\x12\x31\n\x04room\x18\x01 \x01(\x0b\x32#.livekit.RoomCompositeEgressRequest\x12\x33\n\x0bparticipant\x18\x03 \x01(\x0b\x32\x1e.livekit.AutoParticipantEgress\x12(\n\x06tracks\x18\x02 \x01(\x0b\x32\x18.livekit.AutoTrackEgress\";\n\tRoomAgent\x12.\n\ndispatches\x18\x01 \x03(\x0b\x32\x1a.livekit.RoomAgentDispatch\"!\n\x10ListRoomsRequest\x12\r\n\x05names\x18\x01 \x03(\t\"1\n\x11ListRoomsResponse\x12\x1c\n\x05rooms\x18\x01 \x03(\x0b\x32\r.livekit.Room\"!\n\x11\x44\x65leteRoomRequest\x12\x0c\n\x04room\x18\x01 \x01(\t\"\x14\n\x12\x44\x65leteRoomResponse\"\'\n\x17ListParticipantsRequest\x12\x0c\n\x04room\x18\x01 \x01(\t\"J\n\x18ListParticipantsResponse\x12.\n\x0cparticipants\x18\x01 \x03(\x0b\x32\x18.livekit.ParticipantInfo\"9\n\x17RoomParticipantIdentity\x12\x0c\n\x04room\x18\x01 \x01(\t\x12\x10\n\x08identity\x18\x02 \x01(\t\"\x1b\n\x19RemoveParticipantResponse\"X\n\x14MuteRoomTrackRequest\x12\x0c\n\x04room\x18\x01 \x01(\t\x12\x10\n\x08identity\x18\x02 \x01(\t\x12\x11\n\ttrack_sid\x18\x03 \x01(\t\x12\r\n\x05muted\x18\x04 \x01(\x08\":\n\x15MuteRoomTrackResponse\x12!\n\x05track\x18\x01 \x01(\x0b\x32\x12.livekit.TrackInfo\"\x88\x02\n\x18UpdateParticipantRequest\x12\x0c\n\x04room\x18\x01 \x01(\t\x12\x10\n\x08identity\x18\x02 \x01(\t\x12\x10\n\x08metadata\x18\x03 \x01(\t\x12\x32\n\npermission\x18\x04 \x01(\x0b\x32\x1e.livekit.ParticipantPermission\x12\x0c\n\x04name\x18\x05 \x01(\t\x12\x45\n\nattributes\x18\x06 \x03(\x0b\x32\x31.livekit.UpdateParticipantRequest.AttributesEntry\x1a\x31\n\x0f\x41ttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x9b\x01\n\x1aUpdateSubscriptionsRequest\x12\x0c\n\x04room\x18\x01 \x01(\t\x12\x10\n\x08identity\x18\x02 \x01(\t\x12\x12\n\ntrack_sids\x18\x03 \x03(\t\x12\x11\n\tsubscribe\x18\x04 \x01(\x08\x12\x36\n\x12participant_tracks\x18\x05 \x03(\x0b\x32\x1a.livekit.ParticipantTracks\"\x1d\n\x1bUpdateSubscriptionsResponse\"\xc0\x01\n\x0fSendDataRequest\x12\x0c\n\x04room\x18\x01 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\x12&\n\x04kind\x18\x03 \x01(\x0e\x32\x18.livekit.DataPacket.Kind\x12\x1c\n\x10\x64\x65stination_sids\x18\x04 \x03(\tB\x02\x18\x01\x12\x1e\n\x16\x64\x65stination_identities\x18\x06 \x03(\t\x12\x12\n\x05topic\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\r\n\x05nonce\x18\x07 \x01(\x0c\x42\x08\n\x06_topic\"\x12\n\x10SendDataResponse\";\n\x19UpdateRoomMetadataRequest\x12\x0c\n\x04room\x18\x01 \x01(\t\x12\x10\n\x08metadata\x18\x02 \x01(\t\"\x8a\x02\n\x11RoomConfiguration\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x15\n\rempty_timeout\x18\x02 \x01(\r\x12\x19\n\x11\x64\x65parture_timeout\x18\x03 \x01(\r\x12\x18\n\x10max_participants\x18\x04 \x01(\r\x12#\n\x06\x65gress\x18\x05 \x01(\x0b\x32\x13.livekit.RoomEgress\x12\x19\n\x11min_playout_delay\x18\x07 \x01(\r\x12\x19\n\x11max_playout_delay\x18\x08 \x01(\r\x12\x14\n\x0csync_streams\x18\t \x01(\x08\x12*\n\x06\x61gents\x18\n \x03(\x0b\x32\x1a.livekit.RoomAgentDispatch\"U\n\x19\x46orwardParticipantRequest\x12\x0c\n\x04room\x18\x01 \x01(\t\x12\x10\n\x08identity\x18\x02 \x01(\t\x12\x18\n\x10\x64\x65stination_room\x18\x03 \x01(\t\"\x1c\n\x1a\x46orwardParticipantResponse2\xc5\x07\n\x0bRoomService\x12\x37\n\nCreateRoom\x12\x1a.livekit.CreateRoomRequest\x1a\r.livekit.Room\x12\x42\n\tListRooms\x12\x19.livekit.ListRoomsRequest\x1a\x1a.livekit.ListRoomsResponse\x12\x45\n\nDeleteRoom\x12\x1a.livekit.DeleteRoomRequest\x1a\x1b.livekit.DeleteRoomResponse\x12W\n\x10ListParticipants\x12 .livekit.ListParticipantsRequest\x1a!.livekit.ListParticipantsResponse\x12L\n\x0eGetParticipant\x12 .livekit.RoomParticipantIdentity\x1a\x18.livekit.ParticipantInfo\x12Y\n\x11RemoveParticipant\x12 .livekit.RoomParticipantIdentity\x1a\".livekit.RemoveParticipantResponse\x12S\n\x12MutePublishedTrack\x12\x1d.livekit.MuteRoomTrackRequest\x1a\x1e.livekit.MuteRoomTrackResponse\x12P\n\x11UpdateParticipant\x12!.livekit.UpdateParticipantRequest\x1a\x18.livekit.ParticipantInfo\x12`\n\x13UpdateSubscriptions\x12#.livekit.UpdateSubscriptionsRequest\x1a$.livekit.UpdateSubscriptionsResponse\x12?\n\x08SendData\x12\x18.livekit.SendDataRequest\x1a\x19.livekit.SendDataResponse\x12G\n\x12UpdateRoomMetadata\x12\".livekit.UpdateRoomMetadataRequest\x1a\r.livekit.Room\x12]\n\x12\x46orwardParticipant\x12\".livekit.ForwardParticipantRequest\x1a#.livekit.ForwardParticipantResponseBFZ#github.com/livekit/protocol/livekit\xaa\x02\rLiveKit.Proto\xea\x02\x0eLiveKit::Protob\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'room', _globals) -if _descriptor._USE_C_DESCRIPTORS == False: - _globals['DESCRIPTOR']._options = None +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None _globals['DESCRIPTOR']._serialized_options = b'Z#github.com/livekit/protocol/livekit\252\002\rLiveKit.Proto\352\002\016LiveKit::Proto' - _globals['_UPDATEPARTICIPANTREQUEST_ATTRIBUTESENTRY']._options = None + _globals['_UPDATEPARTICIPANTREQUEST_ATTRIBUTESENTRY']._loaded_options = None _globals['_UPDATEPARTICIPANTREQUEST_ATTRIBUTESENTRY']._serialized_options = b'8\001' - _globals['_SENDDATAREQUEST'].fields_by_name['destination_sids']._options = None + _globals['_SENDDATAREQUEST'].fields_by_name['destination_sids']._loaded_options = None _globals['_SENDDATAREQUEST'].fields_by_name['destination_sids']._serialized_options = b'\030\001' _globals['_CREATEROOMREQUEST']._serialized_start=106 _globals['_CREATEROOMREQUEST']._serialized_end=452 @@ -71,6 +81,10 @@ _globals['_UPDATEROOMMETADATAREQUEST']._serialized_end=1904 _globals['_ROOMCONFIGURATION']._serialized_start=1907 _globals['_ROOMCONFIGURATION']._serialized_end=2173 - _globals['_ROOMSERVICE']._serialized_start=2176 - _globals['_ROOMSERVICE']._serialized_end=3046 + _globals['_FORWARDPARTICIPANTREQUEST']._serialized_start=2175 + _globals['_FORWARDPARTICIPANTREQUEST']._serialized_end=2260 + _globals['_FORWARDPARTICIPANTRESPONSE']._serialized_start=2262 + _globals['_FORWARDPARTICIPANTRESPONSE']._serialized_end=2290 + _globals['_ROOMSERVICE']._serialized_start=2293 + _globals['_ROOMSERVICE']._serialized_end=3258 # @@protoc_insertion_point(module_scope) diff --git a/livekit-protocol/livekit/protocol/room.pyi b/livekit-protocol/livekit/protocol/room.pyi index 4a5633ba..c53d5718 100644 --- a/livekit-protocol/livekit/protocol/room.pyi +++ b/livekit-protocol/livekit/protocol/room.pyi @@ -210,3 +210,17 @@ class RoomConfiguration(_message.Message): sync_streams: bool agents: _containers.RepeatedCompositeFieldContainer[_agent_dispatch.RoomAgentDispatch] def __init__(self, name: _Optional[str] = ..., empty_timeout: _Optional[int] = ..., departure_timeout: _Optional[int] = ..., max_participants: _Optional[int] = ..., egress: _Optional[_Union[RoomEgress, _Mapping]] = ..., min_playout_delay: _Optional[int] = ..., max_playout_delay: _Optional[int] = ..., sync_streams: bool = ..., agents: _Optional[_Iterable[_Union[_agent_dispatch.RoomAgentDispatch, _Mapping]]] = ...) -> None: ... + +class ForwardParticipantRequest(_message.Message): + __slots__ = ("room", "identity", "destination_room") + ROOM_FIELD_NUMBER: _ClassVar[int] + IDENTITY_FIELD_NUMBER: _ClassVar[int] + DESTINATION_ROOM_FIELD_NUMBER: _ClassVar[int] + room: str + identity: str + destination_room: str + def __init__(self, room: _Optional[str] = ..., identity: _Optional[str] = ..., destination_room: _Optional[str] = ...) -> None: ... + +class ForwardParticipantResponse(_message.Message): + __slots__ = () + def __init__(self) -> None: ... diff --git a/livekit-protocol/livekit/protocol/sip.py b/livekit-protocol/livekit/protocol/sip.py index 0330f876..13adf7b9 100644 --- a/livekit-protocol/livekit/protocol/sip.py +++ b/livekit-protocol/livekit/protocol/sip.py @@ -1,12 +1,22 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE # source: livekit_sip.proto -# Protobuf Python Version: 4.25.1 +# Protobuf Python Version: 5.29.3 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version from google.protobuf import symbol_database as _symbol_database from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 5, + 29, + 3, + '', + 'livekit_sip.proto' +) # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() @@ -18,78 +28,98 @@ from . import room as _room_ -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x11livekit_sip.proto\x12\x07livekit\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x14livekit_models.proto\x1a\x12livekit_room.proto\"A\n\tSIPStatus\x12$\n\x04\x63ode\x18\x01 \x01(\x0e\x32\x16.livekit.SIPStatusCode\x12\x0e\n\x06status\x18\x02 \x01(\t\"\xaf\x02\n\x15\x43reateSIPTrunkRequest\x12\x19\n\x11inbound_addresses\x18\x01 \x03(\t\x12\x18\n\x10outbound_address\x18\x02 \x01(\t\x12\x17\n\x0foutbound_number\x18\x03 \x01(\t\x12!\n\x15inbound_numbers_regex\x18\x04 \x03(\tB\x02\x18\x01\x12\x17\n\x0finbound_numbers\x18\t \x03(\t\x12\x18\n\x10inbound_username\x18\x05 \x01(\t\x12\x18\n\x10inbound_password\x18\x06 \x01(\t\x12\x19\n\x11outbound_username\x18\x07 \x01(\t\x12\x19\n\x11outbound_password\x18\x08 \x01(\t\x12\x0c\n\x04name\x18\n \x01(\t\x12\x10\n\x08metadata\x18\x0b \x01(\t:\x02\x18\x01\"\xdb\x03\n\x0cSIPTrunkInfo\x12\x14\n\x0csip_trunk_id\x18\x01 \x01(\t\x12-\n\x04kind\x18\x0e \x01(\x0e\x32\x1f.livekit.SIPTrunkInfo.TrunkKind\x12\x19\n\x11inbound_addresses\x18\x02 \x03(\t\x12\x18\n\x10outbound_address\x18\x03 \x01(\t\x12\x17\n\x0foutbound_number\x18\x04 \x01(\t\x12(\n\ttransport\x18\r \x01(\x0e\x32\x15.livekit.SIPTransport\x12!\n\x15inbound_numbers_regex\x18\x05 \x03(\tB\x02\x18\x01\x12\x17\n\x0finbound_numbers\x18\n \x03(\t\x12\x18\n\x10inbound_username\x18\x06 \x01(\t\x12\x18\n\x10inbound_password\x18\x07 \x01(\t\x12\x19\n\x11outbound_username\x18\x08 \x01(\t\x12\x19\n\x11outbound_password\x18\t \x01(\t\x12\x0c\n\x04name\x18\x0b \x01(\t\x12\x10\n\x08metadata\x18\x0c \x01(\t\"D\n\tTrunkKind\x12\x10\n\x0cTRUNK_LEGACY\x10\x00\x12\x11\n\rTRUNK_INBOUND\x10\x01\x12\x12\n\x0eTRUNK_OUTBOUND\x10\x02:\x02\x18\x01\"K\n\x1c\x43reateSIPInboundTrunkRequest\x12+\n\x05trunk\x18\x01 \x01(\x0b\x32\x1c.livekit.SIPInboundTrunkInfo\"\xba\x06\n\x13SIPInboundTrunkInfo\x12\x14\n\x0csip_trunk_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x10\n\x08metadata\x18\x03 \x01(\t\x12\x0f\n\x07numbers\x18\x04 \x03(\t\x12\x19\n\x11\x61llowed_addresses\x18\x05 \x03(\t\x12\x17\n\x0f\x61llowed_numbers\x18\x06 \x03(\t\x12\x15\n\rauth_username\x18\x07 \x01(\t\x12\x15\n\rauth_password\x18\x08 \x01(\t\x12:\n\x07headers\x18\t \x03(\x0b\x32).livekit.SIPInboundTrunkInfo.HeadersEntry\x12T\n\x15headers_to_attributes\x18\n \x03(\x0b\x32\x35.livekit.SIPInboundTrunkInfo.HeadersToAttributesEntry\x12T\n\x15\x61ttributes_to_headers\x18\x0e \x03(\x0b\x32\x35.livekit.SIPInboundTrunkInfo.AttributesToHeadersEntry\x12\x32\n\x0finclude_headers\x18\x0f \x01(\x0e\x32\x19.livekit.SIPHeaderOptions\x12\x32\n\x0fringing_timeout\x18\x0b \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x34\n\x11max_call_duration\x18\x0c \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x15\n\rkrisp_enabled\x18\r \x01(\x08\x12\x35\n\x10media_encryption\x18\x10 \x01(\x0e\x32\x1b.livekit.SIPMediaEncryption\x1a.\n\x0cHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a:\n\x18HeadersToAttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a:\n\x18\x41ttributesToHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"M\n\x1d\x43reateSIPOutboundTrunkRequest\x12,\n\x05trunk\x18\x01 \x01(\x0b\x32\x1d.livekit.SIPOutboundTrunkInfo\"\xc4\x05\n\x14SIPOutboundTrunkInfo\x12\x14\n\x0csip_trunk_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x10\n\x08metadata\x18\x03 \x01(\t\x12\x0f\n\x07\x61\x64\x64ress\x18\x04 \x01(\t\x12(\n\ttransport\x18\x05 \x01(\x0e\x32\x15.livekit.SIPTransport\x12\x0f\n\x07numbers\x18\x06 \x03(\t\x12\x15\n\rauth_username\x18\x07 \x01(\t\x12\x15\n\rauth_password\x18\x08 \x01(\t\x12;\n\x07headers\x18\t \x03(\x0b\x32*.livekit.SIPOutboundTrunkInfo.HeadersEntry\x12U\n\x15headers_to_attributes\x18\n \x03(\x0b\x32\x36.livekit.SIPOutboundTrunkInfo.HeadersToAttributesEntry\x12U\n\x15\x61ttributes_to_headers\x18\x0b \x03(\x0b\x32\x36.livekit.SIPOutboundTrunkInfo.AttributesToHeadersEntry\x12\x32\n\x0finclude_headers\x18\x0c \x01(\x0e\x32\x19.livekit.SIPHeaderOptions\x12\x35\n\x10media_encryption\x18\r \x01(\x0e\x32\x1b.livekit.SIPMediaEncryption\x1a.\n\x0cHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a:\n\x18HeadersToAttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a:\n\x18\x41ttributesToHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"1\n\x19GetSIPInboundTrunkRequest\x12\x14\n\x0csip_trunk_id\x18\x01 \x01(\t\"I\n\x1aGetSIPInboundTrunkResponse\x12+\n\x05trunk\x18\x01 \x01(\x0b\x32\x1c.livekit.SIPInboundTrunkInfo\"2\n\x1aGetSIPOutboundTrunkRequest\x12\x14\n\x0csip_trunk_id\x18\x01 \x01(\t\"K\n\x1bGetSIPOutboundTrunkResponse\x12,\n\x05trunk\x18\x01 \x01(\x0b\x32\x1d.livekit.SIPOutboundTrunkInfo\"<\n\x13ListSIPTrunkRequest\x12!\n\x04page\x18\x01 \x01(\x0b\x32\x13.livekit.Pagination:\x02\x18\x01\"@\n\x14ListSIPTrunkResponse\x12$\n\x05items\x18\x01 \x03(\x0b\x32\x15.livekit.SIPTrunkInfo:\x02\x18\x01\"c\n\x1aListSIPInboundTrunkRequest\x12!\n\x04page\x18\x03 \x01(\x0b\x32\x13.livekit.Pagination\x12\x11\n\ttrunk_ids\x18\x01 \x03(\t\x12\x0f\n\x07numbers\x18\x02 \x03(\t\"J\n\x1bListSIPInboundTrunkResponse\x12+\n\x05items\x18\x01 \x03(\x0b\x32\x1c.livekit.SIPInboundTrunkInfo\"d\n\x1bListSIPOutboundTrunkRequest\x12!\n\x04page\x18\x03 \x01(\x0b\x32\x13.livekit.Pagination\x12\x11\n\ttrunk_ids\x18\x01 \x03(\t\x12\x0f\n\x07numbers\x18\x02 \x03(\t\"L\n\x1cListSIPOutboundTrunkResponse\x12,\n\x05items\x18\x01 \x03(\x0b\x32\x1d.livekit.SIPOutboundTrunkInfo\"-\n\x15\x44\x65leteSIPTrunkRequest\x12\x14\n\x0csip_trunk_id\x18\x01 \x01(\t\"7\n\x15SIPDispatchRuleDirect\x12\x11\n\troom_name\x18\x01 \x01(\t\x12\x0b\n\x03pin\x18\x02 \x01(\t\"=\n\x19SIPDispatchRuleIndividual\x12\x13\n\x0broom_prefix\x18\x01 \x01(\t\x12\x0b\n\x03pin\x18\x02 \x01(\t\"L\n\x15SIPDispatchRuleCallee\x12\x13\n\x0broom_prefix\x18\x01 \x01(\t\x12\x0b\n\x03pin\x18\x02 \x01(\t\x12\x11\n\trandomize\x18\x03 \x01(\x08\"\xe1\x01\n\x0fSIPDispatchRule\x12>\n\x14\x64ispatch_rule_direct\x18\x01 \x01(\x0b\x32\x1e.livekit.SIPDispatchRuleDirectH\x00\x12\x46\n\x18\x64ispatch_rule_individual\x18\x02 \x01(\x0b\x32\".livekit.SIPDispatchRuleIndividualH\x00\x12>\n\x14\x64ispatch_rule_callee\x18\x03 \x01(\x0b\x32\x1e.livekit.SIPDispatchRuleCalleeH\x00\x42\x06\n\x04rule\"\xf1\x02\n\x1c\x43reateSIPDispatchRuleRequest\x12&\n\x04rule\x18\x01 \x01(\x0b\x32\x18.livekit.SIPDispatchRule\x12\x11\n\ttrunk_ids\x18\x02 \x03(\t\x12\x19\n\x11hide_phone_number\x18\x03 \x01(\x08\x12\x17\n\x0finbound_numbers\x18\x06 \x03(\t\x12\x0c\n\x04name\x18\x04 \x01(\t\x12\x10\n\x08metadata\x18\x05 \x01(\t\x12I\n\nattributes\x18\x07 \x03(\x0b\x32\x35.livekit.CreateSIPDispatchRuleRequest.AttributesEntry\x12\x13\n\x0broom_preset\x18\x08 \x01(\t\x12/\n\x0broom_config\x18\t \x01(\x0b\x32\x1a.livekit.RoomConfiguration\x1a\x31\n\x0f\x41ttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xcb\x03\n\x13SIPDispatchRuleInfo\x12\x1c\n\x14sip_dispatch_rule_id\x18\x01 \x01(\t\x12&\n\x04rule\x18\x02 \x01(\x0b\x32\x18.livekit.SIPDispatchRule\x12\x11\n\ttrunk_ids\x18\x03 \x03(\t\x12\x19\n\x11hide_phone_number\x18\x04 \x01(\x08\x12\x17\n\x0finbound_numbers\x18\x07 \x03(\t\x12\x0c\n\x04name\x18\x05 \x01(\t\x12\x10\n\x08metadata\x18\x06 \x01(\t\x12@\n\nattributes\x18\x08 \x03(\x0b\x32,.livekit.SIPDispatchRuleInfo.AttributesEntry\x12\x13\n\x0broom_preset\x18\t \x01(\t\x12/\n\x0broom_config\x18\n \x01(\x0b\x32\x1a.livekit.RoomConfiguration\x12\x15\n\rkrisp_enabled\x18\x0b \x01(\x08\x12\x35\n\x10media_encryption\x18\x0c \x01(\x0e\x32\x1b.livekit.SIPMediaEncryption\x1a\x31\n\x0f\x41ttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"m\n\x1aListSIPDispatchRuleRequest\x12!\n\x04page\x18\x03 \x01(\x0b\x32\x13.livekit.Pagination\x12\x19\n\x11\x64ispatch_rule_ids\x18\x01 \x03(\t\x12\x11\n\ttrunk_ids\x18\x02 \x03(\t\"J\n\x1bListSIPDispatchRuleResponse\x12+\n\x05items\x18\x01 \x03(\x0b\x32\x1c.livekit.SIPDispatchRuleInfo\"<\n\x1c\x44\x65leteSIPDispatchRuleRequest\x12\x1c\n\x14sip_dispatch_rule_id\x18\x01 \x01(\t\"\x9d\x03\n\x11SIPOutboundConfig\x12\x10\n\x08hostname\x18\x01 \x01(\t\x12(\n\ttransport\x18\x02 \x01(\x0e\x32\x15.livekit.SIPTransport\x12\x15\n\rauth_username\x18\x03 \x01(\t\x12\x15\n\rauth_password\x18\x04 \x01(\t\x12R\n\x15headers_to_attributes\x18\x05 \x03(\x0b\x32\x33.livekit.SIPOutboundConfig.HeadersToAttributesEntry\x12R\n\x15\x61ttributes_to_headers\x18\x06 \x03(\x0b\x32\x33.livekit.SIPOutboundConfig.AttributesToHeadersEntry\x1a:\n\x18HeadersToAttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a:\n\x18\x41ttributesToHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xe7\x06\n\x1b\x43reateSIPParticipantRequest\x12\x14\n\x0csip_trunk_id\x18\x01 \x01(\t\x12)\n\x05trunk\x18\x14 \x01(\x0b\x32\x1a.livekit.SIPOutboundConfig\x12\x13\n\x0bsip_call_to\x18\x02 \x01(\t\x12\x12\n\nsip_number\x18\x0f \x01(\t\x12\x11\n\troom_name\x18\x03 \x01(\t\x12\x1c\n\x14participant_identity\x18\x04 \x01(\t\x12\x18\n\x10participant_name\x18\x07 \x01(\t\x12\x1c\n\x14participant_metadata\x18\x08 \x01(\t\x12_\n\x16participant_attributes\x18\t \x03(\x0b\x32?.livekit.CreateSIPParticipantRequest.ParticipantAttributesEntry\x12\x0c\n\x04\x64tmf\x18\x05 \x01(\t\x12\x19\n\rplay_ringtone\x18\x06 \x01(\x08\x42\x02\x18\x01\x12\x15\n\rplay_dialtone\x18\r \x01(\x08\x12\x19\n\x11hide_phone_number\x18\n \x01(\x08\x12\x42\n\x07headers\x18\x10 \x03(\x0b\x32\x31.livekit.CreateSIPParticipantRequest.HeadersEntry\x12\x32\n\x0finclude_headers\x18\x11 \x01(\x0e\x32\x19.livekit.SIPHeaderOptions\x12\x32\n\x0fringing_timeout\x18\x0b \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x34\n\x11max_call_duration\x18\x0c \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x15\n\rkrisp_enabled\x18\x0e \x01(\x08\x12\x35\n\x10media_encryption\x18\x12 \x01(\x0e\x32\x1b.livekit.SIPMediaEncryption\x12\x1b\n\x13wait_until_answered\x18\x13 \x01(\x08\x1a<\n\x1aParticipantAttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a.\n\x0cHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"r\n\x12SIPParticipantInfo\x12\x16\n\x0eparticipant_id\x18\x01 \x01(\t\x12\x1c\n\x14participant_identity\x18\x02 \x01(\t\x12\x11\n\troom_name\x18\x03 \x01(\t\x12\x13\n\x0bsip_call_id\x18\x04 \x01(\t\"\xf2\x01\n\x1dTransferSIPParticipantRequest\x12\x1c\n\x14participant_identity\x18\x01 \x01(\t\x12\x11\n\troom_name\x18\x02 \x01(\t\x12\x13\n\x0btransfer_to\x18\x03 \x01(\t\x12\x15\n\rplay_dialtone\x18\x04 \x01(\x08\x12\x44\n\x07headers\x18\x05 \x03(\x0b\x32\x33.livekit.TransferSIPParticipantRequest.HeadersEntry\x1a.\n\x0cHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xa9\x06\n\x0bSIPCallInfo\x12\x0f\n\x07\x63\x61ll_id\x18\x01 \x01(\t\x12\x10\n\x08trunk_id\x18\x02 \x01(\t\x12\x18\n\x10\x64ispatch_rule_id\x18\x10 \x01(\t\x12\x0e\n\x06region\x18\x11 \x01(\t\x12\x11\n\troom_name\x18\x03 \x01(\t\x12\x0f\n\x07room_id\x18\x04 \x01(\t\x12\x1c\n\x14participant_identity\x18\x05 \x01(\t\x12O\n\x16participant_attributes\x18\x12 \x03(\x0b\x32/.livekit.SIPCallInfo.ParticipantAttributesEntry\x12!\n\x08\x66rom_uri\x18\x06 \x01(\x0b\x32\x0f.livekit.SIPUri\x12\x1f\n\x06to_uri\x18\x07 \x01(\x0b\x32\x0f.livekit.SIPUri\x12\x16\n\ncreated_at\x18\t \x01(\x03\x42\x02\x18\x01\x12\x16\n\nstarted_at\x18\n \x01(\x03\x42\x02\x18\x01\x12\x14\n\x08\x65nded_at\x18\x0b \x01(\x03\x42\x02\x18\x01\x12-\n\x10\x65nabled_features\x18\x0e \x03(\x0e\x32\x13.livekit.SIPFeature\x12\x31\n\x0e\x63\x61ll_direction\x18\x0f \x01(\x0e\x32\x19.livekit.SIPCallDirection\x12+\n\x0b\x63\x61ll_status\x18\x08 \x01(\x0e\x32\x16.livekit.SIPCallStatus\x12\x15\n\rcreated_at_ns\x18\x16 \x01(\x03\x12\x15\n\rstarted_at_ns\x18\x17 \x01(\x03\x12\x13\n\x0b\x65nded_at_ns\x18\x18 \x01(\x03\x12\x34\n\x11\x64isconnect_reason\x18\x0c \x01(\x0e\x32\x19.livekit.DisconnectReason\x12\r\n\x05\x65rror\x18\r \x01(\t\x12,\n\x10\x63\x61ll_status_code\x18\x13 \x01(\x0b\x32\x12.livekit.SIPStatus\x12\x13\n\x0b\x61udio_codec\x18\x14 \x01(\t\x12\x18\n\x10media_encryption\x18\x15 \x01(\t\x1a<\n\x1aParticipantAttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"h\n\x06SIPUri\x12\x0c\n\x04user\x18\x01 \x01(\t\x12\x0c\n\x04host\x18\x02 \x01(\t\x12\n\n\x02ip\x18\x03 \x01(\t\x12\x0c\n\x04port\x18\x04 \x01(\r\x12(\n\ttransport\x18\x05 \x01(\x0e\x32\x15.livekit.SIPTransport*\xef\x0c\n\rSIPStatusCode\x12\x16\n\x12SIP_STATUS_UNKNOWN\x10\x00\x12\x15\n\x11SIP_STATUS_TRYING\x10\x64\x12\x17\n\x12SIP_STATUS_RINGING\x10\xb4\x01\x12!\n\x1cSIP_STATUS_CALL_IS_FORWARDED\x10\xb5\x01\x12\x16\n\x11SIP_STATUS_QUEUED\x10\xb6\x01\x12 \n\x1bSIP_STATUS_SESSION_PROGRESS\x10\xb7\x01\x12\x12\n\rSIP_STATUS_OK\x10\xc8\x01\x12\x18\n\x13SIP_STATUS_ACCEPTED\x10\xca\x01\x12!\n\x1cSIP_STATUS_MOVED_PERMANENTLY\x10\xad\x02\x12!\n\x1cSIP_STATUS_MOVED_TEMPORARILY\x10\xae\x02\x12\x19\n\x14SIP_STATUS_USE_PROXY\x10\xb1\x02\x12\x1b\n\x16SIP_STATUS_BAD_REQUEST\x10\x90\x03\x12\x1c\n\x17SIP_STATUS_UNAUTHORIZED\x10\x91\x03\x12 \n\x1bSIP_STATUS_PAYMENT_REQUIRED\x10\x92\x03\x12\x19\n\x14SIP_STATUS_FORBIDDEN\x10\x93\x03\x12\x18\n\x13SIP_STATUS_NOTFOUND\x10\x94\x03\x12\"\n\x1dSIP_STATUS_METHOD_NOT_ALLOWED\x10\x95\x03\x12\x1e\n\x19SIP_STATUS_NOT_ACCEPTABLE\x10\x96\x03\x12#\n\x1eSIP_STATUS_PROXY_AUTH_REQUIRED\x10\x97\x03\x12\x1f\n\x1aSIP_STATUS_REQUEST_TIMEOUT\x10\x98\x03\x12\x18\n\x13SIP_STATUS_CONFLICT\x10\x99\x03\x12\x14\n\x0fSIP_STATUS_GONE\x10\x9a\x03\x12(\n#SIP_STATUS_REQUEST_ENTITY_TOO_LARGE\x10\x9d\x03\x12$\n\x1fSIP_STATUS_REQUEST_URI_TOO_LONG\x10\x9e\x03\x12&\n!SIP_STATUS_UNSUPPORTED_MEDIA_TYPE\x10\x9f\x03\x12/\n*SIP_STATUS_REQUESTED_RANGE_NOT_SATISFIABLE\x10\xa0\x03\x12\x1d\n\x18SIP_STATUS_BAD_EXTENSION\x10\xa4\x03\x12\"\n\x1dSIP_STATUS_EXTENSION_REQUIRED\x10\xa5\x03\x12\"\n\x1dSIP_STATUS_INTERVAL_TOO_BRIEF\x10\xa7\x03\x12\'\n\"SIP_STATUS_TEMPORARILY_UNAVAILABLE\x10\xe0\x03\x12\x30\n+SIP_STATUS_CALL_TRANSACTION_DOES_NOT_EXISTS\x10\xe1\x03\x12\x1d\n\x18SIP_STATUS_LOOP_DETECTED\x10\xe2\x03\x12\x1d\n\x18SIP_STATUS_TOO_MANY_HOPS\x10\xe3\x03\x12\"\n\x1dSIP_STATUS_ADDRESS_INCOMPLETE\x10\xe4\x03\x12\x19\n\x14SIP_STATUS_AMBIGUOUS\x10\xe5\x03\x12\x19\n\x14SIP_STATUS_BUSY_HERE\x10\xe6\x03\x12\"\n\x1dSIP_STATUS_REQUEST_TERMINATED\x10\xe7\x03\x12#\n\x1eSIP_STATUS_NOT_ACCEPTABLE_HERE\x10\xe8\x03\x12%\n SIP_STATUS_INTERNAL_SERVER_ERROR\x10\xf4\x03\x12\x1f\n\x1aSIP_STATUS_NOT_IMPLEMENTED\x10\xf5\x03\x12\x1b\n\x16SIP_STATUS_BAD_GATEWAY\x10\xf6\x03\x12#\n\x1eSIP_STATUS_SERVICE_UNAVAILABLE\x10\xf7\x03\x12\x1f\n\x1aSIP_STATUS_GATEWAY_TIMEOUT\x10\xf8\x03\x12%\n SIP_STATUS_VERSION_NOT_SUPPORTED\x10\xf9\x03\x12!\n\x1cSIP_STATUS_MESSAGE_TOO_LARGE\x10\x81\x04\x12&\n!SIP_STATUS_GLOBAL_BUSY_EVERYWHERE\x10\xd8\x04\x12\x1e\n\x19SIP_STATUS_GLOBAL_DECLINE\x10\xdb\x04\x12.\n)SIP_STATUS_GLOBAL_DOES_NOT_EXIST_ANYWHERE\x10\xdc\x04\x12%\n SIP_STATUS_GLOBAL_NOT_ACCEPTABLE\x10\xde\x04*k\n\x0cSIPTransport\x12\x16\n\x12SIP_TRANSPORT_AUTO\x10\x00\x12\x15\n\x11SIP_TRANSPORT_UDP\x10\x01\x12\x15\n\x11SIP_TRANSPORT_TCP\x10\x02\x12\x15\n\x11SIP_TRANSPORT_TLS\x10\x03*N\n\x10SIPHeaderOptions\x12\x12\n\x0eSIP_NO_HEADERS\x10\x00\x12\x11\n\rSIP_X_HEADERS\x10\x01\x12\x13\n\x0fSIP_ALL_HEADERS\x10\x02*o\n\x12SIPMediaEncryption\x12\x1d\n\x19SIP_MEDIA_ENCRYPT_DISABLE\x10\x00\x12\x1b\n\x17SIP_MEDIA_ENCRYPT_ALLOW\x10\x01\x12\x1d\n\x19SIP_MEDIA_ENCRYPT_REQUIRE\x10\x02*w\n\rSIPCallStatus\x12\x15\n\x11SCS_CALL_INCOMING\x10\x00\x12\x1a\n\x16SCS_PARTICIPANT_JOINED\x10\x01\x12\x0e\n\nSCS_ACTIVE\x10\x02\x12\x14\n\x10SCS_DISCONNECTED\x10\x03\x12\r\n\tSCS_ERROR\x10\x04*)\n\nSIPFeature\x12\x08\n\x04NONE\x10\x00\x12\x11\n\rKRISP_ENABLED\x10\x01*F\n\x10SIPCallDirection\x12\x0f\n\x0bSCD_UNKNOWN\x10\x00\x12\x0f\n\x0bSCD_INBOUND\x10\x01\x12\x10\n\x0cSCD_OUTBOUND\x10\x02\x32\xba\t\n\x03SIP\x12P\n\x0cListSIPTrunk\x12\x1c.livekit.ListSIPTrunkRequest\x1a\x1d.livekit.ListSIPTrunkResponse\"\x03\x88\x02\x01\x12\\\n\x15\x43reateSIPInboundTrunk\x12%.livekit.CreateSIPInboundTrunkRequest\x1a\x1c.livekit.SIPInboundTrunkInfo\x12_\n\x16\x43reateSIPOutboundTrunk\x12&.livekit.CreateSIPOutboundTrunkRequest\x1a\x1d.livekit.SIPOutboundTrunkInfo\x12]\n\x12GetSIPInboundTrunk\x12\".livekit.GetSIPInboundTrunkRequest\x1a#.livekit.GetSIPInboundTrunkResponse\x12`\n\x13GetSIPOutboundTrunk\x12#.livekit.GetSIPOutboundTrunkRequest\x1a$.livekit.GetSIPOutboundTrunkResponse\x12`\n\x13ListSIPInboundTrunk\x12#.livekit.ListSIPInboundTrunkRequest\x1a$.livekit.ListSIPInboundTrunkResponse\x12\x63\n\x14ListSIPOutboundTrunk\x12$.livekit.ListSIPOutboundTrunkRequest\x1a%.livekit.ListSIPOutboundTrunkResponse\x12G\n\x0e\x44\x65leteSIPTrunk\x12\x1e.livekit.DeleteSIPTrunkRequest\x1a\x15.livekit.SIPTrunkInfo\x12\\\n\x15\x43reateSIPDispatchRule\x12%.livekit.CreateSIPDispatchRuleRequest\x1a\x1c.livekit.SIPDispatchRuleInfo\x12`\n\x13ListSIPDispatchRule\x12#.livekit.ListSIPDispatchRuleRequest\x1a$.livekit.ListSIPDispatchRuleResponse\x12\\\n\x15\x44\x65leteSIPDispatchRule\x12%.livekit.DeleteSIPDispatchRuleRequest\x1a\x1c.livekit.SIPDispatchRuleInfo\x12Y\n\x14\x43reateSIPParticipant\x12$.livekit.CreateSIPParticipantRequest\x1a\x1b.livekit.SIPParticipantInfo\x12X\n\x16TransferSIPParticipant\x12&.livekit.TransferSIPParticipantRequest\x1a\x16.google.protobuf.EmptyBFZ#github.com/livekit/protocol/livekit\xaa\x02\rLiveKit.Proto\xea\x02\x0eLiveKit::Protob\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x11livekit_sip.proto\x12\x07livekit\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x14livekit_models.proto\x1a\x12livekit_room.proto\"A\n\tSIPStatus\x12$\n\x04\x63ode\x18\x01 \x01(\x0e\x32\x16.livekit.SIPStatusCode\x12\x0e\n\x06status\x18\x02 \x01(\t\"\xaf\x02\n\x15\x43reateSIPTrunkRequest\x12\x19\n\x11inbound_addresses\x18\x01 \x03(\t\x12\x18\n\x10outbound_address\x18\x02 \x01(\t\x12\x17\n\x0foutbound_number\x18\x03 \x01(\t\x12!\n\x15inbound_numbers_regex\x18\x04 \x03(\tB\x02\x18\x01\x12\x17\n\x0finbound_numbers\x18\t \x03(\t\x12\x18\n\x10inbound_username\x18\x05 \x01(\t\x12\x18\n\x10inbound_password\x18\x06 \x01(\t\x12\x19\n\x11outbound_username\x18\x07 \x01(\t\x12\x19\n\x11outbound_password\x18\x08 \x01(\t\x12\x0c\n\x04name\x18\n \x01(\t\x12\x10\n\x08metadata\x18\x0b \x01(\t:\x02\x18\x01\"\xdb\x03\n\x0cSIPTrunkInfo\x12\x14\n\x0csip_trunk_id\x18\x01 \x01(\t\x12-\n\x04kind\x18\x0e \x01(\x0e\x32\x1f.livekit.SIPTrunkInfo.TrunkKind\x12\x19\n\x11inbound_addresses\x18\x02 \x03(\t\x12\x18\n\x10outbound_address\x18\x03 \x01(\t\x12\x17\n\x0foutbound_number\x18\x04 \x01(\t\x12(\n\ttransport\x18\r \x01(\x0e\x32\x15.livekit.SIPTransport\x12!\n\x15inbound_numbers_regex\x18\x05 \x03(\tB\x02\x18\x01\x12\x17\n\x0finbound_numbers\x18\n \x03(\t\x12\x18\n\x10inbound_username\x18\x06 \x01(\t\x12\x18\n\x10inbound_password\x18\x07 \x01(\t\x12\x19\n\x11outbound_username\x18\x08 \x01(\t\x12\x19\n\x11outbound_password\x18\t \x01(\t\x12\x0c\n\x04name\x18\x0b \x01(\t\x12\x10\n\x08metadata\x18\x0c \x01(\t\"D\n\tTrunkKind\x12\x10\n\x0cTRUNK_LEGACY\x10\x00\x12\x11\n\rTRUNK_INBOUND\x10\x01\x12\x12\n\x0eTRUNK_OUTBOUND\x10\x02:\x02\x18\x01\"K\n\x1c\x43reateSIPInboundTrunkRequest\x12+\n\x05trunk\x18\x01 \x01(\x0b\x32\x1c.livekit.SIPInboundTrunkInfo\"\xa1\x01\n\x1cUpdateSIPInboundTrunkRequest\x12\x14\n\x0csip_trunk_id\x18\x01 \x01(\t\x12/\n\x07replace\x18\x02 \x01(\x0b\x32\x1c.livekit.SIPInboundTrunkInfoH\x00\x12\x30\n\x06update\x18\x03 \x01(\x0b\x32\x1e.livekit.SIPInboundTrunkUpdateH\x00\x42\x08\n\x06\x61\x63tion\"\xba\x06\n\x13SIPInboundTrunkInfo\x12\x14\n\x0csip_trunk_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x10\n\x08metadata\x18\x03 \x01(\t\x12\x0f\n\x07numbers\x18\x04 \x03(\t\x12\x19\n\x11\x61llowed_addresses\x18\x05 \x03(\t\x12\x17\n\x0f\x61llowed_numbers\x18\x06 \x03(\t\x12\x15\n\rauth_username\x18\x07 \x01(\t\x12\x15\n\rauth_password\x18\x08 \x01(\t\x12:\n\x07headers\x18\t \x03(\x0b\x32).livekit.SIPInboundTrunkInfo.HeadersEntry\x12T\n\x15headers_to_attributes\x18\n \x03(\x0b\x32\x35.livekit.SIPInboundTrunkInfo.HeadersToAttributesEntry\x12T\n\x15\x61ttributes_to_headers\x18\x0e \x03(\x0b\x32\x35.livekit.SIPInboundTrunkInfo.AttributesToHeadersEntry\x12\x32\n\x0finclude_headers\x18\x0f \x01(\x0e\x32\x19.livekit.SIPHeaderOptions\x12\x32\n\x0fringing_timeout\x18\x0b \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x34\n\x11max_call_duration\x18\x0c \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x15\n\rkrisp_enabled\x18\r \x01(\x08\x12\x35\n\x10media_encryption\x18\x10 \x01(\x0e\x32\x1b.livekit.SIPMediaEncryption\x1a.\n\x0cHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a:\n\x18HeadersToAttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a:\n\x18\x41ttributesToHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xb7\x02\n\x15SIPInboundTrunkUpdate\x12$\n\x07numbers\x18\x01 \x01(\x0b\x32\x13.livekit.ListUpdate\x12.\n\x11\x61llowed_addresses\x18\x02 \x01(\x0b\x32\x13.livekit.ListUpdate\x12,\n\x0f\x61llowed_numbers\x18\x03 \x01(\x0b\x32\x13.livekit.ListUpdate\x12\x1a\n\rauth_username\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x1a\n\rauth_password\x18\x05 \x01(\tH\x01\x88\x01\x01\x12\x11\n\x04name\x18\x06 \x01(\tH\x02\x88\x01\x01\x12\x15\n\x08metadata\x18\x07 \x01(\tH\x03\x88\x01\x01\x42\x10\n\x0e_auth_usernameB\x10\n\x0e_auth_passwordB\x07\n\x05_nameB\x0b\n\t_metadata\"M\n\x1d\x43reateSIPOutboundTrunkRequest\x12,\n\x05trunk\x18\x01 \x01(\x0b\x32\x1d.livekit.SIPOutboundTrunkInfo\"\xa4\x01\n\x1dUpdateSIPOutboundTrunkRequest\x12\x14\n\x0csip_trunk_id\x18\x01 \x01(\t\x12\x30\n\x07replace\x18\x02 \x01(\x0b\x32\x1d.livekit.SIPOutboundTrunkInfoH\x00\x12\x31\n\x06update\x18\x03 \x01(\x0b\x32\x1f.livekit.SIPOutboundTrunkUpdateH\x00\x42\x08\n\x06\x61\x63tion\"\xc4\x05\n\x14SIPOutboundTrunkInfo\x12\x14\n\x0csip_trunk_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x10\n\x08metadata\x18\x03 \x01(\t\x12\x0f\n\x07\x61\x64\x64ress\x18\x04 \x01(\t\x12(\n\ttransport\x18\x05 \x01(\x0e\x32\x15.livekit.SIPTransport\x12\x0f\n\x07numbers\x18\x06 \x03(\t\x12\x15\n\rauth_username\x18\x07 \x01(\t\x12\x15\n\rauth_password\x18\x08 \x01(\t\x12;\n\x07headers\x18\t \x03(\x0b\x32*.livekit.SIPOutboundTrunkInfo.HeadersEntry\x12U\n\x15headers_to_attributes\x18\n \x03(\x0b\x32\x36.livekit.SIPOutboundTrunkInfo.HeadersToAttributesEntry\x12U\n\x15\x61ttributes_to_headers\x18\x0b \x03(\x0b\x32\x36.livekit.SIPOutboundTrunkInfo.AttributesToHeadersEntry\x12\x32\n\x0finclude_headers\x18\x0c \x01(\x0e\x32\x19.livekit.SIPHeaderOptions\x12\x35\n\x10media_encryption\x18\r \x01(\x0e\x32\x1b.livekit.SIPMediaEncryption\x1a.\n\x0cHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a:\n\x18HeadersToAttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a:\n\x18\x41ttributesToHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xb9\x02\n\x16SIPOutboundTrunkUpdate\x12\x14\n\x07\x61\x64\x64ress\x18\x01 \x01(\tH\x00\x88\x01\x01\x12-\n\ttransport\x18\x02 \x01(\x0e\x32\x15.livekit.SIPTransportH\x01\x88\x01\x01\x12$\n\x07numbers\x18\x03 \x01(\x0b\x32\x13.livekit.ListUpdate\x12\x1a\n\rauth_username\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x1a\n\rauth_password\x18\x05 \x01(\tH\x03\x88\x01\x01\x12\x11\n\x04name\x18\x06 \x01(\tH\x04\x88\x01\x01\x12\x15\n\x08metadata\x18\x07 \x01(\tH\x05\x88\x01\x01\x42\n\n\x08_addressB\x0c\n\n_transportB\x10\n\x0e_auth_usernameB\x10\n\x0e_auth_passwordB\x07\n\x05_nameB\x0b\n\t_metadata\"1\n\x19GetSIPInboundTrunkRequest\x12\x14\n\x0csip_trunk_id\x18\x01 \x01(\t\"I\n\x1aGetSIPInboundTrunkResponse\x12+\n\x05trunk\x18\x01 \x01(\x0b\x32\x1c.livekit.SIPInboundTrunkInfo\"2\n\x1aGetSIPOutboundTrunkRequest\x12\x14\n\x0csip_trunk_id\x18\x01 \x01(\t\"K\n\x1bGetSIPOutboundTrunkResponse\x12,\n\x05trunk\x18\x01 \x01(\x0b\x32\x1d.livekit.SIPOutboundTrunkInfo\"<\n\x13ListSIPTrunkRequest\x12!\n\x04page\x18\x01 \x01(\x0b\x32\x13.livekit.Pagination:\x02\x18\x01\"@\n\x14ListSIPTrunkResponse\x12$\n\x05items\x18\x01 \x03(\x0b\x32\x15.livekit.SIPTrunkInfo:\x02\x18\x01\"c\n\x1aListSIPInboundTrunkRequest\x12!\n\x04page\x18\x03 \x01(\x0b\x32\x13.livekit.Pagination\x12\x11\n\ttrunk_ids\x18\x01 \x03(\t\x12\x0f\n\x07numbers\x18\x02 \x03(\t\"J\n\x1bListSIPInboundTrunkResponse\x12+\n\x05items\x18\x01 \x03(\x0b\x32\x1c.livekit.SIPInboundTrunkInfo\"d\n\x1bListSIPOutboundTrunkRequest\x12!\n\x04page\x18\x03 \x01(\x0b\x32\x13.livekit.Pagination\x12\x11\n\ttrunk_ids\x18\x01 \x03(\t\x12\x0f\n\x07numbers\x18\x02 \x03(\t\"L\n\x1cListSIPOutboundTrunkResponse\x12,\n\x05items\x18\x01 \x03(\x0b\x32\x1d.livekit.SIPOutboundTrunkInfo\"-\n\x15\x44\x65leteSIPTrunkRequest\x12\x14\n\x0csip_trunk_id\x18\x01 \x01(\t\"7\n\x15SIPDispatchRuleDirect\x12\x11\n\troom_name\x18\x01 \x01(\t\x12\x0b\n\x03pin\x18\x02 \x01(\t\"=\n\x19SIPDispatchRuleIndividual\x12\x13\n\x0broom_prefix\x18\x01 \x01(\t\x12\x0b\n\x03pin\x18\x02 \x01(\t\"L\n\x15SIPDispatchRuleCallee\x12\x13\n\x0broom_prefix\x18\x01 \x01(\t\x12\x0b\n\x03pin\x18\x02 \x01(\t\x12\x11\n\trandomize\x18\x03 \x01(\x08\"\xe1\x01\n\x0fSIPDispatchRule\x12>\n\x14\x64ispatch_rule_direct\x18\x01 \x01(\x0b\x32\x1e.livekit.SIPDispatchRuleDirectH\x00\x12\x46\n\x18\x64ispatch_rule_individual\x18\x02 \x01(\x0b\x32\".livekit.SIPDispatchRuleIndividualH\x00\x12>\n\x14\x64ispatch_rule_callee\x18\x03 \x01(\x0b\x32\x1e.livekit.SIPDispatchRuleCalleeH\x00\x42\x06\n\x04rule\"\xca\x03\n\x1c\x43reateSIPDispatchRuleRequest\x12\x33\n\rdispatch_rule\x18\n \x01(\x0b\x32\x1c.livekit.SIPDispatchRuleInfo\x12*\n\x04rule\x18\x01 \x01(\x0b\x32\x18.livekit.SIPDispatchRuleB\x02\x18\x01\x12\x15\n\ttrunk_ids\x18\x02 \x03(\tB\x02\x18\x01\x12\x1d\n\x11hide_phone_number\x18\x03 \x01(\x08\x42\x02\x18\x01\x12\x1b\n\x0finbound_numbers\x18\x06 \x03(\tB\x02\x18\x01\x12\x10\n\x04name\x18\x04 \x01(\tB\x02\x18\x01\x12\x14\n\x08metadata\x18\x05 \x01(\tB\x02\x18\x01\x12M\n\nattributes\x18\x07 \x03(\x0b\x32\x35.livekit.CreateSIPDispatchRuleRequest.AttributesEntryB\x02\x18\x01\x12\x17\n\x0broom_preset\x18\x08 \x01(\tB\x02\x18\x01\x12\x33\n\x0broom_config\x18\t \x01(\x0b\x32\x1a.livekit.RoomConfigurationB\x02\x18\x01\x1a\x31\n\x0f\x41ttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xa9\x01\n\x1cUpdateSIPDispatchRuleRequest\x12\x1c\n\x14sip_dispatch_rule_id\x18\x01 \x01(\t\x12/\n\x07replace\x18\x02 \x01(\x0b\x32\x1c.livekit.SIPDispatchRuleInfoH\x00\x12\x30\n\x06update\x18\x03 \x01(\x0b\x32\x1e.livekit.SIPDispatchRuleUpdateH\x00\x42\x08\n\x06\x61\x63tion\"\xcb\x03\n\x13SIPDispatchRuleInfo\x12\x1c\n\x14sip_dispatch_rule_id\x18\x01 \x01(\t\x12&\n\x04rule\x18\x02 \x01(\x0b\x32\x18.livekit.SIPDispatchRule\x12\x11\n\ttrunk_ids\x18\x03 \x03(\t\x12\x19\n\x11hide_phone_number\x18\x04 \x01(\x08\x12\x17\n\x0finbound_numbers\x18\x07 \x03(\t\x12\x0c\n\x04name\x18\x05 \x01(\t\x12\x10\n\x08metadata\x18\x06 \x01(\t\x12@\n\nattributes\x18\x08 \x03(\x0b\x32,.livekit.SIPDispatchRuleInfo.AttributesEntry\x12\x13\n\x0broom_preset\x18\t \x01(\t\x12/\n\x0broom_config\x18\n \x01(\x0b\x32\x1a.livekit.RoomConfiguration\x12\x15\n\rkrisp_enabled\x18\x0b \x01(\x08\x12\x35\n\x10media_encryption\x18\x0c \x01(\x0e\x32\x1b.livekit.SIPMediaEncryption\x1a\x31\n\x0f\x41ttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x9e\x02\n\x15SIPDispatchRuleUpdate\x12&\n\ttrunk_ids\x18\x01 \x01(\x0b\x32\x13.livekit.ListUpdate\x12&\n\x04rule\x18\x02 \x01(\x0b\x32\x18.livekit.SIPDispatchRule\x12\x11\n\x04name\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x15\n\x08metadata\x18\x04 \x01(\tH\x01\x88\x01\x01\x12\x42\n\nattributes\x18\x05 \x03(\x0b\x32..livekit.SIPDispatchRuleUpdate.AttributesEntry\x1a\x31\n\x0f\x41ttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x07\n\x05_nameB\x0b\n\t_metadata\"m\n\x1aListSIPDispatchRuleRequest\x12!\n\x04page\x18\x03 \x01(\x0b\x32\x13.livekit.Pagination\x12\x19\n\x11\x64ispatch_rule_ids\x18\x01 \x03(\t\x12\x11\n\ttrunk_ids\x18\x02 \x03(\t\"J\n\x1bListSIPDispatchRuleResponse\x12+\n\x05items\x18\x01 \x03(\x0b\x32\x1c.livekit.SIPDispatchRuleInfo\"<\n\x1c\x44\x65leteSIPDispatchRuleRequest\x12\x1c\n\x14sip_dispatch_rule_id\x18\x01 \x01(\t\"\x9d\x03\n\x11SIPOutboundConfig\x12\x10\n\x08hostname\x18\x01 \x01(\t\x12(\n\ttransport\x18\x02 \x01(\x0e\x32\x15.livekit.SIPTransport\x12\x15\n\rauth_username\x18\x03 \x01(\t\x12\x15\n\rauth_password\x18\x04 \x01(\t\x12R\n\x15headers_to_attributes\x18\x05 \x03(\x0b\x32\x33.livekit.SIPOutboundConfig.HeadersToAttributesEntry\x12R\n\x15\x61ttributes_to_headers\x18\x06 \x03(\x0b\x32\x33.livekit.SIPOutboundConfig.AttributesToHeadersEntry\x1a:\n\x18HeadersToAttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a:\n\x18\x41ttributesToHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xe7\x06\n\x1b\x43reateSIPParticipantRequest\x12\x14\n\x0csip_trunk_id\x18\x01 \x01(\t\x12)\n\x05trunk\x18\x14 \x01(\x0b\x32\x1a.livekit.SIPOutboundConfig\x12\x13\n\x0bsip_call_to\x18\x02 \x01(\t\x12\x12\n\nsip_number\x18\x0f \x01(\t\x12\x11\n\troom_name\x18\x03 \x01(\t\x12\x1c\n\x14participant_identity\x18\x04 \x01(\t\x12\x18\n\x10participant_name\x18\x07 \x01(\t\x12\x1c\n\x14participant_metadata\x18\x08 \x01(\t\x12_\n\x16participant_attributes\x18\t \x03(\x0b\x32?.livekit.CreateSIPParticipantRequest.ParticipantAttributesEntry\x12\x0c\n\x04\x64tmf\x18\x05 \x01(\t\x12\x19\n\rplay_ringtone\x18\x06 \x01(\x08\x42\x02\x18\x01\x12\x15\n\rplay_dialtone\x18\r \x01(\x08\x12\x19\n\x11hide_phone_number\x18\n \x01(\x08\x12\x42\n\x07headers\x18\x10 \x03(\x0b\x32\x31.livekit.CreateSIPParticipantRequest.HeadersEntry\x12\x32\n\x0finclude_headers\x18\x11 \x01(\x0e\x32\x19.livekit.SIPHeaderOptions\x12\x32\n\x0fringing_timeout\x18\x0b \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x34\n\x11max_call_duration\x18\x0c \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x15\n\rkrisp_enabled\x18\x0e \x01(\x08\x12\x35\n\x10media_encryption\x18\x12 \x01(\x0e\x32\x1b.livekit.SIPMediaEncryption\x12\x1b\n\x13wait_until_answered\x18\x13 \x01(\x08\x1a<\n\x1aParticipantAttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a.\n\x0cHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"r\n\x12SIPParticipantInfo\x12\x16\n\x0eparticipant_id\x18\x01 \x01(\t\x12\x1c\n\x14participant_identity\x18\x02 \x01(\t\x12\x11\n\troom_name\x18\x03 \x01(\t\x12\x13\n\x0bsip_call_id\x18\x04 \x01(\t\"\xf2\x01\n\x1dTransferSIPParticipantRequest\x12\x1c\n\x14participant_identity\x18\x01 \x01(\t\x12\x11\n\troom_name\x18\x02 \x01(\t\x12\x13\n\x0btransfer_to\x18\x03 \x01(\t\x12\x15\n\rplay_dialtone\x18\x04 \x01(\x08\x12\x44\n\x07headers\x18\x05 \x03(\x0b\x32\x33.livekit.TransferSIPParticipantRequest.HeadersEntry\x1a.\n\x0cHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xa9\x06\n\x0bSIPCallInfo\x12\x0f\n\x07\x63\x61ll_id\x18\x01 \x01(\t\x12\x10\n\x08trunk_id\x18\x02 \x01(\t\x12\x18\n\x10\x64ispatch_rule_id\x18\x10 \x01(\t\x12\x0e\n\x06region\x18\x11 \x01(\t\x12\x11\n\troom_name\x18\x03 \x01(\t\x12\x0f\n\x07room_id\x18\x04 \x01(\t\x12\x1c\n\x14participant_identity\x18\x05 \x01(\t\x12O\n\x16participant_attributes\x18\x12 \x03(\x0b\x32/.livekit.SIPCallInfo.ParticipantAttributesEntry\x12!\n\x08\x66rom_uri\x18\x06 \x01(\x0b\x32\x0f.livekit.SIPUri\x12\x1f\n\x06to_uri\x18\x07 \x01(\x0b\x32\x0f.livekit.SIPUri\x12\x16\n\ncreated_at\x18\t \x01(\x03\x42\x02\x18\x01\x12\x16\n\nstarted_at\x18\n \x01(\x03\x42\x02\x18\x01\x12\x14\n\x08\x65nded_at\x18\x0b \x01(\x03\x42\x02\x18\x01\x12-\n\x10\x65nabled_features\x18\x0e \x03(\x0e\x32\x13.livekit.SIPFeature\x12\x31\n\x0e\x63\x61ll_direction\x18\x0f \x01(\x0e\x32\x19.livekit.SIPCallDirection\x12+\n\x0b\x63\x61ll_status\x18\x08 \x01(\x0e\x32\x16.livekit.SIPCallStatus\x12\x15\n\rcreated_at_ns\x18\x16 \x01(\x03\x12\x15\n\rstarted_at_ns\x18\x17 \x01(\x03\x12\x13\n\x0b\x65nded_at_ns\x18\x18 \x01(\x03\x12\x34\n\x11\x64isconnect_reason\x18\x0c \x01(\x0e\x32\x19.livekit.DisconnectReason\x12\r\n\x05\x65rror\x18\r \x01(\t\x12,\n\x10\x63\x61ll_status_code\x18\x13 \x01(\x0b\x32\x12.livekit.SIPStatus\x12\x13\n\x0b\x61udio_codec\x18\x14 \x01(\t\x12\x18\n\x10media_encryption\x18\x15 \x01(\t\x1a<\n\x1aParticipantAttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"h\n\x06SIPUri\x12\x0c\n\x04user\x18\x01 \x01(\t\x12\x0c\n\x04host\x18\x02 \x01(\t\x12\n\n\x02ip\x18\x03 \x01(\t\x12\x0c\n\x04port\x18\x04 \x01(\r\x12(\n\ttransport\x18\x05 \x01(\x0e\x32\x15.livekit.SIPTransport*\xef\x0c\n\rSIPStatusCode\x12\x16\n\x12SIP_STATUS_UNKNOWN\x10\x00\x12\x15\n\x11SIP_STATUS_TRYING\x10\x64\x12\x17\n\x12SIP_STATUS_RINGING\x10\xb4\x01\x12!\n\x1cSIP_STATUS_CALL_IS_FORWARDED\x10\xb5\x01\x12\x16\n\x11SIP_STATUS_QUEUED\x10\xb6\x01\x12 \n\x1bSIP_STATUS_SESSION_PROGRESS\x10\xb7\x01\x12\x12\n\rSIP_STATUS_OK\x10\xc8\x01\x12\x18\n\x13SIP_STATUS_ACCEPTED\x10\xca\x01\x12!\n\x1cSIP_STATUS_MOVED_PERMANENTLY\x10\xad\x02\x12!\n\x1cSIP_STATUS_MOVED_TEMPORARILY\x10\xae\x02\x12\x19\n\x14SIP_STATUS_USE_PROXY\x10\xb1\x02\x12\x1b\n\x16SIP_STATUS_BAD_REQUEST\x10\x90\x03\x12\x1c\n\x17SIP_STATUS_UNAUTHORIZED\x10\x91\x03\x12 \n\x1bSIP_STATUS_PAYMENT_REQUIRED\x10\x92\x03\x12\x19\n\x14SIP_STATUS_FORBIDDEN\x10\x93\x03\x12\x18\n\x13SIP_STATUS_NOTFOUND\x10\x94\x03\x12\"\n\x1dSIP_STATUS_METHOD_NOT_ALLOWED\x10\x95\x03\x12\x1e\n\x19SIP_STATUS_NOT_ACCEPTABLE\x10\x96\x03\x12#\n\x1eSIP_STATUS_PROXY_AUTH_REQUIRED\x10\x97\x03\x12\x1f\n\x1aSIP_STATUS_REQUEST_TIMEOUT\x10\x98\x03\x12\x18\n\x13SIP_STATUS_CONFLICT\x10\x99\x03\x12\x14\n\x0fSIP_STATUS_GONE\x10\x9a\x03\x12(\n#SIP_STATUS_REQUEST_ENTITY_TOO_LARGE\x10\x9d\x03\x12$\n\x1fSIP_STATUS_REQUEST_URI_TOO_LONG\x10\x9e\x03\x12&\n!SIP_STATUS_UNSUPPORTED_MEDIA_TYPE\x10\x9f\x03\x12/\n*SIP_STATUS_REQUESTED_RANGE_NOT_SATISFIABLE\x10\xa0\x03\x12\x1d\n\x18SIP_STATUS_BAD_EXTENSION\x10\xa4\x03\x12\"\n\x1dSIP_STATUS_EXTENSION_REQUIRED\x10\xa5\x03\x12\"\n\x1dSIP_STATUS_INTERVAL_TOO_BRIEF\x10\xa7\x03\x12\'\n\"SIP_STATUS_TEMPORARILY_UNAVAILABLE\x10\xe0\x03\x12\x30\n+SIP_STATUS_CALL_TRANSACTION_DOES_NOT_EXISTS\x10\xe1\x03\x12\x1d\n\x18SIP_STATUS_LOOP_DETECTED\x10\xe2\x03\x12\x1d\n\x18SIP_STATUS_TOO_MANY_HOPS\x10\xe3\x03\x12\"\n\x1dSIP_STATUS_ADDRESS_INCOMPLETE\x10\xe4\x03\x12\x19\n\x14SIP_STATUS_AMBIGUOUS\x10\xe5\x03\x12\x19\n\x14SIP_STATUS_BUSY_HERE\x10\xe6\x03\x12\"\n\x1dSIP_STATUS_REQUEST_TERMINATED\x10\xe7\x03\x12#\n\x1eSIP_STATUS_NOT_ACCEPTABLE_HERE\x10\xe8\x03\x12%\n SIP_STATUS_INTERNAL_SERVER_ERROR\x10\xf4\x03\x12\x1f\n\x1aSIP_STATUS_NOT_IMPLEMENTED\x10\xf5\x03\x12\x1b\n\x16SIP_STATUS_BAD_GATEWAY\x10\xf6\x03\x12#\n\x1eSIP_STATUS_SERVICE_UNAVAILABLE\x10\xf7\x03\x12\x1f\n\x1aSIP_STATUS_GATEWAY_TIMEOUT\x10\xf8\x03\x12%\n SIP_STATUS_VERSION_NOT_SUPPORTED\x10\xf9\x03\x12!\n\x1cSIP_STATUS_MESSAGE_TOO_LARGE\x10\x81\x04\x12&\n!SIP_STATUS_GLOBAL_BUSY_EVERYWHERE\x10\xd8\x04\x12\x1e\n\x19SIP_STATUS_GLOBAL_DECLINE\x10\xdb\x04\x12.\n)SIP_STATUS_GLOBAL_DOES_NOT_EXIST_ANYWHERE\x10\xdc\x04\x12%\n SIP_STATUS_GLOBAL_NOT_ACCEPTABLE\x10\xde\x04*k\n\x0cSIPTransport\x12\x16\n\x12SIP_TRANSPORT_AUTO\x10\x00\x12\x15\n\x11SIP_TRANSPORT_UDP\x10\x01\x12\x15\n\x11SIP_TRANSPORT_TCP\x10\x02\x12\x15\n\x11SIP_TRANSPORT_TLS\x10\x03*N\n\x10SIPHeaderOptions\x12\x12\n\x0eSIP_NO_HEADERS\x10\x00\x12\x11\n\rSIP_X_HEADERS\x10\x01\x12\x13\n\x0fSIP_ALL_HEADERS\x10\x02*o\n\x12SIPMediaEncryption\x12\x1d\n\x19SIP_MEDIA_ENCRYPT_DISABLE\x10\x00\x12\x1b\n\x17SIP_MEDIA_ENCRYPT_ALLOW\x10\x01\x12\x1d\n\x19SIP_MEDIA_ENCRYPT_REQUIRE\x10\x02*w\n\rSIPCallStatus\x12\x15\n\x11SCS_CALL_INCOMING\x10\x00\x12\x1a\n\x16SCS_PARTICIPANT_JOINED\x10\x01\x12\x0e\n\nSCS_ACTIVE\x10\x02\x12\x14\n\x10SCS_DISCONNECTED\x10\x03\x12\r\n\tSCS_ERROR\x10\x04*)\n\nSIPFeature\x12\x08\n\x04NONE\x10\x00\x12\x11\n\rKRISP_ENABLED\x10\x01*F\n\x10SIPCallDirection\x12\x0f\n\x0bSCD_UNKNOWN\x10\x00\x12\x0f\n\x0bSCD_INBOUND\x10\x01\x12\x10\n\x0cSCD_OUTBOUND\x10\x02\x32\xd7\x0b\n\x03SIP\x12P\n\x0cListSIPTrunk\x12\x1c.livekit.ListSIPTrunkRequest\x1a\x1d.livekit.ListSIPTrunkResponse\"\x03\x88\x02\x01\x12\\\n\x15\x43reateSIPInboundTrunk\x12%.livekit.CreateSIPInboundTrunkRequest\x1a\x1c.livekit.SIPInboundTrunkInfo\x12_\n\x16\x43reateSIPOutboundTrunk\x12&.livekit.CreateSIPOutboundTrunkRequest\x1a\x1d.livekit.SIPOutboundTrunkInfo\x12\\\n\x15UpdateSIPInboundTrunk\x12%.livekit.UpdateSIPInboundTrunkRequest\x1a\x1c.livekit.SIPInboundTrunkInfo\x12_\n\x16UpdateSIPOutboundTrunk\x12&.livekit.UpdateSIPOutboundTrunkRequest\x1a\x1d.livekit.SIPOutboundTrunkInfo\x12]\n\x12GetSIPInboundTrunk\x12\".livekit.GetSIPInboundTrunkRequest\x1a#.livekit.GetSIPInboundTrunkResponse\x12`\n\x13GetSIPOutboundTrunk\x12#.livekit.GetSIPOutboundTrunkRequest\x1a$.livekit.GetSIPOutboundTrunkResponse\x12`\n\x13ListSIPInboundTrunk\x12#.livekit.ListSIPInboundTrunkRequest\x1a$.livekit.ListSIPInboundTrunkResponse\x12\x63\n\x14ListSIPOutboundTrunk\x12$.livekit.ListSIPOutboundTrunkRequest\x1a%.livekit.ListSIPOutboundTrunkResponse\x12G\n\x0e\x44\x65leteSIPTrunk\x12\x1e.livekit.DeleteSIPTrunkRequest\x1a\x15.livekit.SIPTrunkInfo\x12\\\n\x15\x43reateSIPDispatchRule\x12%.livekit.CreateSIPDispatchRuleRequest\x1a\x1c.livekit.SIPDispatchRuleInfo\x12\\\n\x15UpdateSIPDispatchRule\x12%.livekit.UpdateSIPDispatchRuleRequest\x1a\x1c.livekit.SIPDispatchRuleInfo\x12`\n\x13ListSIPDispatchRule\x12#.livekit.ListSIPDispatchRuleRequest\x1a$.livekit.ListSIPDispatchRuleResponse\x12\\\n\x15\x44\x65leteSIPDispatchRule\x12%.livekit.DeleteSIPDispatchRuleRequest\x1a\x1c.livekit.SIPDispatchRuleInfo\x12Y\n\x14\x43reateSIPParticipant\x12$.livekit.CreateSIPParticipantRequest\x1a\x1b.livekit.SIPParticipantInfo\x12X\n\x16TransferSIPParticipant\x12&.livekit.TransferSIPParticipantRequest\x1a\x16.google.protobuf.EmptyBFZ#github.com/livekit/protocol/livekit\xaa\x02\rLiveKit.Proto\xea\x02\x0eLiveKit::Protob\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'sip', _globals) -if _descriptor._USE_C_DESCRIPTORS == False: - _globals['DESCRIPTOR']._options = None +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None _globals['DESCRIPTOR']._serialized_options = b'Z#github.com/livekit/protocol/livekit\252\002\rLiveKit.Proto\352\002\016LiveKit::Proto' - _globals['_CREATESIPTRUNKREQUEST'].fields_by_name['inbound_numbers_regex']._options = None + _globals['_CREATESIPTRUNKREQUEST'].fields_by_name['inbound_numbers_regex']._loaded_options = None _globals['_CREATESIPTRUNKREQUEST'].fields_by_name['inbound_numbers_regex']._serialized_options = b'\030\001' - _globals['_CREATESIPTRUNKREQUEST']._options = None + _globals['_CREATESIPTRUNKREQUEST']._loaded_options = None _globals['_CREATESIPTRUNKREQUEST']._serialized_options = b'\030\001' - _globals['_SIPTRUNKINFO'].fields_by_name['inbound_numbers_regex']._options = None + _globals['_SIPTRUNKINFO'].fields_by_name['inbound_numbers_regex']._loaded_options = None _globals['_SIPTRUNKINFO'].fields_by_name['inbound_numbers_regex']._serialized_options = b'\030\001' - _globals['_SIPTRUNKINFO']._options = None + _globals['_SIPTRUNKINFO']._loaded_options = None _globals['_SIPTRUNKINFO']._serialized_options = b'\030\001' - _globals['_SIPINBOUNDTRUNKINFO_HEADERSENTRY']._options = None + _globals['_SIPINBOUNDTRUNKINFO_HEADERSENTRY']._loaded_options = None _globals['_SIPINBOUNDTRUNKINFO_HEADERSENTRY']._serialized_options = b'8\001' - _globals['_SIPINBOUNDTRUNKINFO_HEADERSTOATTRIBUTESENTRY']._options = None + _globals['_SIPINBOUNDTRUNKINFO_HEADERSTOATTRIBUTESENTRY']._loaded_options = None _globals['_SIPINBOUNDTRUNKINFO_HEADERSTOATTRIBUTESENTRY']._serialized_options = b'8\001' - _globals['_SIPINBOUNDTRUNKINFO_ATTRIBUTESTOHEADERSENTRY']._options = None + _globals['_SIPINBOUNDTRUNKINFO_ATTRIBUTESTOHEADERSENTRY']._loaded_options = None _globals['_SIPINBOUNDTRUNKINFO_ATTRIBUTESTOHEADERSENTRY']._serialized_options = b'8\001' - _globals['_SIPOUTBOUNDTRUNKINFO_HEADERSENTRY']._options = None + _globals['_SIPOUTBOUNDTRUNKINFO_HEADERSENTRY']._loaded_options = None _globals['_SIPOUTBOUNDTRUNKINFO_HEADERSENTRY']._serialized_options = b'8\001' - _globals['_SIPOUTBOUNDTRUNKINFO_HEADERSTOATTRIBUTESENTRY']._options = None + _globals['_SIPOUTBOUNDTRUNKINFO_HEADERSTOATTRIBUTESENTRY']._loaded_options = None _globals['_SIPOUTBOUNDTRUNKINFO_HEADERSTOATTRIBUTESENTRY']._serialized_options = b'8\001' - _globals['_SIPOUTBOUNDTRUNKINFO_ATTRIBUTESTOHEADERSENTRY']._options = None + _globals['_SIPOUTBOUNDTRUNKINFO_ATTRIBUTESTOHEADERSENTRY']._loaded_options = None _globals['_SIPOUTBOUNDTRUNKINFO_ATTRIBUTESTOHEADERSENTRY']._serialized_options = b'8\001' - _globals['_LISTSIPTRUNKREQUEST']._options = None + _globals['_LISTSIPTRUNKREQUEST']._loaded_options = None _globals['_LISTSIPTRUNKREQUEST']._serialized_options = b'\030\001' - _globals['_LISTSIPTRUNKRESPONSE']._options = None + _globals['_LISTSIPTRUNKRESPONSE']._loaded_options = None _globals['_LISTSIPTRUNKRESPONSE']._serialized_options = b'\030\001' - _globals['_CREATESIPDISPATCHRULEREQUEST_ATTRIBUTESENTRY']._options = None + _globals['_CREATESIPDISPATCHRULEREQUEST_ATTRIBUTESENTRY']._loaded_options = None _globals['_CREATESIPDISPATCHRULEREQUEST_ATTRIBUTESENTRY']._serialized_options = b'8\001' - _globals['_SIPDISPATCHRULEINFO_ATTRIBUTESENTRY']._options = None + _globals['_CREATESIPDISPATCHRULEREQUEST'].fields_by_name['rule']._loaded_options = None + _globals['_CREATESIPDISPATCHRULEREQUEST'].fields_by_name['rule']._serialized_options = b'\030\001' + _globals['_CREATESIPDISPATCHRULEREQUEST'].fields_by_name['trunk_ids']._loaded_options = None + _globals['_CREATESIPDISPATCHRULEREQUEST'].fields_by_name['trunk_ids']._serialized_options = b'\030\001' + _globals['_CREATESIPDISPATCHRULEREQUEST'].fields_by_name['hide_phone_number']._loaded_options = None + _globals['_CREATESIPDISPATCHRULEREQUEST'].fields_by_name['hide_phone_number']._serialized_options = b'\030\001' + _globals['_CREATESIPDISPATCHRULEREQUEST'].fields_by_name['inbound_numbers']._loaded_options = None + _globals['_CREATESIPDISPATCHRULEREQUEST'].fields_by_name['inbound_numbers']._serialized_options = b'\030\001' + _globals['_CREATESIPDISPATCHRULEREQUEST'].fields_by_name['name']._loaded_options = None + _globals['_CREATESIPDISPATCHRULEREQUEST'].fields_by_name['name']._serialized_options = b'\030\001' + _globals['_CREATESIPDISPATCHRULEREQUEST'].fields_by_name['metadata']._loaded_options = None + _globals['_CREATESIPDISPATCHRULEREQUEST'].fields_by_name['metadata']._serialized_options = b'\030\001' + _globals['_CREATESIPDISPATCHRULEREQUEST'].fields_by_name['attributes']._loaded_options = None + _globals['_CREATESIPDISPATCHRULEREQUEST'].fields_by_name['attributes']._serialized_options = b'\030\001' + _globals['_CREATESIPDISPATCHRULEREQUEST'].fields_by_name['room_preset']._loaded_options = None + _globals['_CREATESIPDISPATCHRULEREQUEST'].fields_by_name['room_preset']._serialized_options = b'\030\001' + _globals['_CREATESIPDISPATCHRULEREQUEST'].fields_by_name['room_config']._loaded_options = None + _globals['_CREATESIPDISPATCHRULEREQUEST'].fields_by_name['room_config']._serialized_options = b'\030\001' + _globals['_SIPDISPATCHRULEINFO_ATTRIBUTESENTRY']._loaded_options = None _globals['_SIPDISPATCHRULEINFO_ATTRIBUTESENTRY']._serialized_options = b'8\001' - _globals['_SIPOUTBOUNDCONFIG_HEADERSTOATTRIBUTESENTRY']._options = None + _globals['_SIPDISPATCHRULEUPDATE_ATTRIBUTESENTRY']._loaded_options = None + _globals['_SIPDISPATCHRULEUPDATE_ATTRIBUTESENTRY']._serialized_options = b'8\001' + _globals['_SIPOUTBOUNDCONFIG_HEADERSTOATTRIBUTESENTRY']._loaded_options = None _globals['_SIPOUTBOUNDCONFIG_HEADERSTOATTRIBUTESENTRY']._serialized_options = b'8\001' - _globals['_SIPOUTBOUNDCONFIG_ATTRIBUTESTOHEADERSENTRY']._options = None + _globals['_SIPOUTBOUNDCONFIG_ATTRIBUTESTOHEADERSENTRY']._loaded_options = None _globals['_SIPOUTBOUNDCONFIG_ATTRIBUTESTOHEADERSENTRY']._serialized_options = b'8\001' - _globals['_CREATESIPPARTICIPANTREQUEST_PARTICIPANTATTRIBUTESENTRY']._options = None + _globals['_CREATESIPPARTICIPANTREQUEST_PARTICIPANTATTRIBUTESENTRY']._loaded_options = None _globals['_CREATESIPPARTICIPANTREQUEST_PARTICIPANTATTRIBUTESENTRY']._serialized_options = b'8\001' - _globals['_CREATESIPPARTICIPANTREQUEST_HEADERSENTRY']._options = None + _globals['_CREATESIPPARTICIPANTREQUEST_HEADERSENTRY']._loaded_options = None _globals['_CREATESIPPARTICIPANTREQUEST_HEADERSENTRY']._serialized_options = b'8\001' - _globals['_CREATESIPPARTICIPANTREQUEST'].fields_by_name['play_ringtone']._options = None + _globals['_CREATESIPPARTICIPANTREQUEST'].fields_by_name['play_ringtone']._loaded_options = None _globals['_CREATESIPPARTICIPANTREQUEST'].fields_by_name['play_ringtone']._serialized_options = b'\030\001' - _globals['_TRANSFERSIPPARTICIPANTREQUEST_HEADERSENTRY']._options = None + _globals['_TRANSFERSIPPARTICIPANTREQUEST_HEADERSENTRY']._loaded_options = None _globals['_TRANSFERSIPPARTICIPANTREQUEST_HEADERSENTRY']._serialized_options = b'8\001' - _globals['_SIPCALLINFO_PARTICIPANTATTRIBUTESENTRY']._options = None + _globals['_SIPCALLINFO_PARTICIPANTATTRIBUTESENTRY']._loaded_options = None _globals['_SIPCALLINFO_PARTICIPANTATTRIBUTESENTRY']._serialized_options = b'8\001' - _globals['_SIPCALLINFO'].fields_by_name['created_at']._options = None + _globals['_SIPCALLINFO'].fields_by_name['created_at']._loaded_options = None _globals['_SIPCALLINFO'].fields_by_name['created_at']._serialized_options = b'\030\001' - _globals['_SIPCALLINFO'].fields_by_name['started_at']._options = None + _globals['_SIPCALLINFO'].fields_by_name['started_at']._loaded_options = None _globals['_SIPCALLINFO'].fields_by_name['started_at']._serialized_options = b'\030\001' - _globals['_SIPCALLINFO'].fields_by_name['ended_at']._options = None + _globals['_SIPCALLINFO'].fields_by_name['ended_at']._loaded_options = None _globals['_SIPCALLINFO'].fields_by_name['ended_at']._serialized_options = b'\030\001' - _globals['_SIP'].methods_by_name['ListSIPTrunk']._options = None + _globals['_SIP'].methods_by_name['ListSIPTrunk']._loaded_options = None _globals['_SIP'].methods_by_name['ListSIPTrunk']._serialized_options = b'\210\002\001' - _globals['_SIPSTATUSCODE']._serialized_start=7546 - _globals['_SIPSTATUSCODE']._serialized_end=9193 - _globals['_SIPTRANSPORT']._serialized_start=9195 - _globals['_SIPTRANSPORT']._serialized_end=9302 - _globals['_SIPHEADEROPTIONS']._serialized_start=9304 - _globals['_SIPHEADEROPTIONS']._serialized_end=9382 - _globals['_SIPMEDIAENCRYPTION']._serialized_start=9384 - _globals['_SIPMEDIAENCRYPTION']._serialized_end=9495 - _globals['_SIPCALLSTATUS']._serialized_start=9497 - _globals['_SIPCALLSTATUS']._serialized_end=9616 - _globals['_SIPFEATURE']._serialized_start=9618 - _globals['_SIPFEATURE']._serialized_end=9659 - _globals['_SIPCALLDIRECTION']._serialized_start=9661 - _globals['_SIPCALLDIRECTION']._serialized_end=9731 + _globals['_SIPSTATUSCODE']._serialized_start=9057 + _globals['_SIPSTATUSCODE']._serialized_end=10704 + _globals['_SIPTRANSPORT']._serialized_start=10706 + _globals['_SIPTRANSPORT']._serialized_end=10813 + _globals['_SIPHEADEROPTIONS']._serialized_start=10815 + _globals['_SIPHEADEROPTIONS']._serialized_end=10893 + _globals['_SIPMEDIAENCRYPTION']._serialized_start=10895 + _globals['_SIPMEDIAENCRYPTION']._serialized_end=11006 + _globals['_SIPCALLSTATUS']._serialized_start=11008 + _globals['_SIPCALLSTATUS']._serialized_end=11127 + _globals['_SIPFEATURE']._serialized_start=11129 + _globals['_SIPFEATURE']._serialized_end=11170 + _globals['_SIPCALLDIRECTION']._serialized_start=11172 + _globals['_SIPCALLDIRECTION']._serialized_end=11242 _globals['_SIPSTATUS']._serialized_start=133 _globals['_SIPSTATUS']._serialized_end=198 _globals['_CREATESIPTRUNKREQUEST']._serialized_start=201 @@ -100,92 +130,106 @@ _globals['_SIPTRUNKINFO_TRUNKKIND']._serialized_end=978 _globals['_CREATESIPINBOUNDTRUNKREQUEST']._serialized_start=984 _globals['_CREATESIPINBOUNDTRUNKREQUEST']._serialized_end=1059 - _globals['_SIPINBOUNDTRUNKINFO']._serialized_start=1062 - _globals['_SIPINBOUNDTRUNKINFO']._serialized_end=1888 - _globals['_SIPINBOUNDTRUNKINFO_HEADERSENTRY']._serialized_start=1722 - _globals['_SIPINBOUNDTRUNKINFO_HEADERSENTRY']._serialized_end=1768 - _globals['_SIPINBOUNDTRUNKINFO_HEADERSTOATTRIBUTESENTRY']._serialized_start=1770 - _globals['_SIPINBOUNDTRUNKINFO_HEADERSTOATTRIBUTESENTRY']._serialized_end=1828 - _globals['_SIPINBOUNDTRUNKINFO_ATTRIBUTESTOHEADERSENTRY']._serialized_start=1830 - _globals['_SIPINBOUNDTRUNKINFO_ATTRIBUTESTOHEADERSENTRY']._serialized_end=1888 - _globals['_CREATESIPOUTBOUNDTRUNKREQUEST']._serialized_start=1890 - _globals['_CREATESIPOUTBOUNDTRUNKREQUEST']._serialized_end=1967 - _globals['_SIPOUTBOUNDTRUNKINFO']._serialized_start=1970 - _globals['_SIPOUTBOUNDTRUNKINFO']._serialized_end=2678 - _globals['_SIPOUTBOUNDTRUNKINFO_HEADERSENTRY']._serialized_start=1722 - _globals['_SIPOUTBOUNDTRUNKINFO_HEADERSENTRY']._serialized_end=1768 - _globals['_SIPOUTBOUNDTRUNKINFO_HEADERSTOATTRIBUTESENTRY']._serialized_start=1770 - _globals['_SIPOUTBOUNDTRUNKINFO_HEADERSTOATTRIBUTESENTRY']._serialized_end=1828 - _globals['_SIPOUTBOUNDTRUNKINFO_ATTRIBUTESTOHEADERSENTRY']._serialized_start=1830 - _globals['_SIPOUTBOUNDTRUNKINFO_ATTRIBUTESTOHEADERSENTRY']._serialized_end=1888 - _globals['_GETSIPINBOUNDTRUNKREQUEST']._serialized_start=2680 - _globals['_GETSIPINBOUNDTRUNKREQUEST']._serialized_end=2729 - _globals['_GETSIPINBOUNDTRUNKRESPONSE']._serialized_start=2731 - _globals['_GETSIPINBOUNDTRUNKRESPONSE']._serialized_end=2804 - _globals['_GETSIPOUTBOUNDTRUNKREQUEST']._serialized_start=2806 - _globals['_GETSIPOUTBOUNDTRUNKREQUEST']._serialized_end=2856 - _globals['_GETSIPOUTBOUNDTRUNKRESPONSE']._serialized_start=2858 - _globals['_GETSIPOUTBOUNDTRUNKRESPONSE']._serialized_end=2933 - _globals['_LISTSIPTRUNKREQUEST']._serialized_start=2935 - _globals['_LISTSIPTRUNKREQUEST']._serialized_end=2995 - _globals['_LISTSIPTRUNKRESPONSE']._serialized_start=2997 - _globals['_LISTSIPTRUNKRESPONSE']._serialized_end=3061 - _globals['_LISTSIPINBOUNDTRUNKREQUEST']._serialized_start=3063 - _globals['_LISTSIPINBOUNDTRUNKREQUEST']._serialized_end=3162 - _globals['_LISTSIPINBOUNDTRUNKRESPONSE']._serialized_start=3164 - _globals['_LISTSIPINBOUNDTRUNKRESPONSE']._serialized_end=3238 - _globals['_LISTSIPOUTBOUNDTRUNKREQUEST']._serialized_start=3240 - _globals['_LISTSIPOUTBOUNDTRUNKREQUEST']._serialized_end=3340 - _globals['_LISTSIPOUTBOUNDTRUNKRESPONSE']._serialized_start=3342 - _globals['_LISTSIPOUTBOUNDTRUNKRESPONSE']._serialized_end=3418 - _globals['_DELETESIPTRUNKREQUEST']._serialized_start=3420 - _globals['_DELETESIPTRUNKREQUEST']._serialized_end=3465 - _globals['_SIPDISPATCHRULEDIRECT']._serialized_start=3467 - _globals['_SIPDISPATCHRULEDIRECT']._serialized_end=3522 - _globals['_SIPDISPATCHRULEINDIVIDUAL']._serialized_start=3524 - _globals['_SIPDISPATCHRULEINDIVIDUAL']._serialized_end=3585 - _globals['_SIPDISPATCHRULECALLEE']._serialized_start=3587 - _globals['_SIPDISPATCHRULECALLEE']._serialized_end=3663 - _globals['_SIPDISPATCHRULE']._serialized_start=3666 - _globals['_SIPDISPATCHRULE']._serialized_end=3891 - _globals['_CREATESIPDISPATCHRULEREQUEST']._serialized_start=3894 - _globals['_CREATESIPDISPATCHRULEREQUEST']._serialized_end=4263 - _globals['_CREATESIPDISPATCHRULEREQUEST_ATTRIBUTESENTRY']._serialized_start=4214 - _globals['_CREATESIPDISPATCHRULEREQUEST_ATTRIBUTESENTRY']._serialized_end=4263 - _globals['_SIPDISPATCHRULEINFO']._serialized_start=4266 - _globals['_SIPDISPATCHRULEINFO']._serialized_end=4725 - _globals['_SIPDISPATCHRULEINFO_ATTRIBUTESENTRY']._serialized_start=4214 - _globals['_SIPDISPATCHRULEINFO_ATTRIBUTESENTRY']._serialized_end=4263 - _globals['_LISTSIPDISPATCHRULEREQUEST']._serialized_start=4727 - _globals['_LISTSIPDISPATCHRULEREQUEST']._serialized_end=4836 - _globals['_LISTSIPDISPATCHRULERESPONSE']._serialized_start=4838 - _globals['_LISTSIPDISPATCHRULERESPONSE']._serialized_end=4912 - _globals['_DELETESIPDISPATCHRULEREQUEST']._serialized_start=4914 - _globals['_DELETESIPDISPATCHRULEREQUEST']._serialized_end=4974 - _globals['_SIPOUTBOUNDCONFIG']._serialized_start=4977 - _globals['_SIPOUTBOUNDCONFIG']._serialized_end=5390 - _globals['_SIPOUTBOUNDCONFIG_HEADERSTOATTRIBUTESENTRY']._serialized_start=1770 - _globals['_SIPOUTBOUNDCONFIG_HEADERSTOATTRIBUTESENTRY']._serialized_end=1828 - _globals['_SIPOUTBOUNDCONFIG_ATTRIBUTESTOHEADERSENTRY']._serialized_start=1830 - _globals['_SIPOUTBOUNDCONFIG_ATTRIBUTESTOHEADERSENTRY']._serialized_end=1888 - _globals['_CREATESIPPARTICIPANTREQUEST']._serialized_start=5393 - _globals['_CREATESIPPARTICIPANTREQUEST']._serialized_end=6264 - _globals['_CREATESIPPARTICIPANTREQUEST_PARTICIPANTATTRIBUTESENTRY']._serialized_start=6156 - _globals['_CREATESIPPARTICIPANTREQUEST_PARTICIPANTATTRIBUTESENTRY']._serialized_end=6216 - _globals['_CREATESIPPARTICIPANTREQUEST_HEADERSENTRY']._serialized_start=1722 - _globals['_CREATESIPPARTICIPANTREQUEST_HEADERSENTRY']._serialized_end=1768 - _globals['_SIPPARTICIPANTINFO']._serialized_start=6266 - _globals['_SIPPARTICIPANTINFO']._serialized_end=6380 - _globals['_TRANSFERSIPPARTICIPANTREQUEST']._serialized_start=6383 - _globals['_TRANSFERSIPPARTICIPANTREQUEST']._serialized_end=6625 - _globals['_TRANSFERSIPPARTICIPANTREQUEST_HEADERSENTRY']._serialized_start=1722 - _globals['_TRANSFERSIPPARTICIPANTREQUEST_HEADERSENTRY']._serialized_end=1768 - _globals['_SIPCALLINFO']._serialized_start=6628 - _globals['_SIPCALLINFO']._serialized_end=7437 - _globals['_SIPCALLINFO_PARTICIPANTATTRIBUTESENTRY']._serialized_start=6156 - _globals['_SIPCALLINFO_PARTICIPANTATTRIBUTESENTRY']._serialized_end=6216 - _globals['_SIPURI']._serialized_start=7439 - _globals['_SIPURI']._serialized_end=7543 - _globals['_SIP']._serialized_start=9734 - _globals['_SIP']._serialized_end=10944 + _globals['_UPDATESIPINBOUNDTRUNKREQUEST']._serialized_start=1062 + _globals['_UPDATESIPINBOUNDTRUNKREQUEST']._serialized_end=1223 + _globals['_SIPINBOUNDTRUNKINFO']._serialized_start=1226 + _globals['_SIPINBOUNDTRUNKINFO']._serialized_end=2052 + _globals['_SIPINBOUNDTRUNKINFO_HEADERSENTRY']._serialized_start=1886 + _globals['_SIPINBOUNDTRUNKINFO_HEADERSENTRY']._serialized_end=1932 + _globals['_SIPINBOUNDTRUNKINFO_HEADERSTOATTRIBUTESENTRY']._serialized_start=1934 + _globals['_SIPINBOUNDTRUNKINFO_HEADERSTOATTRIBUTESENTRY']._serialized_end=1992 + _globals['_SIPINBOUNDTRUNKINFO_ATTRIBUTESTOHEADERSENTRY']._serialized_start=1994 + _globals['_SIPINBOUNDTRUNKINFO_ATTRIBUTESTOHEADERSENTRY']._serialized_end=2052 + _globals['_SIPINBOUNDTRUNKUPDATE']._serialized_start=2055 + _globals['_SIPINBOUNDTRUNKUPDATE']._serialized_end=2366 + _globals['_CREATESIPOUTBOUNDTRUNKREQUEST']._serialized_start=2368 + _globals['_CREATESIPOUTBOUNDTRUNKREQUEST']._serialized_end=2445 + _globals['_UPDATESIPOUTBOUNDTRUNKREQUEST']._serialized_start=2448 + _globals['_UPDATESIPOUTBOUNDTRUNKREQUEST']._serialized_end=2612 + _globals['_SIPOUTBOUNDTRUNKINFO']._serialized_start=2615 + _globals['_SIPOUTBOUNDTRUNKINFO']._serialized_end=3323 + _globals['_SIPOUTBOUNDTRUNKINFO_HEADERSENTRY']._serialized_start=1886 + _globals['_SIPOUTBOUNDTRUNKINFO_HEADERSENTRY']._serialized_end=1932 + _globals['_SIPOUTBOUNDTRUNKINFO_HEADERSTOATTRIBUTESENTRY']._serialized_start=1934 + _globals['_SIPOUTBOUNDTRUNKINFO_HEADERSTOATTRIBUTESENTRY']._serialized_end=1992 + _globals['_SIPOUTBOUNDTRUNKINFO_ATTRIBUTESTOHEADERSENTRY']._serialized_start=1994 + _globals['_SIPOUTBOUNDTRUNKINFO_ATTRIBUTESTOHEADERSENTRY']._serialized_end=2052 + _globals['_SIPOUTBOUNDTRUNKUPDATE']._serialized_start=3326 + _globals['_SIPOUTBOUNDTRUNKUPDATE']._serialized_end=3639 + _globals['_GETSIPINBOUNDTRUNKREQUEST']._serialized_start=3641 + _globals['_GETSIPINBOUNDTRUNKREQUEST']._serialized_end=3690 + _globals['_GETSIPINBOUNDTRUNKRESPONSE']._serialized_start=3692 + _globals['_GETSIPINBOUNDTRUNKRESPONSE']._serialized_end=3765 + _globals['_GETSIPOUTBOUNDTRUNKREQUEST']._serialized_start=3767 + _globals['_GETSIPOUTBOUNDTRUNKREQUEST']._serialized_end=3817 + _globals['_GETSIPOUTBOUNDTRUNKRESPONSE']._serialized_start=3819 + _globals['_GETSIPOUTBOUNDTRUNKRESPONSE']._serialized_end=3894 + _globals['_LISTSIPTRUNKREQUEST']._serialized_start=3896 + _globals['_LISTSIPTRUNKREQUEST']._serialized_end=3956 + _globals['_LISTSIPTRUNKRESPONSE']._serialized_start=3958 + _globals['_LISTSIPTRUNKRESPONSE']._serialized_end=4022 + _globals['_LISTSIPINBOUNDTRUNKREQUEST']._serialized_start=4024 + _globals['_LISTSIPINBOUNDTRUNKREQUEST']._serialized_end=4123 + _globals['_LISTSIPINBOUNDTRUNKRESPONSE']._serialized_start=4125 + _globals['_LISTSIPINBOUNDTRUNKRESPONSE']._serialized_end=4199 + _globals['_LISTSIPOUTBOUNDTRUNKREQUEST']._serialized_start=4201 + _globals['_LISTSIPOUTBOUNDTRUNKREQUEST']._serialized_end=4301 + _globals['_LISTSIPOUTBOUNDTRUNKRESPONSE']._serialized_start=4303 + _globals['_LISTSIPOUTBOUNDTRUNKRESPONSE']._serialized_end=4379 + _globals['_DELETESIPTRUNKREQUEST']._serialized_start=4381 + _globals['_DELETESIPTRUNKREQUEST']._serialized_end=4426 + _globals['_SIPDISPATCHRULEDIRECT']._serialized_start=4428 + _globals['_SIPDISPATCHRULEDIRECT']._serialized_end=4483 + _globals['_SIPDISPATCHRULEINDIVIDUAL']._serialized_start=4485 + _globals['_SIPDISPATCHRULEINDIVIDUAL']._serialized_end=4546 + _globals['_SIPDISPATCHRULECALLEE']._serialized_start=4548 + _globals['_SIPDISPATCHRULECALLEE']._serialized_end=4624 + _globals['_SIPDISPATCHRULE']._serialized_start=4627 + _globals['_SIPDISPATCHRULE']._serialized_end=4852 + _globals['_CREATESIPDISPATCHRULEREQUEST']._serialized_start=4855 + _globals['_CREATESIPDISPATCHRULEREQUEST']._serialized_end=5313 + _globals['_CREATESIPDISPATCHRULEREQUEST_ATTRIBUTESENTRY']._serialized_start=5264 + _globals['_CREATESIPDISPATCHRULEREQUEST_ATTRIBUTESENTRY']._serialized_end=5313 + _globals['_UPDATESIPDISPATCHRULEREQUEST']._serialized_start=5316 + _globals['_UPDATESIPDISPATCHRULEREQUEST']._serialized_end=5485 + _globals['_SIPDISPATCHRULEINFO']._serialized_start=5488 + _globals['_SIPDISPATCHRULEINFO']._serialized_end=5947 + _globals['_SIPDISPATCHRULEINFO_ATTRIBUTESENTRY']._serialized_start=5264 + _globals['_SIPDISPATCHRULEINFO_ATTRIBUTESENTRY']._serialized_end=5313 + _globals['_SIPDISPATCHRULEUPDATE']._serialized_start=5950 + _globals['_SIPDISPATCHRULEUPDATE']._serialized_end=6236 + _globals['_SIPDISPATCHRULEUPDATE_ATTRIBUTESENTRY']._serialized_start=5264 + _globals['_SIPDISPATCHRULEUPDATE_ATTRIBUTESENTRY']._serialized_end=5313 + _globals['_LISTSIPDISPATCHRULEREQUEST']._serialized_start=6238 + _globals['_LISTSIPDISPATCHRULEREQUEST']._serialized_end=6347 + _globals['_LISTSIPDISPATCHRULERESPONSE']._serialized_start=6349 + _globals['_LISTSIPDISPATCHRULERESPONSE']._serialized_end=6423 + _globals['_DELETESIPDISPATCHRULEREQUEST']._serialized_start=6425 + _globals['_DELETESIPDISPATCHRULEREQUEST']._serialized_end=6485 + _globals['_SIPOUTBOUNDCONFIG']._serialized_start=6488 + _globals['_SIPOUTBOUNDCONFIG']._serialized_end=6901 + _globals['_SIPOUTBOUNDCONFIG_HEADERSTOATTRIBUTESENTRY']._serialized_start=1934 + _globals['_SIPOUTBOUNDCONFIG_HEADERSTOATTRIBUTESENTRY']._serialized_end=1992 + _globals['_SIPOUTBOUNDCONFIG_ATTRIBUTESTOHEADERSENTRY']._serialized_start=1994 + _globals['_SIPOUTBOUNDCONFIG_ATTRIBUTESTOHEADERSENTRY']._serialized_end=2052 + _globals['_CREATESIPPARTICIPANTREQUEST']._serialized_start=6904 + _globals['_CREATESIPPARTICIPANTREQUEST']._serialized_end=7775 + _globals['_CREATESIPPARTICIPANTREQUEST_PARTICIPANTATTRIBUTESENTRY']._serialized_start=7667 + _globals['_CREATESIPPARTICIPANTREQUEST_PARTICIPANTATTRIBUTESENTRY']._serialized_end=7727 + _globals['_CREATESIPPARTICIPANTREQUEST_HEADERSENTRY']._serialized_start=1886 + _globals['_CREATESIPPARTICIPANTREQUEST_HEADERSENTRY']._serialized_end=1932 + _globals['_SIPPARTICIPANTINFO']._serialized_start=7777 + _globals['_SIPPARTICIPANTINFO']._serialized_end=7891 + _globals['_TRANSFERSIPPARTICIPANTREQUEST']._serialized_start=7894 + _globals['_TRANSFERSIPPARTICIPANTREQUEST']._serialized_end=8136 + _globals['_TRANSFERSIPPARTICIPANTREQUEST_HEADERSENTRY']._serialized_start=1886 + _globals['_TRANSFERSIPPARTICIPANTREQUEST_HEADERSENTRY']._serialized_end=1932 + _globals['_SIPCALLINFO']._serialized_start=8139 + _globals['_SIPCALLINFO']._serialized_end=8948 + _globals['_SIPCALLINFO_PARTICIPANTATTRIBUTESENTRY']._serialized_start=7667 + _globals['_SIPCALLINFO_PARTICIPANTATTRIBUTESENTRY']._serialized_end=7727 + _globals['_SIPURI']._serialized_start=8950 + _globals['_SIPURI']._serialized_end=9054 + _globals['_SIP']._serialized_start=11245 + _globals['_SIP']._serialized_end=12740 # @@protoc_insertion_point(module_scope) diff --git a/livekit-protocol/livekit/protocol/sip.pyi b/livekit-protocol/livekit/protocol/sip.pyi index 26e676fb..0da9e629 100644 --- a/livekit-protocol/livekit/protocol/sip.pyi +++ b/livekit-protocol/livekit/protocol/sip.pyi @@ -249,6 +249,16 @@ class CreateSIPInboundTrunkRequest(_message.Message): trunk: SIPInboundTrunkInfo def __init__(self, trunk: _Optional[_Union[SIPInboundTrunkInfo, _Mapping]] = ...) -> None: ... +class UpdateSIPInboundTrunkRequest(_message.Message): + __slots__ = ("sip_trunk_id", "replace", "update") + SIP_TRUNK_ID_FIELD_NUMBER: _ClassVar[int] + REPLACE_FIELD_NUMBER: _ClassVar[int] + UPDATE_FIELD_NUMBER: _ClassVar[int] + sip_trunk_id: str + replace: SIPInboundTrunkInfo + update: SIPInboundTrunkUpdate + def __init__(self, sip_trunk_id: _Optional[str] = ..., replace: _Optional[_Union[SIPInboundTrunkInfo, _Mapping]] = ..., update: _Optional[_Union[SIPInboundTrunkUpdate, _Mapping]] = ...) -> None: ... + class SIPInboundTrunkInfo(_message.Message): __slots__ = ("sip_trunk_id", "name", "metadata", "numbers", "allowed_addresses", "allowed_numbers", "auth_username", "auth_password", "headers", "headers_to_attributes", "attributes_to_headers", "include_headers", "ringing_timeout", "max_call_duration", "krisp_enabled", "media_encryption") class HeadersEntry(_message.Message): @@ -306,12 +316,40 @@ class SIPInboundTrunkInfo(_message.Message): media_encryption: SIPMediaEncryption def __init__(self, sip_trunk_id: _Optional[str] = ..., name: _Optional[str] = ..., metadata: _Optional[str] = ..., numbers: _Optional[_Iterable[str]] = ..., allowed_addresses: _Optional[_Iterable[str]] = ..., allowed_numbers: _Optional[_Iterable[str]] = ..., auth_username: _Optional[str] = ..., auth_password: _Optional[str] = ..., headers: _Optional[_Mapping[str, str]] = ..., headers_to_attributes: _Optional[_Mapping[str, str]] = ..., attributes_to_headers: _Optional[_Mapping[str, str]] = ..., include_headers: _Optional[_Union[SIPHeaderOptions, str]] = ..., ringing_timeout: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ..., max_call_duration: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ..., krisp_enabled: bool = ..., media_encryption: _Optional[_Union[SIPMediaEncryption, str]] = ...) -> None: ... +class SIPInboundTrunkUpdate(_message.Message): + __slots__ = ("numbers", "allowed_addresses", "allowed_numbers", "auth_username", "auth_password", "name", "metadata") + NUMBERS_FIELD_NUMBER: _ClassVar[int] + ALLOWED_ADDRESSES_FIELD_NUMBER: _ClassVar[int] + ALLOWED_NUMBERS_FIELD_NUMBER: _ClassVar[int] + AUTH_USERNAME_FIELD_NUMBER: _ClassVar[int] + AUTH_PASSWORD_FIELD_NUMBER: _ClassVar[int] + NAME_FIELD_NUMBER: _ClassVar[int] + METADATA_FIELD_NUMBER: _ClassVar[int] + numbers: _models.ListUpdate + allowed_addresses: _models.ListUpdate + allowed_numbers: _models.ListUpdate + auth_username: str + auth_password: str + name: str + metadata: str + def __init__(self, numbers: _Optional[_Union[_models.ListUpdate, _Mapping]] = ..., allowed_addresses: _Optional[_Union[_models.ListUpdate, _Mapping]] = ..., allowed_numbers: _Optional[_Union[_models.ListUpdate, _Mapping]] = ..., auth_username: _Optional[str] = ..., auth_password: _Optional[str] = ..., name: _Optional[str] = ..., metadata: _Optional[str] = ...) -> None: ... + class CreateSIPOutboundTrunkRequest(_message.Message): __slots__ = ("trunk",) TRUNK_FIELD_NUMBER: _ClassVar[int] trunk: SIPOutboundTrunkInfo def __init__(self, trunk: _Optional[_Union[SIPOutboundTrunkInfo, _Mapping]] = ...) -> None: ... +class UpdateSIPOutboundTrunkRequest(_message.Message): + __slots__ = ("sip_trunk_id", "replace", "update") + SIP_TRUNK_ID_FIELD_NUMBER: _ClassVar[int] + REPLACE_FIELD_NUMBER: _ClassVar[int] + UPDATE_FIELD_NUMBER: _ClassVar[int] + sip_trunk_id: str + replace: SIPOutboundTrunkInfo + update: SIPOutboundTrunkUpdate + def __init__(self, sip_trunk_id: _Optional[str] = ..., replace: _Optional[_Union[SIPOutboundTrunkInfo, _Mapping]] = ..., update: _Optional[_Union[SIPOutboundTrunkUpdate, _Mapping]] = ...) -> None: ... + class SIPOutboundTrunkInfo(_message.Message): __slots__ = ("sip_trunk_id", "name", "metadata", "address", "transport", "numbers", "auth_username", "auth_password", "headers", "headers_to_attributes", "attributes_to_headers", "include_headers", "media_encryption") class HeadersEntry(_message.Message): @@ -363,6 +401,24 @@ class SIPOutboundTrunkInfo(_message.Message): media_encryption: SIPMediaEncryption def __init__(self, sip_trunk_id: _Optional[str] = ..., name: _Optional[str] = ..., metadata: _Optional[str] = ..., address: _Optional[str] = ..., transport: _Optional[_Union[SIPTransport, str]] = ..., numbers: _Optional[_Iterable[str]] = ..., auth_username: _Optional[str] = ..., auth_password: _Optional[str] = ..., headers: _Optional[_Mapping[str, str]] = ..., headers_to_attributes: _Optional[_Mapping[str, str]] = ..., attributes_to_headers: _Optional[_Mapping[str, str]] = ..., include_headers: _Optional[_Union[SIPHeaderOptions, str]] = ..., media_encryption: _Optional[_Union[SIPMediaEncryption, str]] = ...) -> None: ... +class SIPOutboundTrunkUpdate(_message.Message): + __slots__ = ("address", "transport", "numbers", "auth_username", "auth_password", "name", "metadata") + ADDRESS_FIELD_NUMBER: _ClassVar[int] + TRANSPORT_FIELD_NUMBER: _ClassVar[int] + NUMBERS_FIELD_NUMBER: _ClassVar[int] + AUTH_USERNAME_FIELD_NUMBER: _ClassVar[int] + AUTH_PASSWORD_FIELD_NUMBER: _ClassVar[int] + NAME_FIELD_NUMBER: _ClassVar[int] + METADATA_FIELD_NUMBER: _ClassVar[int] + address: str + transport: SIPTransport + numbers: _models.ListUpdate + auth_username: str + auth_password: str + name: str + metadata: str + def __init__(self, address: _Optional[str] = ..., transport: _Optional[_Union[SIPTransport, str]] = ..., numbers: _Optional[_Union[_models.ListUpdate, _Mapping]] = ..., auth_username: _Optional[str] = ..., auth_password: _Optional[str] = ..., name: _Optional[str] = ..., metadata: _Optional[str] = ...) -> None: ... + class GetSIPInboundTrunkRequest(_message.Message): __slots__ = ("sip_trunk_id",) SIP_TRUNK_ID_FIELD_NUMBER: _ClassVar[int] @@ -474,7 +530,7 @@ class SIPDispatchRule(_message.Message): def __init__(self, dispatch_rule_direct: _Optional[_Union[SIPDispatchRuleDirect, _Mapping]] = ..., dispatch_rule_individual: _Optional[_Union[SIPDispatchRuleIndividual, _Mapping]] = ..., dispatch_rule_callee: _Optional[_Union[SIPDispatchRuleCallee, _Mapping]] = ...) -> None: ... class CreateSIPDispatchRuleRequest(_message.Message): - __slots__ = ("rule", "trunk_ids", "hide_phone_number", "inbound_numbers", "name", "metadata", "attributes", "room_preset", "room_config") + __slots__ = ("dispatch_rule", "rule", "trunk_ids", "hide_phone_number", "inbound_numbers", "name", "metadata", "attributes", "room_preset", "room_config") class AttributesEntry(_message.Message): __slots__ = ("key", "value") KEY_FIELD_NUMBER: _ClassVar[int] @@ -482,6 +538,7 @@ class CreateSIPDispatchRuleRequest(_message.Message): key: str value: str def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... + DISPATCH_RULE_FIELD_NUMBER: _ClassVar[int] RULE_FIELD_NUMBER: _ClassVar[int] TRUNK_IDS_FIELD_NUMBER: _ClassVar[int] HIDE_PHONE_NUMBER_FIELD_NUMBER: _ClassVar[int] @@ -491,6 +548,7 @@ class CreateSIPDispatchRuleRequest(_message.Message): ATTRIBUTES_FIELD_NUMBER: _ClassVar[int] ROOM_PRESET_FIELD_NUMBER: _ClassVar[int] ROOM_CONFIG_FIELD_NUMBER: _ClassVar[int] + dispatch_rule: SIPDispatchRuleInfo rule: SIPDispatchRule trunk_ids: _containers.RepeatedScalarFieldContainer[str] hide_phone_number: bool @@ -500,7 +558,17 @@ class CreateSIPDispatchRuleRequest(_message.Message): attributes: _containers.ScalarMap[str, str] room_preset: str room_config: _room.RoomConfiguration - def __init__(self, rule: _Optional[_Union[SIPDispatchRule, _Mapping]] = ..., trunk_ids: _Optional[_Iterable[str]] = ..., hide_phone_number: bool = ..., inbound_numbers: _Optional[_Iterable[str]] = ..., name: _Optional[str] = ..., metadata: _Optional[str] = ..., attributes: _Optional[_Mapping[str, str]] = ..., room_preset: _Optional[str] = ..., room_config: _Optional[_Union[_room.RoomConfiguration, _Mapping]] = ...) -> None: ... + def __init__(self, dispatch_rule: _Optional[_Union[SIPDispatchRuleInfo, _Mapping]] = ..., rule: _Optional[_Union[SIPDispatchRule, _Mapping]] = ..., trunk_ids: _Optional[_Iterable[str]] = ..., hide_phone_number: bool = ..., inbound_numbers: _Optional[_Iterable[str]] = ..., name: _Optional[str] = ..., metadata: _Optional[str] = ..., attributes: _Optional[_Mapping[str, str]] = ..., room_preset: _Optional[str] = ..., room_config: _Optional[_Union[_room.RoomConfiguration, _Mapping]] = ...) -> None: ... + +class UpdateSIPDispatchRuleRequest(_message.Message): + __slots__ = ("sip_dispatch_rule_id", "replace", "update") + SIP_DISPATCH_RULE_ID_FIELD_NUMBER: _ClassVar[int] + REPLACE_FIELD_NUMBER: _ClassVar[int] + UPDATE_FIELD_NUMBER: _ClassVar[int] + sip_dispatch_rule_id: str + replace: SIPDispatchRuleInfo + update: SIPDispatchRuleUpdate + def __init__(self, sip_dispatch_rule_id: _Optional[str] = ..., replace: _Optional[_Union[SIPDispatchRuleInfo, _Mapping]] = ..., update: _Optional[_Union[SIPDispatchRuleUpdate, _Mapping]] = ...) -> None: ... class SIPDispatchRuleInfo(_message.Message): __slots__ = ("sip_dispatch_rule_id", "rule", "trunk_ids", "hide_phone_number", "inbound_numbers", "name", "metadata", "attributes", "room_preset", "room_config", "krisp_enabled", "media_encryption") @@ -537,6 +605,27 @@ class SIPDispatchRuleInfo(_message.Message): media_encryption: SIPMediaEncryption def __init__(self, sip_dispatch_rule_id: _Optional[str] = ..., rule: _Optional[_Union[SIPDispatchRule, _Mapping]] = ..., trunk_ids: _Optional[_Iterable[str]] = ..., hide_phone_number: bool = ..., inbound_numbers: _Optional[_Iterable[str]] = ..., name: _Optional[str] = ..., metadata: _Optional[str] = ..., attributes: _Optional[_Mapping[str, str]] = ..., room_preset: _Optional[str] = ..., room_config: _Optional[_Union[_room.RoomConfiguration, _Mapping]] = ..., krisp_enabled: bool = ..., media_encryption: _Optional[_Union[SIPMediaEncryption, str]] = ...) -> None: ... +class SIPDispatchRuleUpdate(_message.Message): + __slots__ = ("trunk_ids", "rule", "name", "metadata", "attributes") + class AttributesEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: str + def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... + TRUNK_IDS_FIELD_NUMBER: _ClassVar[int] + RULE_FIELD_NUMBER: _ClassVar[int] + NAME_FIELD_NUMBER: _ClassVar[int] + METADATA_FIELD_NUMBER: _ClassVar[int] + ATTRIBUTES_FIELD_NUMBER: _ClassVar[int] + trunk_ids: _models.ListUpdate + rule: SIPDispatchRule + name: str + metadata: str + attributes: _containers.ScalarMap[str, str] + def __init__(self, trunk_ids: _Optional[_Union[_models.ListUpdate, _Mapping]] = ..., rule: _Optional[_Union[SIPDispatchRule, _Mapping]] = ..., name: _Optional[str] = ..., metadata: _Optional[str] = ..., attributes: _Optional[_Mapping[str, str]] = ...) -> None: ... + class ListSIPDispatchRuleRequest(_message.Message): __slots__ = ("page", "dispatch_rule_ids", "trunk_ids") PAGE_FIELD_NUMBER: _ClassVar[int] diff --git a/livekit-protocol/livekit/protocol/version.py b/livekit-protocol/livekit/protocol/version.py index a2fecb45..5becc17c 100644 --- a/livekit-protocol/livekit/protocol/version.py +++ b/livekit-protocol/livekit/protocol/version.py @@ -1 +1 @@ -__version__ = "0.9.2" +__version__ = "1.0.0" diff --git a/livekit-protocol/livekit/protocol/webhook.py b/livekit-protocol/livekit/protocol/webhook.py index 127a70fb..a0a5f681 100644 --- a/livekit-protocol/livekit/protocol/webhook.py +++ b/livekit-protocol/livekit/protocol/webhook.py @@ -1,12 +1,22 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE # source: livekit_webhook.proto -# Protobuf Python Version: 4.25.1 +# Protobuf Python Version: 5.29.3 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version from google.protobuf import symbol_database as _symbol_database from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 5, + 29, + 3, + '', + 'livekit_webhook.proto' +) # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() @@ -17,14 +27,16 @@ from . import ingress as _ingress_ -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15livekit_webhook.proto\x12\x07livekit\x1a\x14livekit_models.proto\x1a\x14livekit_egress.proto\x1a\x15livekit_ingress.proto\"\x97\x02\n\x0cWebhookEvent\x12\r\n\x05\x65vent\x18\x01 \x01(\t\x12\x1b\n\x04room\x18\x02 \x01(\x0b\x32\r.livekit.Room\x12-\n\x0bparticipant\x18\x03 \x01(\x0b\x32\x18.livekit.ParticipantInfo\x12(\n\x0b\x65gress_info\x18\t \x01(\x0b\x32\x13.livekit.EgressInfo\x12*\n\x0cingress_info\x18\n \x01(\x0b\x32\x14.livekit.IngressInfo\x12!\n\x05track\x18\x08 \x01(\x0b\x32\x12.livekit.TrackInfo\x12\n\n\x02id\x18\x06 \x01(\t\x12\x12\n\ncreated_at\x18\x07 \x01(\x03\x12\x13\n\x0bnum_dropped\x18\x0b \x01(\x05\x42\x46Z#github.com/livekit/protocol/livekit\xaa\x02\rLiveKit.Proto\xea\x02\x0eLiveKit::Protob\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15livekit_webhook.proto\x12\x07livekit\x1a\x14livekit_models.proto\x1a\x14livekit_egress.proto\x1a\x15livekit_ingress.proto\"\x9b\x02\n\x0cWebhookEvent\x12\r\n\x05\x65vent\x18\x01 \x01(\t\x12\x1b\n\x04room\x18\x02 \x01(\x0b\x32\r.livekit.Room\x12-\n\x0bparticipant\x18\x03 \x01(\x0b\x32\x18.livekit.ParticipantInfo\x12(\n\x0b\x65gress_info\x18\t \x01(\x0b\x32\x13.livekit.EgressInfo\x12*\n\x0cingress_info\x18\n \x01(\x0b\x32\x14.livekit.IngressInfo\x12!\n\x05track\x18\x08 \x01(\x0b\x32\x12.livekit.TrackInfo\x12\n\n\x02id\x18\x06 \x01(\t\x12\x12\n\ncreated_at\x18\x07 \x01(\x03\x12\x17\n\x0bnum_dropped\x18\x0b \x01(\x05\x42\x02\x18\x01\x42\x46Z#github.com/livekit/protocol/livekit\xaa\x02\rLiveKit.Proto\xea\x02\x0eLiveKit::Protob\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'webhook', _globals) -if _descriptor._USE_C_DESCRIPTORS == False: - _globals['DESCRIPTOR']._options = None +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None _globals['DESCRIPTOR']._serialized_options = b'Z#github.com/livekit/protocol/livekit\252\002\rLiveKit.Proto\352\002\016LiveKit::Proto' + _globals['_WEBHOOKEVENT'].fields_by_name['num_dropped']._loaded_options = None + _globals['_WEBHOOKEVENT'].fields_by_name['num_dropped']._serialized_options = b'\030\001' _globals['_WEBHOOKEVENT']._serialized_start=102 - _globals['_WEBHOOKEVENT']._serialized_end=381 + _globals['_WEBHOOKEVENT']._serialized_end=385 # @@protoc_insertion_point(module_scope) diff --git a/livekit-protocol/protocol b/livekit-protocol/protocol index 5f4ba749..395f078b 160000 --- a/livekit-protocol/protocol +++ b/livekit-protocol/protocol @@ -1 +1 @@ -Subproject commit 5f4ba74900fe1eb0e5966242272fd8f5fa4369c1 +Subproject commit 395f078b6e59f59aa9e0af4978d4a730873b4cc3 From 6b727a270ef07f9733e3ca1c9068b33a767f0206 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 30 Mar 2025 07:00:43 +0000 Subject: [PATCH 2/8] generated protobuf --- livekit-protocol/livekit/protocol/agent.py | 20 ++--- .../livekit/protocol/agent_dispatch.py | 16 +--- .../livekit/protocol/analytics.py | 16 +--- livekit-protocol/livekit/protocol/egress.py | 44 ++++------ livekit-protocol/livekit/protocol/ingress.py | 22 ++--- livekit-protocol/livekit/protocol/metrics.py | 16 +--- livekit-protocol/livekit/protocol/models.py | 40 ++++----- livekit-protocol/livekit/protocol/room.py | 20 ++--- livekit-protocol/livekit/protocol/sip.py | 86 ++++++++----------- livekit-protocol/livekit/protocol/webhook.py | 18 +--- 10 files changed, 99 insertions(+), 199 deletions(-) diff --git a/livekit-protocol/livekit/protocol/agent.py b/livekit-protocol/livekit/protocol/agent.py index 920de7dc..3bffaf97 100644 --- a/livekit-protocol/livekit/protocol/agent.py +++ b/livekit-protocol/livekit/protocol/agent.py @@ -1,22 +1,12 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! -# NO CHECKED-IN PROTOBUF GENCODE # source: livekit_agent.proto -# Protobuf Python Version: 5.29.3 +# Protobuf Python Version: 4.25.1 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool -from google.protobuf import runtime_version as _runtime_version from google.protobuf import symbol_database as _symbol_database from google.protobuf.internal import builder as _builder -_runtime_version.ValidateProtobufRuntimeVersion( - _runtime_version.Domain.PUBLIC, - 5, - 29, - 3, - '', - 'livekit_agent.proto' -) # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() @@ -30,12 +20,12 @@ _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'agent', _globals) -if not _descriptor._USE_C_DESCRIPTORS: - _globals['DESCRIPTOR']._loaded_options = None +if _descriptor._USE_C_DESCRIPTORS == False: + _globals['DESCRIPTOR']._options = None _globals['DESCRIPTOR']._serialized_options = b'Z#github.com/livekit/protocol/livekit\252\002\rLiveKit.Proto\352\002\016LiveKit::Proto' - _globals['_JOB'].fields_by_name['namespace']._loaded_options = None + _globals['_JOB'].fields_by_name['namespace']._options = None _globals['_JOB'].fields_by_name['namespace']._serialized_options = b'\030\001' - _globals['_AVAILABILITYRESPONSE_PARTICIPANTATTRIBUTESENTRY']._loaded_options = None + _globals['_AVAILABILITYRESPONSE_PARTICIPANTATTRIBUTESENTRY']._options = None _globals['_AVAILABILITYRESPONSE_PARTICIPANTATTRIBUTESENTRY']._serialized_options = b'8\001' _globals['_JOBTYPE']._serialized_start=2386 _globals['_JOBTYPE']._serialized_end=2446 diff --git a/livekit-protocol/livekit/protocol/agent_dispatch.py b/livekit-protocol/livekit/protocol/agent_dispatch.py index 5a3a9db5..be2384c3 100644 --- a/livekit-protocol/livekit/protocol/agent_dispatch.py +++ b/livekit-protocol/livekit/protocol/agent_dispatch.py @@ -1,22 +1,12 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! -# NO CHECKED-IN PROTOBUF GENCODE # source: livekit_agent_dispatch.proto -# Protobuf Python Version: 5.29.3 +# Protobuf Python Version: 4.25.1 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool -from google.protobuf import runtime_version as _runtime_version from google.protobuf import symbol_database as _symbol_database from google.protobuf.internal import builder as _builder -_runtime_version.ValidateProtobufRuntimeVersion( - _runtime_version.Domain.PUBLIC, - 5, - 29, - 3, - '', - 'livekit_agent_dispatch.proto' -) # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() @@ -30,8 +20,8 @@ _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'agent_dispatch', _globals) -if not _descriptor._USE_C_DESCRIPTORS: - _globals['DESCRIPTOR']._loaded_options = None +if _descriptor._USE_C_DESCRIPTORS == False: + _globals['DESCRIPTOR']._options = None _globals['DESCRIPTOR']._serialized_options = b'Z#github.com/livekit/protocol/livekit\252\002\rLiveKit.Proto\352\002\016LiveKit::Proto' _globals['_CREATEAGENTDISPATCHREQUEST']._serialized_start=62 _globals['_CREATEAGENTDISPATCHREQUEST']._serialized_end=142 diff --git a/livekit-protocol/livekit/protocol/analytics.py b/livekit-protocol/livekit/protocol/analytics.py index 77a22cec..808ccde2 100644 --- a/livekit-protocol/livekit/protocol/analytics.py +++ b/livekit-protocol/livekit/protocol/analytics.py @@ -1,22 +1,12 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! -# NO CHECKED-IN PROTOBUF GENCODE # source: livekit_analytics.proto -# Protobuf Python Version: 5.29.3 +# Protobuf Python Version: 4.25.1 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool -from google.protobuf import runtime_version as _runtime_version from google.protobuf import symbol_database as _symbol_database from google.protobuf.internal import builder as _builder -_runtime_version.ValidateProtobufRuntimeVersion( - _runtime_version.Domain.PUBLIC, - 5, - 29, - 3, - '', - 'livekit_analytics.proto' -) # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() @@ -35,8 +25,8 @@ _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'analytics', _globals) -if not _descriptor._USE_C_DESCRIPTORS: - _globals['DESCRIPTOR']._loaded_options = None +if _descriptor._USE_C_DESCRIPTORS == False: + _globals['DESCRIPTOR']._options = None _globals['DESCRIPTOR']._serialized_options = b'Z#github.com/livekit/protocol/livekit\252\002\rLiveKit.Proto\352\002\016LiveKit::Proto' _globals['_STREAMTYPE']._serialized_start=5232 _globals['_STREAMTYPE']._serialized_end=5274 diff --git a/livekit-protocol/livekit/protocol/egress.py b/livekit-protocol/livekit/protocol/egress.py index 57845d4d..50d9ff1e 100644 --- a/livekit-protocol/livekit/protocol/egress.py +++ b/livekit-protocol/livekit/protocol/egress.py @@ -1,22 +1,12 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! -# NO CHECKED-IN PROTOBUF GENCODE # source: livekit_egress.proto -# Protobuf Python Version: 5.29.3 +# Protobuf Python Version: 4.25.1 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool -from google.protobuf import runtime_version as _runtime_version from google.protobuf import symbol_database as _symbol_database from google.protobuf.internal import builder as _builder -_runtime_version.ValidateProtobufRuntimeVersion( - _runtime_version.Domain.PUBLIC, - 5, - 29, - 3, - '', - 'livekit_egress.proto' -) # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() @@ -30,36 +20,36 @@ _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'egress', _globals) -if not _descriptor._USE_C_DESCRIPTORS: - _globals['DESCRIPTOR']._loaded_options = None +if _descriptor._USE_C_DESCRIPTORS == False: + _globals['DESCRIPTOR']._options = None _globals['DESCRIPTOR']._serialized_options = b'Z#github.com/livekit/protocol/livekit\252\002\rLiveKit.Proto\352\002\016LiveKit::Proto' - _globals['_ROOMCOMPOSITEEGRESSREQUEST'].fields_by_name['file']._loaded_options = None + _globals['_ROOMCOMPOSITEEGRESSREQUEST'].fields_by_name['file']._options = None _globals['_ROOMCOMPOSITEEGRESSREQUEST'].fields_by_name['file']._serialized_options = b'\030\001' - _globals['_ROOMCOMPOSITEEGRESSREQUEST'].fields_by_name['stream']._loaded_options = None + _globals['_ROOMCOMPOSITEEGRESSREQUEST'].fields_by_name['stream']._options = None _globals['_ROOMCOMPOSITEEGRESSREQUEST'].fields_by_name['stream']._serialized_options = b'\030\001' - _globals['_ROOMCOMPOSITEEGRESSREQUEST'].fields_by_name['segments']._loaded_options = None + _globals['_ROOMCOMPOSITEEGRESSREQUEST'].fields_by_name['segments']._options = None _globals['_ROOMCOMPOSITEEGRESSREQUEST'].fields_by_name['segments']._serialized_options = b'\030\001' - _globals['_WEBEGRESSREQUEST'].fields_by_name['file']._loaded_options = None + _globals['_WEBEGRESSREQUEST'].fields_by_name['file']._options = None _globals['_WEBEGRESSREQUEST'].fields_by_name['file']._serialized_options = b'\030\001' - _globals['_WEBEGRESSREQUEST'].fields_by_name['stream']._loaded_options = None + _globals['_WEBEGRESSREQUEST'].fields_by_name['stream']._options = None _globals['_WEBEGRESSREQUEST'].fields_by_name['stream']._serialized_options = b'\030\001' - _globals['_WEBEGRESSREQUEST'].fields_by_name['segments']._loaded_options = None + _globals['_WEBEGRESSREQUEST'].fields_by_name['segments']._options = None _globals['_WEBEGRESSREQUEST'].fields_by_name['segments']._serialized_options = b'\030\001' - _globals['_TRACKCOMPOSITEEGRESSREQUEST'].fields_by_name['file']._loaded_options = None + _globals['_TRACKCOMPOSITEEGRESSREQUEST'].fields_by_name['file']._options = None _globals['_TRACKCOMPOSITEEGRESSREQUEST'].fields_by_name['file']._serialized_options = b'\030\001' - _globals['_TRACKCOMPOSITEEGRESSREQUEST'].fields_by_name['stream']._loaded_options = None + _globals['_TRACKCOMPOSITEEGRESSREQUEST'].fields_by_name['stream']._options = None _globals['_TRACKCOMPOSITEEGRESSREQUEST'].fields_by_name['stream']._serialized_options = b'\030\001' - _globals['_TRACKCOMPOSITEEGRESSREQUEST'].fields_by_name['segments']._loaded_options = None + _globals['_TRACKCOMPOSITEEGRESSREQUEST'].fields_by_name['segments']._options = None _globals['_TRACKCOMPOSITEEGRESSREQUEST'].fields_by_name['segments']._serialized_options = b'\030\001' - _globals['_S3UPLOAD_METADATAENTRY']._loaded_options = None + _globals['_S3UPLOAD_METADATAENTRY']._options = None _globals['_S3UPLOAD_METADATAENTRY']._serialized_options = b'8\001' - _globals['_EGRESSINFO'].fields_by_name['stream']._loaded_options = None + _globals['_EGRESSINFO'].fields_by_name['stream']._options = None _globals['_EGRESSINFO'].fields_by_name['stream']._serialized_options = b'\030\001' - _globals['_EGRESSINFO'].fields_by_name['file']._loaded_options = None + _globals['_EGRESSINFO'].fields_by_name['file']._options = None _globals['_EGRESSINFO'].fields_by_name['file']._serialized_options = b'\030\001' - _globals['_EGRESSINFO'].fields_by_name['segments']._loaded_options = None + _globals['_EGRESSINFO'].fields_by_name['segments']._options = None _globals['_EGRESSINFO'].fields_by_name['segments']._serialized_options = b'\030\001' - _globals['_STREAMINFOLIST']._loaded_options = None + _globals['_STREAMINFOLIST']._options = None _globals['_STREAMINFOLIST']._serialized_options = b'\030\001' _globals['_ENCODEDFILETYPE']._serialized_start=7102 _globals['_ENCODEDFILETYPE']._serialized_end=7159 diff --git a/livekit-protocol/livekit/protocol/ingress.py b/livekit-protocol/livekit/protocol/ingress.py index ef969335..1b15de0e 100644 --- a/livekit-protocol/livekit/protocol/ingress.py +++ b/livekit-protocol/livekit/protocol/ingress.py @@ -1,22 +1,12 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! -# NO CHECKED-IN PROTOBUF GENCODE # source: livekit_ingress.proto -# Protobuf Python Version: 5.29.3 +# Protobuf Python Version: 4.25.1 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool -from google.protobuf import runtime_version as _runtime_version from google.protobuf import symbol_database as _symbol_database from google.protobuf.internal import builder as _builder -_runtime_version.ValidateProtobufRuntimeVersion( - _runtime_version.Domain.PUBLIC, - 5, - 29, - 3, - '', - 'livekit_ingress.proto' -) # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() @@ -30,14 +20,14 @@ _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'ingress', _globals) -if not _descriptor._USE_C_DESCRIPTORS: - _globals['DESCRIPTOR']._loaded_options = None +if _descriptor._USE_C_DESCRIPTORS == False: + _globals['DESCRIPTOR']._options = None _globals['DESCRIPTOR']._serialized_options = b'Z#github.com/livekit/protocol/livekit\252\002\rLiveKit.Proto\352\002\016LiveKit::Proto' - _globals['_CREATEINGRESSREQUEST'].fields_by_name['bypass_transcoding']._loaded_options = None + _globals['_CREATEINGRESSREQUEST'].fields_by_name['bypass_transcoding']._options = None _globals['_CREATEINGRESSREQUEST'].fields_by_name['bypass_transcoding']._serialized_options = b'\030\001' - _globals['_INGRESSINFO'].fields_by_name['bypass_transcoding']._loaded_options = None + _globals['_INGRESSINFO'].fields_by_name['bypass_transcoding']._options = None _globals['_INGRESSINFO'].fields_by_name['bypass_transcoding']._serialized_options = b'\030\001' - _globals['_UPDATEINGRESSREQUEST'].fields_by_name['bypass_transcoding']._loaded_options = None + _globals['_UPDATEINGRESSREQUEST'].fields_by_name['bypass_transcoding']._options = None _globals['_UPDATEINGRESSREQUEST'].fields_by_name['bypass_transcoding']._serialized_options = b'\030\001' _globals['_INGRESSINPUT']._serialized_start=2844 _globals['_INGRESSINPUT']._serialized_end=2905 diff --git a/livekit-protocol/livekit/protocol/metrics.py b/livekit-protocol/livekit/protocol/metrics.py index 33ca09d2..51072648 100644 --- a/livekit-protocol/livekit/protocol/metrics.py +++ b/livekit-protocol/livekit/protocol/metrics.py @@ -1,22 +1,12 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! -# NO CHECKED-IN PROTOBUF GENCODE # source: livekit_metrics.proto -# Protobuf Python Version: 5.29.3 +# Protobuf Python Version: 4.25.1 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool -from google.protobuf import runtime_version as _runtime_version from google.protobuf import symbol_database as _symbol_database from google.protobuf.internal import builder as _builder -_runtime_version.ValidateProtobufRuntimeVersion( - _runtime_version.Domain.PUBLIC, - 5, - 29, - 3, - '', - 'livekit_metrics.proto' -) # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() @@ -30,8 +20,8 @@ _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'metrics', _globals) -if not _descriptor._USE_C_DESCRIPTORS: - _globals['DESCRIPTOR']._loaded_options = None +if _descriptor._USE_C_DESCRIPTORS == False: + _globals['DESCRIPTOR']._options = None _globals['DESCRIPTOR']._serialized_options = b'Z#github.com/livekit/protocol/livekit\252\002\rLiveKit.Proto\352\002\016LiveKit::Proto' _globals['_METRICLABEL']._serialized_start=869 _globals['_METRICLABEL']._serialized_end=1766 diff --git a/livekit-protocol/livekit/protocol/models.py b/livekit-protocol/livekit/protocol/models.py index bdf547ec..53a355a8 100644 --- a/livekit-protocol/livekit/protocol/models.py +++ b/livekit-protocol/livekit/protocol/models.py @@ -1,22 +1,12 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! -# NO CHECKED-IN PROTOBUF GENCODE # source: livekit_models.proto -# Protobuf Python Version: 5.29.3 +# Protobuf Python Version: 4.25.1 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool -from google.protobuf import runtime_version as _runtime_version from google.protobuf import symbol_database as _symbol_database from google.protobuf.internal import builder as _builder -_runtime_version.ValidateProtobufRuntimeVersion( - _runtime_version.Domain.PUBLIC, - 5, - 29, - 3, - '', - 'livekit_models.proto' -) # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() @@ -31,32 +21,32 @@ _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'models', _globals) -if not _descriptor._USE_C_DESCRIPTORS: - _globals['DESCRIPTOR']._loaded_options = None +if _descriptor._USE_C_DESCRIPTORS == False: + _globals['DESCRIPTOR']._options = None _globals['DESCRIPTOR']._serialized_options = b'Z#github.com/livekit/protocol/livekit\252\002\rLiveKit.Proto\352\002\016LiveKit::Proto' - _globals['_PARTICIPANTPERMISSION'].fields_by_name['recorder']._loaded_options = None + _globals['_PARTICIPANTPERMISSION'].fields_by_name['recorder']._options = None _globals['_PARTICIPANTPERMISSION'].fields_by_name['recorder']._serialized_options = b'\030\001' - _globals['_PARTICIPANTPERMISSION'].fields_by_name['agent']._loaded_options = None + _globals['_PARTICIPANTPERMISSION'].fields_by_name['agent']._options = None _globals['_PARTICIPANTPERMISSION'].fields_by_name['agent']._serialized_options = b'\030\001' - _globals['_PARTICIPANTINFO_ATTRIBUTESENTRY']._loaded_options = None + _globals['_PARTICIPANTINFO_ATTRIBUTESENTRY']._options = None _globals['_PARTICIPANTINFO_ATTRIBUTESENTRY']._serialized_options = b'8\001' - _globals['_DATAPACKET'].fields_by_name['kind']._loaded_options = None + _globals['_DATAPACKET'].fields_by_name['kind']._options = None _globals['_DATAPACKET'].fields_by_name['kind']._serialized_options = b'\030\001' - _globals['_DATAPACKET'].fields_by_name['speaker']._loaded_options = None + _globals['_DATAPACKET'].fields_by_name['speaker']._options = None _globals['_DATAPACKET'].fields_by_name['speaker']._serialized_options = b'\030\001' - _globals['_USERPACKET'].fields_by_name['participant_sid']._loaded_options = None + _globals['_USERPACKET'].fields_by_name['participant_sid']._options = None _globals['_USERPACKET'].fields_by_name['participant_sid']._serialized_options = b'\030\001' - _globals['_USERPACKET'].fields_by_name['participant_identity']._loaded_options = None + _globals['_USERPACKET'].fields_by_name['participant_identity']._options = None _globals['_USERPACKET'].fields_by_name['participant_identity']._serialized_options = b'\030\001' - _globals['_USERPACKET'].fields_by_name['destination_sids']._loaded_options = None + _globals['_USERPACKET'].fields_by_name['destination_sids']._options = None _globals['_USERPACKET'].fields_by_name['destination_sids']._serialized_options = b'\030\001' - _globals['_USERPACKET'].fields_by_name['destination_identities']._loaded_options = None + _globals['_USERPACKET'].fields_by_name['destination_identities']._options = None _globals['_USERPACKET'].fields_by_name['destination_identities']._serialized_options = b'\030\001' - _globals['_RTPSTATS_GAPHISTOGRAMENTRY']._loaded_options = None + _globals['_RTPSTATS_GAPHISTOGRAMENTRY']._options = None _globals['_RTPSTATS_GAPHISTOGRAMENTRY']._serialized_options = b'8\001' - _globals['_DATASTREAM_HEADER_ATTRIBUTESENTRY']._loaded_options = None + _globals['_DATASTREAM_HEADER_ATTRIBUTESENTRY']._options = None _globals['_DATASTREAM_HEADER_ATTRIBUTESENTRY']._serialized_options = b'8\001' - _globals['_DATASTREAM_TRAILER_ATTRIBUTESENTRY']._loaded_options = None + _globals['_DATASTREAM_TRAILER_ATTRIBUTESENTRY']._options = None _globals['_DATASTREAM_TRAILER_ATTRIBUTESENTRY']._serialized_options = b'8\001' _globals['_AUDIOCODEC']._serialized_start=8990 _globals['_AUDIOCODEC']._serialized_end=9037 diff --git a/livekit-protocol/livekit/protocol/room.py b/livekit-protocol/livekit/protocol/room.py index 326da652..a161a8da 100644 --- a/livekit-protocol/livekit/protocol/room.py +++ b/livekit-protocol/livekit/protocol/room.py @@ -1,22 +1,12 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! -# NO CHECKED-IN PROTOBUF GENCODE # source: livekit_room.proto -# Protobuf Python Version: 5.29.3 +# Protobuf Python Version: 4.25.1 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool -from google.protobuf import runtime_version as _runtime_version from google.protobuf import symbol_database as _symbol_database from google.protobuf.internal import builder as _builder -_runtime_version.ValidateProtobufRuntimeVersion( - _runtime_version.Domain.PUBLIC, - 5, - 29, - 3, - '', - 'livekit_room.proto' -) # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() @@ -32,12 +22,12 @@ _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'room', _globals) -if not _descriptor._USE_C_DESCRIPTORS: - _globals['DESCRIPTOR']._loaded_options = None +if _descriptor._USE_C_DESCRIPTORS == False: + _globals['DESCRIPTOR']._options = None _globals['DESCRIPTOR']._serialized_options = b'Z#github.com/livekit/protocol/livekit\252\002\rLiveKit.Proto\352\002\016LiveKit::Proto' - _globals['_UPDATEPARTICIPANTREQUEST_ATTRIBUTESENTRY']._loaded_options = None + _globals['_UPDATEPARTICIPANTREQUEST_ATTRIBUTESENTRY']._options = None _globals['_UPDATEPARTICIPANTREQUEST_ATTRIBUTESENTRY']._serialized_options = b'8\001' - _globals['_SENDDATAREQUEST'].fields_by_name['destination_sids']._loaded_options = None + _globals['_SENDDATAREQUEST'].fields_by_name['destination_sids']._options = None _globals['_SENDDATAREQUEST'].fields_by_name['destination_sids']._serialized_options = b'\030\001' _globals['_CREATEROOMREQUEST']._serialized_start=106 _globals['_CREATEROOMREQUEST']._serialized_end=452 diff --git a/livekit-protocol/livekit/protocol/sip.py b/livekit-protocol/livekit/protocol/sip.py index 13adf7b9..b4f99d0f 100644 --- a/livekit-protocol/livekit/protocol/sip.py +++ b/livekit-protocol/livekit/protocol/sip.py @@ -1,22 +1,12 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! -# NO CHECKED-IN PROTOBUF GENCODE # source: livekit_sip.proto -# Protobuf Python Version: 5.29.3 +# Protobuf Python Version: 4.25.1 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool -from google.protobuf import runtime_version as _runtime_version from google.protobuf import symbol_database as _symbol_database from google.protobuf.internal import builder as _builder -_runtime_version.ValidateProtobufRuntimeVersion( - _runtime_version.Domain.PUBLIC, - 5, - 29, - 3, - '', - 'livekit_sip.proto' -) # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() @@ -33,78 +23,78 @@ _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'sip', _globals) -if not _descriptor._USE_C_DESCRIPTORS: - _globals['DESCRIPTOR']._loaded_options = None +if _descriptor._USE_C_DESCRIPTORS == False: + _globals['DESCRIPTOR']._options = None _globals['DESCRIPTOR']._serialized_options = b'Z#github.com/livekit/protocol/livekit\252\002\rLiveKit.Proto\352\002\016LiveKit::Proto' - _globals['_CREATESIPTRUNKREQUEST'].fields_by_name['inbound_numbers_regex']._loaded_options = None + _globals['_CREATESIPTRUNKREQUEST'].fields_by_name['inbound_numbers_regex']._options = None _globals['_CREATESIPTRUNKREQUEST'].fields_by_name['inbound_numbers_regex']._serialized_options = b'\030\001' - _globals['_CREATESIPTRUNKREQUEST']._loaded_options = None + _globals['_CREATESIPTRUNKREQUEST']._options = None _globals['_CREATESIPTRUNKREQUEST']._serialized_options = b'\030\001' - _globals['_SIPTRUNKINFO'].fields_by_name['inbound_numbers_regex']._loaded_options = None + _globals['_SIPTRUNKINFO'].fields_by_name['inbound_numbers_regex']._options = None _globals['_SIPTRUNKINFO'].fields_by_name['inbound_numbers_regex']._serialized_options = b'\030\001' - _globals['_SIPTRUNKINFO']._loaded_options = None + _globals['_SIPTRUNKINFO']._options = None _globals['_SIPTRUNKINFO']._serialized_options = b'\030\001' - _globals['_SIPINBOUNDTRUNKINFO_HEADERSENTRY']._loaded_options = None + _globals['_SIPINBOUNDTRUNKINFO_HEADERSENTRY']._options = None _globals['_SIPINBOUNDTRUNKINFO_HEADERSENTRY']._serialized_options = b'8\001' - _globals['_SIPINBOUNDTRUNKINFO_HEADERSTOATTRIBUTESENTRY']._loaded_options = None + _globals['_SIPINBOUNDTRUNKINFO_HEADERSTOATTRIBUTESENTRY']._options = None _globals['_SIPINBOUNDTRUNKINFO_HEADERSTOATTRIBUTESENTRY']._serialized_options = b'8\001' - _globals['_SIPINBOUNDTRUNKINFO_ATTRIBUTESTOHEADERSENTRY']._loaded_options = None + _globals['_SIPINBOUNDTRUNKINFO_ATTRIBUTESTOHEADERSENTRY']._options = None _globals['_SIPINBOUNDTRUNKINFO_ATTRIBUTESTOHEADERSENTRY']._serialized_options = b'8\001' - _globals['_SIPOUTBOUNDTRUNKINFO_HEADERSENTRY']._loaded_options = None + _globals['_SIPOUTBOUNDTRUNKINFO_HEADERSENTRY']._options = None _globals['_SIPOUTBOUNDTRUNKINFO_HEADERSENTRY']._serialized_options = b'8\001' - _globals['_SIPOUTBOUNDTRUNKINFO_HEADERSTOATTRIBUTESENTRY']._loaded_options = None + _globals['_SIPOUTBOUNDTRUNKINFO_HEADERSTOATTRIBUTESENTRY']._options = None _globals['_SIPOUTBOUNDTRUNKINFO_HEADERSTOATTRIBUTESENTRY']._serialized_options = b'8\001' - _globals['_SIPOUTBOUNDTRUNKINFO_ATTRIBUTESTOHEADERSENTRY']._loaded_options = None + _globals['_SIPOUTBOUNDTRUNKINFO_ATTRIBUTESTOHEADERSENTRY']._options = None _globals['_SIPOUTBOUNDTRUNKINFO_ATTRIBUTESTOHEADERSENTRY']._serialized_options = b'8\001' - _globals['_LISTSIPTRUNKREQUEST']._loaded_options = None + _globals['_LISTSIPTRUNKREQUEST']._options = None _globals['_LISTSIPTRUNKREQUEST']._serialized_options = b'\030\001' - _globals['_LISTSIPTRUNKRESPONSE']._loaded_options = None + _globals['_LISTSIPTRUNKRESPONSE']._options = None _globals['_LISTSIPTRUNKRESPONSE']._serialized_options = b'\030\001' - _globals['_CREATESIPDISPATCHRULEREQUEST_ATTRIBUTESENTRY']._loaded_options = None + _globals['_CREATESIPDISPATCHRULEREQUEST_ATTRIBUTESENTRY']._options = None _globals['_CREATESIPDISPATCHRULEREQUEST_ATTRIBUTESENTRY']._serialized_options = b'8\001' - _globals['_CREATESIPDISPATCHRULEREQUEST'].fields_by_name['rule']._loaded_options = None + _globals['_CREATESIPDISPATCHRULEREQUEST'].fields_by_name['rule']._options = None _globals['_CREATESIPDISPATCHRULEREQUEST'].fields_by_name['rule']._serialized_options = b'\030\001' - _globals['_CREATESIPDISPATCHRULEREQUEST'].fields_by_name['trunk_ids']._loaded_options = None + _globals['_CREATESIPDISPATCHRULEREQUEST'].fields_by_name['trunk_ids']._options = None _globals['_CREATESIPDISPATCHRULEREQUEST'].fields_by_name['trunk_ids']._serialized_options = b'\030\001' - _globals['_CREATESIPDISPATCHRULEREQUEST'].fields_by_name['hide_phone_number']._loaded_options = None + _globals['_CREATESIPDISPATCHRULEREQUEST'].fields_by_name['hide_phone_number']._options = None _globals['_CREATESIPDISPATCHRULEREQUEST'].fields_by_name['hide_phone_number']._serialized_options = b'\030\001' - _globals['_CREATESIPDISPATCHRULEREQUEST'].fields_by_name['inbound_numbers']._loaded_options = None + _globals['_CREATESIPDISPATCHRULEREQUEST'].fields_by_name['inbound_numbers']._options = None _globals['_CREATESIPDISPATCHRULEREQUEST'].fields_by_name['inbound_numbers']._serialized_options = b'\030\001' - _globals['_CREATESIPDISPATCHRULEREQUEST'].fields_by_name['name']._loaded_options = None + _globals['_CREATESIPDISPATCHRULEREQUEST'].fields_by_name['name']._options = None _globals['_CREATESIPDISPATCHRULEREQUEST'].fields_by_name['name']._serialized_options = b'\030\001' - _globals['_CREATESIPDISPATCHRULEREQUEST'].fields_by_name['metadata']._loaded_options = None + _globals['_CREATESIPDISPATCHRULEREQUEST'].fields_by_name['metadata']._options = None _globals['_CREATESIPDISPATCHRULEREQUEST'].fields_by_name['metadata']._serialized_options = b'\030\001' - _globals['_CREATESIPDISPATCHRULEREQUEST'].fields_by_name['attributes']._loaded_options = None + _globals['_CREATESIPDISPATCHRULEREQUEST'].fields_by_name['attributes']._options = None _globals['_CREATESIPDISPATCHRULEREQUEST'].fields_by_name['attributes']._serialized_options = b'\030\001' - _globals['_CREATESIPDISPATCHRULEREQUEST'].fields_by_name['room_preset']._loaded_options = None + _globals['_CREATESIPDISPATCHRULEREQUEST'].fields_by_name['room_preset']._options = None _globals['_CREATESIPDISPATCHRULEREQUEST'].fields_by_name['room_preset']._serialized_options = b'\030\001' - _globals['_CREATESIPDISPATCHRULEREQUEST'].fields_by_name['room_config']._loaded_options = None + _globals['_CREATESIPDISPATCHRULEREQUEST'].fields_by_name['room_config']._options = None _globals['_CREATESIPDISPATCHRULEREQUEST'].fields_by_name['room_config']._serialized_options = b'\030\001' - _globals['_SIPDISPATCHRULEINFO_ATTRIBUTESENTRY']._loaded_options = None + _globals['_SIPDISPATCHRULEINFO_ATTRIBUTESENTRY']._options = None _globals['_SIPDISPATCHRULEINFO_ATTRIBUTESENTRY']._serialized_options = b'8\001' - _globals['_SIPDISPATCHRULEUPDATE_ATTRIBUTESENTRY']._loaded_options = None + _globals['_SIPDISPATCHRULEUPDATE_ATTRIBUTESENTRY']._options = None _globals['_SIPDISPATCHRULEUPDATE_ATTRIBUTESENTRY']._serialized_options = b'8\001' - _globals['_SIPOUTBOUNDCONFIG_HEADERSTOATTRIBUTESENTRY']._loaded_options = None + _globals['_SIPOUTBOUNDCONFIG_HEADERSTOATTRIBUTESENTRY']._options = None _globals['_SIPOUTBOUNDCONFIG_HEADERSTOATTRIBUTESENTRY']._serialized_options = b'8\001' - _globals['_SIPOUTBOUNDCONFIG_ATTRIBUTESTOHEADERSENTRY']._loaded_options = None + _globals['_SIPOUTBOUNDCONFIG_ATTRIBUTESTOHEADERSENTRY']._options = None _globals['_SIPOUTBOUNDCONFIG_ATTRIBUTESTOHEADERSENTRY']._serialized_options = b'8\001' - _globals['_CREATESIPPARTICIPANTREQUEST_PARTICIPANTATTRIBUTESENTRY']._loaded_options = None + _globals['_CREATESIPPARTICIPANTREQUEST_PARTICIPANTATTRIBUTESENTRY']._options = None _globals['_CREATESIPPARTICIPANTREQUEST_PARTICIPANTATTRIBUTESENTRY']._serialized_options = b'8\001' - _globals['_CREATESIPPARTICIPANTREQUEST_HEADERSENTRY']._loaded_options = None + _globals['_CREATESIPPARTICIPANTREQUEST_HEADERSENTRY']._options = None _globals['_CREATESIPPARTICIPANTREQUEST_HEADERSENTRY']._serialized_options = b'8\001' - _globals['_CREATESIPPARTICIPANTREQUEST'].fields_by_name['play_ringtone']._loaded_options = None + _globals['_CREATESIPPARTICIPANTREQUEST'].fields_by_name['play_ringtone']._options = None _globals['_CREATESIPPARTICIPANTREQUEST'].fields_by_name['play_ringtone']._serialized_options = b'\030\001' - _globals['_TRANSFERSIPPARTICIPANTREQUEST_HEADERSENTRY']._loaded_options = None + _globals['_TRANSFERSIPPARTICIPANTREQUEST_HEADERSENTRY']._options = None _globals['_TRANSFERSIPPARTICIPANTREQUEST_HEADERSENTRY']._serialized_options = b'8\001' - _globals['_SIPCALLINFO_PARTICIPANTATTRIBUTESENTRY']._loaded_options = None + _globals['_SIPCALLINFO_PARTICIPANTATTRIBUTESENTRY']._options = None _globals['_SIPCALLINFO_PARTICIPANTATTRIBUTESENTRY']._serialized_options = b'8\001' - _globals['_SIPCALLINFO'].fields_by_name['created_at']._loaded_options = None + _globals['_SIPCALLINFO'].fields_by_name['created_at']._options = None _globals['_SIPCALLINFO'].fields_by_name['created_at']._serialized_options = b'\030\001' - _globals['_SIPCALLINFO'].fields_by_name['started_at']._loaded_options = None + _globals['_SIPCALLINFO'].fields_by_name['started_at']._options = None _globals['_SIPCALLINFO'].fields_by_name['started_at']._serialized_options = b'\030\001' - _globals['_SIPCALLINFO'].fields_by_name['ended_at']._loaded_options = None + _globals['_SIPCALLINFO'].fields_by_name['ended_at']._options = None _globals['_SIPCALLINFO'].fields_by_name['ended_at']._serialized_options = b'\030\001' - _globals['_SIP'].methods_by_name['ListSIPTrunk']._loaded_options = None + _globals['_SIP'].methods_by_name['ListSIPTrunk']._options = None _globals['_SIP'].methods_by_name['ListSIPTrunk']._serialized_options = b'\210\002\001' _globals['_SIPSTATUSCODE']._serialized_start=9057 _globals['_SIPSTATUSCODE']._serialized_end=10704 diff --git a/livekit-protocol/livekit/protocol/webhook.py b/livekit-protocol/livekit/protocol/webhook.py index a0a5f681..70cc46fe 100644 --- a/livekit-protocol/livekit/protocol/webhook.py +++ b/livekit-protocol/livekit/protocol/webhook.py @@ -1,22 +1,12 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! -# NO CHECKED-IN PROTOBUF GENCODE # source: livekit_webhook.proto -# Protobuf Python Version: 5.29.3 +# Protobuf Python Version: 4.25.1 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool -from google.protobuf import runtime_version as _runtime_version from google.protobuf import symbol_database as _symbol_database from google.protobuf.internal import builder as _builder -_runtime_version.ValidateProtobufRuntimeVersion( - _runtime_version.Domain.PUBLIC, - 5, - 29, - 3, - '', - 'livekit_webhook.proto' -) # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() @@ -32,10 +22,10 @@ _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'webhook', _globals) -if not _descriptor._USE_C_DESCRIPTORS: - _globals['DESCRIPTOR']._loaded_options = None +if _descriptor._USE_C_DESCRIPTORS == False: + _globals['DESCRIPTOR']._options = None _globals['DESCRIPTOR']._serialized_options = b'Z#github.com/livekit/protocol/livekit\252\002\rLiveKit.Proto\352\002\016LiveKit::Proto' - _globals['_WEBHOOKEVENT'].fields_by_name['num_dropped']._loaded_options = None + _globals['_WEBHOOKEVENT'].fields_by_name['num_dropped']._options = None _globals['_WEBHOOKEVENT'].fields_by_name['num_dropped']._serialized_options = b'\030\001' _globals['_WEBHOOKEVENT']._serialized_start=102 _globals['_WEBHOOKEVENT']._serialized_end=385 From e70d341e484580e9854a8fd3979698aea1397a48 Mon Sep 17 00:00:00 2001 From: David Zhao Date: Sun, 30 Mar 2025 23:25:13 -0700 Subject: [PATCH 3/8] update egress comments --- livekit-api/livekit/api/__init__.py | 4 + livekit-api/livekit/api/_service.py | 3 +- livekit-api/livekit/api/egress_service.py | 16 + livekit-api/livekit/api/room_service.py | 20 ++ livekit-api/livekit/api/sip_service.py | 369 ++++++++++++++++++++-- livekit-api/livekit/api/twirp_client.py | 18 +- livekit-api/livekit/api/version.py | 2 +- livekit-api/setup.py | 4 +- 8 files changed, 393 insertions(+), 43 deletions(-) diff --git a/livekit-api/livekit/api/__init__.py b/livekit-api/livekit/api/__init__.py index 6debf821..51841477 100644 --- a/livekit-api/livekit/api/__init__.py +++ b/livekit-api/livekit/api/__init__.py @@ -36,6 +36,7 @@ from .twirp_client import TwirpError, TwirpErrorCode from .livekit_api import LiveKitAPI +from .sip_service import SIPError from .access_token import VideoGrants, SIPGrants, AccessToken, TokenVerifier from .webhook import WebhookReceiver from .version import __version__ @@ -52,4 +53,7 @@ "AccessToken", "TokenVerifier", "WebhookReceiver", + "TwirpError", + "TwirpErrorCode", + "SIPError", ] diff --git a/livekit-api/livekit/api/_service.py b/livekit-api/livekit/api/_service.py index 7411b4ac..7777f6ee 100644 --- a/livekit-api/livekit/api/_service.py +++ b/livekit-api/livekit/api/_service.py @@ -1,6 +1,5 @@ from __future__ import annotations -from typing import Dict import aiohttp from abc import ABC from .twirp_client import TwirpClient @@ -17,7 +16,7 @@ def __init__(self, session: aiohttp.ClientSession, host: str, api_key: str, api_ def _auth_header( self, grants: VideoGrants | None, sip: SIPGrants | None = None - ) -> Dict[str, str]: + ) -> dict[str, str]: tok = AccessToken(self.api_key, self.api_secret) if grants: tok.with_grants(grants) diff --git a/livekit-api/livekit/api/egress_service.py b/livekit-api/livekit/api/egress_service.py index 862bd1a6..491bff3b 100644 --- a/livekit-api/livekit/api/egress_service.py +++ b/livekit-api/livekit/api/egress_service.py @@ -37,6 +37,7 @@ def __init__(self, session: aiohttp.ClientSession, url: str, api_key: str, api_s super().__init__(session, url, api_key, api_secret) async def start_room_composite_egress(self, start: RoomCompositeEgressRequest) -> EgressInfo: + """Starts a composite recording of a room.""" return await self._client.request( SVC, "StartRoomCompositeEgress", @@ -46,6 +47,7 @@ async def start_room_composite_egress(self, start: RoomCompositeEgressRequest) - ) async def start_web_egress(self, start: WebEgressRequest) -> EgressInfo: + """Starts a recording of a web page.""" return await self._client.request( SVC, "StartWebEgress", @@ -55,6 +57,7 @@ async def start_web_egress(self, start: WebEgressRequest) -> EgressInfo: ) async def start_participant_egress(self, start: ParticipantEgressRequest) -> EgressInfo: + """Starts a recording of a participant.""" return await self._client.request( SVC, "StartParticipantEgress", @@ -64,6 +67,7 @@ async def start_participant_egress(self, start: ParticipantEgressRequest) -> Egr ) async def start_track_composite_egress(self, start: TrackCompositeEgressRequest) -> EgressInfo: + """Starts a composite recording with audio and video tracks.""" return await self._client.request( SVC, "StartTrackCompositeEgress", @@ -73,6 +77,7 @@ async def start_track_composite_egress(self, start: TrackCompositeEgressRequest) ) async def start_track_egress(self, start: TrackEgressRequest) -> EgressInfo: + """Starts a recording of a single track.""" return await self._client.request( SVC, "StartTrackEgress", @@ -82,6 +87,7 @@ async def start_track_egress(self, start: TrackEgressRequest) -> EgressInfo: ) async def update_layout(self, update: UpdateLayoutRequest) -> EgressInfo: + """Updates the layout of a composite recording.""" return await self._client.request( SVC, "UpdateLayout", @@ -91,6 +97,7 @@ async def update_layout(self, update: UpdateLayoutRequest) -> EgressInfo: ) async def update_stream(self, update: UpdateStreamRequest) -> EgressInfo: + """Updates the stream of a RoomComposite, Web, or Participant recording.""" return await self._client.request( SVC, "UpdateStream", @@ -100,6 +107,14 @@ async def update_stream(self, update: UpdateStreamRequest) -> EgressInfo: ) async def list_egress(self, list: ListEgressRequest) -> ListEgressResponse: + """Lists all active egress and recently completed recordings. + + Args: + list (ListEgressRequest): arg contains optional filters: + - room_name: str - List all egresses for a specific room + - egress_id: str - Only list egress with matching ID + - active: bool - Only list active egresses + """ return await self._client.request( SVC, "ListEgress", @@ -109,6 +124,7 @@ async def list_egress(self, list: ListEgressRequest) -> ListEgressResponse: ) async def stop_egress(self, stop: StopEgressRequest) -> EgressInfo: + """Stops an active egress recording.""" return await self._client.request( SVC, "StopEgress", diff --git a/livekit-api/livekit/api/room_service.py b/livekit-api/livekit/api/room_service.py index 023d041d..a6028739 100644 --- a/livekit-api/livekit/api/room_service.py +++ b/livekit-api/livekit/api/room_service.py @@ -18,6 +18,8 @@ UpdateRoomMetadataRequest, RemoveParticipantResponse, UpdateSubscriptionsResponse, + ForwardParticipantRequest, + ForwardParticipantResponse, ) from livekit.protocol.models import Room, ParticipantInfo from ._service import Service @@ -197,6 +199,24 @@ async def remove_participant( RemoveParticipantResponse, ) + async def forward_participant(self, forward: ForwardParticipantRequest) -> None: + """Forwards a participant to a new room. + + Args: + forward (ForwardParticipantRequest): arg containing: + - room: str - Room name + - identity: str - identity of Participant to forward + - destination_room: str - Destination room name + """ + # currently nothing is returned + await self._client.request( + SVC, + "ForwardParticipant", + forward, + self._auth_header(VideoGrants(room_admin=True, room=forward.room)), + ForwardParticipantResponse, + ) + async def mute_published_track( self, update: MuteRoomTrackRequest, diff --git a/livekit-api/livekit/api/sip_service.py b/livekit-api/livekit/api/sip_service.py index 4cdc6453..9ed809a1 100644 --- a/livekit-api/livekit/api/sip_service.py +++ b/livekit-api/livekit/api/sip_service.py @@ -1,33 +1,77 @@ import aiohttp +import re +from typing import Optional + +from livekit.protocol.models import ListUpdate from livekit.protocol.sip import ( - CreateSIPTrunkRequest, SIPTrunkInfo, CreateSIPInboundTrunkRequest, + UpdateSIPInboundTrunkRequest, SIPInboundTrunkInfo, + SIPInboundTrunkUpdate, CreateSIPOutboundTrunkRequest, + UpdateSIPOutboundTrunkRequest, SIPOutboundTrunkInfo, - ListSIPTrunkRequest, - ListSIPTrunkResponse, + SIPOutboundTrunkUpdate, ListSIPInboundTrunkRequest, ListSIPInboundTrunkResponse, ListSIPOutboundTrunkRequest, ListSIPOutboundTrunkResponse, DeleteSIPTrunkRequest, + SIPDispatchRule, SIPDispatchRuleInfo, + SIPDispatchRuleUpdate, CreateSIPDispatchRuleRequest, + UpdateSIPDispatchRuleRequest, ListSIPDispatchRuleRequest, ListSIPDispatchRuleResponse, DeleteSIPDispatchRuleRequest, CreateSIPParticipantRequest, TransferSIPParticipantRequest, SIPParticipantInfo, + SIPTransport, ) from ._service import Service +from .twirp_client import TwirpError from .access_token import VideoGrants, SIPGrants SVC = "SIP" """@private""" +_sip_status_pattern = re.compile(r"sip status: (\d+) \((.*?)\)") + + +class SIPError(TwirpError): + """Error raised by SIP service operations. + + Contains SIP specific status and message information when available. + """ + + def __init__(self, code: str, msg: str, status: Optional[int] = None): + super().__init__(code, msg, status=status) + self._sip_status: Optional[int] = None + self._sip_message: Optional[str] = None + + @classmethod + def from_twirp_error(cls, e: TwirpError) -> "SIPError": + err = cls(e.code, e.message, status=e.status) + # Parse SIP status and message from error message + sip_status_match = _sip_status_pattern.search(e.message) + if sip_status_match: + err._sip_status = int(sip_status_match.group(1)) + err._sip_message = sip_status_match.group(2) + # maintain traceback from the original error + err.__traceback__ = e.__traceback__ + return err + + @property + def sip_status(self) -> Optional[int]: + return self._sip_status + + @property + def sip_message(self) -> Optional[str]: + return self._sip_message + class SipService(Service): """Client for LiveKit SIP Service API @@ -44,127 +88,381 @@ class SipService(Service): def __init__(self, session: aiohttp.ClientSession, url: str, api_key: str, api_secret: str): super().__init__(session, url, api_key, api_secret) - async def create_sip_trunk(self, create: CreateSIPTrunkRequest) -> SIPTrunkInfo: - """ - @deprecated Use create_sip_inbound_trunk or create_sip_outbound_trunk instead + async def create_sip_inbound_trunk( + self, create: CreateSIPInboundTrunkRequest + ) -> SIPInboundTrunkInfo: + """Create a new SIP inbound trunk. + + Args: + create: Request containing trunk details + + Returns: + Created SIP inbound trunk """ return await self._client.request( SVC, - "CreateSIPTrunk", + "CreateSIPInboundTrunk", create, - self._auth_header(VideoGrants(), sip=SIPGrants(admin=True)), - SIPTrunkInfo, + self._admin_headers(), + SIPInboundTrunkInfo, ) - async def create_sip_inbound_trunk( - self, create: CreateSIPInboundTrunkRequest + async def update_sip_inbound_trunk( + self, + trunk_id: str, + trunk: SIPInboundTrunkInfo, ) -> SIPInboundTrunkInfo: + """Updates an existing SIP inbound trunk by replacing it entirely. + + Args: + trunk_id: ID of the SIP inbound trunk to update + trunk: SIP inbound trunk to update with + + Returns: + Updated SIP inbound trunk + """ return await self._client.request( SVC, - "CreateSIPInboundTrunk", - create, - self._auth_header(VideoGrants(), sip=SIPGrants(admin=True)), + "UpdateSIPInboundTrunk", + UpdateSIPInboundTrunkRequest( + sip_trunk_id=trunk_id, + replace=trunk, + ), + self._admin_headers(), + SIPInboundTrunkInfo, + ) + + async def update_sip_inbound_trunk_fields( + self, + trunk_id: str, + *, + numbers: Optional[list[str]] = None, + allowed_addresses: Optional[list[str]] = None, + allowed_numbers: Optional[list[str]] = None, + auth_username: Optional[str] = None, + auth_password: Optional[str] = None, + name: Optional[str] = None, + metadata: Optional[str] = None, + ) -> SIPInboundTrunkInfo: + """Updates specific fields of an existing SIP inbound trunk. + + Only provided fields will be updated. + """ + update = SIPInboundTrunkUpdate( + auth_username=auth_username, + auth_password=auth_password, + name=name, + metadata=metadata, + ) + if numbers is not None: + update.numbers = ListUpdate(set=numbers) + if allowed_addresses is not None: + update.allowed_addresses = ListUpdate(set=allowed_addresses) + if allowed_numbers is not None: + update.allowed_numbers = ListUpdate(set=allowed_numbers) + + return await self._client.request( + SVC, + "UpdateSIPInboundTrunk", + UpdateSIPInboundTrunkRequest( + sip_trunk_id=trunk_id, + update=update, + ), + self._admin_headers(), SIPInboundTrunkInfo, ) async def create_sip_outbound_trunk( self, create: CreateSIPOutboundTrunkRequest ) -> SIPOutboundTrunkInfo: + """Create a new SIP outbound trunk. + + Args: + create: Request containing trunk details + + Returns: + Created SIP outbound trunk + """ return await self._client.request( SVC, "CreateSIPOutboundTrunk", create, - self._auth_header(VideoGrants(), sip=SIPGrants(admin=True)), + self._admin_headers(), SIPOutboundTrunkInfo, ) - async def list_sip_trunk(self, list: ListSIPTrunkRequest) -> ListSIPTrunkResponse: + async def update_sip_outbound_trunk( + self, + trunk_id: str, + trunk: SIPOutboundTrunkInfo, + ) -> SIPOutboundTrunkInfo: + """Updates an existing SIP outbound trunk by replacing it entirely. + + Args: + trunk_id: ID of the SIP outbound trunk to update + trunk: SIP outbound trunk to update with + + Returns: + Updated SIP outbound trunk + """ return await self._client.request( SVC, - "ListSIPTrunk", - list, - self._auth_header(VideoGrants(), sip=SIPGrants(admin=True)), - ListSIPTrunkResponse, + "UpdateSIPOutboundTrunk", + UpdateSIPOutboundTrunkRequest( + sip_trunk_id=trunk_id, + replace=trunk, + ), + self._admin_headers(), + SIPOutboundTrunkInfo, + ) + + async def update_sip_outbound_trunk_fields( + self, + trunk_id: str, + *, + address: Optional[str] = None, + transport: Optional[SIPTransport] = None, + numbers: Optional[list[str]] = None, + auth_username: Optional[str] = None, + auth_password: Optional[str] = None, + name: Optional[str] = None, + metadata: Optional[str] = None, + ) -> SIPOutboundTrunkInfo: + """Updates specific fields of an existing SIP outbound trunk. + + Only provided fields will be updated. + """ + update = SIPOutboundTrunkUpdate( + address=address, + transport=transport, + auth_username=auth_username, + auth_password=auth_password, + name=name, + metadata=metadata, + ) + if numbers is not None: + update.numbers = ListUpdate(set=numbers) + return await self._client.request( + SVC, + "UpdateSIPOutboundTrunk", + UpdateSIPOutboundTrunkRequest( + sip_trunk_id=trunk_id, + update=update, + ), + self._admin_headers(), + SIPOutboundTrunkInfo, ) async def list_sip_inbound_trunk( self, list: ListSIPInboundTrunkRequest ) -> ListSIPInboundTrunkResponse: + """List SIP inbound trunks with optional filtering. + + Args: + list: Request with optional filtering parameters + + Returns: + Response containing list of SIP inbound trunks + """ return await self._client.request( SVC, "ListSIPInboundTrunk", list, - self._auth_header(VideoGrants(), sip=SIPGrants(admin=True)), + self._admin_headers(), ListSIPInboundTrunkResponse, ) async def list_sip_outbound_trunk( self, list: ListSIPOutboundTrunkRequest ) -> ListSIPOutboundTrunkResponse: + """List SIP outbound trunks with optional filtering. + + Args: + list: Request with optional filtering parameters + + Returns: + Response containing list of SIP outbound trunks + """ return await self._client.request( SVC, "ListSIPOutboundTrunk", list, - self._auth_header(VideoGrants(), sip=SIPGrants(admin=True)), + self._admin_headers(), ListSIPOutboundTrunkResponse, ) async def delete_sip_trunk(self, delete: DeleteSIPTrunkRequest) -> SIPTrunkInfo: + """Delete a SIP trunk. + + Args: + delete: Request containing trunk ID to delete + + Returns: + Deleted trunk information + """ return await self._client.request( SVC, "DeleteSIPTrunk", delete, - self._auth_header(VideoGrants(), sip=SIPGrants(admin=True)), + self._admin_headers(), SIPTrunkInfo, ) async def create_sip_dispatch_rule( self, create: CreateSIPDispatchRuleRequest ) -> SIPDispatchRuleInfo: + """Create a new SIP dispatch rule. + + Args: + create: Request containing rule details + + Returns: + Created SIP dispatch rule + """ return await self._client.request( SVC, "CreateSIPDispatchRule", create, - self._auth_header(VideoGrants(), sip=SIPGrants(admin=True)), + self._admin_headers(), + SIPDispatchRuleInfo, + ) + + async def update_sip_dispatch_rule( + self, + rule_id: str, + rule: SIPDispatchRuleInfo, + ) -> SIPDispatchRuleInfo: + """Updates an existing SIP dispatch rule by replacing it entirely. + + Args: + rule_id: ID of the SIP dispatch rule to update + rule: SIP dispatch rule to update with + + Returns: + Updated SIP dispatch rule + """ + return await self._client.request( + SVC, + "UpdateSIPDispatchRule", + UpdateSIPDispatchRuleRequest(sip_dispatch_rule_id=rule_id, replace=rule), + self._admin_headers(), + SIPDispatchRuleInfo, + ) + + async def update_sip_dispatch_rule_fields( + self, + rule_id: str, + *, + trunk_ids: Optional[list[str]] = None, + rule: Optional[SIPDispatchRule] = None, + name: Optional[str] = None, + metadata: Optional[str] = None, + attributes: Optional[dict[str, str]] = None, + ) -> SIPDispatchRuleInfo: + """Updates specific fields of an existing SIP dispatch rule. + + Only provided fields will be updated. + """ + update = SIPDispatchRuleUpdate( + name=name, metadata=metadata, rule=rule, attributes=attributes + ) + if trunk_ids is not None: + update.trunk_ids = ListUpdate(set=trunk_ids) + return await self._client.request( + SVC, + "UpdateSIPDispatchRule", + UpdateSIPDispatchRuleRequest(sip_dispatch_rule_id=rule_id, update=update), + self._admin_headers(), SIPDispatchRuleInfo, ) async def list_sip_dispatch_rule( self, list: ListSIPDispatchRuleRequest ) -> ListSIPDispatchRuleResponse: + """List SIP dispatch rules with optional filtering. + + Args: + list: Request with optional filtering parameters + + Returns: + Response containing list of SIP dispatch rules + """ return await self._client.request( SVC, "ListSIPDispatchRule", list, - self._auth_header(VideoGrants(), sip=SIPGrants(admin=True)), + self._admin_headers(), ListSIPDispatchRuleResponse, ) async def delete_sip_dispatch_rule( self, delete: DeleteSIPDispatchRuleRequest ) -> SIPDispatchRuleInfo: + """Delete a SIP dispatch rule. + + Args: + delete: Request containing rule ID to delete + + Returns: + Deleted rule information + """ return await self._client.request( SVC, "DeleteSIPDispatchRule", delete, - self._auth_header(VideoGrants(), sip=SIPGrants(admin=True)), + self._admin_headers(), SIPDispatchRuleInfo, ) async def create_sip_participant( - self, create: CreateSIPParticipantRequest + self, + create: CreateSIPParticipantRequest, + *, + timeout: Optional[float] = None, ) -> SIPParticipantInfo: - return await self._client.request( - SVC, - "CreateSIPParticipant", - create, - self._auth_header(VideoGrants(), sip=SIPGrants(call=True)), - SIPParticipantInfo, - ) + """Create a new SIP participant. + + Args: + create: Request containing participant details + timeout: Optional request timeout in seconds + + Returns: + Created SIP participant + + Raises: + SIPError: If the SIP operation fails + """ + client_timeout: Optional[aiohttp.ClientTimeout] = None + if timeout: + client_timeout = aiohttp.ClientTimeout(total=timeout) + elif create.wait_until_answered: + # ensure timeout isn't too short when using sync mode + if self._client._session.timeout and self._client._session.timeout.total < 10: + client_timeout = aiohttp.ClientTimeout(total=30) + + try: + return await self._client.request( + SVC, + "CreateSIPParticipant", + create, + self._admin_headers(), + SIPParticipantInfo, + timeout=client_timeout, + ) + except TwirpError as e: + raise SIPError.from_twirp_error(e) from None async def transfer_sip_participant( self, transfer: TransferSIPParticipantRequest ) -> SIPParticipantInfo: + """Transfer a SIP participant to a different room. + + Args: + transfer: Request containing transfer details + + Returns: + Updated SIP participant information + """ return await self._client.request( SVC, "TransferSIPParticipant", @@ -178,3 +476,6 @@ async def transfer_sip_participant( ), SIPParticipantInfo, ) + + def _admin_headers(self) -> dict[str, str]: + return self._auth_header(VideoGrants(), sip=SIPGrants(admin=True)) diff --git a/livekit-api/livekit/api/twirp_client.py b/livekit-api/livekit/api/twirp_client.py index decc952f..1f55709e 100644 --- a/livekit-api/livekit/api/twirp_client.py +++ b/livekit-api/livekit/api/twirp_client.py @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -from typing import Dict, Type, TypeVar +from typing import Dict, Type, TypeVar, Optional import aiohttp from google.protobuf.message import Message @@ -22,9 +22,10 @@ class TwirpError(Exception): - def __init__(self, code: str, msg: str) -> None: + def __init__(self, code: str, msg: str, *, status: Optional[int] = None) -> None: self._code = code self._msg = msg + self._status = status @property def code(self) -> str: @@ -34,6 +35,10 @@ def code(self) -> str: def message(self) -> str: return self._msg + @property + def status(self) -> Optional[int]: + return self._status + class TwirpErrorCode: CANCELED = "canceled" @@ -85,15 +90,20 @@ async def request( data: Message, headers: Dict[str, str], response_class: Type[T], + *, + timeout: Optional[aiohttp.ClientTimeout] = None, ) -> T: url = f"{self.host}/{self.prefix}/{self.pkg}.{service}/{method}" headers["Content-Type"] = "application/protobuf" serialized_data = data.SerializeToString() - async with self._session.post(url, headers=headers, data=serialized_data) as resp: + async with self._session.post( + url, headers=headers, data=serialized_data, timeout=timeout + ) as resp: if resp.status == 200: return response_class.FromString(await resp.read()) else: # when we have an error, Twirp always encode it in json error_data = await resp.json() - raise TwirpError(error_data["code"], error_data["msg"]) + print(f"Error: {error_data}, headers: {resp.headers}") + raise TwirpError(error_data["code"], error_data["msg"], status=resp.status) diff --git a/livekit-api/livekit/api/version.py b/livekit-api/livekit/api/version.py index deded324..5becc17c 100644 --- a/livekit-api/livekit/api/version.py +++ b/livekit-api/livekit/api/version.py @@ -1 +1 @@ -__version__ = "0.8.2" +__version__ = "1.0.0" diff --git a/livekit-api/setup.py b/livekit-api/setup.py index b96a13b5..5058eede 100644 --- a/livekit-api/setup.py +++ b/livekit-api/setup.py @@ -51,9 +51,9 @@ install_requires=[ "pyjwt>=2.0.0", "aiohttp>=3.9.0", - "protobuf>=3", + "protobuf>=4,<5", "types-protobuf>=4,<5", - "livekit-protocol>=0.8.2,<2", + "livekit-protocol~=1.0", ], package_data={ "livekit.api": ["py.typed", "*.pyi", "**/*.pyi"], From ae6c93c4bbb7c94df891df1d0c459d3b5f0280c1 Mon Sep 17 00:00:00 2001 From: David Zhao Date: Sun, 30 Mar 2025 23:27:53 -0700 Subject: [PATCH 4/8] comments --- livekit-api/livekit/api/room_service.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/livekit-api/livekit/api/room_service.py b/livekit-api/livekit/api/room_service.py index a6028739..46324eff 100644 --- a/livekit-api/livekit/api/room_service.py +++ b/livekit-api/livekit/api/room_service.py @@ -200,7 +200,9 @@ async def remove_participant( ) async def forward_participant(self, forward: ForwardParticipantRequest) -> None: - """Forwards a participant to a new room. + """Forwards a participant and their published tracks from one room to another. + + This feature is only available for LiveKit Cloud/Private Cloud. Args: forward (ForwardParticipantRequest): arg containing: From 01f05e73f4d2562ab6a801abe2ac00506a4973d0 Mon Sep 17 00:00:00 2001 From: David Zhao Date: Sun, 30 Mar 2025 23:34:49 -0700 Subject: [PATCH 5/8] fix types --- livekit-api/livekit/api/sip_service.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/livekit-api/livekit/api/sip_service.py b/livekit-api/livekit/api/sip_service.py index 9ed809a1..191e73fd 100644 --- a/livekit-api/livekit/api/sip_service.py +++ b/livekit-api/livekit/api/sip_service.py @@ -434,11 +434,16 @@ async def create_sip_participant( """ client_timeout: Optional[aiohttp.ClientTimeout] = None if timeout: + # obay user specified timeout client_timeout = aiohttp.ClientTimeout(total=timeout) elif create.wait_until_answered: - # ensure timeout isn't too short when using sync mode - if self._client._session.timeout and self._client._session.timeout.total < 10: - client_timeout = aiohttp.ClientTimeout(total=30) + # ensure default timeout isn't too short when using sync mode + if ( + self._client._session.timeout + and self._client._session.timeout.total + and self._client._session.timeout.total < 20 + ): + client_timeout = aiohttp.ClientTimeout(total=20) try: return await self._client.request( From 05e3bd6d239eb1c486f0da78a3785611bf0303c4 Mon Sep 17 00:00:00 2001 From: David Zhao Date: Mon, 31 Mar 2025 12:57:10 -0700 Subject: [PATCH 6/8] more generic error handling --- livekit-api/livekit/api/__init__.py | 2 - livekit-api/livekit/api/livekit_api.py | 12 +++--- livekit-api/livekit/api/sip_service.py | 55 ++++--------------------- livekit-api/livekit/api/twirp_client.py | 32 +++++++++++++- 4 files changed, 45 insertions(+), 56 deletions(-) diff --git a/livekit-api/livekit/api/__init__.py b/livekit-api/livekit/api/__init__.py index 51841477..e5af0c97 100644 --- a/livekit-api/livekit/api/__init__.py +++ b/livekit-api/livekit/api/__init__.py @@ -36,7 +36,6 @@ from .twirp_client import TwirpError, TwirpErrorCode from .livekit_api import LiveKitAPI -from .sip_service import SIPError from .access_token import VideoGrants, SIPGrants, AccessToken, TokenVerifier from .webhook import WebhookReceiver from .version import __version__ @@ -55,5 +54,4 @@ "WebhookReceiver", "TwirpError", "TwirpErrorCode", - "SIPError", ] diff --git a/livekit-api/livekit/api/livekit_api.py b/livekit-api/livekit/api/livekit_api.py index 3bde9224..3e7b435f 100644 --- a/livekit-api/livekit/api/livekit_api.py +++ b/livekit-api/livekit/api/livekit_api.py @@ -50,11 +50,13 @@ def __init__( if not api_key or not api_secret: raise ValueError("api_key and api_secret must be set") - if not timeout: - timeout = aiohttp.ClientTimeout(total=60) - - self._custom_session = True if session is None else False - self._session = session or aiohttp.ClientSession(timeout=timeout) + self._custom_session = True + self._session = session + if not self._session: + self._custom_session = False + if not timeout: + timeout = aiohttp.ClientTimeout(total=60) + self._session = aiohttp.ClientSession(timeout=timeout) self._room = RoomService(self._session, url, api_key, api_secret) self._ingress = IngressService(self._session, url, api_key, api_secret) diff --git a/livekit-api/livekit/api/sip_service.py b/livekit-api/livekit/api/sip_service.py index 191e73fd..027c282d 100644 --- a/livekit-api/livekit/api/sip_service.py +++ b/livekit-api/livekit/api/sip_service.py @@ -1,5 +1,4 @@ import aiohttp -import re from typing import Optional from livekit.protocol.models import ListUpdate @@ -32,46 +31,11 @@ SIPTransport, ) from ._service import Service -from .twirp_client import TwirpError from .access_token import VideoGrants, SIPGrants SVC = "SIP" """@private""" -_sip_status_pattern = re.compile(r"sip status: (\d+) \((.*?)\)") - - -class SIPError(TwirpError): - """Error raised by SIP service operations. - - Contains SIP specific status and message information when available. - """ - - def __init__(self, code: str, msg: str, status: Optional[int] = None): - super().__init__(code, msg, status=status) - self._sip_status: Optional[int] = None - self._sip_message: Optional[str] = None - - @classmethod - def from_twirp_error(cls, e: TwirpError) -> "SIPError": - err = cls(e.code, e.message, status=e.status) - # Parse SIP status and message from error message - sip_status_match = _sip_status_pattern.search(e.message) - if sip_status_match: - err._sip_status = int(sip_status_match.group(1)) - err._sip_message = sip_status_match.group(2) - # maintain traceback from the original error - err.__traceback__ = e.__traceback__ - return err - - @property - def sip_status(self) -> Optional[int]: - return self._sip_status - - @property - def sip_message(self) -> Optional[str]: - return self._sip_message - class SipService(Service): """Client for LiveKit SIP Service API @@ -445,17 +409,14 @@ async def create_sip_participant( ): client_timeout = aiohttp.ClientTimeout(total=20) - try: - return await self._client.request( - SVC, - "CreateSIPParticipant", - create, - self._admin_headers(), - SIPParticipantInfo, - timeout=client_timeout, - ) - except TwirpError as e: - raise SIPError.from_twirp_error(e) from None + return await self._client.request( + SVC, + "CreateSIPParticipant", + create, + self._auth_header(VideoGrants(), sip=SIPGrants(call=True)), + SIPParticipantInfo, + timeout=client_timeout, + ) async def transfer_sip_participant( self, transfer: TransferSIPParticipantRequest diff --git a/livekit-api/livekit/api/twirp_client.py b/livekit-api/livekit/api/twirp_client.py index 1f55709e..4d44d419 100644 --- a/livekit-api/livekit/api/twirp_client.py +++ b/livekit-api/livekit/api/twirp_client.py @@ -22,10 +22,18 @@ class TwirpError(Exception): - def __init__(self, code: str, msg: str, *, status: Optional[int] = None) -> None: + def __init__( + self, + code: str, + msg: str, + *, + status: Optional[int] = None, + metadata: Optional[Dict[str, str]] = None, + ) -> None: self._code = code self._msg = msg self._status = status + self._metadata = metadata or {} @property def code(self) -> str: @@ -37,8 +45,23 @@ def message(self) -> str: @property def status(self) -> Optional[int]: + """HTTP status code""" return self._status + @property + def metadata(self) -> Dict[str, str]: + """Twirp metadata""" + return self._metadata + + def __str__(self) -> str: + result = f"TwirpError(code={self.code}, message={self.message}" + if self.status is not None: + result += f", status={self.status}" + if self.metadata: + result += f", metadata={self.metadata}" + result += ")" + return result + class TwirpErrorCode: CANCELED = "canceled" @@ -106,4 +129,9 @@ async def request( # when we have an error, Twirp always encode it in json error_data = await resp.json() print(f"Error: {error_data}, headers: {resp.headers}") - raise TwirpError(error_data["code"], error_data["msg"], status=resp.status) + raise TwirpError( + error_data.get("code", "unknown"), + error_data.get("msg", ""), + status=resp.status, + metadata=error_data.get("meta"), + ) From 463ebe89ad27e82f168b98bd0121bd9bd4d38670 Mon Sep 17 00:00:00 2001 From: David Zhao Date: Mon, 31 Mar 2025 12:59:59 -0700 Subject: [PATCH 7/8] require status --- livekit-api/livekit/api/twirp_client.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/livekit-api/livekit/api/twirp_client.py b/livekit-api/livekit/api/twirp_client.py index 4d44d419..4b512add 100644 --- a/livekit-api/livekit/api/twirp_client.py +++ b/livekit-api/livekit/api/twirp_client.py @@ -27,7 +27,7 @@ def __init__( code: str, msg: str, *, - status: Optional[int] = None, + status: int, metadata: Optional[Dict[str, str]] = None, ) -> None: self._code = code @@ -44,7 +44,7 @@ def message(self) -> str: return self._msg @property - def status(self) -> Optional[int]: + def status(self) -> int: """HTTP status code""" return self._status @@ -128,7 +128,6 @@ async def request( else: # when we have an error, Twirp always encode it in json error_data = await resp.json() - print(f"Error: {error_data}, headers: {resp.headers}") raise TwirpError( error_data.get("code", "unknown"), error_data.get("msg", ""), From 7e60837c649a1d583d25b3c8cca33d78080a03d8 Mon Sep 17 00:00:00 2001 From: David Zhao Date: Mon, 31 Mar 2025 13:24:44 -0700 Subject: [PATCH 8/8] always print status --- livekit-api/livekit/api/twirp_client.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/livekit-api/livekit/api/twirp_client.py b/livekit-api/livekit/api/twirp_client.py index 4b512add..ce828c3f 100644 --- a/livekit-api/livekit/api/twirp_client.py +++ b/livekit-api/livekit/api/twirp_client.py @@ -54,9 +54,7 @@ def metadata(self) -> Dict[str, str]: return self._metadata def __str__(self) -> str: - result = f"TwirpError(code={self.code}, message={self.message}" - if self.status is not None: - result += f", status={self.status}" + result = f"TwirpError(code={self.code}, message={self.message}, status={self.status}" if self.metadata: result += f", metadata={self.metadata}" result += ")"