From bd5635c23faf5f741cfe837736fe6b644f8d3e6e Mon Sep 17 00:00:00 2001
From: marcos <15697303+gmarcosb@users.noreply.github.com>
Date: Wed, 2 Oct 2024 17:42:27 -0600
Subject: [PATCH 1/8] Generated using ./alchemy zap --attribute="in-progress"
WebRTC_Provider.adoc
---
.github/workflows/tests.yaml | 1 +
scripts/rules.matterlint | 1 +
.../chip/webrtc-provider-cluster.xml | 145 ++++++++
.../zcl/zcl-with-test-extensions.json | 121 +++++--
src/app/zap-templates/zcl/zcl.json | 127 +++++--
src/app/zap_cluster_list.json | 340 +++++++++++++-----
6 files changed, 589 insertions(+), 146 deletions(-)
create mode 100644 src/app/zap-templates/zcl/data-model/chip/webrtc-provider-cluster.xml
diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml
index 180d374b40e83b..e0904bb5162998 100644
--- a/.github/workflows/tests.yaml
+++ b/.github/workflows/tests.yaml
@@ -198,6 +198,7 @@ jobs:
src/app/zap-templates/zcl/data-model/chip/wake-on-lan-cluster.xml \
src/app/zap-templates/zcl/data-model/chip/washer-controls-cluster.xml \
src/app/zap-templates/zcl/data-model/chip/water-heater-management-cluster.xml \
+ src/app/zap-templates/zcl/data-model/chip/webrtc-provider-cluster.xml \
src/app/zap-templates/zcl/data-model/chip/wifi-network-diagnostics-cluster.xml \
src/app/zap-templates/zcl/data-model/chip/wifi-network-management-cluster.xml \
src/app/zap-templates/zcl/data-model/chip/window-covering.xml \
diff --git a/scripts/rules.matterlint b/scripts/rules.matterlint
index c1e2e48cde9498..1573cc7065764e 100644
--- a/scripts/rules.matterlint
+++ b/scripts/rules.matterlint
@@ -108,6 +108,7 @@ load "../src/app/zap-templates/zcl/data-model/chip/wake-on-lan-cluster.xml";
load "../src/app/zap-templates/zcl/data-model/chip/washer-controls-cluster.xml";
load "../src/app/zap-templates/zcl/data-model/chip/water-heater-management-cluster.xml";
load "../src/app/zap-templates/zcl/data-model/chip/water-heater-mode-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/webrtc-provider-cluster.xml";
load "../src/app/zap-templates/zcl/data-model/chip/wifi-network-diagnostics-cluster.xml";
load "../src/app/zap-templates/zcl/data-model/chip/wifi-network-management-cluster.xml";
load "../src/app/zap-templates/zcl/data-model/chip/window-covering.xml";
diff --git a/src/app/zap-templates/zcl/data-model/chip/webrtc-provider-cluster.xml b/src/app/zap-templates/zcl/data-model/chip/webrtc-provider-cluster.xml
new file mode 100644
index 00000000000000..9e975cf3c1c67a
--- /dev/null
+++ b/src/app/zap-templates/zcl/data-model/chip/webrtc-provider-cluster.xml
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ WebRTC Transport Provider
+ 0x0553
+ WEBRTC_TRANSPORT_PROVIDER_CLUSTER
+ The following process SHALL be followed when the server receives this command:
+ true
+ true
+
+ CurrentSessions
+
+ Requests that the Provider initiates a new session with the Offer / Answer flow in a way that allows for options to be passed and work with devices needing the standby flow.
+
+
+
+
+
+
+
+
+
+ This command SHALL be generated in response to a SolicitOffer command.
+
+
+
+
+
+
+
+ This command allows an SDP Offer to be set and start a new session.
+
+
+
+
+
+
+
+
+
+
+
+ This command contains information about the stream created as a response to the requestor's offer.
+
+
+
+
+
+
+ This command SHALL be initiated from a Node in response to an Offer that was previously received from a remote peer.
+
+
+
+
+
+ This command allows for https://www.rfc-editor.org/rfc/rfc8839#section-4.2.1.2 nominated after the initial Offer / Answer exchange to be added to a session during the gathering phase.
+
+
+
+
+
+ This command instructs the stream provider to end the WebRTC session.
+
+
+
+
+
+
diff --git a/src/app/zap-templates/zcl/zcl-with-test-extensions.json b/src/app/zap-templates/zcl/zcl-with-test-extensions.json
index dbb08dd6748bc0..b177526b50c689 100644
--- a/src/app/zap-templates/zcl/zcl-with-test-extensions.json
+++ b/src/app/zap-templates/zcl/zcl-with-test-extensions.json
@@ -131,6 +131,7 @@
"washer-controls-cluster.xml",
"water-heater-management-cluster.xml",
"water-heater-mode-cluster.xml",
+ "webrtc-provider-cluster.xml",
"wifi-network-diagnostics-cluster.xml",
"wifi-network-management-cluster.xml",
"window-covering.xml",
@@ -143,9 +144,15 @@
"manufacturersXml": "../../../../src/app/zap-templates/zcl/data-model/manufacturers.xml",
"options": {
"text": {
- "defaultResponsePolicy": ["Always", "Conditional", "Never"]
+ "defaultResponsePolicy": [
+ "Always",
+ "Conditional",
+ "Never"
+ ]
},
- "bool": ["commandDiscovery"]
+ "bool": [
+ "commandDiscovery"
+ ]
},
"defaults": {
"text": {
@@ -191,8 +198,13 @@
"SpecificationVersion",
"MaxPathsPerInvoke"
],
- "Bridged Device Basic Information": ["ProductAppearance"],
- "Descriptor": ["ClusterRevision", "FeatureMap"],
+ "Bridged Device Basic Information": [
+ "ProductAppearance"
+ ],
+ "Descriptor": [
+ "ClusterRevision",
+ "FeatureMap"
+ ],
"Device Energy Management": [
"ESAType",
"ESACanGenerate",
@@ -244,7 +256,11 @@
"SessionEnergyDischarged",
"FeatureMap"
],
- "Energy EVSE Mode": ["SupportedModes", "CurrentMode", "FeatureMap"],
+ "Energy EVSE Mode": [
+ "SupportedModes",
+ "CurrentMode",
+ "FeatureMap"
+ ],
"Ethernet Network Diagnostics": [
"PHYRate",
"FullDuplex",
@@ -286,10 +302,13 @@
"ActiveModeThreshold",
"RegisteredClients",
"ICDCounter",
- "ClientsSupportedPerFabric",
- "MaximumCheckInBackOff"
+ "ClientsSupportedPerFabric"
+ ],
+ "Occupancy Sensing": [
+ "HoldTimeLimits",
+ "HoldTime",
+ "FeatureMap"
],
- "Occupancy Sensing": ["HoldTimeLimits", "HoldTime", "FeatureMap"],
"Operational Credentials": [
"SupportedFabrics",
"CommissionedFabrics",
@@ -396,14 +415,21 @@
"CurrentMaxRate",
"OverrunCount"
],
- "Channel": ["Lineup", "CurrentChannel"],
+ "Channel": [
+ "Lineup",
+ "CurrentChannel"
+ ],
"Media Playback": [
"SampledPosition",
"ActiveAudioTrack",
"ActiveTextTrack"
],
- "Application Launcher": ["CurrentApp"],
- "Application Basic": ["Application"],
+ "Application Launcher": [
+ "CurrentApp"
+ ],
+ "Application Basic": [
+ "Application"
+ ],
"Time Synchronization": [
"TrustedTimeSource",
"DefaultNTP",
@@ -415,15 +441,19 @@
"TimeZoneListMaxSize",
"DSTOffsetListMaxSize"
],
- "Temperature Control": ["SupportedTemperatureLevels"],
+ "Temperature Control": [
+ "SupportedTemperatureLevels"
+ ],
"Dishwasher Mode": [
"SupportedModes",
"CurrentMode",
- "StartUpMode",
- "OnMode",
"FeatureMap"
],
- "Microwave Oven Mode": ["SupportedModes", "CurrentMode", "FeatureMap"],
+ "Microwave Oven Mode": [
+ "SupportedModes",
+ "CurrentMode",
+ "FeatureMap"
+ ],
"Microwave Oven Control": [
"CookTime",
"MaxCookTime",
@@ -439,19 +469,23 @@
"Laundry Washer Mode": [
"SupportedModes",
"CurrentMode",
- "StartUpMode",
- "OnMode",
"FeatureMap"
],
"Refrigerator And Temperature Controlled Cabinet Mode": [
"SupportedModes",
"CurrentMode",
- "StartUpMode",
- "OnMode",
"FeatureMap"
],
- "RVC Clean Mode": ["SupportedModes", "CurrentMode", "FeatureMap"],
- "RVC Run Mode": ["SupportedModes", "CurrentMode", "FeatureMap"],
+ "RVC Clean Mode": [
+ "SupportedModes",
+ "CurrentMode",
+ "FeatureMap"
+ ],
+ "RVC Run Mode": [
+ "SupportedModes",
+ "CurrentMode",
+ "FeatureMap"
+ ],
"Operational State": [
"OperationalState",
"OperationalError",
@@ -628,7 +662,10 @@
"LevelValue",
"FeatureMap"
],
- "Air Quality": ["AirQuality", "FeatureMap"],
+ "Air Quality": [
+ "AirQuality",
+ "FeatureMap"
+ ],
"Electrical Energy Measurement": [
"Accuracy",
"CumulativeEnergyImported",
@@ -660,9 +697,15 @@
"NeutralCurrent",
"FeatureMap"
],
- "Power Topology": ["FeatureMap"],
- "Valve Configuration and Control": ["RemainingDuration"],
- "Boolean State Configuration": ["CurrentSensitivityLevel"],
+ "Power Topology": [
+ "FeatureMap"
+ ],
+ "Valve Configuration and Control": [
+ "RemainingDuration"
+ ],
+ "Boolean State Configuration": [
+ "CurrentSensitivityLevel"
+ ],
"Water Heater Management": [
"HeaterTypes",
"HeatDemand",
@@ -673,18 +716,36 @@
"FeatureMap",
"ClusterRevision"
],
- "Water Heater Mode": ["SupportedModes", "CurrentMode", "FeatureMap"],
- "Wi-Fi Network Management": ["SSID", "PassphraseSurrogate"],
+ "Water Heater Mode": [
+ "SupportedModes",
+ "CurrentMode",
+ "FeatureMap"
+ ],
+ "Wi-Fi Network Management": [
+ "SSID",
+ "PassphraseSurrogate"
+ ],
"Thread Network Directory": [
"PreferredExtendedPanID",
"ThreadNetworks",
"ThreadNetworkTableSize"
],
- "Service Area": ["CurrentArea", "EstimatedEndTime", "FeatureMap"]
+ "Service Area": [
+ "CurrentArea",
+ "EstimatedEndTime",
+ "FeatureMap"
+ ]
},
"mandatoryDeviceTypes": "0x0016",
"defaultReportingPolicy": "mandatory",
- "ZCLDataTypes": ["ARRAY", "BITMAP", "ENUM", "NUMBER", "STRING", "STRUCT"],
+ "ZCLDataTypes": [
+ "ARRAY",
+ "BITMAP",
+ "ENUM",
+ "NUMBER",
+ "STRING",
+ "STRUCT"
+ ],
"fabricHandling": {
"automaticallyCreateFields": true,
"indexFieldId": 254,
@@ -694,4 +755,4 @@
"uiOptions": {
"showProfileId": false
}
-}
+}
\ No newline at end of file
diff --git a/src/app/zap-templates/zcl/zcl.json b/src/app/zap-templates/zcl/zcl.json
index 261a87d842b223..b6ca6ece3e61ef 100644
--- a/src/app/zap-templates/zcl/zcl.json
+++ b/src/app/zap-templates/zcl/zcl.json
@@ -3,7 +3,11 @@
"category": "matter",
"version": 1,
"requiredFeatureLevel": 102,
- "xmlRoot": [".", "./data-model/chip/", "./data-model/silabs/"],
+ "xmlRoot": [
+ ".",
+ "./data-model/chip/",
+ "./data-model/silabs/"
+ ],
"_comment": "Ensure access-control-definitions.xml is first in xmlFile array",
"xmlFile": [
"access-control-definitions.xml",
@@ -125,6 +129,7 @@
"washer-controls-cluster.xml",
"water-heater-management-cluster.xml",
"water-heater-mode-cluster.xml",
+ "webrtc-provider-cluster.xml",
"wifi-network-diagnostics-cluster.xml",
"wifi-network-management-cluster.xml",
"window-covering.xml",
@@ -137,9 +142,15 @@
"manufacturersXml": "../../../../src/app/zap-templates/zcl/data-model/manufacturers.xml",
"options": {
"text": {
- "defaultResponsePolicy": ["Always", "Conditional", "Never"]
+ "defaultResponsePolicy": [
+ "Always",
+ "Conditional",
+ "Never"
+ ]
},
- "bool": ["commandDiscovery"]
+ "bool": [
+ "commandDiscovery"
+ ]
},
"defaults": {
"text": {
@@ -185,8 +196,13 @@
"SpecificationVersion",
"MaxPathsPerInvoke"
],
- "Bridged Device Basic Information": ["ProductAppearance"],
- "Descriptor": ["ClusterRevision", "FeatureMap"],
+ "Bridged Device Basic Information": [
+ "ProductAppearance"
+ ],
+ "Descriptor": [
+ "ClusterRevision",
+ "FeatureMap"
+ ],
"Device Energy Management": [
"ESAType",
"ESACanGenerate",
@@ -238,7 +254,11 @@
"SessionEnergyDischarged",
"FeatureMap"
],
- "Energy EVSE Mode": ["SupportedModes", "CurrentMode", "FeatureMap"],
+ "Energy EVSE Mode": [
+ "SupportedModes",
+ "CurrentMode",
+ "FeatureMap"
+ ],
"Ethernet Network Diagnostics": [
"PHYRate",
"FullDuplex",
@@ -280,10 +300,13 @@
"ActiveModeThreshold",
"RegisteredClients",
"ICDCounter",
- "ClientsSupportedPerFabric",
- "MaximumCheckInBackOff"
+ "ClientsSupportedPerFabric"
+ ],
+ "Occupancy Sensing": [
+ "HoldTimeLimits",
+ "HoldTime",
+ "FeatureMap"
],
- "Occupancy Sensing": ["HoldTimeLimits", "HoldTime", "FeatureMap"],
"Operational Credentials": [
"SupportedFabrics",
"CommissionedFabrics",
@@ -390,14 +413,21 @@
"CurrentMaxRate",
"OverrunCount"
],
- "Channel": ["Lineup", "CurrentChannel"],
+ "Channel": [
+ "Lineup",
+ "CurrentChannel"
+ ],
"Media Playback": [
"SampledPosition",
"ActiveAudioTrack",
"ActiveTextTrack"
],
- "Application Launcher": ["CurrentApp"],
- "Application Basic": ["Application"],
+ "Application Launcher": [
+ "CurrentApp"
+ ],
+ "Application Basic": [
+ "Application"
+ ],
"Time Synchronization": [
"TrustedTimeSource",
"DefaultNTP",
@@ -409,15 +439,19 @@
"TimeZoneListMaxSize",
"DSTOffsetListMaxSize"
],
- "Temperature Control": ["SupportedTemperatureLevels"],
+ "Temperature Control": [
+ "SupportedTemperatureLevels"
+ ],
"Dishwasher Mode": [
"SupportedModes",
"CurrentMode",
- "StartUpMode",
- "OnMode",
"FeatureMap"
],
- "Microwave Oven Mode": ["SupportedModes", "CurrentMode", "FeatureMap"],
+ "Microwave Oven Mode": [
+ "SupportedModes",
+ "CurrentMode",
+ "FeatureMap"
+ ],
"Microwave Oven Control": [
"CookTime",
"MaxCookTime",
@@ -433,19 +467,23 @@
"Laundry Washer Mode": [
"SupportedModes",
"CurrentMode",
- "StartUpMode",
- "OnMode",
"FeatureMap"
],
"Refrigerator And Temperature Controlled Cabinet Mode": [
"SupportedModes",
"CurrentMode",
- "StartUpMode",
- "OnMode",
"FeatureMap"
],
- "RVC Clean Mode": ["SupportedModes", "CurrentMode", "FeatureMap"],
- "RVC Run Mode": ["SupportedModes", "CurrentMode", "FeatureMap"],
+ "RVC Clean Mode": [
+ "SupportedModes",
+ "CurrentMode",
+ "FeatureMap"
+ ],
+ "RVC Run Mode": [
+ "SupportedModes",
+ "CurrentMode",
+ "FeatureMap"
+ ],
"Operational State": [
"OperationalState",
"OperationalError",
@@ -622,7 +660,10 @@
"LevelValue",
"FeatureMap"
],
- "Air Quality": ["AirQuality", "FeatureMap"],
+ "Air Quality": [
+ "AirQuality",
+ "FeatureMap"
+ ],
"Electrical Energy Measurement": [
"Accuracy",
"CumulativeEnergyImported",
@@ -654,9 +695,15 @@
"NeutralCurrent",
"FeatureMap"
],
- "Power Topology": ["FeatureMap"],
- "Valve Configuration and Control": ["RemainingDuration"],
- "Boolean State Configuration": ["CurrentSensitivityLevel"],
+ "Power Topology": [
+ "FeatureMap"
+ ],
+ "Valve Configuration and Control": [
+ "RemainingDuration"
+ ],
+ "Boolean State Configuration": [
+ "CurrentSensitivityLevel"
+ ],
"Water Heater Management": [
"HeaterTypes",
"HeatDemand",
@@ -667,18 +714,36 @@
"FeatureMap",
"ClusterRevision"
],
- "Water Heater Mode": ["SupportedModes", "CurrentMode", "FeatureMap"],
- "Wi-Fi Network Management": ["SSID", "PassphraseSurrogate"],
+ "Water Heater Mode": [
+ "SupportedModes",
+ "CurrentMode",
+ "FeatureMap"
+ ],
+ "Wi-Fi Network Management": [
+ "SSID",
+ "PassphraseSurrogate"
+ ],
"Thread Network Directory": [
"PreferredExtendedPanID",
"ThreadNetworks",
"ThreadNetworkTableSize"
],
- "Service Area": ["CurrentArea", "EstimatedEndTime", "FeatureMap"]
+ "Service Area": [
+ "CurrentArea",
+ "EstimatedEndTime",
+ "FeatureMap"
+ ]
},
"mandatoryDeviceTypes": "0x0016",
"defaultReportingPolicy": "mandatory",
- "ZCLDataTypes": ["ARRAY", "BITMAP", "ENUM", "NUMBER", "STRING", "STRUCT"],
+ "ZCLDataTypes": [
+ "ARRAY",
+ "BITMAP",
+ "ENUM",
+ "NUMBER",
+ "STRING",
+ "STRUCT"
+ ],
"fabricHandling": {
"automaticallyCreateFields": true,
"indexFieldId": 254,
@@ -688,4 +753,4 @@
"uiOptions": {
"showProfileId": false
}
-}
+}
\ No newline at end of file
diff --git a/src/app/zap_cluster_list.json b/src/app/zap_cluster_list.json
index fa76c0e9a2f767..fb3e14f7fb22bc 100644
--- a/src/app/zap_cluster_list.json
+++ b/src/app/zap_cluster_list.json
@@ -111,7 +111,9 @@
"TARGET_NAVIGATOR_CLUSTER": [],
"TEMPERATURE_CONTROL_CLUSTER": [],
"TEMPERATURE_MEASUREMENT_CLUSTER": [],
- "THERMOSTAT_CLUSTER": ["thermostat-client"],
+ "THERMOSTAT_CLUSTER": [
+ "thermostat-client"
+ ],
"THERMOSTAT_USER_INTERFACE_CONFIGURATION_CLUSTER": [],
"THREAD_BORDER_ROUTER_MANAGEMENT_CLUSTER": [],
"THREAD_NETWORK_DIAGNOSTICS_CLUSTER": [],
@@ -131,12 +133,17 @@
"LAUNDRY_DRYER_CONTROLS_CLUSTER": [],
"WATER_HEATER_MANAGEMENT_CLUSTER": [],
"WATER_HEATER_MODE_CLUSTER": [],
+ "WEB_RTC_PROVIDER_CLUSTER": [],
"WIFI_NETWORK_DIAGNOSTICS_CLUSTER": [],
"WINDOW_COVERING_CLUSTER": []
},
"ServerDirectories": {
- "ACCESS_CONTROL_CLUSTER": ["access-control-server"],
- "ACCOUNT_LOGIN_CLUSTER": ["account-login-server"],
+ "ACCESS_CONTROL_CLUSTER": [
+ "access-control-server"
+ ],
+ "ACCOUNT_LOGIN_CLUSTER": [
+ "account-login-server"
+ ],
"ACTIONS_CLUSTER": [],
"ACTIVATED_CARBON_FILTER_MONITORING_CLUSTER": [
"resource-monitoring-server"
@@ -144,14 +151,26 @@
"ADMINISTRATOR_COMMISSIONING_CLUSTER": [
"administrator-commissioning-server"
],
- "AIR_QUALITY_CLUSTER": ["air-quality-server"],
+ "AIR_QUALITY_CLUSTER": [
+ "air-quality-server"
+ ],
"ALARM_CLUSTER": [],
- "APPLICATION_BASIC_CLUSTER": ["application-basic-server"],
- "APPLICATION_LAUNCHER_CLUSTER": ["application-launcher-server"],
- "AUDIO_OUTPUT_CLUSTER": ["audio-output-server"],
+ "APPLICATION_BASIC_CLUSTER": [
+ "application-basic-server"
+ ],
+ "APPLICATION_LAUNCHER_CLUSTER": [
+ "application-launcher-server"
+ ],
+ "AUDIO_OUTPUT_CLUSTER": [
+ "audio-output-server"
+ ],
"BALLAST_CONFIGURATION_CLUSTER": [],
- "BASIC_INFORMATION_CLUSTER": ["basic-information"],
- "BINDING_CLUSTER": ["bindings"],
+ "BASIC_INFORMATION_CLUSTER": [
+ "basic-information"
+ ],
+ "BINDING_CLUSTER": [
+ "bindings"
+ ],
"BOOLEAN_STATE_CLUSTER": [],
"BOOLEAN_STATE_CONFIGURATION_CLUSTER": [
"boolean-state-configuration-server"
@@ -165,79 +184,177 @@
"CARBON_MONOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER": [
"concentration-measurement-server"
],
- "CHANNEL_CLUSTER": ["channel-server"],
+ "CHANNEL_CLUSTER": [
+ "channel-server"
+ ],
"CHIME_CLUSTER": [],
- "COLOR_CONTROL_CLUSTER": ["color-control-server"],
- "COMMISSIONER_CONTROL_CLUSTER": ["commissioner-control-server"],
+ "COLOR_CONTROL_CLUSTER": [
+ "color-control-server"
+ ],
+ "COMMISSIONER_CONTROL_CLUSTER": [
+ "commissioner-control-server"
+ ],
"COMMISSIONING_CLUSTER": [],
- "CONTENT_LAUNCHER_CLUSTER": ["content-launch-server"],
- "CONTENT_CONTROL_CLUSTER": ["content-control-server"],
- "CONTENT_APP_OBSERVER_CLUSTER": ["content-app-observer"],
- "DESCRIPTOR_CLUSTER": ["descriptor"],
- "DEVICE_ENERGY_MANAGEMENT_CLUSTER": ["device-energy-management-server"],
- "DEVICE_ENERGY_MANAGEMENT_MODE_CLUSTER": ["mode-base-server"],
+ "CONTENT_LAUNCHER_CLUSTER": [
+ "content-launch-server"
+ ],
+ "CONTENT_CONTROL_CLUSTER": [
+ "content-control-server"
+ ],
+ "CONTENT_APP_OBSERVER_CLUSTER": [
+ "content-app-observer"
+ ],
+ "DESCRIPTOR_CLUSTER": [
+ "descriptor"
+ ],
+ "DEVICE_ENERGY_MANAGEMENT_CLUSTER": [
+ "device-energy-management-server"
+ ],
+ "DEVICE_ENERGY_MANAGEMENT_MODE_CLUSTER": [
+ "mode-base-server"
+ ],
"DEVICE_TEMP_CLUSTER": [],
- "DIAGNOSTIC_LOGS_CLUSTER": ["diagnostic-logs-server"],
- "DISHWASHER_ALARM_CLUSTER": ["dishwasher-alarm-server"],
- "DISHWASHER_MODE_CLUSTER": ["mode-base-server"],
- "MICROWAVE_OVEN_MODE_CLUSTER": ["mode-base-server"],
- "DOOR_LOCK_CLUSTER": ["door-lock-server"],
- "ECOSYSTEM_INFORMATION_CLUSTER": ["ecosystem-information-server"],
+ "DIAGNOSTIC_LOGS_CLUSTER": [
+ "diagnostic-logs-server"
+ ],
+ "DISHWASHER_ALARM_CLUSTER": [
+ "dishwasher-alarm-server"
+ ],
+ "DISHWASHER_MODE_CLUSTER": [
+ "mode-base-server"
+ ],
+ "MICROWAVE_OVEN_MODE_CLUSTER": [
+ "mode-base-server"
+ ],
+ "DOOR_LOCK_CLUSTER": [
+ "door-lock-server"
+ ],
+ "ECOSYSTEM_INFORMATION_CLUSTER": [
+ "ecosystem-information-server"
+ ],
"ELECTRICAL_ENERGY_MEASUREMENT_CLUSTER": [
"electrical-energy-measurement-server"
],
"ELECTRICAL_POWER_MEASUREMENT_CLUSTER": [
"electrical-power-measurement-server"
],
- "ENERGY_EVSE_CLUSTER": ["energy-evse-server"],
- "ENERGY_EVSE_MODE_CLUSTER": ["mode-base-server"],
+ "ENERGY_EVSE_CLUSTER": [
+ "energy-evse-server"
+ ],
+ "ENERGY_EVSE_MODE_CLUSTER": [
+ "mode-base-server"
+ ],
"ETHERNET_NETWORK_DIAGNOSTICS_CLUSTER": [
"ethernet-network-diagnostics-server"
],
- "ENERGY_PREFERENCE_CLUSTER": ["energy-preference-server"],
- "FAN_CONTROL_CLUSTER": ["fan-control-server"],
- "FAULT_INJECTION_CLUSTER": ["fault-injection-server"],
- "FIXED_LABEL_CLUSTER": ["fixed-label-server"],
+ "ENERGY_PREFERENCE_CLUSTER": [
+ "energy-preference-server"
+ ],
+ "FAN_CONTROL_CLUSTER": [
+ "fan-control-server"
+ ],
+ "FAULT_INJECTION_CLUSTER": [
+ "fault-injection-server"
+ ],
+ "FIXED_LABEL_CLUSTER": [
+ "fixed-label-server"
+ ],
"FLOW_MEASUREMENT_CLUSTER": [],
"FORMALDEHYDE_CONCENTRATION_MEASUREMENT_CLUSTER": [
"concentration-measurement-server"
],
- "GENERAL_COMMISSIONING_CLUSTER": ["general-commissioning-server"],
- "GENERAL_DIAGNOSTICS_CLUSTER": ["general-diagnostics-server"],
- "GROUPS_CLUSTER": ["groups-server"],
- "HEPA_FILTER_MONITORING_CLUSTER": ["resource-monitoring-server"],
- "GROUP_KEY_MANAGEMENT_CLUSTER": ["group-key-mgmt-server"],
- "ICD_MANAGEMENT_CLUSTER": ["icd-management-server"],
- "IDENTIFY_CLUSTER": ["identify-server"],
+ "GENERAL_COMMISSIONING_CLUSTER": [
+ "general-commissioning-server"
+ ],
+ "GENERAL_DIAGNOSTICS_CLUSTER": [
+ "general-diagnostics-server"
+ ],
+ "GROUPS_CLUSTER": [
+ "groups-server"
+ ],
+ "HEPA_FILTER_MONITORING_CLUSTER": [
+ "resource-monitoring-server"
+ ],
+ "GROUP_KEY_MANAGEMENT_CLUSTER": [
+ "group-key-mgmt-server"
+ ],
+ "ICD_MANAGEMENT_CLUSTER": [
+ "icd-management-server"
+ ],
+ "IDENTIFY_CLUSTER": [
+ "identify-server"
+ ],
"ILLUMINANCE_MEASUREMENT_CLUSTER": [],
- "KEYPAD_INPUT_CLUSTER": ["keypad-input-server"],
- "LAUNDRY_WASHER_MODE_CLUSTER": ["mode-base-server"],
- "LEVEL_CONTROL_CLUSTER": ["level-control"],
+ "KEYPAD_INPUT_CLUSTER": [
+ "keypad-input-server"
+ ],
+ "LAUNDRY_WASHER_MODE_CLUSTER": [
+ "mode-base-server"
+ ],
+ "LEVEL_CONTROL_CLUSTER": [
+ "level-control"
+ ],
"LOCALIZATION_CONFIGURATION_CLUSTER": [
"localization-configuration-server"
],
- "LOW_POWER_CLUSTER": ["low-power-server"],
- "MEDIA_INPUT_CLUSTER": ["media-input-server"],
- "MEDIA_PLAYBACK_CLUSTER": ["media-playback-server"],
- "MICROWAVE_OVEN_CONTROL_CLUSTER": ["microwave-oven-control-server"],
- "MESSAGES_CLUSTER": ["messages-server"],
- "MODE_SELECT_CLUSTER": ["mode-select-server"],
- "NETWORK_COMMISSIONING_CLUSTER": ["network-commissioning"],
+ "LOW_POWER_CLUSTER": [
+ "low-power-server"
+ ],
+ "MEDIA_INPUT_CLUSTER": [
+ "media-input-server"
+ ],
+ "MEDIA_PLAYBACK_CLUSTER": [
+ "media-playback-server"
+ ],
+ "MICROWAVE_OVEN_CONTROL_CLUSTER": [
+ "microwave-oven-control-server"
+ ],
+ "MESSAGES_CLUSTER": [
+ "messages-server"
+ ],
+ "MODE_SELECT_CLUSTER": [
+ "mode-select-server"
+ ],
+ "NETWORK_COMMISSIONING_CLUSTER": [
+ "network-commissioning"
+ ],
"NITROGEN_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER": [
"concentration-measurement-server"
],
- "SAMPLE_MEI_CLUSTER": ["sample-mei-server"],
- "OCCUPANCY_SENSING_CLUSTER": ["occupancy-sensor-server"],
- "ON_OFF_CLUSTER": ["on-off-server"],
- "POWER_TOPOLOGY_CLUSTER": ["power-topology-server"],
- "OPERATIONAL_CREDENTIALS_CLUSTER": ["operational-credentials-server"],
- "OPERATIONAL_STATE_CLUSTER": ["operational-state-server"],
- "OPERATIONAL_STATE_OVEN_CLUSTER": ["operational-state-server"],
- "OPERATIONAL_STATE_RVC_CLUSTER": ["operational-state-server"],
+ "SAMPLE_MEI_CLUSTER": [
+ "sample-mei-server"
+ ],
+ "OCCUPANCY_SENSING_CLUSTER": [
+ "occupancy-sensor-server"
+ ],
+ "ON_OFF_CLUSTER": [
+ "on-off-server"
+ ],
+ "POWER_TOPOLOGY_CLUSTER": [
+ "power-topology-server"
+ ],
+ "OPERATIONAL_CREDENTIALS_CLUSTER": [
+ "operational-credentials-server"
+ ],
+ "OPERATIONAL_STATE_CLUSTER": [
+ "operational-state-server"
+ ],
+ "OPERATIONAL_STATE_OVEN_CLUSTER": [
+ "operational-state-server"
+ ],
+ "OPERATIONAL_STATE_RVC_CLUSTER": [
+ "operational-state-server"
+ ],
"OTA_BOOTLOAD_CLUSTER": [],
- "OTA_SOFTWARE_UPDATE_PROVIDER_CLUSTER": ["ota-provider"],
- "OTA_SOFTWARE_UPDATE_REQUESTOR_CLUSTER": ["ota-requestor"],
- "OVEN_MODE_CLUSTER": ["mode-base-server"],
+ "OTA_SOFTWARE_UPDATE_PROVIDER_CLUSTER": [
+ "ota-provider"
+ ],
+ "OTA_SOFTWARE_UPDATE_REQUESTOR_CLUSTER": [
+ "ota-requestor"
+ ],
+ "OVEN_MODE_CLUSTER": [
+ "mode-base-server"
+ ],
"OZONE_CONCENTRATION_MEASUREMENT_CLUSTER": [
"concentration-measurement-server"
],
@@ -253,7 +370,9 @@
"POLL_CONTROL_CLUSTER": [],
"POWER_CONFIG_CLUSTER": [],
"POWER_PROFILE_CLUSTER": [],
- "POWER_SOURCE_CLUSTER": ["power-source-server"],
+ "POWER_SOURCE_CLUSTER": [
+ "power-source-server"
+ ],
"POWER_SOURCE_CONFIGURATION_CLUSTER": [
"power-source-configuration-server"
],
@@ -268,22 +387,44 @@
"RADON_CONCENTRATION_MEASUREMENT_CLUSTER": [
"concentration-measurement-server"
],
- "REFRIGERATOR_ALARM_CLUSTER": ["refrigerator-alarm-server"],
+ "REFRIGERATOR_ALARM_CLUSTER": [
+ "refrigerator-alarm-server"
+ ],
"REFRIGERATOR_AND_TEMPERATURE_CONTROLLED_CABINET_MODE_CLUSTER": [
"mode-base-server"
],
"RELATIVE_HUMIDITY_MEASUREMENT_CLUSTER": [],
- "RVC_CLEAN_MODE_CLUSTER": ["mode-base-server"],
- "RVC_RUN_MODE_CLUSTER": ["mode-base-server"],
- "SCENES_CLUSTER": ["scenes-server"],
- "SERVICE_AREA_CLUSTER": ["service-area-server"],
- "SMOKE_CO_ALARM_CLUSTER": ["smoke-co-alarm-server"],
- "SOFTWARE_DIAGNOSTICS_CLUSTER": ["software-diagnostics-server"],
- "SWITCH_CLUSTER": ["switch-server"],
- "TARGET_NAVIGATOR_CLUSTER": ["target-navigator-server"],
- "TEMPERATURE_CONTROL_CLUSTER": ["temperature-control-server"],
+ "RVC_CLEAN_MODE_CLUSTER": [
+ "mode-base-server"
+ ],
+ "RVC_RUN_MODE_CLUSTER": [
+ "mode-base-server"
+ ],
+ "SCENES_CLUSTER": [
+ "scenes-server"
+ ],
+ "SERVICE_AREA_CLUSTER": [
+ "service-area-server"
+ ],
+ "SMOKE_CO_ALARM_CLUSTER": [
+ "smoke-co-alarm-server"
+ ],
+ "SOFTWARE_DIAGNOSTICS_CLUSTER": [
+ "software-diagnostics-server"
+ ],
+ "SWITCH_CLUSTER": [
+ "switch-server"
+ ],
+ "TARGET_NAVIGATOR_CLUSTER": [
+ "target-navigator-server"
+ ],
+ "TEMPERATURE_CONTROL_CLUSTER": [
+ "temperature-control-server"
+ ],
"TEMPERATURE_MEASUREMENT_CLUSTER": [],
- "THERMOSTAT_CLUSTER": ["thermostat-server"],
+ "THERMOSTAT_CLUSTER": [
+ "thermostat-server"
+ ],
"THERMOSTAT_USER_INTERFACE_CONFIGURATION_CLUSTER": [
"thermostat-user-interface-configuration-server"
],
@@ -293,27 +434,56 @@
"THREAD_NETWORK_DIAGNOSTICS_CLUSTER": [
"thread-network-diagnostics-server"
],
- "THREAD_NETWORK_DIRECTORY_CLUSTER": ["thread-network-directory-server"],
+ "THREAD_NETWORK_DIRECTORY_CLUSTER": [
+ "thread-network-directory-server"
+ ],
"TIME_CLUSTER": [],
- "TIME_FORMAT_LOCALIZATION_CLUSTER": ["time-format-localization-server"],
- "TIME_SYNCHRONIZATION_CLUSTER": ["time-synchronization-server"],
- "TIMER_CLUSTER": ["timer-server"],
+ "TIME_FORMAT_LOCALIZATION_CLUSTER": [
+ "time-format-localization-server"
+ ],
+ "TIME_SYNCHRONIZATION_CLUSTER": [
+ "time-synchronization-server"
+ ],
+ "TIMER_CLUSTER": [
+ "timer-server"
+ ],
"TVOC_CONCENTRATION_MEASUREMENT_CLUSTER": [
"concentration-measurement-server"
],
"UNIT_LOCALIZATION_CLUSTER": [],
- "UNIT_TESTING_CLUSTER": ["test-cluster-server"],
- "USER_LABEL_CLUSTER": ["user-label-server"],
+ "UNIT_TESTING_CLUSTER": [
+ "test-cluster-server"
+ ],
+ "USER_LABEL_CLUSTER": [
+ "user-label-server"
+ ],
"VALVE_CONFIGURATION_AND_CONTROL_CLUSTER": [
"valve-configuration-and-control-server"
],
- "WAKE_ON_LAN_CLUSTER": ["wake-on-lan-server"],
- "LAUNDRY_WASHER_CONTROLS_CLUSTER": ["laundry-washer-controls-server"],
- "LAUNDRY_DRYER_CONTROLS_CLUSTER": ["laundry-dryer-controls-server"],
- "WIFI_NETWORK_DIAGNOSTICS_CLUSTER": ["wifi-network-diagnostics-server"],
- "WIFI_NETWORK_MANAGEMENT_CLUSTER": ["wifi-network-management-server"],
- "WINDOW_COVERING_CLUSTER": ["window-covering-server"],
- "WATER_HEATER_MANAGEMENT_CLUSTER": ["water-heater-management-server"],
- "WATER_HEATER_MODE_CLUSTER": ["mode-base-server"]
+ "WAKE_ON_LAN_CLUSTER": [
+ "wake-on-lan-server"
+ ],
+ "LAUNDRY_WASHER_CONTROLS_CLUSTER": [
+ "laundry-washer-controls-server"
+ ],
+ "LAUNDRY_DRYER_CONTROLS_CLUSTER": [
+ "laundry-dryer-controls-server"
+ ],
+ "WEB_RTC_PROVIDER_CLUSTER": [],
+ "WIFI_NETWORK_DIAGNOSTICS_CLUSTER": [
+ "wifi-network-diagnostics-server"
+ ],
+ "WIFI_NETWORK_MANAGEMENT_CLUSTER": [
+ "wifi-network-management-server"
+ ],
+ "WINDOW_COVERING_CLUSTER": [
+ "window-covering-server"
+ ],
+ "WATER_HEATER_MANAGEMENT_CLUSTER": [
+ "water-heater-management-server"
+ ],
+ "WATER_HEATER_MODE_CLUSTER": [
+ "mode-base-server"
+ ]
}
-}
+}
\ No newline at end of file
From 7d96d1e6352b72cb57a3e3074ba24dbc3e9d6601 Mon Sep 17 00:00:00 2001
From: marcos <15697303+gmarcosb@users.noreply.github.com>
Date: Wed, 2 Oct 2024 17:45:53 -0600
Subject: [PATCH 2/8] Update description
---
.../zcl/data-model/chip/webrtc-provider-cluster.xml | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/src/app/zap-templates/zcl/data-model/chip/webrtc-provider-cluster.xml b/src/app/zap-templates/zcl/data-model/chip/webrtc-provider-cluster.xml
index 9e975cf3c1c67a..35885094aa8795 100644
--- a/src/app/zap-templates/zcl/data-model/chip/webrtc-provider-cluster.xml
+++ b/src/app/zap-templates/zcl/data-model/chip/webrtc-provider-cluster.xml
@@ -76,12 +76,11 @@ Git: 0.9-fall2024-234-gf4d359001
-
+
WebRTC Transport Provider
0x0553
- WEBRTC_TRANSPORT_PROVIDER_CLUSTER
- The following process SHALL be followed when the server receives this command:
+ WEBRTC_TRANSPORT_PROVIDER_CLUSTERThe WebRTC transport provider cluster provides a way for stream providers (e.g. Cameras) to stream or receive their data through WebRTC.
true
true
From eaa71512a45b687d5df78f41aa4476368fc0286e Mon Sep 17 00:00:00 2001
From: marcos <15697303+gmarcosb@users.noreply.github.com>
Date: Wed, 2 Oct 2024 17:50:55 -0600
Subject: [PATCH 3/8] Generated using ./scripts/tools/zap_regen_all.py
---
docs/zap_clusters.md | 1 +
.../data_model/controller-clusters.matter | 115 ++
.../chip/devicecontroller/ChipClusters.java | 447 +++++++
.../chip/devicecontroller/ChipStructs.java | 227 ++++
.../devicecontroller/ClusterIDMapping.java | 194 +++
.../devicecontroller/ClusterInfoMapping.java | 338 +++++
.../devicecontroller/ClusterReadMapping.java | 82 ++
.../devicecontroller/ClusterWriteMapping.java | 2 +
.../chip/devicecontroller/cluster/files.gni | 2 +
.../java/matter/controller/cluster/files.gni | 3 +
.../CHIPAttributeTLVValueDecoder.cpp | 250 ++++
.../CHIPEventTLVValueDecoder.cpp | 10 +
.../python/chip/clusters/CHIPClusters.py | 102 ++
.../python/chip/clusters/Objects.py | 369 ++++++
.../MTRAttributeSpecifiedCheck.mm | 33 +
.../MTRAttributeTLVValueDecoder.mm | 56 +
.../CHIP/zap-generated/MTRBaseClusters.h | 124 ++
.../CHIP/zap-generated/MTRBaseClusters.mm | 377 ++++++
.../CHIP/zap-generated/MTRClusterConstants.h | 19 +
.../CHIP/zap-generated/MTRClusterNames.mm | 52 +
.../CHIP/zap-generated/MTRClusters.h | 44 +
.../CHIP/zap-generated/MTRClusters.mm | 174 +++
.../zap-generated/MTRCommandPayloadsObjc.h | 228 ++++
.../zap-generated/MTRCommandPayloadsObjc.mm | 852 ++++++++++++
.../MTRCommandPayloads_Internal.h | 42 +
.../zap-generated/MTRCommandTimedCheck.mm | 12 +
.../zap-generated/MTREventTLVValueDecoder.mm | 15 +
.../CHIP/zap-generated/MTRStructsObjc.h | 19 +
.../CHIP/zap-generated/MTRStructsObjc.mm | 81 ++
.../zap-generated/attributes/Accessors.cpp | 773 ++++++++++-
.../zap-generated/attributes/Accessors.h | 90 ++
.../app-common/zap-generated/callback.h | 73 +
.../zap-generated/cluster-enums-check.h | 37 +
.../app-common/zap-generated/cluster-enums.h | 51 +
.../zap-generated/cluster-objects.cpp | 496 +++++++
.../zap-generated/cluster-objects.h | 474 +++++++
.../app-common/zap-generated/ids/Attributes.h | 34 +
.../app-common/zap-generated/ids/Clusters.h | 3 +
.../app-common/zap-generated/ids/Commands.h | 34 +
.../zap-generated/cluster/Commands.h | 296 +++++
.../cluster/ComplexArgumentParser.cpp | 113 ++
.../cluster/ComplexArgumentParser.h | 10 +
.../cluster/logging/DataModelLogger.cpp | 186 +++
.../cluster/logging/DataModelLogger.h | 12 +
.../cluster/logging/EntryToText.cpp | 51 +
.../zap-generated/cluster/Commands.h | 1177 +++++++++++++++++
46 files changed, 8139 insertions(+), 41 deletions(-)
diff --git a/docs/zap_clusters.md b/docs/zap_clusters.md
index 94fe851dcdda21..1250a60b71302e 100644
--- a/docs/zap_clusters.md
+++ b/docs/zap_clusters.md
@@ -129,6 +129,7 @@ Generally regenerate using one of:
| 1294 | 0x50E | AccountLogin |
| 1295 | 0x50F | ContentControl |
| 1296 | 0x510 | ContentAppObserver |
+| 1363 | 0x553 | WebRTCTransportProvider |
| 1366 | 0x556 | Chime |
| 1872 | 0x750 | EcosystemInformation |
| 1873 | 0x751 | CommissionerControl |
diff --git a/src/controller/data_model/controller-clusters.matter b/src/controller/data_model/controller-clusters.matter
index c4b63de0a8070c..09aae39cf2dfb0 100644
--- a/src/controller/data_model/controller-clusters.matter
+++ b/src/controller/data_model/controller-clusters.matter
@@ -9415,6 +9415,121 @@ provisional cluster ContentAppObserver = 1296 {
command ContentAppMessage(ContentAppMessageRequest): ContentAppMessageResponse = 0;
}
+/** The WebRTC transport provider cluster provides a way for stream providers (e.g. Cameras) to stream or receive their data through WebRTC. */
+provisional cluster WebRTCTransportProvider = 1363 {
+ revision 1;
+
+ enum StreamTypeEnum : enum8 {
+ kInternal = 0;
+ kRecording = 1;
+ kAnalysis = 2;
+ kLiveView = 3;
+ }
+
+ enum WebRTCEndReasonEnum : enum8 {
+ kIceFailed = 0;
+ kIceTimeout = 1;
+ kUserHangup = 2;
+ kUserBusy = 3;
+ kReplaced = 4;
+ kNoUserMedia = 5;
+ kInviteTimeout = 6;
+ kAnsweredElsewhere = 7;
+ kOutOfResources = 8;
+ kMediaTimeout = 9;
+ kLowPower = 10;
+ kUnknownReason = 11;
+ }
+
+ bitmap WebRTCMetadataOptions : bitmap8 {
+ kDataTLV = 0x1;
+ }
+
+ struct ICEServerStruct {
+ char_string urls[] = 1;
+ optional char_string username = 2;
+ optional char_string credential = 3;
+ optional int16u caid = 4;
+ }
+
+ struct WebRTCSessionStruct {
+ int16u id = 1;
+ node_id peerNodeID = 2;
+ fabric_idx peerFabricIndex = 3;
+ StreamTypeEnum streamType = 4;
+ nullable int16u videoStreamID = 5;
+ nullable int16u audioStreamID = 6;
+ WebRTCMetadataOptions metadataOptions = 7;
+ }
+
+ readonly attribute WebRTCSessionStruct currentSessions[] = 0;
+ readonly attribute command_id generatedCommandList[] = 65528;
+ readonly attribute command_id acceptedCommandList[] = 65529;
+ readonly attribute event_id eventList[] = 65530;
+ readonly attribute attrib_id attributeList[] = 65531;
+ readonly attribute bitmap32 featureMap = 65532;
+ readonly attribute int16u clusterRevision = 65533;
+
+ request struct SolicitOfferRequest {
+ StreamTypeEnum streamType = 0;
+ optional nullable int16u videoStreamID = 1;
+ optional nullable int16u audioStreamID = 2;
+ optional ICEServerStruct ICEServers[] = 3;
+ optional char_string ICETransportPolicy = 4;
+ optional WebRTCMetadataOptions metadataOptions = 5;
+ }
+
+ response struct SolicitOfferResponse = 2 {
+ int16u webRTCSessionID = 0;
+ boolean deferredOffer = 1;
+ optional nullable int16u videoStreamID = 2;
+ optional nullable int16u audioStreamID = 3;
+ }
+
+ request struct ProvideOfferRequest {
+ nullable int16u webRTCSessionID = 0;
+ char_string sdp = 1;
+ StreamTypeEnum streamType = 2;
+ optional nullable int16u videoStreamID = 3;
+ optional nullable int16u audioStreamID = 4;
+ optional ICEServerStruct ICEServers[] = 5;
+ optional char_string ICETransportPolicy = 6;
+ optional WebRTCMetadataOptions metadataOptions = 7;
+ }
+
+ response struct ProvideOfferResponse = 4 {
+ int16u webRTCSessionID = 0;
+ int16u videoStreamID = 1;
+ int16u audioStreamID = 2;
+ }
+
+ request struct ProvideAnswerRequest {
+ int16u webRTCSessionID = 0;
+ char_string sdp = 1;
+ }
+
+ request struct ProvideICECandidateRequest {
+ int16u webRTCSessionID = 0;
+ char_string ICECandidate = 1;
+ }
+
+ request struct EndSessionRequest {
+ int16u webRTCSessionID = 0;
+ WebRTCEndReasonEnum reason = 1;
+ }
+
+ /** Requests that the Provider initiates a new session with the Offer / Answer flow in a way that allows for options to be passed and work with devices needing the standby flow. */
+ command SolicitOffer(SolicitOfferRequest): SolicitOfferResponse = 1;
+ /** This command allows an SDP Offer to be set and start a new session. */
+ command ProvideOffer(ProvideOfferRequest): ProvideOfferResponse = 3;
+ /** This command SHALL be initiated from a Node in response to an Offer that was previously received from a remote peer. */
+ command ProvideAnswer(ProvideAnswerRequest): DefaultSuccess = 5;
+ /** This command allows for https://www.rfc-editor.org/rfc/rfc8839#section-4.2.1.2 nominated after the initial Offer / Answer exchange to be added to a session during the gathering phase. */
+ command ProvideICECandidate(ProvideICECandidateRequest): DefaultSuccess = 6;
+ /** This command instructs the stream provider to end the WebRTC session. */
+ command EndSession(EndSessionRequest): DefaultSuccess = 7;
+}
+
/** This cluster provides facilities to configure and play Chime sounds, such as those used in a doorbell. */
provisional cluster Chime = 1366 {
revision 1;
diff --git a/src/controller/java/generated/java/chip/devicecontroller/ChipClusters.java b/src/controller/java/generated/java/chip/devicecontroller/ChipClusters.java
index dbc26ae23c7a10..88e4e0fb901447 100644
--- a/src/controller/java/generated/java/chip/devicecontroller/ChipClusters.java
+++ b/src/controller/java/generated/java/chip/devicecontroller/ChipClusters.java
@@ -59491,6 +59491,453 @@ public void onSuccess(byte[] tlv) {
}
}
+ public static class WebRTCTransportProviderCluster extends BaseChipCluster {
+ public static final long CLUSTER_ID = 1363L;
+
+ private static final long CURRENT_SESSIONS_ATTRIBUTE_ID = 0L;
+ private static final long GENERATED_COMMAND_LIST_ATTRIBUTE_ID = 65528L;
+ private static final long ACCEPTED_COMMAND_LIST_ATTRIBUTE_ID = 65529L;
+ private static final long EVENT_LIST_ATTRIBUTE_ID = 65530L;
+ private static final long ATTRIBUTE_LIST_ATTRIBUTE_ID = 65531L;
+ private static final long FEATURE_MAP_ATTRIBUTE_ID = 65532L;
+ private static final long CLUSTER_REVISION_ATTRIBUTE_ID = 65533L;
+
+ public WebRTCTransportProviderCluster(long devicePtr, int endpointId) {
+ super(devicePtr, endpointId, CLUSTER_ID);
+ }
+
+ @Override
+ @Deprecated
+ public long initWithDevice(long devicePtr, int endpointId) {
+ return 0L;
+ }
+
+ public void solicitOffer(SolicitOfferResponseCallback callback, Integer streamType, @Nullable Optional videoStreamID, @Nullable Optional audioStreamID, Optional> ICEServers, Optional ICETransportPolicy, Optional metadataOptions) {
+ solicitOffer(callback, streamType, videoStreamID, audioStreamID, ICEServers, ICETransportPolicy, metadataOptions, 0);
+ }
+
+ public void solicitOffer(SolicitOfferResponseCallback callback, Integer streamType, @Nullable Optional videoStreamID, @Nullable Optional audioStreamID, Optional> ICEServers, Optional ICETransportPolicy, Optional metadataOptions, int timedInvokeTimeoutMs) {
+ final long commandId = 1L;
+
+ ArrayList elements = new ArrayList<>();
+ final long streamTypeFieldID = 0L;
+ BaseTLVType streamTypetlvValue = new UIntType(streamType);
+ elements.add(new StructElement(streamTypeFieldID, streamTypetlvValue));
+
+ final long videoStreamIDFieldID = 1L;
+ BaseTLVType videoStreamIDtlvValue = videoStreamID != null ? videoStreamID.map((nonOptionalvideoStreamID) -> new UIntType(nonOptionalvideoStreamID)).orElse(new EmptyType()) : new NullType();
+ elements.add(new StructElement(videoStreamIDFieldID, videoStreamIDtlvValue));
+
+ final long audioStreamIDFieldID = 2L;
+ BaseTLVType audioStreamIDtlvValue = audioStreamID != null ? audioStreamID.map((nonOptionalaudioStreamID) -> new UIntType(nonOptionalaudioStreamID)).orElse(new EmptyType()) : new NullType();
+ elements.add(new StructElement(audioStreamIDFieldID, audioStreamIDtlvValue));
+
+ final long ICEServersFieldID = 3L;
+ BaseTLVType ICEServerstlvValue = ICEServers.map((nonOptionalICEServers) -> ArrayType.generateArrayType(nonOptionalICEServers, (elementnonOptionalICEServers) -> elementnonOptionalICEServers.encodeTlv())).orElse(new EmptyType());
+ elements.add(new StructElement(ICEServersFieldID, ICEServerstlvValue));
+
+ final long ICETransportPolicyFieldID = 4L;
+ BaseTLVType ICETransportPolicytlvValue = ICETransportPolicy.map((nonOptionalICETransportPolicy) -> new StringType(nonOptionalICETransportPolicy)).orElse(new EmptyType());
+ elements.add(new StructElement(ICETransportPolicyFieldID, ICETransportPolicytlvValue));
+
+ final long metadataOptionsFieldID = 5L;
+ BaseTLVType metadataOptionstlvValue = metadataOptions.map((nonOptionalmetadataOptions) -> new UIntType(nonOptionalmetadataOptions)).orElse(new EmptyType());
+ elements.add(new StructElement(metadataOptionsFieldID, metadataOptionstlvValue));
+
+ StructType commandArgs = new StructType(elements);
+ invoke(new InvokeCallbackImpl(callback) {
+ @Override
+ public void onResponse(StructType invokeStructValue) {
+ final long webRTCSessionIDFieldID = 0L;
+ Integer webRTCSessionID = null;
+ final long deferredOfferFieldID = 1L;
+ Boolean deferredOffer = null;
+ final long videoStreamIDFieldID = 2L;
+ @Nullable Optional videoStreamID = null;
+ final long audioStreamIDFieldID = 3L;
+ @Nullable Optional audioStreamID = null;
+ for (StructElement element: invokeStructValue.value()) {
+ if (element.contextTagNum() == webRTCSessionIDFieldID) {
+ if (element.value(BaseTLVType.class).type() == TLVType.UInt) {
+ UIntType castingValue = element.value(UIntType.class);
+ webRTCSessionID = castingValue.value(Integer.class);
+ }
+ } else if (element.contextTagNum() == deferredOfferFieldID) {
+ if (element.value(BaseTLVType.class).type() == TLVType.Boolean) {
+ BooleanType castingValue = element.value(BooleanType.class);
+ deferredOffer = castingValue.value(Boolean.class);
+ }
+ } else if (element.contextTagNum() == videoStreamIDFieldID) {
+ if (element.value(BaseTLVType.class).type() == TLVType.UInt) {
+ UIntType castingValue = element.value(UIntType.class);
+ videoStreamID = Optional.of(castingValue.value(Integer.class));
+ }
+ } else if (element.contextTagNum() == audioStreamIDFieldID) {
+ if (element.value(BaseTLVType.class).type() == TLVType.UInt) {
+ UIntType castingValue = element.value(UIntType.class);
+ audioStreamID = Optional.of(castingValue.value(Integer.class));
+ }
+ }
+ }
+ callback.onSuccess(webRTCSessionID, deferredOffer, videoStreamID, audioStreamID);
+ }}, commandId, commandArgs, timedInvokeTimeoutMs);
+ }
+
+ public void provideOffer(ProvideOfferResponseCallback callback, @Nullable Integer webRTCSessionID, String sdp, Integer streamType, @Nullable Optional videoStreamID, @Nullable Optional audioStreamID, Optional> ICEServers, Optional ICETransportPolicy, Optional metadataOptions) {
+ provideOffer(callback, webRTCSessionID, sdp, streamType, videoStreamID, audioStreamID, ICEServers, ICETransportPolicy, metadataOptions, 0);
+ }
+
+ public void provideOffer(ProvideOfferResponseCallback callback, @Nullable Integer webRTCSessionID, String sdp, Integer streamType, @Nullable Optional videoStreamID, @Nullable Optional audioStreamID, Optional> ICEServers, Optional ICETransportPolicy, Optional metadataOptions, int timedInvokeTimeoutMs) {
+ final long commandId = 3L;
+
+ ArrayList elements = new ArrayList<>();
+ final long webRTCSessionIDFieldID = 0L;
+ BaseTLVType webRTCSessionIDtlvValue = webRTCSessionID != null ? new UIntType(webRTCSessionID) : new NullType();
+ elements.add(new StructElement(webRTCSessionIDFieldID, webRTCSessionIDtlvValue));
+
+ final long sdpFieldID = 1L;
+ BaseTLVType sdptlvValue = new StringType(sdp);
+ elements.add(new StructElement(sdpFieldID, sdptlvValue));
+
+ final long streamTypeFieldID = 2L;
+ BaseTLVType streamTypetlvValue = new UIntType(streamType);
+ elements.add(new StructElement(streamTypeFieldID, streamTypetlvValue));
+
+ final long videoStreamIDFieldID = 3L;
+ BaseTLVType videoStreamIDtlvValue = videoStreamID != null ? videoStreamID.map((nonOptionalvideoStreamID) -> new UIntType(nonOptionalvideoStreamID)).orElse(new EmptyType()) : new NullType();
+ elements.add(new StructElement(videoStreamIDFieldID, videoStreamIDtlvValue));
+
+ final long audioStreamIDFieldID = 4L;
+ BaseTLVType audioStreamIDtlvValue = audioStreamID != null ? audioStreamID.map((nonOptionalaudioStreamID) -> new UIntType(nonOptionalaudioStreamID)).orElse(new EmptyType()) : new NullType();
+ elements.add(new StructElement(audioStreamIDFieldID, audioStreamIDtlvValue));
+
+ final long ICEServersFieldID = 5L;
+ BaseTLVType ICEServerstlvValue = ICEServers.map((nonOptionalICEServers) -> ArrayType.generateArrayType(nonOptionalICEServers, (elementnonOptionalICEServers) -> elementnonOptionalICEServers.encodeTlv())).orElse(new EmptyType());
+ elements.add(new StructElement(ICEServersFieldID, ICEServerstlvValue));
+
+ final long ICETransportPolicyFieldID = 6L;
+ BaseTLVType ICETransportPolicytlvValue = ICETransportPolicy.map((nonOptionalICETransportPolicy) -> new StringType(nonOptionalICETransportPolicy)).orElse(new EmptyType());
+ elements.add(new StructElement(ICETransportPolicyFieldID, ICETransportPolicytlvValue));
+
+ final long metadataOptionsFieldID = 7L;
+ BaseTLVType metadataOptionstlvValue = metadataOptions.map((nonOptionalmetadataOptions) -> new UIntType(nonOptionalmetadataOptions)).orElse(new EmptyType());
+ elements.add(new StructElement(metadataOptionsFieldID, metadataOptionstlvValue));
+
+ StructType commandArgs = new StructType(elements);
+ invoke(new InvokeCallbackImpl(callback) {
+ @Override
+ public void onResponse(StructType invokeStructValue) {
+ final long webRTCSessionIDFieldID = 0L;
+ Integer webRTCSessionID = null;
+ final long videoStreamIDFieldID = 1L;
+ Integer videoStreamID = null;
+ final long audioStreamIDFieldID = 2L;
+ Integer audioStreamID = null;
+ for (StructElement element: invokeStructValue.value()) {
+ if (element.contextTagNum() == webRTCSessionIDFieldID) {
+ if (element.value(BaseTLVType.class).type() == TLVType.UInt) {
+ UIntType castingValue = element.value(UIntType.class);
+ webRTCSessionID = castingValue.value(Integer.class);
+ }
+ } else if (element.contextTagNum() == videoStreamIDFieldID) {
+ if (element.value(BaseTLVType.class).type() == TLVType.UInt) {
+ UIntType castingValue = element.value(UIntType.class);
+ videoStreamID = castingValue.value(Integer.class);
+ }
+ } else if (element.contextTagNum() == audioStreamIDFieldID) {
+ if (element.value(BaseTLVType.class).type() == TLVType.UInt) {
+ UIntType castingValue = element.value(UIntType.class);
+ audioStreamID = castingValue.value(Integer.class);
+ }
+ }
+ }
+ callback.onSuccess(webRTCSessionID, videoStreamID, audioStreamID);
+ }}, commandId, commandArgs, timedInvokeTimeoutMs);
+ }
+
+ public void provideAnswer(DefaultClusterCallback callback, Integer webRTCSessionID, String sdp) {
+ provideAnswer(callback, webRTCSessionID, sdp, 0);
+ }
+
+ public void provideAnswer(DefaultClusterCallback callback, Integer webRTCSessionID, String sdp, int timedInvokeTimeoutMs) {
+ final long commandId = 5L;
+
+ ArrayList elements = new ArrayList<>();
+ final long webRTCSessionIDFieldID = 0L;
+ BaseTLVType webRTCSessionIDtlvValue = new UIntType(webRTCSessionID);
+ elements.add(new StructElement(webRTCSessionIDFieldID, webRTCSessionIDtlvValue));
+
+ final long sdpFieldID = 1L;
+ BaseTLVType sdptlvValue = new StringType(sdp);
+ elements.add(new StructElement(sdpFieldID, sdptlvValue));
+
+ StructType commandArgs = new StructType(elements);
+ invoke(new InvokeCallbackImpl(callback) {
+ @Override
+ public void onResponse(StructType invokeStructValue) {
+ callback.onSuccess();
+ }}, commandId, commandArgs, timedInvokeTimeoutMs);
+ }
+
+ public void provideICECandidate(DefaultClusterCallback callback, Integer webRTCSessionID, String ICECandidate) {
+ provideICECandidate(callback, webRTCSessionID, ICECandidate, 0);
+ }
+
+ public void provideICECandidate(DefaultClusterCallback callback, Integer webRTCSessionID, String ICECandidate, int timedInvokeTimeoutMs) {
+ final long commandId = 6L;
+
+ ArrayList elements = new ArrayList<>();
+ final long webRTCSessionIDFieldID = 0L;
+ BaseTLVType webRTCSessionIDtlvValue = new UIntType(webRTCSessionID);
+ elements.add(new StructElement(webRTCSessionIDFieldID, webRTCSessionIDtlvValue));
+
+ final long ICECandidateFieldID = 1L;
+ BaseTLVType ICECandidatetlvValue = new StringType(ICECandidate);
+ elements.add(new StructElement(ICECandidateFieldID, ICECandidatetlvValue));
+
+ StructType commandArgs = new StructType(elements);
+ invoke(new InvokeCallbackImpl(callback) {
+ @Override
+ public void onResponse(StructType invokeStructValue) {
+ callback.onSuccess();
+ }}, commandId, commandArgs, timedInvokeTimeoutMs);
+ }
+
+ public void endSession(DefaultClusterCallback callback, Integer webRTCSessionID, Integer reason) {
+ endSession(callback, webRTCSessionID, reason, 0);
+ }
+
+ public void endSession(DefaultClusterCallback callback, Integer webRTCSessionID, Integer reason, int timedInvokeTimeoutMs) {
+ final long commandId = 7L;
+
+ ArrayList elements = new ArrayList<>();
+ final long webRTCSessionIDFieldID = 0L;
+ BaseTLVType webRTCSessionIDtlvValue = new UIntType(webRTCSessionID);
+ elements.add(new StructElement(webRTCSessionIDFieldID, webRTCSessionIDtlvValue));
+
+ final long reasonFieldID = 1L;
+ BaseTLVType reasontlvValue = new UIntType(reason);
+ elements.add(new StructElement(reasonFieldID, reasontlvValue));
+
+ StructType commandArgs = new StructType(elements);
+ invoke(new InvokeCallbackImpl(callback) {
+ @Override
+ public void onResponse(StructType invokeStructValue) {
+ callback.onSuccess();
+ }}, commandId, commandArgs, timedInvokeTimeoutMs);
+ }
+
+ public interface SolicitOfferResponseCallback extends BaseClusterCallback {
+ void onSuccess(Integer webRTCSessionID, Boolean deferredOffer, @Nullable Optional videoStreamID, @Nullable Optional audioStreamID);
+ }
+
+ public interface ProvideOfferResponseCallback extends BaseClusterCallback {
+ void onSuccess(Integer webRTCSessionID, Integer videoStreamID, Integer audioStreamID);
+ }
+
+ public interface CurrentSessionsAttributeCallback extends BaseAttributeCallback {
+ void onSuccess(List value);
+ }
+
+ public interface GeneratedCommandListAttributeCallback extends BaseAttributeCallback {
+ void onSuccess(List value);
+ }
+
+ public interface AcceptedCommandListAttributeCallback extends BaseAttributeCallback {
+ void onSuccess(List value);
+ }
+
+ public interface EventListAttributeCallback extends BaseAttributeCallback {
+ void onSuccess(List value);
+ }
+
+ public interface AttributeListAttributeCallback extends BaseAttributeCallback {
+ void onSuccess(List value);
+ }
+
+ public void readCurrentSessionsAttribute(
+ CurrentSessionsAttributeCallback callback) {
+ ChipAttributePath path = ChipAttributePath.newInstance(endpointId, clusterId, CURRENT_SESSIONS_ATTRIBUTE_ID);
+
+ readAttribute(new ReportCallbackImpl(callback, path) {
+ @Override
+ public void onSuccess(byte[] tlv) {
+ List value = ChipTLVValueDecoder.decodeAttributeValue(path, tlv);
+ callback.onSuccess(value);
+ }
+ }, CURRENT_SESSIONS_ATTRIBUTE_ID, true);
+ }
+
+ public void subscribeCurrentSessionsAttribute(
+ CurrentSessionsAttributeCallback callback, int minInterval, int maxInterval) {
+ ChipAttributePath path = ChipAttributePath.newInstance(endpointId, clusterId, CURRENT_SESSIONS_ATTRIBUTE_ID);
+
+ subscribeAttribute(new ReportCallbackImpl(callback, path) {
+ @Override
+ public void onSuccess(byte[] tlv) {
+ List value = ChipTLVValueDecoder.decodeAttributeValue(path, tlv);
+ callback.onSuccess(value);
+ }
+ }, CURRENT_SESSIONS_ATTRIBUTE_ID, minInterval, maxInterval);
+ }
+
+ public void readGeneratedCommandListAttribute(
+ GeneratedCommandListAttributeCallback callback) {
+ ChipAttributePath path = ChipAttributePath.newInstance(endpointId, clusterId, GENERATED_COMMAND_LIST_ATTRIBUTE_ID);
+
+ readAttribute(new ReportCallbackImpl(callback, path) {
+ @Override
+ public void onSuccess(byte[] tlv) {
+ List value = ChipTLVValueDecoder.decodeAttributeValue(path, tlv);
+ callback.onSuccess(value);
+ }
+ }, GENERATED_COMMAND_LIST_ATTRIBUTE_ID, true);
+ }
+
+ public void subscribeGeneratedCommandListAttribute(
+ GeneratedCommandListAttributeCallback callback, int minInterval, int maxInterval) {
+ ChipAttributePath path = ChipAttributePath.newInstance(endpointId, clusterId, GENERATED_COMMAND_LIST_ATTRIBUTE_ID);
+
+ subscribeAttribute(new ReportCallbackImpl(callback, path) {
+ @Override
+ public void onSuccess(byte[] tlv) {
+ List value = ChipTLVValueDecoder.decodeAttributeValue(path, tlv);
+ callback.onSuccess(value);
+ }
+ }, GENERATED_COMMAND_LIST_ATTRIBUTE_ID, minInterval, maxInterval);
+ }
+
+ public void readAcceptedCommandListAttribute(
+ AcceptedCommandListAttributeCallback callback) {
+ ChipAttributePath path = ChipAttributePath.newInstance(endpointId, clusterId, ACCEPTED_COMMAND_LIST_ATTRIBUTE_ID);
+
+ readAttribute(new ReportCallbackImpl(callback, path) {
+ @Override
+ public void onSuccess(byte[] tlv) {
+ List value = ChipTLVValueDecoder.decodeAttributeValue(path, tlv);
+ callback.onSuccess(value);
+ }
+ }, ACCEPTED_COMMAND_LIST_ATTRIBUTE_ID, true);
+ }
+
+ public void subscribeAcceptedCommandListAttribute(
+ AcceptedCommandListAttributeCallback callback, int minInterval, int maxInterval) {
+ ChipAttributePath path = ChipAttributePath.newInstance(endpointId, clusterId, ACCEPTED_COMMAND_LIST_ATTRIBUTE_ID);
+
+ subscribeAttribute(new ReportCallbackImpl(callback, path) {
+ @Override
+ public void onSuccess(byte[] tlv) {
+ List value = ChipTLVValueDecoder.decodeAttributeValue(path, tlv);
+ callback.onSuccess(value);
+ }
+ }, ACCEPTED_COMMAND_LIST_ATTRIBUTE_ID, minInterval, maxInterval);
+ }
+
+ public void readEventListAttribute(
+ EventListAttributeCallback callback) {
+ ChipAttributePath path = ChipAttributePath.newInstance(endpointId, clusterId, EVENT_LIST_ATTRIBUTE_ID);
+
+ readAttribute(new ReportCallbackImpl(callback, path) {
+ @Override
+ public void onSuccess(byte[] tlv) {
+ List value = ChipTLVValueDecoder.decodeAttributeValue(path, tlv);
+ callback.onSuccess(value);
+ }
+ }, EVENT_LIST_ATTRIBUTE_ID, true);
+ }
+
+ public void subscribeEventListAttribute(
+ EventListAttributeCallback callback, int minInterval, int maxInterval) {
+ ChipAttributePath path = ChipAttributePath.newInstance(endpointId, clusterId, EVENT_LIST_ATTRIBUTE_ID);
+
+ subscribeAttribute(new ReportCallbackImpl(callback, path) {
+ @Override
+ public void onSuccess(byte[] tlv) {
+ List value = ChipTLVValueDecoder.decodeAttributeValue(path, tlv);
+ callback.onSuccess(value);
+ }
+ }, EVENT_LIST_ATTRIBUTE_ID, minInterval, maxInterval);
+ }
+
+ public void readAttributeListAttribute(
+ AttributeListAttributeCallback callback) {
+ ChipAttributePath path = ChipAttributePath.newInstance(endpointId, clusterId, ATTRIBUTE_LIST_ATTRIBUTE_ID);
+
+ readAttribute(new ReportCallbackImpl(callback, path) {
+ @Override
+ public void onSuccess(byte[] tlv) {
+ List value = ChipTLVValueDecoder.decodeAttributeValue(path, tlv);
+ callback.onSuccess(value);
+ }
+ }, ATTRIBUTE_LIST_ATTRIBUTE_ID, true);
+ }
+
+ public void subscribeAttributeListAttribute(
+ AttributeListAttributeCallback callback, int minInterval, int maxInterval) {
+ ChipAttributePath path = ChipAttributePath.newInstance(endpointId, clusterId, ATTRIBUTE_LIST_ATTRIBUTE_ID);
+
+ subscribeAttribute(new ReportCallbackImpl(callback, path) {
+ @Override
+ public void onSuccess(byte[] tlv) {
+ List value = ChipTLVValueDecoder.decodeAttributeValue(path, tlv);
+ callback.onSuccess(value);
+ }
+ }, ATTRIBUTE_LIST_ATTRIBUTE_ID, minInterval, maxInterval);
+ }
+
+ public void readFeatureMapAttribute(
+ LongAttributeCallback callback) {
+ ChipAttributePath path = ChipAttributePath.newInstance(endpointId, clusterId, FEATURE_MAP_ATTRIBUTE_ID);
+
+ readAttribute(new ReportCallbackImpl(callback, path) {
+ @Override
+ public void onSuccess(byte[] tlv) {
+ Long value = ChipTLVValueDecoder.decodeAttributeValue(path, tlv);
+ callback.onSuccess(value);
+ }
+ }, FEATURE_MAP_ATTRIBUTE_ID, true);
+ }
+
+ public void subscribeFeatureMapAttribute(
+ LongAttributeCallback callback, int minInterval, int maxInterval) {
+ ChipAttributePath path = ChipAttributePath.newInstance(endpointId, clusterId, FEATURE_MAP_ATTRIBUTE_ID);
+
+ subscribeAttribute(new ReportCallbackImpl(callback, path) {
+ @Override
+ public void onSuccess(byte[] tlv) {
+ Long value = ChipTLVValueDecoder.decodeAttributeValue(path, tlv);
+ callback.onSuccess(value);
+ }
+ }, FEATURE_MAP_ATTRIBUTE_ID, minInterval, maxInterval);
+ }
+
+ public void readClusterRevisionAttribute(
+ IntegerAttributeCallback callback) {
+ ChipAttributePath path = ChipAttributePath.newInstance(endpointId, clusterId, CLUSTER_REVISION_ATTRIBUTE_ID);
+
+ readAttribute(new ReportCallbackImpl(callback, path) {
+ @Override
+ public void onSuccess(byte[] tlv) {
+ Integer value = ChipTLVValueDecoder.decodeAttributeValue(path, tlv);
+ callback.onSuccess(value);
+ }
+ }, CLUSTER_REVISION_ATTRIBUTE_ID, true);
+ }
+
+ public void subscribeClusterRevisionAttribute(
+ IntegerAttributeCallback callback, int minInterval, int maxInterval) {
+ ChipAttributePath path = ChipAttributePath.newInstance(endpointId, clusterId, CLUSTER_REVISION_ATTRIBUTE_ID);
+
+ subscribeAttribute(new ReportCallbackImpl(callback, path) {
+ @Override
+ public void onSuccess(byte[] tlv) {
+ Integer value = ChipTLVValueDecoder.decodeAttributeValue(path, tlv);
+ callback.onSuccess(value);
+ }
+ }, CLUSTER_REVISION_ATTRIBUTE_ID, minInterval, maxInterval);
+ }
+ }
+
public static class ChimeCluster extends BaseChipCluster {
public static final long CLUSTER_ID = 1366L;
diff --git a/src/controller/java/generated/java/chip/devicecontroller/ChipStructs.java b/src/controller/java/generated/java/chip/devicecontroller/ChipStructs.java
index dc9a94cae7cb37..4c04d0ec0eb056 100644
--- a/src/controller/java/generated/java/chip/devicecontroller/ChipStructs.java
+++ b/src/controller/java/generated/java/chip/devicecontroller/ChipStructs.java
@@ -12724,6 +12724,233 @@ public String toString() {
return output.toString();
}
}
+public static class WebRTCTransportProviderClusterICEServerStruct {
+ public ArrayList urls;
+ public Optional username;
+ public Optional credential;
+ public Optional caid;
+ private static final long URLS_ID = 1L;
+ private static final long USERNAME_ID = 2L;
+ private static final long CREDENTIAL_ID = 3L;
+ private static final long CAID_ID = 4L;
+
+ public WebRTCTransportProviderClusterICEServerStruct(
+ ArrayList urls,
+ Optional username,
+ Optional credential,
+ Optional caid
+ ) {
+ this.urls = urls;
+ this.username = username;
+ this.credential = credential;
+ this.caid = caid;
+ }
+
+ public StructType encodeTlv() {
+ ArrayList values = new ArrayList<>();
+ values.add(new StructElement(URLS_ID, ArrayType.generateArrayType(urls, (elementurls) -> new StringType(elementurls))));
+ values.add(new StructElement(USERNAME_ID, username.map((nonOptionalusername) -> new StringType(nonOptionalusername)).orElse(new EmptyType())));
+ values.add(new StructElement(CREDENTIAL_ID, credential.map((nonOptionalcredential) -> new StringType(nonOptionalcredential)).orElse(new EmptyType())));
+ values.add(new StructElement(CAID_ID, caid.map((nonOptionalcaid) -> new UIntType(nonOptionalcaid)).orElse(new EmptyType())));
+
+ return new StructType(values);
+ }
+
+ public static WebRTCTransportProviderClusterICEServerStruct decodeTlv(BaseTLVType tlvValue) {
+ if (tlvValue == null || tlvValue.type() != TLVType.Struct) {
+ return null;
+ }
+ ArrayList urls = null;
+ Optional username = Optional.empty();
+ Optional credential = Optional.empty();
+ Optional caid = Optional.empty();
+ for (StructElement element: ((StructType)tlvValue).value()) {
+ if (element.contextTagNum() == URLS_ID) {
+ if (element.value(BaseTLVType.class).type() == TLVType.Array) {
+ ArrayType castingValue = element.value(ArrayType.class);
+ urls = castingValue.map((elementcastingValue) -> elementcastingValue.value(String.class));
+ }
+ } else if (element.contextTagNum() == USERNAME_ID) {
+ if (element.value(BaseTLVType.class).type() == TLVType.String) {
+ StringType castingValue = element.value(StringType.class);
+ username = Optional.of(castingValue.value(String.class));
+ }
+ } else if (element.contextTagNum() == CREDENTIAL_ID) {
+ if (element.value(BaseTLVType.class).type() == TLVType.String) {
+ StringType castingValue = element.value(StringType.class);
+ credential = Optional.of(castingValue.value(String.class));
+ }
+ } else if (element.contextTagNum() == CAID_ID) {
+ if (element.value(BaseTLVType.class).type() == TLVType.UInt) {
+ UIntType castingValue = element.value(UIntType.class);
+ caid = Optional.of(castingValue.value(Integer.class));
+ }
+ }
+ }
+ return new WebRTCTransportProviderClusterICEServerStruct(
+ urls,
+ username,
+ credential,
+ caid
+ );
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder output = new StringBuilder();
+ output.append("WebRTCTransportProviderClusterICEServerStruct {\n");
+ output.append("\turls: ");
+ output.append(urls);
+ output.append("\n");
+ output.append("\tusername: ");
+ output.append(username);
+ output.append("\n");
+ output.append("\tcredential: ");
+ output.append(credential);
+ output.append("\n");
+ output.append("\tcaid: ");
+ output.append(caid);
+ output.append("\n");
+ output.append("}\n");
+ return output.toString();
+ }
+}
+public static class WebRTCTransportProviderClusterWebRTCSessionStruct {
+ public Integer id;
+ public Long peerNodeID;
+ public Integer peerFabricIndex;
+ public Integer streamType;
+ public @Nullable Integer videoStreamID;
+ public @Nullable Integer audioStreamID;
+ public Integer metadataOptions;
+ private static final long ID_ID = 1L;
+ private static final long PEER_NODE_ID_ID = 2L;
+ private static final long PEER_FABRIC_INDEX_ID = 3L;
+ private static final long STREAM_TYPE_ID = 4L;
+ private static final long VIDEO_STREAM_ID_ID = 5L;
+ private static final long AUDIO_STREAM_ID_ID = 6L;
+ private static final long METADATA_OPTIONS_ID = 7L;
+
+ public WebRTCTransportProviderClusterWebRTCSessionStruct(
+ Integer id,
+ Long peerNodeID,
+ Integer peerFabricIndex,
+ Integer streamType,
+ @Nullable Integer videoStreamID,
+ @Nullable Integer audioStreamID,
+ Integer metadataOptions
+ ) {
+ this.id = id;
+ this.peerNodeID = peerNodeID;
+ this.peerFabricIndex = peerFabricIndex;
+ this.streamType = streamType;
+ this.videoStreamID = videoStreamID;
+ this.audioStreamID = audioStreamID;
+ this.metadataOptions = metadataOptions;
+ }
+
+ public StructType encodeTlv() {
+ ArrayList values = new ArrayList<>();
+ values.add(new StructElement(ID_ID, new UIntType(id)));
+ values.add(new StructElement(PEER_NODE_ID_ID, new UIntType(peerNodeID)));
+ values.add(new StructElement(PEER_FABRIC_INDEX_ID, new UIntType(peerFabricIndex)));
+ values.add(new StructElement(STREAM_TYPE_ID, new UIntType(streamType)));
+ values.add(new StructElement(VIDEO_STREAM_ID_ID, videoStreamID != null ? new UIntType(videoStreamID) : new NullType()));
+ values.add(new StructElement(AUDIO_STREAM_ID_ID, audioStreamID != null ? new UIntType(audioStreamID) : new NullType()));
+ values.add(new StructElement(METADATA_OPTIONS_ID, new UIntType(metadataOptions)));
+
+ return new StructType(values);
+ }
+
+ public static WebRTCTransportProviderClusterWebRTCSessionStruct decodeTlv(BaseTLVType tlvValue) {
+ if (tlvValue == null || tlvValue.type() != TLVType.Struct) {
+ return null;
+ }
+ Integer id = null;
+ Long peerNodeID = null;
+ Integer peerFabricIndex = null;
+ Integer streamType = null;
+ @Nullable Integer videoStreamID = null;
+ @Nullable Integer audioStreamID = null;
+ Integer metadataOptions = null;
+ for (StructElement element: ((StructType)tlvValue).value()) {
+ if (element.contextTagNum() == ID_ID) {
+ if (element.value(BaseTLVType.class).type() == TLVType.UInt) {
+ UIntType castingValue = element.value(UIntType.class);
+ id = castingValue.value(Integer.class);
+ }
+ } else if (element.contextTagNum() == PEER_NODE_ID_ID) {
+ if (element.value(BaseTLVType.class).type() == TLVType.UInt) {
+ UIntType castingValue = element.value(UIntType.class);
+ peerNodeID = castingValue.value(Long.class);
+ }
+ } else if (element.contextTagNum() == PEER_FABRIC_INDEX_ID) {
+ if (element.value(BaseTLVType.class).type() == TLVType.UInt) {
+ UIntType castingValue = element.value(UIntType.class);
+ peerFabricIndex = castingValue.value(Integer.class);
+ }
+ } else if (element.contextTagNum() == STREAM_TYPE_ID) {
+ if (element.value(BaseTLVType.class).type() == TLVType.UInt) {
+ UIntType castingValue = element.value(UIntType.class);
+ streamType = castingValue.value(Integer.class);
+ }
+ } else if (element.contextTagNum() == VIDEO_STREAM_ID_ID) {
+ if (element.value(BaseTLVType.class).type() == TLVType.UInt) {
+ UIntType castingValue = element.value(UIntType.class);
+ videoStreamID = castingValue.value(Integer.class);
+ }
+ } else if (element.contextTagNum() == AUDIO_STREAM_ID_ID) {
+ if (element.value(BaseTLVType.class).type() == TLVType.UInt) {
+ UIntType castingValue = element.value(UIntType.class);
+ audioStreamID = castingValue.value(Integer.class);
+ }
+ } else if (element.contextTagNum() == METADATA_OPTIONS_ID) {
+ if (element.value(BaseTLVType.class).type() == TLVType.UInt) {
+ UIntType castingValue = element.value(UIntType.class);
+ metadataOptions = castingValue.value(Integer.class);
+ }
+ }
+ }
+ return new WebRTCTransportProviderClusterWebRTCSessionStruct(
+ id,
+ peerNodeID,
+ peerFabricIndex,
+ streamType,
+ videoStreamID,
+ audioStreamID,
+ metadataOptions
+ );
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder output = new StringBuilder();
+ output.append("WebRTCTransportProviderClusterWebRTCSessionStruct {\n");
+ output.append("\tid: ");
+ output.append(id);
+ output.append("\n");
+ output.append("\tpeerNodeID: ");
+ output.append(peerNodeID);
+ output.append("\n");
+ output.append("\tpeerFabricIndex: ");
+ output.append(peerFabricIndex);
+ output.append("\n");
+ output.append("\tstreamType: ");
+ output.append(streamType);
+ output.append("\n");
+ output.append("\tvideoStreamID: ");
+ output.append(videoStreamID);
+ output.append("\n");
+ output.append("\taudioStreamID: ");
+ output.append(audioStreamID);
+ output.append("\n");
+ output.append("\tmetadataOptions: ");
+ output.append(metadataOptions);
+ output.append("\n");
+ output.append("}\n");
+ return output.toString();
+ }
+}
public static class ChimeClusterChimeSoundStruct {
public Integer chimeID;
public String name;
diff --git a/src/controller/java/generated/java/chip/devicecontroller/ClusterIDMapping.java b/src/controller/java/generated/java/chip/devicecontroller/ClusterIDMapping.java
index 56ed2c4629cff4..af30b0eb3453ca 100644
--- a/src/controller/java/generated/java/chip/devicecontroller/ClusterIDMapping.java
+++ b/src/controller/java/generated/java/chip/devicecontroller/ClusterIDMapping.java
@@ -379,6 +379,9 @@ public static BaseCluster getCluster(long clusterId) {
if (clusterId == ContentAppObserver.ID) {
return new ContentAppObserver();
}
+ if (clusterId == WebRTCTransportProvider.ID) {
+ return new WebRTCTransportProvider();
+ }
if (clusterId == Chime.ID) {
return new Chime();
}
@@ -16881,6 +16884,197 @@ public long getCommandID(String name) throws IllegalArgumentException {
return Command.valueOf(name).getID();
}
}
+ public static class WebRTCTransportProvider implements BaseCluster {
+ public static final long ID = 1363L;
+ public long getID() {
+ return ID;
+ }
+
+ public enum Attribute {
+ CurrentSessions(0L),
+ GeneratedCommandList(65528L),
+ AcceptedCommandList(65529L),
+ EventList(65530L),
+ AttributeList(65531L),
+ FeatureMap(65532L),
+ ClusterRevision(65533L),;
+ private final long id;
+ Attribute(long id) {
+ this.id = id;
+ }
+
+ public long getID() {
+ return id;
+ }
+
+ public static Attribute value(long id) throws NoSuchFieldError {
+ for (Attribute attribute : Attribute.values()) {
+ if (attribute.getID() == id) {
+ return attribute;
+ }
+ }
+ throw new NoSuchFieldError();
+ }
+ }
+
+ public enum Event {;
+ private final long id;
+ Event(long id) {
+ this.id = id;
+ }
+
+ public long getID() {
+ return id;
+ }
+
+ public static Event value(long id) throws NoSuchFieldError {
+ for (Event event : Event.values()) {
+ if (event.getID() == id) {
+ return event;
+ }
+ }
+ throw new NoSuchFieldError();
+ }
+ }
+
+ public enum Command {
+ SolicitOffer(1L),
+ ProvideOffer(3L),
+ ProvideAnswer(5L),
+ ProvideICECandidate(6L),
+ EndSession(7L),;
+ private final long id;
+ Command(long id) {
+ this.id = id;
+ }
+
+ public long getID() {
+ return id;
+ }
+
+ public static Command value(long id) throws NoSuchFieldError {
+ for (Command command : Command.values()) {
+ if (command.getID() == id) {
+ return command;
+ }
+ }
+ throw new NoSuchFieldError();
+ }
+ }public enum SolicitOfferCommandField {StreamType(0),VideoStreamID(1),AudioStreamID(2),ICEServers(3),ICETransportPolicy(4),MetadataOptions(5),;
+ private final int id;
+ SolicitOfferCommandField(int id) {
+ this.id = id;
+ }
+
+ public int getID() {
+ return id;
+ }
+ public static SolicitOfferCommandField value(int id) throws NoSuchFieldError {
+ for (SolicitOfferCommandField field : SolicitOfferCommandField.values()) {
+ if (field.getID() == id) {
+ return field;
+ }
+ }
+ throw new NoSuchFieldError();
+ }
+ }public enum ProvideOfferCommandField {WebRTCSessionID(0),Sdp(1),StreamType(2),VideoStreamID(3),AudioStreamID(4),ICEServers(5),ICETransportPolicy(6),MetadataOptions(7),;
+ private final int id;
+ ProvideOfferCommandField(int id) {
+ this.id = id;
+ }
+
+ public int getID() {
+ return id;
+ }
+ public static ProvideOfferCommandField value(int id) throws NoSuchFieldError {
+ for (ProvideOfferCommandField field : ProvideOfferCommandField.values()) {
+ if (field.getID() == id) {
+ return field;
+ }
+ }
+ throw new NoSuchFieldError();
+ }
+ }public enum ProvideAnswerCommandField {WebRTCSessionID(0),Sdp(1),;
+ private final int id;
+ ProvideAnswerCommandField(int id) {
+ this.id = id;
+ }
+
+ public int getID() {
+ return id;
+ }
+ public static ProvideAnswerCommandField value(int id) throws NoSuchFieldError {
+ for (ProvideAnswerCommandField field : ProvideAnswerCommandField.values()) {
+ if (field.getID() == id) {
+ return field;
+ }
+ }
+ throw new NoSuchFieldError();
+ }
+ }public enum ProvideICECandidateCommandField {WebRTCSessionID(0),ICECandidate(1),;
+ private final int id;
+ ProvideICECandidateCommandField(int id) {
+ this.id = id;
+ }
+
+ public int getID() {
+ return id;
+ }
+ public static ProvideICECandidateCommandField value(int id) throws NoSuchFieldError {
+ for (ProvideICECandidateCommandField field : ProvideICECandidateCommandField.values()) {
+ if (field.getID() == id) {
+ return field;
+ }
+ }
+ throw new NoSuchFieldError();
+ }
+ }public enum EndSessionCommandField {WebRTCSessionID(0),Reason(1),;
+ private final int id;
+ EndSessionCommandField(int id) {
+ this.id = id;
+ }
+
+ public int getID() {
+ return id;
+ }
+ public static EndSessionCommandField value(int id) throws NoSuchFieldError {
+ for (EndSessionCommandField field : EndSessionCommandField.values()) {
+ if (field.getID() == id) {
+ return field;
+ }
+ }
+ throw new NoSuchFieldError();
+ }
+ }@Override
+ public String getAttributeName(long id) throws NoSuchFieldError {
+ return Attribute.value(id).toString();
+ }
+
+ @Override
+ public String getEventName(long id) throws NoSuchFieldError {
+ return Event.value(id).toString();
+ }
+
+ @Override
+ public String getCommandName(long id) throws NoSuchFieldError {
+ return Command.value(id).toString();
+ }
+
+ @Override
+ public long getAttributeID(String name) throws IllegalArgumentException {
+ return Attribute.valueOf(name).getID();
+ }
+
+ @Override
+ public long getEventID(String name) throws IllegalArgumentException {
+ return Event.valueOf(name).getID();
+ }
+
+ @Override
+ public long getCommandID(String name) throws IllegalArgumentException {
+ return Command.valueOf(name).getID();
+ }
+ }
public static class Chime implements BaseCluster {
public static final long ID = 1366L;
public long getID() {
diff --git a/src/controller/java/generated/java/chip/devicecontroller/ClusterInfoMapping.java b/src/controller/java/generated/java/chip/devicecontroller/ClusterInfoMapping.java
index 3025c268521b80..295ada1c577b89 100644
--- a/src/controller/java/generated/java/chip/devicecontroller/ClusterInfoMapping.java
+++ b/src/controller/java/generated/java/chip/devicecontroller/ClusterInfoMapping.java
@@ -19994,6 +19994,165 @@ public void onError(Exception ex) {
}
}
+
+ public static class DelegatedWebRTCTransportProviderClusterSolicitOfferResponseCallback implements ChipClusters.WebRTCTransportProviderCluster.SolicitOfferResponseCallback, DelegatedClusterCallback {
+ private ClusterCommandCallback callback;
+ @Override
+ public void setCallbackDelegate(ClusterCommandCallback callback) {
+ this.callback = callback;
+ }
+
+ @Override
+ public void onSuccess(Integer webRTCSessionID, Boolean deferredOffer, @Nullable Optional videoStreamID, @Nullable Optional audioStreamID) {
+ Map responseValues = new LinkedHashMap<>();
+
+ CommandResponseInfo webRTCSessionIDResponseValue = new CommandResponseInfo("webRTCSessionID", "Integer");
+ responseValues.put(webRTCSessionIDResponseValue, webRTCSessionID);
+ CommandResponseInfo deferredOfferResponseValue = new CommandResponseInfo("deferredOffer", "Boolean");
+ responseValues.put(deferredOfferResponseValue, deferredOffer);
+ CommandResponseInfo videoStreamIDResponseValue = new CommandResponseInfo("videoStreamID", "Optional");
+ responseValues.put(videoStreamIDResponseValue, videoStreamID);
+ CommandResponseInfo audioStreamIDResponseValue = new CommandResponseInfo("audioStreamID", "Optional");
+ responseValues.put(audioStreamIDResponseValue, audioStreamID);
+ callback.onSuccess(responseValues);
+ }
+
+ @Override
+ public void onError(Exception error) {
+ callback.onFailure(error);
+ }
+ }
+
+ public static class DelegatedWebRTCTransportProviderClusterProvideOfferResponseCallback implements ChipClusters.WebRTCTransportProviderCluster.ProvideOfferResponseCallback, DelegatedClusterCallback {
+ private ClusterCommandCallback callback;
+ @Override
+ public void setCallbackDelegate(ClusterCommandCallback callback) {
+ this.callback = callback;
+ }
+
+ @Override
+ public void onSuccess(Integer webRTCSessionID, Integer videoStreamID, Integer audioStreamID) {
+ Map responseValues = new LinkedHashMap<>();
+
+ CommandResponseInfo webRTCSessionIDResponseValue = new CommandResponseInfo("webRTCSessionID", "Integer");
+ responseValues.put(webRTCSessionIDResponseValue, webRTCSessionID);
+ CommandResponseInfo videoStreamIDResponseValue = new CommandResponseInfo("videoStreamID", "Integer");
+ responseValues.put(videoStreamIDResponseValue, videoStreamID);
+ CommandResponseInfo audioStreamIDResponseValue = new CommandResponseInfo("audioStreamID", "Integer");
+ responseValues.put(audioStreamIDResponseValue, audioStreamID);
+ callback.onSuccess(responseValues);
+ }
+
+ @Override
+ public void onError(Exception error) {
+ callback.onFailure(error);
+ }
+ }
+ public static class DelegatedWebRTCTransportProviderClusterCurrentSessionsAttributeCallback implements ChipClusters.WebRTCTransportProviderCluster.CurrentSessionsAttributeCallback, DelegatedClusterCallback {
+ private ClusterCommandCallback callback;
+ @Override
+ public void setCallbackDelegate(ClusterCommandCallback callback) {
+ this.callback = callback;
+ }
+
+ @Override
+ public void onSuccess(List valueList) {
+ Map responseValues = new LinkedHashMap<>();
+ CommandResponseInfo commandResponseInfo = new CommandResponseInfo("valueList", "List");
+ responseValues.put(commandResponseInfo, valueList);
+ callback.onSuccess(responseValues);
+ }
+
+ @Override
+ public void onError(Exception ex) {
+ callback.onFailure(ex);
+ }
+ }
+
+ public static class DelegatedWebRTCTransportProviderClusterGeneratedCommandListAttributeCallback implements ChipClusters.WebRTCTransportProviderCluster.GeneratedCommandListAttributeCallback, DelegatedClusterCallback {
+ private ClusterCommandCallback callback;
+ @Override
+ public void setCallbackDelegate(ClusterCommandCallback callback) {
+ this.callback = callback;
+ }
+
+ @Override
+ public void onSuccess(List valueList) {
+ Map responseValues = new LinkedHashMap<>();
+ CommandResponseInfo commandResponseInfo = new CommandResponseInfo("valueList", "List");
+ responseValues.put(commandResponseInfo, valueList);
+ callback.onSuccess(responseValues);
+ }
+
+ @Override
+ public void onError(Exception ex) {
+ callback.onFailure(ex);
+ }
+ }
+
+ public static class DelegatedWebRTCTransportProviderClusterAcceptedCommandListAttributeCallback implements ChipClusters.WebRTCTransportProviderCluster.AcceptedCommandListAttributeCallback, DelegatedClusterCallback {
+ private ClusterCommandCallback callback;
+ @Override
+ public void setCallbackDelegate(ClusterCommandCallback callback) {
+ this.callback = callback;
+ }
+
+ @Override
+ public void onSuccess(List valueList) {
+ Map responseValues = new LinkedHashMap<>();
+ CommandResponseInfo commandResponseInfo = new CommandResponseInfo("valueList", "List");
+ responseValues.put(commandResponseInfo, valueList);
+ callback.onSuccess(responseValues);
+ }
+
+ @Override
+ public void onError(Exception ex) {
+ callback.onFailure(ex);
+ }
+ }
+
+ public static class DelegatedWebRTCTransportProviderClusterEventListAttributeCallback implements ChipClusters.WebRTCTransportProviderCluster.EventListAttributeCallback, DelegatedClusterCallback {
+ private ClusterCommandCallback callback;
+ @Override
+ public void setCallbackDelegate(ClusterCommandCallback callback) {
+ this.callback = callback;
+ }
+
+ @Override
+ public void onSuccess(List valueList) {
+ Map responseValues = new LinkedHashMap<>();
+ CommandResponseInfo commandResponseInfo = new CommandResponseInfo("valueList", "List");
+ responseValues.put(commandResponseInfo, valueList);
+ callback.onSuccess(responseValues);
+ }
+
+ @Override
+ public void onError(Exception ex) {
+ callback.onFailure(ex);
+ }
+ }
+
+ public static class DelegatedWebRTCTransportProviderClusterAttributeListAttributeCallback implements ChipClusters.WebRTCTransportProviderCluster.AttributeListAttributeCallback, DelegatedClusterCallback {
+ private ClusterCommandCallback callback;
+ @Override
+ public void setCallbackDelegate(ClusterCommandCallback callback) {
+ this.callback = callback;
+ }
+
+ @Override
+ public void onSuccess(List valueList) {
+ Map responseValues = new LinkedHashMap<>();
+ CommandResponseInfo commandResponseInfo = new CommandResponseInfo("valueList", "List");
+ responseValues.put(commandResponseInfo, valueList);
+ callback.onSuccess(responseValues);
+ }
+
+ @Override
+ public void onError(Exception ex) {
+ callback.onFailure(ex);
+ }
+ }
+
public static class DelegatedChimeClusterInstalledChimeSoundsAttributeCallback implements ChipClusters.ChimeCluster.InstalledChimeSoundsAttributeCallback, DelegatedClusterCallback {
private ClusterCommandCallback callback;
@Override
@@ -22435,6 +22594,10 @@ public Map initializeClusterMap() {
(ptr, endpointId) -> new ChipClusters.ContentAppObserverCluster(ptr, endpointId), new HashMap<>());
clusterMap.put("contentAppObserver", contentAppObserverClusterInfo);
+ ClusterInfo webRTCTransportProviderClusterInfo = new ClusterInfo(
+ (ptr, endpointId) -> new ChipClusters.WebRTCTransportProviderCluster(ptr, endpointId), new HashMap<>());
+ clusterMap.put("webRTCTransportProvider", webRTCTransportProviderClusterInfo);
+
ClusterInfo chimeClusterInfo = new ClusterInfo(
(ptr, endpointId) -> new ChipClusters.ChimeCluster(ptr, endpointId), new HashMap<>());
clusterMap.put("chime", chimeClusterInfo);
@@ -22580,6 +22743,7 @@ public void combineCommand(Map destination, Map> getCommandMap() {
commandMap.put("contentAppObserver", contentAppObserverClusterInteractionInfoMap);
+ Map webRTCTransportProviderClusterInteractionInfoMap = new LinkedHashMap<>();
+
+ Map webRTCTransportProvidersolicitOfferCommandParams = new LinkedHashMap();
+
+ CommandParameterInfo webRTCTransportProvidersolicitOfferstreamTypeCommandParameterInfo = new CommandParameterInfo("streamType", Integer.class, Integer.class);
+ webRTCTransportProvidersolicitOfferCommandParams.put("streamType",webRTCTransportProvidersolicitOfferstreamTypeCommandParameterInfo);
+
+ CommandParameterInfo webRTCTransportProvidersolicitOffervideoStreamIDCommandParameterInfo = new CommandParameterInfo("videoStreamID", Optional.class, Integer.class);
+ webRTCTransportProvidersolicitOfferCommandParams.put("videoStreamID",webRTCTransportProvidersolicitOffervideoStreamIDCommandParameterInfo);
+
+ CommandParameterInfo webRTCTransportProvidersolicitOfferaudioStreamIDCommandParameterInfo = new CommandParameterInfo("audioStreamID", Optional.class, Integer.class);
+ webRTCTransportProvidersolicitOfferCommandParams.put("audioStreamID",webRTCTransportProvidersolicitOfferaudioStreamIDCommandParameterInfo);
+
+
+ CommandParameterInfo webRTCTransportProvidersolicitOfferICETransportPolicyCommandParameterInfo = new CommandParameterInfo("ICETransportPolicy", Optional.class, String.class);
+ webRTCTransportProvidersolicitOfferCommandParams.put("ICETransportPolicy",webRTCTransportProvidersolicitOfferICETransportPolicyCommandParameterInfo);
+
+ CommandParameterInfo webRTCTransportProvidersolicitOffermetadataOptionsCommandParameterInfo = new CommandParameterInfo("metadataOptions", Optional.class, Integer.class);
+ webRTCTransportProvidersolicitOfferCommandParams.put("metadataOptions",webRTCTransportProvidersolicitOffermetadataOptionsCommandParameterInfo);
+ InteractionInfo webRTCTransportProvidersolicitOfferInteractionInfo = new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.WebRTCTransportProviderCluster) cluster)
+ .solicitOffer((ChipClusters.WebRTCTransportProviderCluster.SolicitOfferResponseCallback) callback
+ , (Integer)
+ commandArguments.get("streamType")
+
+ , (Optional)
+ commandArguments.get("videoStreamID")
+
+ , (Optional)
+ commandArguments.get("audioStreamID")
+
+ , (Optional>)
+ commandArguments.get("ICEServers")
+
+ , (Optional)
+ commandArguments.get("ICETransportPolicy")
+
+ , (Optional)
+ commandArguments.get("metadataOptions")
+
+ );
+ },
+ () -> new DelegatedWebRTCTransportProviderClusterSolicitOfferResponseCallback(),
+ webRTCTransportProvidersolicitOfferCommandParams
+ );
+ webRTCTransportProviderClusterInteractionInfoMap.put("solicitOffer", webRTCTransportProvidersolicitOfferInteractionInfo);
+
+ Map webRTCTransportProviderprovideOfferCommandParams = new LinkedHashMap();
+
+ CommandParameterInfo webRTCTransportProviderprovideOfferwebRTCSessionIDCommandParameterInfo = new CommandParameterInfo("webRTCSessionID", Integer.class, Integer.class);
+ webRTCTransportProviderprovideOfferCommandParams.put("webRTCSessionID",webRTCTransportProviderprovideOfferwebRTCSessionIDCommandParameterInfo);
+
+ CommandParameterInfo webRTCTransportProviderprovideOffersdpCommandParameterInfo = new CommandParameterInfo("sdp", String.class, String.class);
+ webRTCTransportProviderprovideOfferCommandParams.put("sdp",webRTCTransportProviderprovideOffersdpCommandParameterInfo);
+
+ CommandParameterInfo webRTCTransportProviderprovideOfferstreamTypeCommandParameterInfo = new CommandParameterInfo("streamType", Integer.class, Integer.class);
+ webRTCTransportProviderprovideOfferCommandParams.put("streamType",webRTCTransportProviderprovideOfferstreamTypeCommandParameterInfo);
+
+ CommandParameterInfo webRTCTransportProviderprovideOffervideoStreamIDCommandParameterInfo = new CommandParameterInfo("videoStreamID", Optional.class, Integer.class);
+ webRTCTransportProviderprovideOfferCommandParams.put("videoStreamID",webRTCTransportProviderprovideOffervideoStreamIDCommandParameterInfo);
+
+ CommandParameterInfo webRTCTransportProviderprovideOfferaudioStreamIDCommandParameterInfo = new CommandParameterInfo("audioStreamID", Optional.class, Integer.class);
+ webRTCTransportProviderprovideOfferCommandParams.put("audioStreamID",webRTCTransportProviderprovideOfferaudioStreamIDCommandParameterInfo);
+
+
+ CommandParameterInfo webRTCTransportProviderprovideOfferICETransportPolicyCommandParameterInfo = new CommandParameterInfo("ICETransportPolicy", Optional.class, String.class);
+ webRTCTransportProviderprovideOfferCommandParams.put("ICETransportPolicy",webRTCTransportProviderprovideOfferICETransportPolicyCommandParameterInfo);
+
+ CommandParameterInfo webRTCTransportProviderprovideOffermetadataOptionsCommandParameterInfo = new CommandParameterInfo("metadataOptions", Optional.class, Integer.class);
+ webRTCTransportProviderprovideOfferCommandParams.put("metadataOptions",webRTCTransportProviderprovideOffermetadataOptionsCommandParameterInfo);
+ InteractionInfo webRTCTransportProviderprovideOfferInteractionInfo = new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.WebRTCTransportProviderCluster) cluster)
+ .provideOffer((ChipClusters.WebRTCTransportProviderCluster.ProvideOfferResponseCallback) callback
+ , (Integer)
+ commandArguments.get("webRTCSessionID")
+
+ , (String)
+ commandArguments.get("sdp")
+
+ , (Integer)
+ commandArguments.get("streamType")
+
+ , (Optional)
+ commandArguments.get("videoStreamID")
+
+ , (Optional)
+ commandArguments.get("audioStreamID")
+
+ , (Optional>)
+ commandArguments.get("ICEServers")
+
+ , (Optional)
+ commandArguments.get("ICETransportPolicy")
+
+ , (Optional)
+ commandArguments.get("metadataOptions")
+
+ );
+ },
+ () -> new DelegatedWebRTCTransportProviderClusterProvideOfferResponseCallback(),
+ webRTCTransportProviderprovideOfferCommandParams
+ );
+ webRTCTransportProviderClusterInteractionInfoMap.put("provideOffer", webRTCTransportProviderprovideOfferInteractionInfo);
+
+ Map webRTCTransportProviderprovideAnswerCommandParams = new LinkedHashMap();
+
+ CommandParameterInfo webRTCTransportProviderprovideAnswerwebRTCSessionIDCommandParameterInfo = new CommandParameterInfo("webRTCSessionID", Integer.class, Integer.class);
+ webRTCTransportProviderprovideAnswerCommandParams.put("webRTCSessionID",webRTCTransportProviderprovideAnswerwebRTCSessionIDCommandParameterInfo);
+
+ CommandParameterInfo webRTCTransportProviderprovideAnswersdpCommandParameterInfo = new CommandParameterInfo("sdp", String.class, String.class);
+ webRTCTransportProviderprovideAnswerCommandParams.put("sdp",webRTCTransportProviderprovideAnswersdpCommandParameterInfo);
+ InteractionInfo webRTCTransportProviderprovideAnswerInteractionInfo = new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.WebRTCTransportProviderCluster) cluster)
+ .provideAnswer((DefaultClusterCallback) callback
+ , (Integer)
+ commandArguments.get("webRTCSessionID")
+ , (String)
+ commandArguments.get("sdp")
+ );
+ },
+ () -> new DelegatedDefaultClusterCallback(),
+ webRTCTransportProviderprovideAnswerCommandParams
+ );
+ webRTCTransportProviderClusterInteractionInfoMap.put("provideAnswer", webRTCTransportProviderprovideAnswerInteractionInfo);
+
+ Map webRTCTransportProviderprovideICECandidateCommandParams = new LinkedHashMap();
+
+ CommandParameterInfo webRTCTransportProviderprovideICECandidatewebRTCSessionIDCommandParameterInfo = new CommandParameterInfo("webRTCSessionID", Integer.class, Integer.class);
+ webRTCTransportProviderprovideICECandidateCommandParams.put("webRTCSessionID",webRTCTransportProviderprovideICECandidatewebRTCSessionIDCommandParameterInfo);
+
+ CommandParameterInfo webRTCTransportProviderprovideICECandidateICECandidateCommandParameterInfo = new CommandParameterInfo("ICECandidate", String.class, String.class);
+ webRTCTransportProviderprovideICECandidateCommandParams.put("ICECandidate",webRTCTransportProviderprovideICECandidateICECandidateCommandParameterInfo);
+ InteractionInfo webRTCTransportProviderprovideICECandidateInteractionInfo = new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.WebRTCTransportProviderCluster) cluster)
+ .provideICECandidate((DefaultClusterCallback) callback
+ , (Integer)
+ commandArguments.get("webRTCSessionID")
+ , (String)
+ commandArguments.get("ICECandidate")
+ );
+ },
+ () -> new DelegatedDefaultClusterCallback(),
+ webRTCTransportProviderprovideICECandidateCommandParams
+ );
+ webRTCTransportProviderClusterInteractionInfoMap.put("provideICECandidate", webRTCTransportProviderprovideICECandidateInteractionInfo);
+
+ Map webRTCTransportProviderendSessionCommandParams = new LinkedHashMap();
+
+ CommandParameterInfo webRTCTransportProviderendSessionwebRTCSessionIDCommandParameterInfo = new CommandParameterInfo("webRTCSessionID", Integer.class, Integer.class);
+ webRTCTransportProviderendSessionCommandParams.put("webRTCSessionID",webRTCTransportProviderendSessionwebRTCSessionIDCommandParameterInfo);
+
+ CommandParameterInfo webRTCTransportProviderendSessionreasonCommandParameterInfo = new CommandParameterInfo("reason", Integer.class, Integer.class);
+ webRTCTransportProviderendSessionCommandParams.put("reason",webRTCTransportProviderendSessionreasonCommandParameterInfo);
+ InteractionInfo webRTCTransportProviderendSessionInteractionInfo = new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.WebRTCTransportProviderCluster) cluster)
+ .endSession((DefaultClusterCallback) callback
+ , (Integer)
+ commandArguments.get("webRTCSessionID")
+ , (Integer)
+ commandArguments.get("reason")
+ );
+ },
+ () -> new DelegatedDefaultClusterCallback(),
+ webRTCTransportProviderendSessionCommandParams
+ );
+ webRTCTransportProviderClusterInteractionInfoMap.put("endSession", webRTCTransportProviderendSessionInteractionInfo);
+
+ commandMap.put("webRTCTransportProvider", webRTCTransportProviderClusterInteractionInfoMap);
+
Map chimeClusterInteractionInfoMap = new LinkedHashMap<>();
Map chimeplayChimeSoundCommandParams = new LinkedHashMap();
diff --git a/src/controller/java/generated/java/chip/devicecontroller/ClusterReadMapping.java b/src/controller/java/generated/java/chip/devicecontroller/ClusterReadMapping.java
index b4ef81d615022b..05036e0391bb0f 100644
--- a/src/controller/java/generated/java/chip/devicecontroller/ClusterReadMapping.java
+++ b/src/controller/java/generated/java/chip/devicecontroller/ClusterReadMapping.java
@@ -18236,6 +18236,87 @@ private static Map readContentAppObserverInteractionInf
return result;
}
+ private static Map readWebRTCTransportProviderInteractionInfo() {
+ Map result = new LinkedHashMap<>();Map readWebRTCTransportProviderCurrentSessionsCommandParams = new LinkedHashMap();
+ InteractionInfo readWebRTCTransportProviderCurrentSessionsAttributeInteractionInfo = new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.WebRTCTransportProviderCluster) cluster).readCurrentSessionsAttribute(
+ (ChipClusters.WebRTCTransportProviderCluster.CurrentSessionsAttributeCallback) callback
+ );
+ },
+ () -> new ClusterInfoMapping.DelegatedWebRTCTransportProviderClusterCurrentSessionsAttributeCallback(),
+ readWebRTCTransportProviderCurrentSessionsCommandParams
+ );
+ result.put("readCurrentSessionsAttribute", readWebRTCTransportProviderCurrentSessionsAttributeInteractionInfo);
+ Map readWebRTCTransportProviderGeneratedCommandListCommandParams = new LinkedHashMap();
+ InteractionInfo readWebRTCTransportProviderGeneratedCommandListAttributeInteractionInfo = new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.WebRTCTransportProviderCluster) cluster).readGeneratedCommandListAttribute(
+ (ChipClusters.WebRTCTransportProviderCluster.GeneratedCommandListAttributeCallback) callback
+ );
+ },
+ () -> new ClusterInfoMapping.DelegatedWebRTCTransportProviderClusterGeneratedCommandListAttributeCallback(),
+ readWebRTCTransportProviderGeneratedCommandListCommandParams
+ );
+ result.put("readGeneratedCommandListAttribute", readWebRTCTransportProviderGeneratedCommandListAttributeInteractionInfo);
+ Map readWebRTCTransportProviderAcceptedCommandListCommandParams = new LinkedHashMap();
+ InteractionInfo readWebRTCTransportProviderAcceptedCommandListAttributeInteractionInfo = new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.WebRTCTransportProviderCluster) cluster).readAcceptedCommandListAttribute(
+ (ChipClusters.WebRTCTransportProviderCluster.AcceptedCommandListAttributeCallback) callback
+ );
+ },
+ () -> new ClusterInfoMapping.DelegatedWebRTCTransportProviderClusterAcceptedCommandListAttributeCallback(),
+ readWebRTCTransportProviderAcceptedCommandListCommandParams
+ );
+ result.put("readAcceptedCommandListAttribute", readWebRTCTransportProviderAcceptedCommandListAttributeInteractionInfo);
+ Map readWebRTCTransportProviderEventListCommandParams = new LinkedHashMap();
+ InteractionInfo readWebRTCTransportProviderEventListAttributeInteractionInfo = new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.WebRTCTransportProviderCluster) cluster).readEventListAttribute(
+ (ChipClusters.WebRTCTransportProviderCluster.EventListAttributeCallback) callback
+ );
+ },
+ () -> new ClusterInfoMapping.DelegatedWebRTCTransportProviderClusterEventListAttributeCallback(),
+ readWebRTCTransportProviderEventListCommandParams
+ );
+ result.put("readEventListAttribute", readWebRTCTransportProviderEventListAttributeInteractionInfo);
+ Map readWebRTCTransportProviderAttributeListCommandParams = new LinkedHashMap();
+ InteractionInfo readWebRTCTransportProviderAttributeListAttributeInteractionInfo = new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.WebRTCTransportProviderCluster) cluster).readAttributeListAttribute(
+ (ChipClusters.WebRTCTransportProviderCluster.AttributeListAttributeCallback) callback
+ );
+ },
+ () -> new ClusterInfoMapping.DelegatedWebRTCTransportProviderClusterAttributeListAttributeCallback(),
+ readWebRTCTransportProviderAttributeListCommandParams
+ );
+ result.put("readAttributeListAttribute", readWebRTCTransportProviderAttributeListAttributeInteractionInfo);
+ Map readWebRTCTransportProviderFeatureMapCommandParams = new LinkedHashMap();
+ InteractionInfo readWebRTCTransportProviderFeatureMapAttributeInteractionInfo = new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.WebRTCTransportProviderCluster) cluster).readFeatureMapAttribute(
+ (ChipClusters.LongAttributeCallback) callback
+ );
+ },
+ () -> new ClusterInfoMapping.DelegatedLongAttributeCallback(),
+ readWebRTCTransportProviderFeatureMapCommandParams
+ );
+ result.put("readFeatureMapAttribute", readWebRTCTransportProviderFeatureMapAttributeInteractionInfo);
+ Map readWebRTCTransportProviderClusterRevisionCommandParams = new LinkedHashMap();
+ InteractionInfo readWebRTCTransportProviderClusterRevisionAttributeInteractionInfo = new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.WebRTCTransportProviderCluster) cluster).readClusterRevisionAttribute(
+ (ChipClusters.IntegerAttributeCallback) callback
+ );
+ },
+ () -> new ClusterInfoMapping.DelegatedIntegerAttributeCallback(),
+ readWebRTCTransportProviderClusterRevisionCommandParams
+ );
+ result.put("readClusterRevisionAttribute", readWebRTCTransportProviderClusterRevisionAttributeInteractionInfo);
+
+ return result;
+ }
private static Map readChimeInteractionInfo() {
Map result = new LinkedHashMap<>();Map readChimeInstalledChimeSoundsCommandParams = new LinkedHashMap();
InteractionInfo readChimeInstalledChimeSoundsAttributeInteractionInfo = new InteractionInfo(
@@ -19789,6 +19870,7 @@ public Map> getReadAttributeMap() {
put("accountLogin", readAccountLoginInteractionInfo());
put("contentControl", readContentControlInteractionInfo());
put("contentAppObserver", readContentAppObserverInteractionInfo());
+ put("webRTCTransportProvider", readWebRTCTransportProviderInteractionInfo());
put("chime", readChimeInteractionInfo());
put("ecosystemInformation", readEcosystemInformationInteractionInfo());
put("commissionerControl", readCommissionerControlInteractionInfo());
diff --git a/src/controller/java/generated/java/chip/devicecontroller/ClusterWriteMapping.java b/src/controller/java/generated/java/chip/devicecontroller/ClusterWriteMapping.java
index fce8cee5598ec6..0d561c36e77174 100644
--- a/src/controller/java/generated/java/chip/devicecontroller/ClusterWriteMapping.java
+++ b/src/controller/java/generated/java/chip/devicecontroller/ClusterWriteMapping.java
@@ -3472,6 +3472,8 @@ public Map> getWriteAttributeMap() {
writeAttributeMap.put("contentControl", writeContentControlInteractionInfo);
Map writeContentAppObserverInteractionInfo = new LinkedHashMap<>();
writeAttributeMap.put("contentAppObserver", writeContentAppObserverInteractionInfo);
+ Map writeWebRTCTransportProviderInteractionInfo = new LinkedHashMap<>();
+ writeAttributeMap.put("webRTCTransportProvider", writeWebRTCTransportProviderInteractionInfo);
Map writeChimeInteractionInfo = new LinkedHashMap<>();
Map writeChimeActiveChimeIDCommandParams = new LinkedHashMap();
CommandParameterInfo chimeactiveChimeIDCommandParameterInfo =
diff --git a/src/controller/java/generated/java/chip/devicecontroller/cluster/files.gni b/src/controller/java/generated/java/chip/devicecontroller/cluster/files.gni
index 397c26ee3dc9e5..6187cfbe7c2d44 100644
--- a/src/controller/java/generated/java/chip/devicecontroller/cluster/files.gni
+++ b/src/controller/java/generated/java/chip/devicecontroller/cluster/files.gni
@@ -160,6 +160,8 @@ structs_sources = [
"${chip_root}/src/controller/java/generated/java/chip/devicecontroller/cluster/structs/WaterHeaterManagementClusterWaterHeaterBoostInfoStruct.kt",
"${chip_root}/src/controller/java/generated/java/chip/devicecontroller/cluster/structs/WaterHeaterModeClusterModeOptionStruct.kt",
"${chip_root}/src/controller/java/generated/java/chip/devicecontroller/cluster/structs/WaterHeaterModeClusterModeTagStruct.kt",
+ "${chip_root}/src/controller/java/generated/java/chip/devicecontroller/cluster/structs/WebRTCTransportProviderClusterICEServerStruct.kt",
+ "${chip_root}/src/controller/java/generated/java/chip/devicecontroller/cluster/structs/WebRTCTransportProviderClusterWebRTCSessionStruct.kt",
]
eventstructs_sources = [
diff --git a/src/controller/java/generated/java/matter/controller/cluster/files.gni b/src/controller/java/generated/java/matter/controller/cluster/files.gni
index 42e2b95b02028f..6a7e5b317e3fee 100644
--- a/src/controller/java/generated/java/matter/controller/cluster/files.gni
+++ b/src/controller/java/generated/java/matter/controller/cluster/files.gni
@@ -160,6 +160,8 @@ matter_structs_sources = [
"${chip_root}/src/controller/java/generated/java/matter/controller/cluster/structs/WaterHeaterManagementClusterWaterHeaterBoostInfoStruct.kt",
"${chip_root}/src/controller/java/generated/java/matter/controller/cluster/structs/WaterHeaterModeClusterModeOptionStruct.kt",
"${chip_root}/src/controller/java/generated/java/matter/controller/cluster/structs/WaterHeaterModeClusterModeTagStruct.kt",
+ "${chip_root}/src/controller/java/generated/java/matter/controller/cluster/structs/WebRTCTransportProviderClusterICEServerStruct.kt",
+ "${chip_root}/src/controller/java/generated/java/matter/controller/cluster/structs/WebRTCTransportProviderClusterWebRTCSessionStruct.kt",
]
matter_eventstructs_sources = [
@@ -370,6 +372,7 @@ matter_clusters_sources = [
"${chip_root}/src/controller/java/generated/java/matter/controller/cluster/clusters/WakeOnLanCluster.kt",
"${chip_root}/src/controller/java/generated/java/matter/controller/cluster/clusters/WaterHeaterManagementCluster.kt",
"${chip_root}/src/controller/java/generated/java/matter/controller/cluster/clusters/WaterHeaterModeCluster.kt",
+ "${chip_root}/src/controller/java/generated/java/matter/controller/cluster/clusters/WebRTCTransportProviderCluster.kt",
"${chip_root}/src/controller/java/generated/java/matter/controller/cluster/clusters/WiFiNetworkDiagnosticsCluster.kt",
"${chip_root}/src/controller/java/generated/java/matter/controller/cluster/clusters/WiFiNetworkManagementCluster.kt",
"${chip_root}/src/controller/java/generated/java/matter/controller/cluster/clusters/WindowCoveringCluster.kt",
diff --git a/src/controller/java/zap-generated/CHIPAttributeTLVValueDecoder.cpp b/src/controller/java/zap-generated/CHIPAttributeTLVValueDecoder.cpp
index 0cf7ce8b652c68..741e40567fd091 100644
--- a/src/controller/java/zap-generated/CHIPAttributeTLVValueDecoder.cpp
+++ b/src/controller/java/zap-generated/CHIPAttributeTLVValueDecoder.cpp
@@ -42220,6 +42220,256 @@ jobject DecodeAttributeValue(const app::ConcreteAttributePath & aPath, TLV::TLVR
}
break;
}
+ case app::Clusters::WebRTCTransportProvider::Id: {
+ using namespace app::Clusters::WebRTCTransportProvider;
+ switch (aPath.mAttributeId)
+ {
+ case Attributes::CurrentSessions::Id: {
+ using TypeInfo = Attributes::CurrentSessions::TypeInfo;
+ TypeInfo::DecodableType cppValue;
+ *aError = app::DataModel::Decode(aReader, cppValue);
+ if (*aError != CHIP_NO_ERROR)
+ {
+ return nullptr;
+ }
+ jobject value;
+ chip::JniReferences::GetInstance().CreateArrayList(value);
+
+ auto iter_value_0 = cppValue.begin();
+ while (iter_value_0.Next())
+ {
+ auto & entry_0 = iter_value_0.GetValue();
+ jobject newElement_0;
+ jobject newElement_0_id;
+ std::string newElement_0_idClassName = "java/lang/Integer";
+ std::string newElement_0_idCtorSignature = "(I)V";
+ jint jninewElement_0_id = static_cast(entry_0.id);
+ chip::JniReferences::GetInstance().CreateBoxedObject(
+ newElement_0_idClassName.c_str(), newElement_0_idCtorSignature.c_str(), jninewElement_0_id, newElement_0_id);
+ jobject newElement_0_peerNodeID;
+ std::string newElement_0_peerNodeIDClassName = "java/lang/Long";
+ std::string newElement_0_peerNodeIDCtorSignature = "(J)V";
+ jlong jninewElement_0_peerNodeID = static_cast(entry_0.peerNodeID);
+ chip::JniReferences::GetInstance().CreateBoxedObject(newElement_0_peerNodeIDClassName.c_str(),
+ newElement_0_peerNodeIDCtorSignature.c_str(),
+ jninewElement_0_peerNodeID, newElement_0_peerNodeID);
+ jobject newElement_0_peerFabricIndex;
+ std::string newElement_0_peerFabricIndexClassName = "java/lang/Integer";
+ std::string newElement_0_peerFabricIndexCtorSignature = "(I)V";
+ jint jninewElement_0_peerFabricIndex = static_cast(entry_0.peerFabricIndex);
+ chip::JniReferences::GetInstance().CreateBoxedObject(
+ newElement_0_peerFabricIndexClassName.c_str(), newElement_0_peerFabricIndexCtorSignature.c_str(),
+ jninewElement_0_peerFabricIndex, newElement_0_peerFabricIndex);
+ jobject newElement_0_streamType;
+ std::string newElement_0_streamTypeClassName = "java/lang/Integer";
+ std::string newElement_0_streamTypeCtorSignature = "(I)V";
+ jint jninewElement_0_streamType = static_cast(entry_0.streamType);
+ chip::JniReferences::GetInstance().CreateBoxedObject(newElement_0_streamTypeClassName.c_str(),
+ newElement_0_streamTypeCtorSignature.c_str(),
+ jninewElement_0_streamType, newElement_0_streamType);
+ jobject newElement_0_videoStreamID;
+ if (entry_0.videoStreamID.IsNull())
+ {
+ newElement_0_videoStreamID = nullptr;
+ }
+ else
+ {
+ std::string newElement_0_videoStreamIDClassName = "java/lang/Integer";
+ std::string newElement_0_videoStreamIDCtorSignature = "(I)V";
+ jint jninewElement_0_videoStreamID = static_cast(entry_0.videoStreamID.Value());
+ chip::JniReferences::GetInstance().CreateBoxedObject(
+ newElement_0_videoStreamIDClassName.c_str(), newElement_0_videoStreamIDCtorSignature.c_str(),
+ jninewElement_0_videoStreamID, newElement_0_videoStreamID);
+ }
+ jobject newElement_0_audioStreamID;
+ if (entry_0.audioStreamID.IsNull())
+ {
+ newElement_0_audioStreamID = nullptr;
+ }
+ else
+ {
+ std::string newElement_0_audioStreamIDClassName = "java/lang/Integer";
+ std::string newElement_0_audioStreamIDCtorSignature = "(I)V";
+ jint jninewElement_0_audioStreamID = static_cast(entry_0.audioStreamID.Value());
+ chip::JniReferences::GetInstance().CreateBoxedObject(
+ newElement_0_audioStreamIDClassName.c_str(), newElement_0_audioStreamIDCtorSignature.c_str(),
+ jninewElement_0_audioStreamID, newElement_0_audioStreamID);
+ }
+ jobject newElement_0_metadataOptions;
+ std::string newElement_0_metadataOptionsClassName = "java/lang/Integer";
+ std::string newElement_0_metadataOptionsCtorSignature = "(I)V";
+ jint jninewElement_0_metadataOptions = static_cast(entry_0.metadataOptions.Raw());
+ chip::JniReferences::GetInstance().CreateBoxedObject(
+ newElement_0_metadataOptionsClassName.c_str(), newElement_0_metadataOptionsCtorSignature.c_str(),
+ jninewElement_0_metadataOptions, newElement_0_metadataOptions);
+
+ jclass webRTCSessionStructStructClass_1;
+ err = chip::JniReferences::GetInstance().GetLocalClassRef(
+ env, "chip/devicecontroller/ChipStructs$WebRTCTransportProviderClusterWebRTCSessionStruct",
+ webRTCSessionStructStructClass_1);
+ if (err != CHIP_NO_ERROR)
+ {
+ ChipLogError(Zcl, "Could not find class ChipStructs$WebRTCTransportProviderClusterWebRTCSessionStruct");
+ return nullptr;
+ }
+
+ jmethodID webRTCSessionStructStructCtor_1;
+ err = chip::JniReferences::GetInstance().FindMethod(
+ env, webRTCSessionStructStructClass_1, "",
+ "(Ljava/lang/Integer;Ljava/lang/Long;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/"
+ "Integer;Ljava/lang/Integer;)V",
+ &webRTCSessionStructStructCtor_1);
+ if (err != CHIP_NO_ERROR || webRTCSessionStructStructCtor_1 == nullptr)
+ {
+ ChipLogError(Zcl, "Could not find ChipStructs$WebRTCTransportProviderClusterWebRTCSessionStruct constructor");
+ return nullptr;
+ }
+
+ newElement_0 = env->NewObject(webRTCSessionStructStructClass_1, webRTCSessionStructStructCtor_1, newElement_0_id,
+ newElement_0_peerNodeID, newElement_0_peerFabricIndex, newElement_0_streamType,
+ newElement_0_videoStreamID, newElement_0_audioStreamID, newElement_0_metadataOptions);
+ chip::JniReferences::GetInstance().AddToList(value, newElement_0);
+ }
+ return value;
+ }
+ case Attributes::GeneratedCommandList::Id: {
+ using TypeInfo = Attributes::GeneratedCommandList::TypeInfo;
+ TypeInfo::DecodableType cppValue;
+ *aError = app::DataModel::Decode(aReader, cppValue);
+ if (*aError != CHIP_NO_ERROR)
+ {
+ return nullptr;
+ }
+ jobject value;
+ chip::JniReferences::GetInstance().CreateArrayList(value);
+
+ auto iter_value_0 = cppValue.begin();
+ while (iter_value_0.Next())
+ {
+ auto & entry_0 = iter_value_0.GetValue();
+ jobject newElement_0;
+ std::string newElement_0ClassName = "java/lang/Long";
+ std::string newElement_0CtorSignature = "(J)V";
+ jlong jninewElement_0 = static_cast(entry_0);
+ chip::JniReferences::GetInstance().CreateBoxedObject(
+ newElement_0ClassName.c_str(), newElement_0CtorSignature.c_str(), jninewElement_0, newElement_0);
+ chip::JniReferences::GetInstance().AddToList(value, newElement_0);
+ }
+ return value;
+ }
+ case Attributes::AcceptedCommandList::Id: {
+ using TypeInfo = Attributes::AcceptedCommandList::TypeInfo;
+ TypeInfo::DecodableType cppValue;
+ *aError = app::DataModel::Decode(aReader, cppValue);
+ if (*aError != CHIP_NO_ERROR)
+ {
+ return nullptr;
+ }
+ jobject value;
+ chip::JniReferences::GetInstance().CreateArrayList(value);
+
+ auto iter_value_0 = cppValue.begin();
+ while (iter_value_0.Next())
+ {
+ auto & entry_0 = iter_value_0.GetValue();
+ jobject newElement_0;
+ std::string newElement_0ClassName = "java/lang/Long";
+ std::string newElement_0CtorSignature = "(J)V";
+ jlong jninewElement_0 = static_cast(entry_0);
+ chip::JniReferences::GetInstance().CreateBoxedObject(
+ newElement_0ClassName.c_str(), newElement_0CtorSignature.c_str(), jninewElement_0, newElement_0);
+ chip::JniReferences::GetInstance().AddToList(value, newElement_0);
+ }
+ return value;
+ }
+ case Attributes::EventList::Id: {
+ using TypeInfo = Attributes::EventList::TypeInfo;
+ TypeInfo::DecodableType cppValue;
+ *aError = app::DataModel::Decode(aReader, cppValue);
+ if (*aError != CHIP_NO_ERROR)
+ {
+ return nullptr;
+ }
+ jobject value;
+ chip::JniReferences::GetInstance().CreateArrayList(value);
+
+ auto iter_value_0 = cppValue.begin();
+ while (iter_value_0.Next())
+ {
+ auto & entry_0 = iter_value_0.GetValue();
+ jobject newElement_0;
+ std::string newElement_0ClassName = "java/lang/Long";
+ std::string newElement_0CtorSignature = "(J)V";
+ jlong jninewElement_0 = static_cast(entry_0);
+ chip::JniReferences::GetInstance().CreateBoxedObject(
+ newElement_0ClassName.c_str(), newElement_0CtorSignature.c_str(), jninewElement_0, newElement_0);
+ chip::JniReferences::GetInstance().AddToList(value, newElement_0);
+ }
+ return value;
+ }
+ case Attributes::AttributeList::Id: {
+ using TypeInfo = Attributes::AttributeList::TypeInfo;
+ TypeInfo::DecodableType cppValue;
+ *aError = app::DataModel::Decode(aReader, cppValue);
+ if (*aError != CHIP_NO_ERROR)
+ {
+ return nullptr;
+ }
+ jobject value;
+ chip::JniReferences::GetInstance().CreateArrayList(value);
+
+ auto iter_value_0 = cppValue.begin();
+ while (iter_value_0.Next())
+ {
+ auto & entry_0 = iter_value_0.GetValue();
+ jobject newElement_0;
+ std::string newElement_0ClassName = "java/lang/Long";
+ std::string newElement_0CtorSignature = "(J)V";
+ jlong jninewElement_0 = static_cast(entry_0);
+ chip::JniReferences::GetInstance().CreateBoxedObject(
+ newElement_0ClassName.c_str(), newElement_0CtorSignature.c_str(), jninewElement_0, newElement_0);
+ chip::JniReferences::GetInstance().AddToList(value, newElement_0);
+ }
+ return value;
+ }
+ case Attributes::FeatureMap::Id: {
+ using TypeInfo = Attributes::FeatureMap::TypeInfo;
+ TypeInfo::DecodableType cppValue;
+ *aError = app::DataModel::Decode(aReader, cppValue);
+ if (*aError != CHIP_NO_ERROR)
+ {
+ return nullptr;
+ }
+ jobject value;
+ std::string valueClassName = "java/lang/Long";
+ std::string valueCtorSignature = "(J)V";
+ jlong jnivalue = static_cast(cppValue);
+ chip::JniReferences::GetInstance().CreateBoxedObject(valueClassName.c_str(), valueCtorSignature.c_str(),
+ jnivalue, value);
+ return value;
+ }
+ case Attributes::ClusterRevision::Id: {
+ using TypeInfo = Attributes::ClusterRevision::TypeInfo;
+ TypeInfo::DecodableType cppValue;
+ *aError = app::DataModel::Decode(aReader, cppValue);
+ if (*aError != CHIP_NO_ERROR)
+ {
+ return nullptr;
+ }
+ jobject value;
+ std::string valueClassName = "java/lang/Integer";
+ std::string valueCtorSignature = "(I)V";
+ jint jnivalue = static_cast(cppValue);
+ chip::JniReferences::GetInstance().CreateBoxedObject(valueClassName.c_str(), valueCtorSignature.c_str(), jnivalue,
+ value);
+ return value;
+ }
+ default:
+ *aError = CHIP_ERROR_IM_MALFORMED_ATTRIBUTE_PATH_IB;
+ break;
+ }
+ break;
+ }
case app::Clusters::Chime::Id: {
using namespace app::Clusters::Chime;
switch (aPath.mAttributeId)
diff --git a/src/controller/java/zap-generated/CHIPEventTLVValueDecoder.cpp b/src/controller/java/zap-generated/CHIPEventTLVValueDecoder.cpp
index 2dc46ab844d25e..9da4b9690ecdb6 100644
--- a/src/controller/java/zap-generated/CHIPEventTLVValueDecoder.cpp
+++ b/src/controller/java/zap-generated/CHIPEventTLVValueDecoder.cpp
@@ -8248,6 +8248,16 @@ jobject DecodeEventValue(const app::ConcreteEventPath & aPath, TLV::TLVReader &
}
break;
}
+ case app::Clusters::WebRTCTransportProvider::Id: {
+ using namespace app::Clusters::WebRTCTransportProvider;
+ switch (aPath.mEventId)
+ {
+ default:
+ *aError = CHIP_ERROR_IM_MALFORMED_EVENT_PATH_IB;
+ break;
+ }
+ break;
+ }
case app::Clusters::Chime::Id: {
using namespace app::Clusters::Chime;
switch (aPath.mEventId)
diff --git a/src/controller/python/chip/clusters/CHIPClusters.py b/src/controller/python/chip/clusters/CHIPClusters.py
index 1105faa9caf211..1df4d9c9f6d565 100644
--- a/src/controller/python/chip/clusters/CHIPClusters.py
+++ b/src/controller/python/chip/clusters/CHIPClusters.py
@@ -13029,6 +13029,106 @@ class ChipClusters:
},
},
}
+ _WEB_RTC_TRANSPORT_PROVIDER_CLUSTER_INFO = {
+ "clusterName": "WebRTCTransportProvider",
+ "clusterId": 0x00000553,
+ "commands": {
+ 0x00000001: {
+ "commandId": 0x00000001,
+ "commandName": "SolicitOffer",
+ "args": {
+ "streamType": "int",
+ "videoStreamID": "int",
+ "audioStreamID": "int",
+ "ICEServers": "ICEServerStruct",
+ "ICETransportPolicy": "str",
+ "metadataOptions": "int",
+ },
+ },
+ 0x00000003: {
+ "commandId": 0x00000003,
+ "commandName": "ProvideOffer",
+ "args": {
+ "webRTCSessionID": "int",
+ "sdp": "str",
+ "streamType": "int",
+ "videoStreamID": "int",
+ "audioStreamID": "int",
+ "ICEServers": "ICEServerStruct",
+ "ICETransportPolicy": "str",
+ "metadataOptions": "int",
+ },
+ },
+ 0x00000005: {
+ "commandId": 0x00000005,
+ "commandName": "ProvideAnswer",
+ "args": {
+ "webRTCSessionID": "int",
+ "sdp": "str",
+ },
+ },
+ 0x00000006: {
+ "commandId": 0x00000006,
+ "commandName": "ProvideICECandidate",
+ "args": {
+ "webRTCSessionID": "int",
+ "ICECandidate": "str",
+ },
+ },
+ 0x00000007: {
+ "commandId": 0x00000007,
+ "commandName": "EndSession",
+ "args": {
+ "webRTCSessionID": "int",
+ "reason": "int",
+ },
+ },
+ },
+ "attributes": {
+ 0x00000000: {
+ "attributeName": "CurrentSessions",
+ "attributeId": 0x00000000,
+ "type": "",
+ "reportable": True,
+ },
+ 0x0000FFF8: {
+ "attributeName": "GeneratedCommandList",
+ "attributeId": 0x0000FFF8,
+ "type": "int",
+ "reportable": True,
+ },
+ 0x0000FFF9: {
+ "attributeName": "AcceptedCommandList",
+ "attributeId": 0x0000FFF9,
+ "type": "int",
+ "reportable": True,
+ },
+ 0x0000FFFA: {
+ "attributeName": "EventList",
+ "attributeId": 0x0000FFFA,
+ "type": "int",
+ "reportable": True,
+ },
+ 0x0000FFFB: {
+ "attributeName": "AttributeList",
+ "attributeId": 0x0000FFFB,
+ "type": "int",
+ "reportable": True,
+ },
+ 0x0000FFFC: {
+ "attributeName": "FeatureMap",
+ "attributeId": 0x0000FFFC,
+ "type": "int",
+ "reportable": True,
+ },
+ 0x0000FFFD: {
+ "attributeName": "ClusterRevision",
+ "attributeId": 0x0000FFFD,
+ "type": "int",
+ "reportable": True,
+ },
+ },
+ }
_CHIME_CLUSTER_INFO = {
"clusterName": "Chime",
"clusterId": 0x00000556,
@@ -14347,6 +14447,7 @@ class ChipClusters:
0x0000050E: _ACCOUNT_LOGIN_CLUSTER_INFO,
0x0000050F: _CONTENT_CONTROL_CLUSTER_INFO,
0x00000510: _CONTENT_APP_OBSERVER_CLUSTER_INFO,
+ 0x00000553: _WEB_RTC_TRANSPORT_PROVIDER_CLUSTER_INFO,
0x00000556: _CHIME_CLUSTER_INFO,
0x00000750: _ECOSYSTEM_INFORMATION_CLUSTER_INFO,
0x00000751: _COMMISSIONER_CONTROL_CLUSTER_INFO,
@@ -14473,6 +14574,7 @@ class ChipClusters:
"AccountLogin": _ACCOUNT_LOGIN_CLUSTER_INFO,
"ContentControl": _CONTENT_CONTROL_CLUSTER_INFO,
"ContentAppObserver": _CONTENT_APP_OBSERVER_CLUSTER_INFO,
+ "WebRTCTransportProvider": _WEB_RTC_TRANSPORT_PROVIDER_CLUSTER_INFO,
"Chime": _CHIME_CLUSTER_INFO,
"EcosystemInformation": _ECOSYSTEM_INFORMATION_CLUSTER_INFO,
"CommissionerControl": _COMMISSIONER_CONTROL_CLUSTER_INFO,
diff --git a/src/controller/python/chip/clusters/Objects.py b/src/controller/python/chip/clusters/Objects.py
index 25bf7be6889f99..8f8a2c9212490a 100644
--- a/src/controller/python/chip/clusters/Objects.py
+++ b/src/controller/python/chip/clusters/Objects.py
@@ -156,6 +156,7 @@
"AccountLogin",
"ContentControl",
"ContentAppObserver",
+ "WebRTCTransportProvider",
"Chime",
"EcosystemInformation",
"CommissionerControl",
@@ -46517,6 +46518,374 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor:
value: 'uint' = 0
+@dataclass
+class WebRTCTransportProvider(Cluster):
+ id: typing.ClassVar[int] = 0x00000553
+
+ @ChipUtility.classproperty
+ def descriptor(cls) -> ClusterObjectDescriptor:
+ return ClusterObjectDescriptor(
+ Fields=[
+ ClusterObjectFieldDescriptor(Label="currentSessions", Tag=0x00000000, Type=typing.List[WebRTCTransportProvider.Structs.WebRTCSessionStruct]),
+ ClusterObjectFieldDescriptor(Label="generatedCommandList", Tag=0x0000FFF8, Type=typing.List[uint]),
+ ClusterObjectFieldDescriptor(Label="acceptedCommandList", Tag=0x0000FFF9, Type=typing.List[uint]),
+ ClusterObjectFieldDescriptor(Label="eventList", Tag=0x0000FFFA, Type=typing.List[uint]),
+ ClusterObjectFieldDescriptor(Label="attributeList", Tag=0x0000FFFB, Type=typing.List[uint]),
+ ClusterObjectFieldDescriptor(Label="featureMap", Tag=0x0000FFFC, Type=uint),
+ ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
+ ])
+
+ currentSessions: 'typing.List[WebRTCTransportProvider.Structs.WebRTCSessionStruct]' = None
+ generatedCommandList: 'typing.List[uint]' = None
+ acceptedCommandList: 'typing.List[uint]' = None
+ eventList: 'typing.List[uint]' = None
+ attributeList: 'typing.List[uint]' = None
+ featureMap: 'uint' = None
+ clusterRevision: 'uint' = None
+
+ class Enums:
+ class StreamTypeEnum(MatterIntEnum):
+ kInternal = 0x00
+ kRecording = 0x01
+ kAnalysis = 0x02
+ kLiveView = 0x03
+ # All received enum values that are not listed above will be mapped
+ # to kUnknownEnumValue. This is a helper enum value that should only
+ # be used by code to process how it handles receiving an unknown
+ # enum value. This specific value should never be transmitted.
+ kUnknownEnumValue = 4,
+
+ class WebRTCEndReasonEnum(MatterIntEnum):
+ kIceFailed = 0x00
+ kIceTimeout = 0x01
+ kUserHangup = 0x02
+ kUserBusy = 0x03
+ kReplaced = 0x04
+ kNoUserMedia = 0x05
+ kInviteTimeout = 0x06
+ kAnsweredElsewhere = 0x07
+ kOutOfResources = 0x08
+ kMediaTimeout = 0x09
+ kLowPower = 0x0A
+ kUnknownReason = 0x0B
+ # All received enum values that are not listed above will be mapped
+ # to kUnknownEnumValue. This is a helper enum value that should only
+ # be used by code to process how it handles receiving an unknown
+ # enum value. This specific value should never be transmitted.
+ kUnknownEnumValue = 12,
+
+ class Bitmaps:
+ class WebRTCMetadataOptions(IntFlag):
+ kDataTLV = 0x1
+
+ class Structs:
+ @dataclass
+ class ICEServerStruct(ClusterObject):
+ @ChipUtility.classproperty
+ def descriptor(cls) -> ClusterObjectDescriptor:
+ return ClusterObjectDescriptor(
+ Fields=[
+ ClusterObjectFieldDescriptor(Label="urls", Tag=1, Type=typing.List[str]),
+ ClusterObjectFieldDescriptor(Label="username", Tag=2, Type=typing.Optional[str]),
+ ClusterObjectFieldDescriptor(Label="credential", Tag=3, Type=typing.Optional[str]),
+ ClusterObjectFieldDescriptor(Label="caid", Tag=4, Type=typing.Optional[uint]),
+ ])
+
+ urls: 'typing.List[str]' = field(default_factory=lambda: [])
+ username: 'typing.Optional[str]' = None
+ credential: 'typing.Optional[str]' = None
+ caid: 'typing.Optional[uint]' = None
+
+ @dataclass
+ class WebRTCSessionStruct(ClusterObject):
+ @ChipUtility.classproperty
+ def descriptor(cls) -> ClusterObjectDescriptor:
+ return ClusterObjectDescriptor(
+ Fields=[
+ ClusterObjectFieldDescriptor(Label="id", Tag=1, Type=uint),
+ ClusterObjectFieldDescriptor(Label="peerNodeID", Tag=2, Type=uint),
+ ClusterObjectFieldDescriptor(Label="peerFabricIndex", Tag=3, Type=uint),
+ ClusterObjectFieldDescriptor(Label="streamType", Tag=4, Type=WebRTCTransportProvider.Enums.StreamTypeEnum),
+ ClusterObjectFieldDescriptor(Label="videoStreamID", Tag=5, Type=typing.Union[Nullable, uint]),
+ ClusterObjectFieldDescriptor(Label="audioStreamID", Tag=6, Type=typing.Union[Nullable, uint]),
+ ClusterObjectFieldDescriptor(Label="metadataOptions", Tag=7, Type=uint),
+ ])
+
+ id: 'uint' = 0
+ peerNodeID: 'uint' = 0
+ peerFabricIndex: 'uint' = 0
+ streamType: 'WebRTCTransportProvider.Enums.StreamTypeEnum' = 0
+ videoStreamID: 'typing.Union[Nullable, uint]' = NullValue
+ audioStreamID: 'typing.Union[Nullable, uint]' = NullValue
+ metadataOptions: 'uint' = 0
+
+ class Commands:
+ @dataclass
+ class SolicitOffer(ClusterCommand):
+ cluster_id: typing.ClassVar[int] = 0x00000553
+ command_id: typing.ClassVar[int] = 0x00000001
+ is_client: typing.ClassVar[bool] = True
+ response_type: typing.ClassVar[str] = 'SolicitOfferResponse'
+
+ @ChipUtility.classproperty
+ def descriptor(cls) -> ClusterObjectDescriptor:
+ return ClusterObjectDescriptor(
+ Fields=[
+ ClusterObjectFieldDescriptor(Label="streamType", Tag=0, Type=WebRTCTransportProvider.Enums.StreamTypeEnum),
+ ClusterObjectFieldDescriptor(Label="videoStreamID", Tag=1, Type=typing.Union[None, Nullable, uint]),
+ ClusterObjectFieldDescriptor(Label="audioStreamID", Tag=2, Type=typing.Union[None, Nullable, uint]),
+ ClusterObjectFieldDescriptor(Label="ICEServers", Tag=3, Type=typing.Optional[typing.List[WebRTCTransportProvider.Structs.ICEServerStruct]]),
+ ClusterObjectFieldDescriptor(Label="ICETransportPolicy", Tag=4, Type=typing.Optional[str]),
+ ClusterObjectFieldDescriptor(Label="metadataOptions", Tag=5, Type=typing.Optional[uint]),
+ ])
+
+ streamType: 'WebRTCTransportProvider.Enums.StreamTypeEnum' = 0
+ videoStreamID: 'typing.Union[None, Nullable, uint]' = None
+ audioStreamID: 'typing.Union[None, Nullable, uint]' = None
+ ICEServers: 'typing.Optional[typing.List[WebRTCTransportProvider.Structs.ICEServerStruct]]' = None
+ ICETransportPolicy: 'typing.Optional[str]' = None
+ metadataOptions: 'typing.Optional[uint]' = None
+
+ @dataclass
+ class SolicitOfferResponse(ClusterCommand):
+ cluster_id: typing.ClassVar[int] = 0x00000553
+ command_id: typing.ClassVar[int] = 0x00000002
+ is_client: typing.ClassVar[bool] = False
+ response_type: typing.ClassVar[str] = None
+
+ @ChipUtility.classproperty
+ def descriptor(cls) -> ClusterObjectDescriptor:
+ return ClusterObjectDescriptor(
+ Fields=[
+ ClusterObjectFieldDescriptor(Label="webRTCSessionID", Tag=0, Type=uint),
+ ClusterObjectFieldDescriptor(Label="deferredOffer", Tag=1, Type=bool),
+ ClusterObjectFieldDescriptor(Label="videoStreamID", Tag=2, Type=typing.Union[None, Nullable, uint]),
+ ClusterObjectFieldDescriptor(Label="audioStreamID", Tag=3, Type=typing.Union[None, Nullable, uint]),
+ ])
+
+ webRTCSessionID: 'uint' = 0
+ deferredOffer: 'bool' = False
+ videoStreamID: 'typing.Union[None, Nullable, uint]' = None
+ audioStreamID: 'typing.Union[None, Nullable, uint]' = None
+
+ @dataclass
+ class ProvideOffer(ClusterCommand):
+ cluster_id: typing.ClassVar[int] = 0x00000553
+ command_id: typing.ClassVar[int] = 0x00000003
+ is_client: typing.ClassVar[bool] = True
+ response_type: typing.ClassVar[str] = 'ProvideOfferResponse'
+
+ @ChipUtility.classproperty
+ def descriptor(cls) -> ClusterObjectDescriptor:
+ return ClusterObjectDescriptor(
+ Fields=[
+ ClusterObjectFieldDescriptor(Label="webRTCSessionID", Tag=0, Type=typing.Union[Nullable, uint]),
+ ClusterObjectFieldDescriptor(Label="sdp", Tag=1, Type=str),
+ ClusterObjectFieldDescriptor(Label="streamType", Tag=2, Type=WebRTCTransportProvider.Enums.StreamTypeEnum),
+ ClusterObjectFieldDescriptor(Label="videoStreamID", Tag=3, Type=typing.Union[None, Nullable, uint]),
+ ClusterObjectFieldDescriptor(Label="audioStreamID", Tag=4, Type=typing.Union[None, Nullable, uint]),
+ ClusterObjectFieldDescriptor(Label="ICEServers", Tag=5, Type=typing.Optional[typing.List[WebRTCTransportProvider.Structs.ICEServerStruct]]),
+ ClusterObjectFieldDescriptor(Label="ICETransportPolicy", Tag=6, Type=typing.Optional[str]),
+ ClusterObjectFieldDescriptor(Label="metadataOptions", Tag=7, Type=typing.Optional[uint]),
+ ])
+
+ webRTCSessionID: 'typing.Union[Nullable, uint]' = NullValue
+ sdp: 'str' = ""
+ streamType: 'WebRTCTransportProvider.Enums.StreamTypeEnum' = 0
+ videoStreamID: 'typing.Union[None, Nullable, uint]' = None
+ audioStreamID: 'typing.Union[None, Nullable, uint]' = None
+ ICEServers: 'typing.Optional[typing.List[WebRTCTransportProvider.Structs.ICEServerStruct]]' = None
+ ICETransportPolicy: 'typing.Optional[str]' = None
+ metadataOptions: 'typing.Optional[uint]' = None
+
+ @dataclass
+ class ProvideOfferResponse(ClusterCommand):
+ cluster_id: typing.ClassVar[int] = 0x00000553
+ command_id: typing.ClassVar[int] = 0x00000004
+ is_client: typing.ClassVar[bool] = False
+ response_type: typing.ClassVar[str] = None
+
+ @ChipUtility.classproperty
+ def descriptor(cls) -> ClusterObjectDescriptor:
+ return ClusterObjectDescriptor(
+ Fields=[
+ ClusterObjectFieldDescriptor(Label="webRTCSessionID", Tag=0, Type=uint),
+ ClusterObjectFieldDescriptor(Label="videoStreamID", Tag=1, Type=uint),
+ ClusterObjectFieldDescriptor(Label="audioStreamID", Tag=2, Type=uint),
+ ])
+
+ webRTCSessionID: 'uint' = 0
+ videoStreamID: 'uint' = 0
+ audioStreamID: 'uint' = 0
+
+ @dataclass
+ class ProvideAnswer(ClusterCommand):
+ cluster_id: typing.ClassVar[int] = 0x00000553
+ command_id: typing.ClassVar[int] = 0x00000005
+ is_client: typing.ClassVar[bool] = True
+ response_type: typing.ClassVar[str] = None
+
+ @ChipUtility.classproperty
+ def descriptor(cls) -> ClusterObjectDescriptor:
+ return ClusterObjectDescriptor(
+ Fields=[
+ ClusterObjectFieldDescriptor(Label="webRTCSessionID", Tag=0, Type=uint),
+ ClusterObjectFieldDescriptor(Label="sdp", Tag=1, Type=str),
+ ])
+
+ webRTCSessionID: 'uint' = 0
+ sdp: 'str' = ""
+
+ @dataclass
+ class ProvideICECandidate(ClusterCommand):
+ cluster_id: typing.ClassVar[int] = 0x00000553
+ command_id: typing.ClassVar[int] = 0x00000006
+ is_client: typing.ClassVar[bool] = True
+ response_type: typing.ClassVar[str] = None
+
+ @ChipUtility.classproperty
+ def descriptor(cls) -> ClusterObjectDescriptor:
+ return ClusterObjectDescriptor(
+ Fields=[
+ ClusterObjectFieldDescriptor(Label="webRTCSessionID", Tag=0, Type=uint),
+ ClusterObjectFieldDescriptor(Label="ICECandidate", Tag=1, Type=str),
+ ])
+
+ webRTCSessionID: 'uint' = 0
+ ICECandidate: 'str' = ""
+
+ @dataclass
+ class EndSession(ClusterCommand):
+ cluster_id: typing.ClassVar[int] = 0x00000553
+ command_id: typing.ClassVar[int] = 0x00000007
+ is_client: typing.ClassVar[bool] = True
+ response_type: typing.ClassVar[str] = None
+
+ @ChipUtility.classproperty
+ def descriptor(cls) -> ClusterObjectDescriptor:
+ return ClusterObjectDescriptor(
+ Fields=[
+ ClusterObjectFieldDescriptor(Label="webRTCSessionID", Tag=0, Type=uint),
+ ClusterObjectFieldDescriptor(Label="reason", Tag=1, Type=WebRTCTransportProvider.Enums.WebRTCEndReasonEnum),
+ ])
+
+ webRTCSessionID: 'uint' = 0
+ reason: 'WebRTCTransportProvider.Enums.WebRTCEndReasonEnum' = 0
+
+ class Attributes:
+ @dataclass
+ class CurrentSessions(ClusterAttributeDescriptor):
+ @ChipUtility.classproperty
+ def cluster_id(cls) -> int:
+ return 0x00000553
+
+ @ChipUtility.classproperty
+ def attribute_id(cls) -> int:
+ return 0x00000000
+
+ @ChipUtility.classproperty
+ def attribute_type(cls) -> ClusterObjectFieldDescriptor:
+ return ClusterObjectFieldDescriptor(Type=typing.List[WebRTCTransportProvider.Structs.WebRTCSessionStruct])
+
+ value: 'typing.List[WebRTCTransportProvider.Structs.WebRTCSessionStruct]' = field(default_factory=lambda: [])
+
+ @dataclass
+ class GeneratedCommandList(ClusterAttributeDescriptor):
+ @ChipUtility.classproperty
+ def cluster_id(cls) -> int:
+ return 0x00000553
+
+ @ChipUtility.classproperty
+ def attribute_id(cls) -> int:
+ return 0x0000FFF8
+
+ @ChipUtility.classproperty
+ def attribute_type(cls) -> ClusterObjectFieldDescriptor:
+ return ClusterObjectFieldDescriptor(Type=typing.List[uint])
+
+ value: 'typing.List[uint]' = field(default_factory=lambda: [])
+
+ @dataclass
+ class AcceptedCommandList(ClusterAttributeDescriptor):
+ @ChipUtility.classproperty
+ def cluster_id(cls) -> int:
+ return 0x00000553
+
+ @ChipUtility.classproperty
+ def attribute_id(cls) -> int:
+ return 0x0000FFF9
+
+ @ChipUtility.classproperty
+ def attribute_type(cls) -> ClusterObjectFieldDescriptor:
+ return ClusterObjectFieldDescriptor(Type=typing.List[uint])
+
+ value: 'typing.List[uint]' = field(default_factory=lambda: [])
+
+ @dataclass
+ class EventList(ClusterAttributeDescriptor):
+ @ChipUtility.classproperty
+ def cluster_id(cls) -> int:
+ return 0x00000553
+
+ @ChipUtility.classproperty
+ def attribute_id(cls) -> int:
+ return 0x0000FFFA
+
+ @ChipUtility.classproperty
+ def attribute_type(cls) -> ClusterObjectFieldDescriptor:
+ return ClusterObjectFieldDescriptor(Type=typing.List[uint])
+
+ value: 'typing.List[uint]' = field(default_factory=lambda: [])
+
+ @dataclass
+ class AttributeList(ClusterAttributeDescriptor):
+ @ChipUtility.classproperty
+ def cluster_id(cls) -> int:
+ return 0x00000553
+
+ @ChipUtility.classproperty
+ def attribute_id(cls) -> int:
+ return 0x0000FFFB
+
+ @ChipUtility.classproperty
+ def attribute_type(cls) -> ClusterObjectFieldDescriptor:
+ return ClusterObjectFieldDescriptor(Type=typing.List[uint])
+
+ value: 'typing.List[uint]' = field(default_factory=lambda: [])
+
+ @dataclass
+ class FeatureMap(ClusterAttributeDescriptor):
+ @ChipUtility.classproperty
+ def cluster_id(cls) -> int:
+ return 0x00000553
+
+ @ChipUtility.classproperty
+ def attribute_id(cls) -> int:
+ return 0x0000FFFC
+
+ @ChipUtility.classproperty
+ def attribute_type(cls) -> ClusterObjectFieldDescriptor:
+ return ClusterObjectFieldDescriptor(Type=uint)
+
+ value: 'uint' = 0
+
+ @dataclass
+ class ClusterRevision(ClusterAttributeDescriptor):
+ @ChipUtility.classproperty
+ def cluster_id(cls) -> int:
+ return 0x00000553
+
+ @ChipUtility.classproperty
+ def attribute_id(cls) -> int:
+ return 0x0000FFFD
+
+ @ChipUtility.classproperty
+ def attribute_type(cls) -> ClusterObjectFieldDescriptor:
+ return ClusterObjectFieldDescriptor(Type=uint)
+
+ value: 'uint' = 0
+
+
@dataclass
class Chime(Cluster):
id: typing.ClassVar[int] = 0x00000556
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRAttributeSpecifiedCheck.mm b/src/darwin/Framework/CHIP/zap-generated/MTRAttributeSpecifiedCheck.mm
index 986f9776bab5d5..a2878cf511996c 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRAttributeSpecifiedCheck.mm
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRAttributeSpecifiedCheck.mm
@@ -5912,6 +5912,36 @@ static BOOL AttributeIsSpecifiedInContentAppObserverCluster(AttributeId aAttribu
}
}
}
+static BOOL AttributeIsSpecifiedInWebRTCTransportProviderCluster(AttributeId aAttributeId)
+{
+ using namespace Clusters::WebRTCTransportProvider;
+ switch (aAttributeId) {
+ case Attributes::CurrentSessions::Id: {
+ return YES;
+ }
+ case Attributes::GeneratedCommandList::Id: {
+ return YES;
+ }
+ case Attributes::AcceptedCommandList::Id: {
+ return YES;
+ }
+ case Attributes::EventList::Id: {
+ return YES;
+ }
+ case Attributes::AttributeList::Id: {
+ return YES;
+ }
+ case Attributes::FeatureMap::Id: {
+ return YES;
+ }
+ case Attributes::ClusterRevision::Id: {
+ return YES;
+ }
+ default: {
+ return NO;
+ }
+ }
+}
static BOOL AttributeIsSpecifiedInChimeCluster(AttributeId aAttributeId)
{
using namespace Clusters::Chime;
@@ -6681,6 +6711,9 @@ BOOL MTRAttributeIsSpecified(ClusterId aClusterId, AttributeId aAttributeId)
case Clusters::ContentAppObserver::Id: {
return AttributeIsSpecifiedInContentAppObserverCluster(aAttributeId);
}
+ case Clusters::WebRTCTransportProvider::Id: {
+ return AttributeIsSpecifiedInWebRTCTransportProviderCluster(aAttributeId);
+ }
case Clusters::Chime::Id: {
return AttributeIsSpecifiedInChimeCluster(aAttributeId);
}
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRAttributeTLVValueDecoder.mm b/src/darwin/Framework/CHIP/zap-generated/MTRAttributeTLVValueDecoder.mm
index 630c612e707b41..ae289578994178 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRAttributeTLVValueDecoder.mm
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRAttributeTLVValueDecoder.mm
@@ -16899,6 +16899,59 @@ static id _Nullable DecodeAttributeValueForContentAppObserverCluster(AttributeId
*aError = CHIP_ERROR_IM_MALFORMED_ATTRIBUTE_PATH_IB;
return nil;
}
+static id _Nullable DecodeAttributeValueForWebRTCTransportProviderCluster(AttributeId aAttributeId, TLV::TLVReader & aReader, CHIP_ERROR * aError)
+{
+ using namespace Clusters::WebRTCTransportProvider;
+ switch (aAttributeId) {
+ case Attributes::CurrentSessions::Id: {
+ using TypeInfo = Attributes::CurrentSessions::TypeInfo;
+ TypeInfo::DecodableType cppValue;
+ *aError = DataModel::Decode(aReader, cppValue);
+ if (*aError != CHIP_NO_ERROR) {
+ return nil;
+ }
+ NSArray * _Nonnull value;
+ { // Scope for our temporary variables
+ auto * array_0 = [NSMutableArray new];
+ auto iter_0 = cppValue.begin();
+ while (iter_0.Next()) {
+ auto & entry_0 = iter_0.GetValue();
+ MTRWebRTCTransportProviderClusterWebRTCSessionStruct * newElement_0;
+ newElement_0 = [MTRWebRTCTransportProviderClusterWebRTCSessionStruct new];
+ newElement_0.id = [NSNumber numberWithUnsignedShort:entry_0.id];
+ newElement_0.peerNodeID = [NSNumber numberWithUnsignedLongLong:entry_0.peerNodeID];
+ newElement_0.peerFabricIndex = [NSNumber numberWithUnsignedChar:entry_0.peerFabricIndex];
+ newElement_0.streamType = [NSNumber numberWithUnsignedChar:chip::to_underlying(entry_0.streamType)];
+ if (entry_0.videoStreamID.IsNull()) {
+ newElement_0.videoStreamID = nil;
+ } else {
+ newElement_0.videoStreamID = [NSNumber numberWithUnsignedShort:entry_0.videoStreamID.Value()];
+ }
+ if (entry_0.audioStreamID.IsNull()) {
+ newElement_0.audioStreamID = nil;
+ } else {
+ newElement_0.audioStreamID = [NSNumber numberWithUnsignedShort:entry_0.audioStreamID.Value()];
+ }
+ newElement_0.metadataOptions = [NSNumber numberWithUnsignedChar:entry_0.metadataOptions.Raw()];
+ [array_0 addObject:newElement_0];
+ }
+ CHIP_ERROR err = iter_0.GetStatus();
+ if (err != CHIP_NO_ERROR) {
+ *aError = err;
+ return nil;
+ }
+ value = array_0;
+ }
+ return value;
+ }
+ default: {
+ break;
+ }
+ }
+
+ *aError = CHIP_ERROR_IM_MALFORMED_ATTRIBUTE_PATH_IB;
+ return nil;
+}
static id _Nullable DecodeAttributeValueForChimeCluster(AttributeId aAttributeId, TLV::TLVReader & aReader, CHIP_ERROR * aError)
{
using namespace Clusters::Chime;
@@ -19075,6 +19128,9 @@ id _Nullable MTRDecodeAttributeValue(const ConcreteAttributePath & aPath, TLV::T
case Clusters::ContentAppObserver::Id: {
return DecodeAttributeValueForContentAppObserverCluster(aPath.mAttributeId, aReader, aError);
}
+ case Clusters::WebRTCTransportProvider::Id: {
+ return DecodeAttributeValueForWebRTCTransportProviderCluster(aPath.mAttributeId, aReader, aError);
+ }
case Clusters::Chime::Id: {
return DecodeAttributeValueForChimeCluster(aPath.mAttributeId, aReader, aError);
}
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.h b/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.h
index 10dd241817165c..562b23a96663b2 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.h
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.h
@@ -14756,6 +14756,104 @@ MTR_PROVISIONALLY_AVAILABLE
@end
+/**
+ * Cluster WebRTC Transport Provider
+ *
+ * The WebRTC transport provider cluster provides a way for stream providers (e.g. Cameras) to stream or receive their data through WebRTC.
+ */
+MTR_PROVISIONALLY_AVAILABLE
+@interface MTRBaseClusterWebRTCTransportProvider : MTRGenericBaseCluster
+
+/**
+ * Command SolicitOffer
+ *
+ * Requests that the Provider initiates a new session with the Offer / Answer flow in a way that allows for options to be passed and work with devices needing the standby flow.
+ */
+- (void)solicitOfferWithParams:(MTRWebRTCTransportProviderClusterSolicitOfferParams *)params completion:(void (^)(MTRWebRTCTransportProviderClusterSolicitOfferResponseParams * _Nullable data, NSError * _Nullable error))completion MTR_PROVISIONALLY_AVAILABLE;
+/**
+ * Command ProvideOffer
+ *
+ * This command allows an SDP Offer to be set and start a new session.
+ */
+- (void)provideOfferWithParams:(MTRWebRTCTransportProviderClusterProvideOfferParams *)params completion:(void (^)(MTRWebRTCTransportProviderClusterProvideOfferResponseParams * _Nullable data, NSError * _Nullable error))completion MTR_PROVISIONALLY_AVAILABLE;
+/**
+ * Command ProvideAnswer
+ *
+ * This command SHALL be initiated from a Node in response to an Offer that was previously received from a remote peer.
+ */
+- (void)provideAnswerWithParams:(MTRWebRTCTransportProviderClusterProvideAnswerParams *)params completion:(MTRStatusCompletion)completion MTR_PROVISIONALLY_AVAILABLE;
+/**
+ * Command ProvideICECandidate
+ *
+ * This command allows for https://www.rfc-editor.org/rfc/rfc8839#section-4.2.1.2 nominated after the initial Offer / Answer exchange to be added to a session during the gathering phase.
+ */
+- (void)provideICECandidateWithParams:(MTRWebRTCTransportProviderClusterProvideICECandidateParams *)params completion:(MTRStatusCompletion)completion MTR_PROVISIONALLY_AVAILABLE;
+/**
+ * Command EndSession
+ *
+ * This command instructs the stream provider to end the WebRTC session.
+ */
+- (void)endSessionWithParams:(MTRWebRTCTransportProviderClusterEndSessionParams *)params completion:(MTRStatusCompletion)completion MTR_PROVISIONALLY_AVAILABLE;
+
+- (void)readAttributeCurrentSessionsWithCompletion:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion MTR_PROVISIONALLY_AVAILABLE;
+- (void)subscribeAttributeCurrentSessionsWithParams:(MTRSubscribeParams *)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))reportHandler MTR_PROVISIONALLY_AVAILABLE;
++ (void)readAttributeCurrentSessionsWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer endpoint:(NSNumber *)endpoint queue:(dispatch_queue_t)queue completion:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion MTR_PROVISIONALLY_AVAILABLE;
+
+- (void)readAttributeGeneratedCommandListWithCompletion:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion MTR_PROVISIONALLY_AVAILABLE;
+- (void)subscribeAttributeGeneratedCommandListWithParams:(MTRSubscribeParams *)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))reportHandler MTR_PROVISIONALLY_AVAILABLE;
++ (void)readAttributeGeneratedCommandListWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer endpoint:(NSNumber *)endpoint queue:(dispatch_queue_t)queue completion:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion MTR_PROVISIONALLY_AVAILABLE;
+
+- (void)readAttributeAcceptedCommandListWithCompletion:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion MTR_PROVISIONALLY_AVAILABLE;
+- (void)subscribeAttributeAcceptedCommandListWithParams:(MTRSubscribeParams *)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))reportHandler MTR_PROVISIONALLY_AVAILABLE;
++ (void)readAttributeAcceptedCommandListWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer endpoint:(NSNumber *)endpoint queue:(dispatch_queue_t)queue completion:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion MTR_PROVISIONALLY_AVAILABLE;
+
+- (void)readAttributeEventListWithCompletion:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion MTR_PROVISIONALLY_AVAILABLE;
+- (void)subscribeAttributeEventListWithParams:(MTRSubscribeParams *)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))reportHandler MTR_PROVISIONALLY_AVAILABLE;
++ (void)readAttributeEventListWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer endpoint:(NSNumber *)endpoint queue:(dispatch_queue_t)queue completion:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion MTR_PROVISIONALLY_AVAILABLE;
+
+- (void)readAttributeAttributeListWithCompletion:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion MTR_PROVISIONALLY_AVAILABLE;
+- (void)subscribeAttributeAttributeListWithParams:(MTRSubscribeParams *)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))reportHandler MTR_PROVISIONALLY_AVAILABLE;
++ (void)readAttributeAttributeListWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer endpoint:(NSNumber *)endpoint queue:(dispatch_queue_t)queue completion:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion MTR_PROVISIONALLY_AVAILABLE;
+
+- (void)readAttributeFeatureMapWithCompletion:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion MTR_PROVISIONALLY_AVAILABLE;
+- (void)subscribeAttributeFeatureMapWithParams:(MTRSubscribeParams *)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))reportHandler MTR_PROVISIONALLY_AVAILABLE;
++ (void)readAttributeFeatureMapWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer endpoint:(NSNumber *)endpoint queue:(dispatch_queue_t)queue completion:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion MTR_PROVISIONALLY_AVAILABLE;
+
+- (void)readAttributeClusterRevisionWithCompletion:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion MTR_PROVISIONALLY_AVAILABLE;
+- (void)subscribeAttributeClusterRevisionWithParams:(MTRSubscribeParams *)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))reportHandler MTR_PROVISIONALLY_AVAILABLE;
++ (void)readAttributeClusterRevisionWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer endpoint:(NSNumber *)endpoint queue:(dispatch_queue_t)queue completion:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion MTR_PROVISIONALLY_AVAILABLE;
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@end
+
+@interface MTRBaseClusterWebRTCTransportProvider (Availability)
+
+/**
+ * For all instance methods (reads, writes, commands) that take a completion,
+ * the completion will be called on the provided queue.
+ */
+- (instancetype _Nullable)initWithDevice:(MTRBaseDevice *)device
+ endpointID:(NSNumber *)endpointID
+ queue:(dispatch_queue_t)queue MTR_PROVISIONALLY_AVAILABLE;
+
+@end
+
/**
* Cluster Chime
*
@@ -20174,6 +20272,32 @@ typedef NS_ENUM(uint8_t, MTRContentAppObserverStatus) {
MTRContentAppObserverStatusUnexpectedData MTR_PROVISIONALLY_AVAILABLE = 0x01,
} MTR_PROVISIONALLY_AVAILABLE;
+typedef NS_ENUM(uint8_t, MTRWebRTCTransportProviderStreamType) {
+ MTRWebRTCTransportProviderStreamTypeInternal MTR_PROVISIONALLY_AVAILABLE = 0x00,
+ MTRWebRTCTransportProviderStreamTypeRecording MTR_PROVISIONALLY_AVAILABLE = 0x01,
+ MTRWebRTCTransportProviderStreamTypeAnalysis MTR_PROVISIONALLY_AVAILABLE = 0x02,
+ MTRWebRTCTransportProviderStreamTypeLiveView MTR_PROVISIONALLY_AVAILABLE = 0x03,
+} MTR_PROVISIONALLY_AVAILABLE;
+
+typedef NS_ENUM(uint8_t, MTRWebRTCTransportProviderWebRTCEndReason) {
+ MTRWebRTCTransportProviderWebRTCEndReasonIceFailed MTR_PROVISIONALLY_AVAILABLE = 0x00,
+ MTRWebRTCTransportProviderWebRTCEndReasonIceTimeout MTR_PROVISIONALLY_AVAILABLE = 0x01,
+ MTRWebRTCTransportProviderWebRTCEndReasonUserHangup MTR_PROVISIONALLY_AVAILABLE = 0x02,
+ MTRWebRTCTransportProviderWebRTCEndReasonUserBusy MTR_PROVISIONALLY_AVAILABLE = 0x03,
+ MTRWebRTCTransportProviderWebRTCEndReasonReplaced MTR_PROVISIONALLY_AVAILABLE = 0x04,
+ MTRWebRTCTransportProviderWebRTCEndReasonNoUserMedia MTR_PROVISIONALLY_AVAILABLE = 0x05,
+ MTRWebRTCTransportProviderWebRTCEndReasonInviteTimeout MTR_PROVISIONALLY_AVAILABLE = 0x06,
+ MTRWebRTCTransportProviderWebRTCEndReasonAnsweredElsewhere MTR_PROVISIONALLY_AVAILABLE = 0x07,
+ MTRWebRTCTransportProviderWebRTCEndReasonOutOfResources MTR_PROVISIONALLY_AVAILABLE = 0x08,
+ MTRWebRTCTransportProviderWebRTCEndReasonMediaTimeout MTR_PROVISIONALLY_AVAILABLE = 0x09,
+ MTRWebRTCTransportProviderWebRTCEndReasonLowPower MTR_PROVISIONALLY_AVAILABLE = 0x0A,
+ MTRWebRTCTransportProviderWebRTCEndReasonUnknownReason MTR_PROVISIONALLY_AVAILABLE = 0x0B,
+} MTR_PROVISIONALLY_AVAILABLE;
+
+typedef NS_OPTIONS(uint8_t, MTRWebRTCTransportProviderWebRTCMetadataOptions) {
+ MTRWebRTCTransportProviderWebRTCMetadataOptionsDataTLV MTR_PROVISIONALLY_AVAILABLE = 0x1,
+} MTR_PROVISIONALLY_AVAILABLE;
+
typedef NS_OPTIONS(uint32_t, MTRCommissionerControlSupportedDeviceCategoryBitmap) {
MTRCommissionerControlSupportedDeviceCategoryBitmapFabricSynchronization MTR_PROVISIONALLY_AVAILABLE = 0x1,
} MTR_PROVISIONALLY_AVAILABLE;
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.mm b/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.mm
index f6899e092056a2..5bee560bd030a6 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.mm
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.mm
@@ -102085,6 +102085,383 @@ + (void)readAttributeClusterRevisionWithClusterStateCache:(MTRClusterStateCacheC
@end
+@implementation MTRBaseClusterWebRTCTransportProvider
+
+- (void)solicitOfferWithParams:(MTRWebRTCTransportProviderClusterSolicitOfferParams *)params completion:(void (^)(MTRWebRTCTransportProviderClusterSolicitOfferResponseParams * _Nullable data, NSError * _Nullable error))completion
+{
+ if (params == nil) {
+ params = [[MTRWebRTCTransportProviderClusterSolicitOfferParams
+ alloc] init];
+ }
+
+ auto responseHandler = ^(id _Nullable response, NSError * _Nullable error) {
+ completion(response, error);
+ };
+
+ auto * timedInvokeTimeoutMs = params.timedInvokeTimeoutMs;
+
+ using RequestType = WebRTCTransportProvider::Commands::SolicitOffer::Type;
+ [self.device _invokeKnownCommandWithEndpointID:self.endpointID
+ clusterID:@(RequestType::GetClusterId())
+ commandID:@(RequestType::GetCommandId())
+ commandPayload:params
+ timedInvokeTimeout:timedInvokeTimeoutMs
+ serverSideProcessingTimeout:params.serverSideProcessingTimeout
+ responseClass:MTRWebRTCTransportProviderClusterSolicitOfferResponseParams.class
+ queue:self.callbackQueue
+ completion:responseHandler];
+}
+- (void)provideOfferWithParams:(MTRWebRTCTransportProviderClusterProvideOfferParams *)params completion:(void (^)(MTRWebRTCTransportProviderClusterProvideOfferResponseParams * _Nullable data, NSError * _Nullable error))completion
+{
+ if (params == nil) {
+ params = [[MTRWebRTCTransportProviderClusterProvideOfferParams
+ alloc] init];
+ }
+
+ auto responseHandler = ^(id _Nullable response, NSError * _Nullable error) {
+ completion(response, error);
+ };
+
+ auto * timedInvokeTimeoutMs = params.timedInvokeTimeoutMs;
+
+ using RequestType = WebRTCTransportProvider::Commands::ProvideOffer::Type;
+ [self.device _invokeKnownCommandWithEndpointID:self.endpointID
+ clusterID:@(RequestType::GetClusterId())
+ commandID:@(RequestType::GetCommandId())
+ commandPayload:params
+ timedInvokeTimeout:timedInvokeTimeoutMs
+ serverSideProcessingTimeout:params.serverSideProcessingTimeout
+ responseClass:MTRWebRTCTransportProviderClusterProvideOfferResponseParams.class
+ queue:self.callbackQueue
+ completion:responseHandler];
+}
+- (void)provideAnswerWithParams:(MTRWebRTCTransportProviderClusterProvideAnswerParams *)params completion:(MTRStatusCompletion)completion
+{
+ if (params == nil) {
+ params = [[MTRWebRTCTransportProviderClusterProvideAnswerParams
+ alloc] init];
+ }
+
+ auto responseHandler = ^(id _Nullable response, NSError * _Nullable error) {
+ completion(error);
+ };
+
+ auto * timedInvokeTimeoutMs = params.timedInvokeTimeoutMs;
+
+ using RequestType = WebRTCTransportProvider::Commands::ProvideAnswer::Type;
+ [self.device _invokeKnownCommandWithEndpointID:self.endpointID
+ clusterID:@(RequestType::GetClusterId())
+ commandID:@(RequestType::GetCommandId())
+ commandPayload:params
+ timedInvokeTimeout:timedInvokeTimeoutMs
+ serverSideProcessingTimeout:params.serverSideProcessingTimeout
+ responseClass:nil
+ queue:self.callbackQueue
+ completion:responseHandler];
+}
+- (void)provideICECandidateWithParams:(MTRWebRTCTransportProviderClusterProvideICECandidateParams *)params completion:(MTRStatusCompletion)completion
+{
+ if (params == nil) {
+ params = [[MTRWebRTCTransportProviderClusterProvideICECandidateParams
+ alloc] init];
+ }
+
+ auto responseHandler = ^(id _Nullable response, NSError * _Nullable error) {
+ completion(error);
+ };
+
+ auto * timedInvokeTimeoutMs = params.timedInvokeTimeoutMs;
+
+ using RequestType = WebRTCTransportProvider::Commands::ProvideICECandidate::Type;
+ [self.device _invokeKnownCommandWithEndpointID:self.endpointID
+ clusterID:@(RequestType::GetClusterId())
+ commandID:@(RequestType::GetCommandId())
+ commandPayload:params
+ timedInvokeTimeout:timedInvokeTimeoutMs
+ serverSideProcessingTimeout:params.serverSideProcessingTimeout
+ responseClass:nil
+ queue:self.callbackQueue
+ completion:responseHandler];
+}
+- (void)endSessionWithParams:(MTRWebRTCTransportProviderClusterEndSessionParams *)params completion:(MTRStatusCompletion)completion
+{
+ if (params == nil) {
+ params = [[MTRWebRTCTransportProviderClusterEndSessionParams
+ alloc] init];
+ }
+
+ auto responseHandler = ^(id _Nullable response, NSError * _Nullable error) {
+ completion(error);
+ };
+
+ auto * timedInvokeTimeoutMs = params.timedInvokeTimeoutMs;
+
+ using RequestType = WebRTCTransportProvider::Commands::EndSession::Type;
+ [self.device _invokeKnownCommandWithEndpointID:self.endpointID
+ clusterID:@(RequestType::GetClusterId())
+ commandID:@(RequestType::GetCommandId())
+ commandPayload:params
+ timedInvokeTimeout:timedInvokeTimeoutMs
+ serverSideProcessingTimeout:params.serverSideProcessingTimeout
+ responseClass:nil
+ queue:self.callbackQueue
+ completion:responseHandler];
+}
+
+- (void)readAttributeCurrentSessionsWithCompletion:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion
+{
+ using TypeInfo = WebRTCTransportProvider::Attributes::CurrentSessions::TypeInfo;
+ [self.device _readKnownAttributeWithEndpointID:self.endpointID
+ clusterID:@(TypeInfo::GetClusterId())
+ attributeID:@(TypeInfo::GetAttributeId())
+ params:nil
+ queue:self.callbackQueue
+ completion:completion];
+}
+
+- (void)subscribeAttributeCurrentSessionsWithParams:(MTRSubscribeParams * _Nonnull)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))reportHandler
+{
+ using TypeInfo = WebRTCTransportProvider::Attributes::CurrentSessions::TypeInfo;
+ [self.device _subscribeToKnownAttributeWithEndpointID:self.endpointID
+ clusterID:@(TypeInfo::GetClusterId())
+ attributeID:@(TypeInfo::GetAttributeId())
+ params:params
+ queue:self.callbackQueue
+ reportHandler:reportHandler
+ subscriptionEstablished:subscriptionEstablished];
+}
+
++ (void)readAttributeCurrentSessionsWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer endpoint:(NSNumber *)endpoint queue:(dispatch_queue_t)queue completion:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion
+{
+ using TypeInfo = WebRTCTransportProvider::Attributes::CurrentSessions::TypeInfo;
+ [clusterStateCacheContainer
+ _readKnownCachedAttributeWithEndpointID:static_cast([endpoint unsignedShortValue])
+ clusterID:TypeInfo::GetClusterId()
+ attributeID:TypeInfo::GetAttributeId()
+ queue:queue
+ completion:completion];
+}
+
+- (void)readAttributeGeneratedCommandListWithCompletion:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion
+{
+ using TypeInfo = WebRTCTransportProvider::Attributes::GeneratedCommandList::TypeInfo;
+ [self.device _readKnownAttributeWithEndpointID:self.endpointID
+ clusterID:@(TypeInfo::GetClusterId())
+ attributeID:@(TypeInfo::GetAttributeId())
+ params:nil
+ queue:self.callbackQueue
+ completion:completion];
+}
+
+- (void)subscribeAttributeGeneratedCommandListWithParams:(MTRSubscribeParams * _Nonnull)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))reportHandler
+{
+ using TypeInfo = WebRTCTransportProvider::Attributes::GeneratedCommandList::TypeInfo;
+ [self.device _subscribeToKnownAttributeWithEndpointID:self.endpointID
+ clusterID:@(TypeInfo::GetClusterId())
+ attributeID:@(TypeInfo::GetAttributeId())
+ params:params
+ queue:self.callbackQueue
+ reportHandler:reportHandler
+ subscriptionEstablished:subscriptionEstablished];
+}
+
++ (void)readAttributeGeneratedCommandListWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer endpoint:(NSNumber *)endpoint queue:(dispatch_queue_t)queue completion:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion
+{
+ using TypeInfo = WebRTCTransportProvider::Attributes::GeneratedCommandList::TypeInfo;
+ [clusterStateCacheContainer
+ _readKnownCachedAttributeWithEndpointID:static_cast([endpoint unsignedShortValue])
+ clusterID:TypeInfo::GetClusterId()
+ attributeID:TypeInfo::GetAttributeId()
+ queue:queue
+ completion:completion];
+}
+
+- (void)readAttributeAcceptedCommandListWithCompletion:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion
+{
+ using TypeInfo = WebRTCTransportProvider::Attributes::AcceptedCommandList::TypeInfo;
+ [self.device _readKnownAttributeWithEndpointID:self.endpointID
+ clusterID:@(TypeInfo::GetClusterId())
+ attributeID:@(TypeInfo::GetAttributeId())
+ params:nil
+ queue:self.callbackQueue
+ completion:completion];
+}
+
+- (void)subscribeAttributeAcceptedCommandListWithParams:(MTRSubscribeParams * _Nonnull)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))reportHandler
+{
+ using TypeInfo = WebRTCTransportProvider::Attributes::AcceptedCommandList::TypeInfo;
+ [self.device _subscribeToKnownAttributeWithEndpointID:self.endpointID
+ clusterID:@(TypeInfo::GetClusterId())
+ attributeID:@(TypeInfo::GetAttributeId())
+ params:params
+ queue:self.callbackQueue
+ reportHandler:reportHandler
+ subscriptionEstablished:subscriptionEstablished];
+}
+
++ (void)readAttributeAcceptedCommandListWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer endpoint:(NSNumber *)endpoint queue:(dispatch_queue_t)queue completion:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion
+{
+ using TypeInfo = WebRTCTransportProvider::Attributes::AcceptedCommandList::TypeInfo;
+ [clusterStateCacheContainer
+ _readKnownCachedAttributeWithEndpointID:static_cast([endpoint unsignedShortValue])
+ clusterID:TypeInfo::GetClusterId()
+ attributeID:TypeInfo::GetAttributeId()
+ queue:queue
+ completion:completion];
+}
+
+- (void)readAttributeEventListWithCompletion:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion
+{
+ using TypeInfo = WebRTCTransportProvider::Attributes::EventList::TypeInfo;
+ [self.device _readKnownAttributeWithEndpointID:self.endpointID
+ clusterID:@(TypeInfo::GetClusterId())
+ attributeID:@(TypeInfo::GetAttributeId())
+ params:nil
+ queue:self.callbackQueue
+ completion:completion];
+}
+
+- (void)subscribeAttributeEventListWithParams:(MTRSubscribeParams * _Nonnull)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))reportHandler
+{
+ using TypeInfo = WebRTCTransportProvider::Attributes::EventList::TypeInfo;
+ [self.device _subscribeToKnownAttributeWithEndpointID:self.endpointID
+ clusterID:@(TypeInfo::GetClusterId())
+ attributeID:@(TypeInfo::GetAttributeId())
+ params:params
+ queue:self.callbackQueue
+ reportHandler:reportHandler
+ subscriptionEstablished:subscriptionEstablished];
+}
+
++ (void)readAttributeEventListWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer endpoint:(NSNumber *)endpoint queue:(dispatch_queue_t)queue completion:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion
+{
+ using TypeInfo = WebRTCTransportProvider::Attributes::EventList::TypeInfo;
+ [clusterStateCacheContainer
+ _readKnownCachedAttributeWithEndpointID:static_cast([endpoint unsignedShortValue])
+ clusterID:TypeInfo::GetClusterId()
+ attributeID:TypeInfo::GetAttributeId()
+ queue:queue
+ completion:completion];
+}
+
+- (void)readAttributeAttributeListWithCompletion:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion
+{
+ using TypeInfo = WebRTCTransportProvider::Attributes::AttributeList::TypeInfo;
+ [self.device _readKnownAttributeWithEndpointID:self.endpointID
+ clusterID:@(TypeInfo::GetClusterId())
+ attributeID:@(TypeInfo::GetAttributeId())
+ params:nil
+ queue:self.callbackQueue
+ completion:completion];
+}
+
+- (void)subscribeAttributeAttributeListWithParams:(MTRSubscribeParams * _Nonnull)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))reportHandler
+{
+ using TypeInfo = WebRTCTransportProvider::Attributes::AttributeList::TypeInfo;
+ [self.device _subscribeToKnownAttributeWithEndpointID:self.endpointID
+ clusterID:@(TypeInfo::GetClusterId())
+ attributeID:@(TypeInfo::GetAttributeId())
+ params:params
+ queue:self.callbackQueue
+ reportHandler:reportHandler
+ subscriptionEstablished:subscriptionEstablished];
+}
+
++ (void)readAttributeAttributeListWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer endpoint:(NSNumber *)endpoint queue:(dispatch_queue_t)queue completion:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion
+{
+ using TypeInfo = WebRTCTransportProvider::Attributes::AttributeList::TypeInfo;
+ [clusterStateCacheContainer
+ _readKnownCachedAttributeWithEndpointID:static_cast([endpoint unsignedShortValue])
+ clusterID:TypeInfo::GetClusterId()
+ attributeID:TypeInfo::GetAttributeId()
+ queue:queue
+ completion:completion];
+}
+
+- (void)readAttributeFeatureMapWithCompletion:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion
+{
+ using TypeInfo = WebRTCTransportProvider::Attributes::FeatureMap::TypeInfo;
+ [self.device _readKnownAttributeWithEndpointID:self.endpointID
+ clusterID:@(TypeInfo::GetClusterId())
+ attributeID:@(TypeInfo::GetAttributeId())
+ params:nil
+ queue:self.callbackQueue
+ completion:completion];
+}
+
+- (void)subscribeAttributeFeatureMapWithParams:(MTRSubscribeParams * _Nonnull)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))reportHandler
+{
+ using TypeInfo = WebRTCTransportProvider::Attributes::FeatureMap::TypeInfo;
+ [self.device _subscribeToKnownAttributeWithEndpointID:self.endpointID
+ clusterID:@(TypeInfo::GetClusterId())
+ attributeID:@(TypeInfo::GetAttributeId())
+ params:params
+ queue:self.callbackQueue
+ reportHandler:reportHandler
+ subscriptionEstablished:subscriptionEstablished];
+}
+
++ (void)readAttributeFeatureMapWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer endpoint:(NSNumber *)endpoint queue:(dispatch_queue_t)queue completion:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion
+{
+ using TypeInfo = WebRTCTransportProvider::Attributes::FeatureMap::TypeInfo;
+ [clusterStateCacheContainer
+ _readKnownCachedAttributeWithEndpointID:static_cast([endpoint unsignedShortValue])
+ clusterID:TypeInfo::GetClusterId()
+ attributeID:TypeInfo::GetAttributeId()
+ queue:queue
+ completion:completion];
+}
+
+- (void)readAttributeClusterRevisionWithCompletion:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion
+{
+ using TypeInfo = WebRTCTransportProvider::Attributes::ClusterRevision::TypeInfo;
+ [self.device _readKnownAttributeWithEndpointID:self.endpointID
+ clusterID:@(TypeInfo::GetClusterId())
+ attributeID:@(TypeInfo::GetAttributeId())
+ params:nil
+ queue:self.callbackQueue
+ completion:completion];
+}
+
+- (void)subscribeAttributeClusterRevisionWithParams:(MTRSubscribeParams * _Nonnull)params
+ subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
+ reportHandler:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))reportHandler
+{
+ using TypeInfo = WebRTCTransportProvider::Attributes::ClusterRevision::TypeInfo;
+ [self.device _subscribeToKnownAttributeWithEndpointID:self.endpointID
+ clusterID:@(TypeInfo::GetClusterId())
+ attributeID:@(TypeInfo::GetAttributeId())
+ params:params
+ queue:self.callbackQueue
+ reportHandler:reportHandler
+ subscriptionEstablished:subscriptionEstablished];
+}
+
++ (void)readAttributeClusterRevisionWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer endpoint:(NSNumber *)endpoint queue:(dispatch_queue_t)queue completion:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion
+{
+ using TypeInfo = WebRTCTransportProvider::Attributes::ClusterRevision::TypeInfo;
+ [clusterStateCacheContainer
+ _readKnownCachedAttributeWithEndpointID:static_cast([endpoint unsignedShortValue])
+ clusterID:TypeInfo::GetClusterId()
+ attributeID:TypeInfo::GetAttributeId()
+ queue:queue
+ completion:completion];
+}
+
+@end
+
@implementation MTRBaseClusterChime
- (void)playChimeSoundWithCompletion:(MTRStatusCompletion)completion
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRClusterConstants.h b/src/darwin/Framework/CHIP/zap-generated/MTRClusterConstants.h
index 2b1d5e5dbf8c0d..97e0c30e92f812 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRClusterConstants.h
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRClusterConstants.h
@@ -197,6 +197,7 @@ typedef NS_ENUM(uint32_t, MTRClusterIDType) {
MTRClusterIDTypeAccountLoginID MTR_AVAILABLE(ios(16.4), macos(13.3), watchos(9.4), tvos(16.4)) = 0x0000050E,
MTRClusterIDTypeContentControlID MTR_PROVISIONALLY_AVAILABLE = 0x0000050F,
MTRClusterIDTypeContentAppObserverID MTR_PROVISIONALLY_AVAILABLE = 0x00000510,
+ MTRClusterIDTypeWebRTCTransportProviderID MTR_PROVISIONALLY_AVAILABLE = 0x00000553,
MTRClusterIDTypeChimeID MTR_PROVISIONALLY_AVAILABLE = 0x00000556,
MTRClusterIDTypeEcosystemInformationID MTR_PROVISIONALLY_AVAILABLE = 0x00000750,
MTRClusterIDTypeCommissionerControlID MTR_PROVISIONALLY_AVAILABLE = 0x00000751,
@@ -4739,6 +4740,15 @@ typedef NS_ENUM(uint32_t, MTRAttributeIDType) {
MTRAttributeIDTypeClusterContentAppObserverAttributeFeatureMapID MTR_PROVISIONALLY_AVAILABLE = MTRAttributeIDTypeGlobalAttributeFeatureMapID,
MTRAttributeIDTypeClusterContentAppObserverAttributeClusterRevisionID MTR_PROVISIONALLY_AVAILABLE = MTRAttributeIDTypeGlobalAttributeClusterRevisionID,
+ // Cluster WebRTCTransportProvider attributes
+ MTRAttributeIDTypeClusterWebRTCTransportProviderAttributeCurrentSessionsID MTR_PROVISIONALLY_AVAILABLE = 0x00000000,
+ MTRAttributeIDTypeClusterWebRTCTransportProviderAttributeGeneratedCommandListID MTR_PROVISIONALLY_AVAILABLE = MTRAttributeIDTypeGlobalAttributeGeneratedCommandListID,
+ MTRAttributeIDTypeClusterWebRTCTransportProviderAttributeAcceptedCommandListID MTR_PROVISIONALLY_AVAILABLE = MTRAttributeIDTypeGlobalAttributeAcceptedCommandListID,
+ MTRAttributeIDTypeClusterWebRTCTransportProviderAttributeEventListID MTR_PROVISIONALLY_AVAILABLE = MTRAttributeIDTypeGlobalAttributeEventListID,
+ MTRAttributeIDTypeClusterWebRTCTransportProviderAttributeAttributeListID MTR_PROVISIONALLY_AVAILABLE = MTRAttributeIDTypeGlobalAttributeAttributeListID,
+ MTRAttributeIDTypeClusterWebRTCTransportProviderAttributeFeatureMapID MTR_PROVISIONALLY_AVAILABLE = MTRAttributeIDTypeGlobalAttributeFeatureMapID,
+ MTRAttributeIDTypeClusterWebRTCTransportProviderAttributeClusterRevisionID MTR_PROVISIONALLY_AVAILABLE = MTRAttributeIDTypeGlobalAttributeClusterRevisionID,
+
// Cluster Chime attributes
MTRAttributeIDTypeClusterChimeAttributeInstalledChimeSoundsID MTR_PROVISIONALLY_AVAILABLE = 0x00000000,
MTRAttributeIDTypeClusterChimeAttributeActiveChimeIDID MTR_PROVISIONALLY_AVAILABLE = 0x00000001,
@@ -6943,6 +6953,15 @@ typedef NS_ENUM(uint32_t, MTRCommandIDType) {
MTRCommandIDTypeClusterContentAppObserverCommandContentAppMessageID MTR_PROVISIONALLY_AVAILABLE = 0x00000000,
MTRCommandIDTypeClusterContentAppObserverCommandContentAppMessageResponseID MTR_PROVISIONALLY_AVAILABLE = 0x00000001,
+ // Cluster WebRTCTransportProvider commands
+ MTRCommandIDTypeClusterWebRTCTransportProviderCommandSolicitOfferID MTR_PROVISIONALLY_AVAILABLE = 0x00000001,
+ MTRCommandIDTypeClusterWebRTCTransportProviderCommandSolicitOfferResponseID MTR_PROVISIONALLY_AVAILABLE = 0x00000002,
+ MTRCommandIDTypeClusterWebRTCTransportProviderCommandProvideOfferID MTR_PROVISIONALLY_AVAILABLE = 0x00000003,
+ MTRCommandIDTypeClusterWebRTCTransportProviderCommandProvideOfferResponseID MTR_PROVISIONALLY_AVAILABLE = 0x00000004,
+ MTRCommandIDTypeClusterWebRTCTransportProviderCommandProvideAnswerID MTR_PROVISIONALLY_AVAILABLE = 0x00000005,
+ MTRCommandIDTypeClusterWebRTCTransportProviderCommandProvideICECandidateID MTR_PROVISIONALLY_AVAILABLE = 0x00000006,
+ MTRCommandIDTypeClusterWebRTCTransportProviderCommandEndSessionID MTR_PROVISIONALLY_AVAILABLE = 0x00000007,
+
// Cluster Chime commands
MTRCommandIDTypeClusterChimeCommandPlayChimeSoundID MTR_PROVISIONALLY_AVAILABLE = 0x00000000,
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRClusterNames.mm b/src/darwin/Framework/CHIP/zap-generated/MTRClusterNames.mm
index e0a84841269762..2fc51f6a82dadc 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRClusterNames.mm
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRClusterNames.mm
@@ -369,6 +369,9 @@
case MTRClusterIDTypeContentAppObserverID:
result = @"ContentAppObserver";
break;
+ case MTRClusterIDTypeWebRTCTransportProviderID:
+ result = @"WebRTCTransportProvider";
+ break;
case MTRClusterIDTypeChimeID:
result = @"Chime";
break;
@@ -8139,6 +8142,45 @@
}
break;
+ case MTRClusterIDTypeWebRTCTransportProviderID:
+
+ switch (attributeID) {
+
+ // Cluster WebRTCTransportProvider attributes
+ case MTRAttributeIDTypeClusterWebRTCTransportProviderAttributeCurrentSessionsID:
+ result = @"CurrentSessions";
+ break;
+
+ case MTRAttributeIDTypeClusterWebRTCTransportProviderAttributeGeneratedCommandListID:
+ result = @"GeneratedCommandList";
+ break;
+
+ case MTRAttributeIDTypeClusterWebRTCTransportProviderAttributeAcceptedCommandListID:
+ result = @"AcceptedCommandList";
+ break;
+
+ case MTRAttributeIDTypeClusterWebRTCTransportProviderAttributeEventListID:
+ result = @"EventList";
+ break;
+
+ case MTRAttributeIDTypeClusterWebRTCTransportProviderAttributeAttributeListID:
+ result = @"AttributeList";
+ break;
+
+ case MTRAttributeIDTypeClusterWebRTCTransportProviderAttributeFeatureMapID:
+ result = @"FeatureMap";
+ break;
+
+ case MTRAttributeIDTypeClusterWebRTCTransportProviderAttributeClusterRevisionID:
+ result = @"ClusterRevision";
+ break;
+
+ default:
+ result = [NSString stringWithFormat:@"", attributeID];
+ break;
+ }
+ break;
+
case MTRClusterIDTypeChimeID:
switch (attributeID) {
@@ -10337,6 +10379,16 @@
}
break;
+ case MTRClusterIDTypeWebRTCTransportProviderID:
+
+ switch (eventID) {
+
+ default:
+ result = [NSString stringWithFormat:@"", eventID];
+ break;
+ }
+ break;
+
case MTRClusterIDTypeChimeID:
switch (eventID) {
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRClusters.h b/src/darwin/Framework/CHIP/zap-generated/MTRClusters.h
index 964282c1ceab8e..43a909b7e46356 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRClusters.h
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRClusters.h
@@ -6824,6 +6824,50 @@ MTR_PROVISIONALLY_AVAILABLE
@end
+/**
+ * Cluster WebRTC Transport Provider
+ * The WebRTC transport provider cluster provides a way for stream providers (e.g. Cameras) to stream or receive their data through WebRTC.
+ */
+MTR_PROVISIONALLY_AVAILABLE
+@interface MTRClusterWebRTCTransportProvider : MTRGenericCluster
+
+- (void)solicitOfferWithParams:(MTRWebRTCTransportProviderClusterSolicitOfferParams *)params expectedValues:(NSArray *> * _Nullable)expectedDataValueDictionaries expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs completion:(void (^)(MTRWebRTCTransportProviderClusterSolicitOfferResponseParams * _Nullable data, NSError * _Nullable error))completion MTR_PROVISIONALLY_AVAILABLE;
+- (void)provideOfferWithParams:(MTRWebRTCTransportProviderClusterProvideOfferParams *)params expectedValues:(NSArray *> * _Nullable)expectedDataValueDictionaries expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs completion:(void (^)(MTRWebRTCTransportProviderClusterProvideOfferResponseParams * _Nullable data, NSError * _Nullable error))completion MTR_PROVISIONALLY_AVAILABLE;
+- (void)provideAnswerWithParams:(MTRWebRTCTransportProviderClusterProvideAnswerParams *)params expectedValues:(NSArray *> * _Nullable)expectedDataValueDictionaries expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs completion:(MTRStatusCompletion)completion MTR_PROVISIONALLY_AVAILABLE;
+- (void)provideICECandidateWithParams:(MTRWebRTCTransportProviderClusterProvideICECandidateParams *)params expectedValues:(NSArray *> * _Nullable)expectedDataValueDictionaries expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs completion:(MTRStatusCompletion)completion MTR_PROVISIONALLY_AVAILABLE;
+- (void)endSessionWithParams:(MTRWebRTCTransportProviderClusterEndSessionParams *)params expectedValues:(NSArray *> * _Nullable)expectedDataValueDictionaries expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs completion:(MTRStatusCompletion)completion MTR_PROVISIONALLY_AVAILABLE;
+
+- (NSDictionary * _Nullable)readAttributeCurrentSessionsWithParams:(MTRReadParams * _Nullable)params MTR_PROVISIONALLY_AVAILABLE;
+
+- (NSDictionary * _Nullable)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params MTR_PROVISIONALLY_AVAILABLE;
+
+- (NSDictionary * _Nullable)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params MTR_PROVISIONALLY_AVAILABLE;
+
+- (NSDictionary * _Nullable)readAttributeEventListWithParams:(MTRReadParams * _Nullable)params MTR_PROVISIONALLY_AVAILABLE;
+
+- (NSDictionary * _Nullable)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params MTR_PROVISIONALLY_AVAILABLE;
+
+- (NSDictionary * _Nullable)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params MTR_PROVISIONALLY_AVAILABLE;
+
+- (NSDictionary * _Nullable)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params MTR_PROVISIONALLY_AVAILABLE;
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@end
+
+@interface MTRClusterWebRTCTransportProvider (Availability)
+
+/**
+ * For all instance methods that take a completion (i.e. command invocations),
+ * the completion will be called on the provided queue.
+ */
+- (instancetype _Nullable)initWithDevice:(MTRDevice *)device
+ endpointID:(NSNumber *)endpointID
+ queue:(dispatch_queue_t)queue MTR_PROVISIONALLY_AVAILABLE;
+
+@end
+
/**
* Cluster Chime
* This cluster provides facilities to configure and play Chime sounds, such as those used in a doorbell.
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRClusters.mm b/src/darwin/Framework/CHIP/zap-generated/MTRClusters.mm
index 0e905297ab7702..5864634bb65b36 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRClusters.mm
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRClusters.mm
@@ -19549,6 +19549,180 @@ - (void)contentAppMessageWithParams:(MTRContentAppObserverClusterContentAppMessa
@end
+@implementation MTRClusterWebRTCTransportProvider
+
+- (void)solicitOfferWithParams:(MTRWebRTCTransportProviderClusterSolicitOfferParams *)params expectedValues:(NSArray *> * _Nullable)expectedValues expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs completion:(void (^)(MTRWebRTCTransportProviderClusterSolicitOfferResponseParams * _Nullable data, NSError * _Nullable error))completion
+{
+ if (params == nil) {
+ params = [[MTRWebRTCTransportProviderClusterSolicitOfferParams
+ alloc] init];
+ }
+
+ auto responseHandler = ^(id _Nullable response, NSError * _Nullable error) {
+ completion(response, error);
+ };
+
+ auto * timedInvokeTimeoutMs = params.timedInvokeTimeoutMs;
+
+ using RequestType = WebRTCTransportProvider::Commands::SolicitOffer::Type;
+ [self.device _invokeKnownCommandWithEndpointID:self.endpointID
+ clusterID:@(RequestType::GetClusterId())
+ commandID:@(RequestType::GetCommandId())
+ commandPayload:params
+ expectedValues:expectedValues
+ expectedValueInterval:expectedValueIntervalMs
+ timedInvokeTimeout:timedInvokeTimeoutMs
+ serverSideProcessingTimeout:params.serverSideProcessingTimeout
+ responseClass:MTRWebRTCTransportProviderClusterSolicitOfferResponseParams.class
+ queue:self.callbackQueue
+ completion:responseHandler];
+}
+
+- (void)provideOfferWithParams:(MTRWebRTCTransportProviderClusterProvideOfferParams *)params expectedValues:(NSArray *> * _Nullable)expectedValues expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs completion:(void (^)(MTRWebRTCTransportProviderClusterProvideOfferResponseParams * _Nullable data, NSError * _Nullable error))completion
+{
+ if (params == nil) {
+ params = [[MTRWebRTCTransportProviderClusterProvideOfferParams
+ alloc] init];
+ }
+
+ auto responseHandler = ^(id _Nullable response, NSError * _Nullable error) {
+ completion(response, error);
+ };
+
+ auto * timedInvokeTimeoutMs = params.timedInvokeTimeoutMs;
+
+ using RequestType = WebRTCTransportProvider::Commands::ProvideOffer::Type;
+ [self.device _invokeKnownCommandWithEndpointID:self.endpointID
+ clusterID:@(RequestType::GetClusterId())
+ commandID:@(RequestType::GetCommandId())
+ commandPayload:params
+ expectedValues:expectedValues
+ expectedValueInterval:expectedValueIntervalMs
+ timedInvokeTimeout:timedInvokeTimeoutMs
+ serverSideProcessingTimeout:params.serverSideProcessingTimeout
+ responseClass:MTRWebRTCTransportProviderClusterProvideOfferResponseParams.class
+ queue:self.callbackQueue
+ completion:responseHandler];
+}
+
+- (void)provideAnswerWithParams:(MTRWebRTCTransportProviderClusterProvideAnswerParams *)params expectedValues:(NSArray *> * _Nullable)expectedValues expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs completion:(MTRStatusCompletion)completion
+{
+ if (params == nil) {
+ params = [[MTRWebRTCTransportProviderClusterProvideAnswerParams
+ alloc] init];
+ }
+
+ auto responseHandler = ^(id _Nullable response, NSError * _Nullable error) {
+ completion(error);
+ };
+
+ auto * timedInvokeTimeoutMs = params.timedInvokeTimeoutMs;
+
+ using RequestType = WebRTCTransportProvider::Commands::ProvideAnswer::Type;
+ [self.device _invokeKnownCommandWithEndpointID:self.endpointID
+ clusterID:@(RequestType::GetClusterId())
+ commandID:@(RequestType::GetCommandId())
+ commandPayload:params
+ expectedValues:expectedValues
+ expectedValueInterval:expectedValueIntervalMs
+ timedInvokeTimeout:timedInvokeTimeoutMs
+ serverSideProcessingTimeout:params.serverSideProcessingTimeout
+ responseClass:nil
+ queue:self.callbackQueue
+ completion:responseHandler];
+}
+
+- (void)provideICECandidateWithParams:(MTRWebRTCTransportProviderClusterProvideICECandidateParams *)params expectedValues:(NSArray *> * _Nullable)expectedValues expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs completion:(MTRStatusCompletion)completion
+{
+ if (params == nil) {
+ params = [[MTRWebRTCTransportProviderClusterProvideICECandidateParams
+ alloc] init];
+ }
+
+ auto responseHandler = ^(id _Nullable response, NSError * _Nullable error) {
+ completion(error);
+ };
+
+ auto * timedInvokeTimeoutMs = params.timedInvokeTimeoutMs;
+
+ using RequestType = WebRTCTransportProvider::Commands::ProvideICECandidate::Type;
+ [self.device _invokeKnownCommandWithEndpointID:self.endpointID
+ clusterID:@(RequestType::GetClusterId())
+ commandID:@(RequestType::GetCommandId())
+ commandPayload:params
+ expectedValues:expectedValues
+ expectedValueInterval:expectedValueIntervalMs
+ timedInvokeTimeout:timedInvokeTimeoutMs
+ serverSideProcessingTimeout:params.serverSideProcessingTimeout
+ responseClass:nil
+ queue:self.callbackQueue
+ completion:responseHandler];
+}
+
+- (void)endSessionWithParams:(MTRWebRTCTransportProviderClusterEndSessionParams *)params expectedValues:(NSArray *> * _Nullable)expectedValues expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs completion:(MTRStatusCompletion)completion
+{
+ if (params == nil) {
+ params = [[MTRWebRTCTransportProviderClusterEndSessionParams
+ alloc] init];
+ }
+
+ auto responseHandler = ^(id _Nullable response, NSError * _Nullable error) {
+ completion(error);
+ };
+
+ auto * timedInvokeTimeoutMs = params.timedInvokeTimeoutMs;
+
+ using RequestType = WebRTCTransportProvider::Commands::EndSession::Type;
+ [self.device _invokeKnownCommandWithEndpointID:self.endpointID
+ clusterID:@(RequestType::GetClusterId())
+ commandID:@(RequestType::GetCommandId())
+ commandPayload:params
+ expectedValues:expectedValues
+ expectedValueInterval:expectedValueIntervalMs
+ timedInvokeTimeout:timedInvokeTimeoutMs
+ serverSideProcessingTimeout:params.serverSideProcessingTimeout
+ responseClass:nil
+ queue:self.callbackQueue
+ completion:responseHandler];
+}
+
+- (NSDictionary * _Nullable)readAttributeCurrentSessionsWithParams:(MTRReadParams * _Nullable)params
+{
+ return [self.device readAttributeWithEndpointID:self.endpointID clusterID:@(MTRClusterIDTypeWebRTCTransportProviderID) attributeID:@(MTRAttributeIDTypeClusterWebRTCTransportProviderAttributeCurrentSessionsID) params:params];
+}
+
+- (NSDictionary * _Nullable)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params
+{
+ return [self.device readAttributeWithEndpointID:self.endpointID clusterID:@(MTRClusterIDTypeWebRTCTransportProviderID) attributeID:@(MTRAttributeIDTypeClusterWebRTCTransportProviderAttributeGeneratedCommandListID) params:params];
+}
+
+- (NSDictionary * _Nullable)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params
+{
+ return [self.device readAttributeWithEndpointID:self.endpointID clusterID:@(MTRClusterIDTypeWebRTCTransportProviderID) attributeID:@(MTRAttributeIDTypeClusterWebRTCTransportProviderAttributeAcceptedCommandListID) params:params];
+}
+
+- (NSDictionary * _Nullable)readAttributeEventListWithParams:(MTRReadParams * _Nullable)params
+{
+ return [self.device readAttributeWithEndpointID:self.endpointID clusterID:@(MTRClusterIDTypeWebRTCTransportProviderID) attributeID:@(MTRAttributeIDTypeClusterWebRTCTransportProviderAttributeEventListID) params:params];
+}
+
+- (NSDictionary * _Nullable)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params
+{
+ return [self.device readAttributeWithEndpointID:self.endpointID clusterID:@(MTRClusterIDTypeWebRTCTransportProviderID) attributeID:@(MTRAttributeIDTypeClusterWebRTCTransportProviderAttributeAttributeListID) params:params];
+}
+
+- (NSDictionary * _Nullable)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params
+{
+ return [self.device readAttributeWithEndpointID:self.endpointID clusterID:@(MTRClusterIDTypeWebRTCTransportProviderID) attributeID:@(MTRAttributeIDTypeClusterWebRTCTransportProviderAttributeFeatureMapID) params:params];
+}
+
+- (NSDictionary * _Nullable)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params
+{
+ return [self.device readAttributeWithEndpointID:self.endpointID clusterID:@(MTRClusterIDTypeWebRTCTransportProviderID) attributeID:@(MTRAttributeIDTypeClusterWebRTCTransportProviderAttributeClusterRevisionID) params:params];
+}
+
+@end
+
@implementation MTRClusterChime
- (void)playChimeSoundWithExpectedValues:(NSArray *> *)expectedValues expectedValueInterval:(NSNumber *)expectedValueIntervalMs completion:(MTRStatusCompletion)completion
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.h b/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.h
index 27a21e0b800666..2aeb25d7a6d520 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.h
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.h
@@ -10835,6 +10835,234 @@ MTR_PROVISIONALLY_AVAILABLE
error:(NSError * __autoreleasing *)error MTR_PROVISIONALLY_AVAILABLE;
@end
+MTR_PROVISIONALLY_AVAILABLE
+@interface MTRWebRTCTransportProviderClusterSolicitOfferParams : NSObject
+
+@property (nonatomic, copy) NSNumber * _Nonnull streamType MTR_PROVISIONALLY_AVAILABLE;
+
+@property (nonatomic, copy) NSNumber * _Nullable videoStreamID MTR_PROVISIONALLY_AVAILABLE;
+
+@property (nonatomic, copy) NSNumber * _Nullable audioStreamID MTR_PROVISIONALLY_AVAILABLE;
+
+@property (nonatomic, copy) NSArray * _Nullable iceServers MTR_PROVISIONALLY_AVAILABLE;
+
+@property (nonatomic, copy) NSString * _Nullable iceTransportPolicy MTR_PROVISIONALLY_AVAILABLE;
+
+@property (nonatomic, copy) NSNumber * _Nullable metadataOptions MTR_PROVISIONALLY_AVAILABLE;
+/**
+ * Controls whether the command is a timed command (using Timed Invoke).
+ *
+ * If nil (the default value), a regular invoke is done for commands that do
+ * not require a timed invoke and a timed invoke with some default timed request
+ * timeout is done for commands that require a timed invoke.
+ *
+ * If not nil, a timed invoke is done, with the provided value used as the timed
+ * request timeout. The value should be chosen small enough to provide the
+ * desired security properties but large enough that it will allow a round-trip
+ * from the sever to the client (for the status response and actual invoke
+ * request) within the timeout window.
+ *
+ */
+@property (nonatomic, copy, nullable) NSNumber * timedInvokeTimeoutMs;
+
+/**
+ * Controls how much time, in seconds, we will allow for the server to process the command.
+ *
+ * The command will then time out if that much time, plus an allowance for retransmits due to network failures, passes.
+ *
+ * If nil, the framework will try to select an appropriate timeout value itself.
+ */
+@property (nonatomic, copy, nullable) NSNumber * serverSideProcessingTimeout;
+@end
+
+MTR_PROVISIONALLY_AVAILABLE
+@interface MTRWebRTCTransportProviderClusterSolicitOfferResponseParams : NSObject
+
+@property (nonatomic, copy) NSNumber * _Nonnull webRTCSessionID MTR_PROVISIONALLY_AVAILABLE;
+
+@property (nonatomic, copy) NSNumber * _Nonnull deferredOffer MTR_PROVISIONALLY_AVAILABLE;
+
+@property (nonatomic, copy) NSNumber * _Nullable videoStreamID MTR_PROVISIONALLY_AVAILABLE;
+
+@property (nonatomic, copy) NSNumber * _Nullable audioStreamID MTR_PROVISIONALLY_AVAILABLE;
+
+/**
+ * Initialize an MTRWebRTCTransportProviderClusterSolicitOfferResponseParams with a response-value dictionary
+ * of the sort that MTRDeviceResponseHandler would receive.
+ *
+ * Will return nil and hand out an error if the response-value dictionary is not
+ * a command data response or is not the right command response.
+ *
+ * Will return nil and hand out an error if the data response does not match the known
+ * schema for this command.
+ */
+- (nullable instancetype)initWithResponseValue:(NSDictionary *)responseValue
+ error:(NSError * __autoreleasing *)error MTR_PROVISIONALLY_AVAILABLE;
+@end
+
+MTR_PROVISIONALLY_AVAILABLE
+@interface MTRWebRTCTransportProviderClusterProvideOfferParams : NSObject
+
+@property (nonatomic, copy) NSNumber * _Nullable webRTCSessionID MTR_PROVISIONALLY_AVAILABLE;
+
+@property (nonatomic, copy) NSString * _Nonnull sdp MTR_PROVISIONALLY_AVAILABLE;
+
+@property (nonatomic, copy) NSNumber * _Nonnull streamType MTR_PROVISIONALLY_AVAILABLE;
+
+@property (nonatomic, copy) NSNumber * _Nullable videoStreamID MTR_PROVISIONALLY_AVAILABLE;
+
+@property (nonatomic, copy) NSNumber * _Nullable audioStreamID MTR_PROVISIONALLY_AVAILABLE;
+
+@property (nonatomic, copy) NSArray * _Nullable iceServers MTR_PROVISIONALLY_AVAILABLE;
+
+@property (nonatomic, copy) NSString * _Nullable iceTransportPolicy MTR_PROVISIONALLY_AVAILABLE;
+
+@property (nonatomic, copy) NSNumber * _Nullable metadataOptions MTR_PROVISIONALLY_AVAILABLE;
+/**
+ * Controls whether the command is a timed command (using Timed Invoke).
+ *
+ * If nil (the default value), a regular invoke is done for commands that do
+ * not require a timed invoke and a timed invoke with some default timed request
+ * timeout is done for commands that require a timed invoke.
+ *
+ * If not nil, a timed invoke is done, with the provided value used as the timed
+ * request timeout. The value should be chosen small enough to provide the
+ * desired security properties but large enough that it will allow a round-trip
+ * from the sever to the client (for the status response and actual invoke
+ * request) within the timeout window.
+ *
+ */
+@property (nonatomic, copy, nullable) NSNumber * timedInvokeTimeoutMs;
+
+/**
+ * Controls how much time, in seconds, we will allow for the server to process the command.
+ *
+ * The command will then time out if that much time, plus an allowance for retransmits due to network failures, passes.
+ *
+ * If nil, the framework will try to select an appropriate timeout value itself.
+ */
+@property (nonatomic, copy, nullable) NSNumber * serverSideProcessingTimeout;
+@end
+
+MTR_PROVISIONALLY_AVAILABLE
+@interface MTRWebRTCTransportProviderClusterProvideOfferResponseParams : NSObject
+
+@property (nonatomic, copy) NSNumber * _Nonnull webRTCSessionID MTR_PROVISIONALLY_AVAILABLE;
+
+@property (nonatomic, copy) NSNumber * _Nonnull videoStreamID MTR_PROVISIONALLY_AVAILABLE;
+
+@property (nonatomic, copy) NSNumber * _Nonnull audioStreamID MTR_PROVISIONALLY_AVAILABLE;
+
+/**
+ * Initialize an MTRWebRTCTransportProviderClusterProvideOfferResponseParams with a response-value dictionary
+ * of the sort that MTRDeviceResponseHandler would receive.
+ *
+ * Will return nil and hand out an error if the response-value dictionary is not
+ * a command data response or is not the right command response.
+ *
+ * Will return nil and hand out an error if the data response does not match the known
+ * schema for this command.
+ */
+- (nullable instancetype)initWithResponseValue:(NSDictionary *)responseValue
+ error:(NSError * __autoreleasing *)error MTR_PROVISIONALLY_AVAILABLE;
+@end
+
+MTR_PROVISIONALLY_AVAILABLE
+@interface MTRWebRTCTransportProviderClusterProvideAnswerParams : NSObject
+
+@property (nonatomic, copy) NSNumber * _Nonnull webRTCSessionID MTR_PROVISIONALLY_AVAILABLE;
+
+@property (nonatomic, copy) NSString * _Nonnull sdp MTR_PROVISIONALLY_AVAILABLE;
+/**
+ * Controls whether the command is a timed command (using Timed Invoke).
+ *
+ * If nil (the default value), a regular invoke is done for commands that do
+ * not require a timed invoke and a timed invoke with some default timed request
+ * timeout is done for commands that require a timed invoke.
+ *
+ * If not nil, a timed invoke is done, with the provided value used as the timed
+ * request timeout. The value should be chosen small enough to provide the
+ * desired security properties but large enough that it will allow a round-trip
+ * from the sever to the client (for the status response and actual invoke
+ * request) within the timeout window.
+ *
+ */
+@property (nonatomic, copy, nullable) NSNumber * timedInvokeTimeoutMs;
+
+/**
+ * Controls how much time, in seconds, we will allow for the server to process the command.
+ *
+ * The command will then time out if that much time, plus an allowance for retransmits due to network failures, passes.
+ *
+ * If nil, the framework will try to select an appropriate timeout value itself.
+ */
+@property (nonatomic, copy, nullable) NSNumber * serverSideProcessingTimeout;
+@end
+
+MTR_PROVISIONALLY_AVAILABLE
+@interface MTRWebRTCTransportProviderClusterProvideICECandidateParams : NSObject
+
+@property (nonatomic, copy) NSNumber * _Nonnull webRTCSessionID MTR_PROVISIONALLY_AVAILABLE;
+
+@property (nonatomic, copy) NSString * _Nonnull iceCandidate MTR_PROVISIONALLY_AVAILABLE;
+/**
+ * Controls whether the command is a timed command (using Timed Invoke).
+ *
+ * If nil (the default value), a regular invoke is done for commands that do
+ * not require a timed invoke and a timed invoke with some default timed request
+ * timeout is done for commands that require a timed invoke.
+ *
+ * If not nil, a timed invoke is done, with the provided value used as the timed
+ * request timeout. The value should be chosen small enough to provide the
+ * desired security properties but large enough that it will allow a round-trip
+ * from the sever to the client (for the status response and actual invoke
+ * request) within the timeout window.
+ *
+ */
+@property (nonatomic, copy, nullable) NSNumber * timedInvokeTimeoutMs;
+
+/**
+ * Controls how much time, in seconds, we will allow for the server to process the command.
+ *
+ * The command will then time out if that much time, plus an allowance for retransmits due to network failures, passes.
+ *
+ * If nil, the framework will try to select an appropriate timeout value itself.
+ */
+@property (nonatomic, copy, nullable) NSNumber * serverSideProcessingTimeout;
+@end
+
+MTR_PROVISIONALLY_AVAILABLE
+@interface MTRWebRTCTransportProviderClusterEndSessionParams : NSObject
+
+@property (nonatomic, copy) NSNumber * _Nonnull webRTCSessionID MTR_PROVISIONALLY_AVAILABLE;
+
+@property (nonatomic, copy) NSNumber * _Nonnull reason MTR_PROVISIONALLY_AVAILABLE;
+/**
+ * Controls whether the command is a timed command (using Timed Invoke).
+ *
+ * If nil (the default value), a regular invoke is done for commands that do
+ * not require a timed invoke and a timed invoke with some default timed request
+ * timeout is done for commands that require a timed invoke.
+ *
+ * If not nil, a timed invoke is done, with the provided value used as the timed
+ * request timeout. The value should be chosen small enough to provide the
+ * desired security properties but large enough that it will allow a round-trip
+ * from the sever to the client (for the status response and actual invoke
+ * request) within the timeout window.
+ *
+ */
+@property (nonatomic, copy, nullable) NSNumber * timedInvokeTimeoutMs;
+
+/**
+ * Controls how much time, in seconds, we will allow for the server to process the command.
+ *
+ * The command will then time out if that much time, plus an allowance for retransmits due to network failures, passes.
+ *
+ * If nil, the framework will try to select an appropriate timeout value itself.
+ */
+@property (nonatomic, copy, nullable) NSNumber * serverSideProcessingTimeout;
+@end
+
MTR_PROVISIONALLY_AVAILABLE
@interface MTRChimeClusterPlayChimeSoundParams : NSObject
/**
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.mm b/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.mm
index 4783d5b3308c9b..a922f5831581bc 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.mm
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.mm
@@ -31337,6 +31337,858 @@ - (CHIP_ERROR)_setFieldsFromDecodableStruct:(const chip::app::Clusters::ContentA
@end
+@implementation MTRWebRTCTransportProviderClusterSolicitOfferParams
+- (instancetype)init
+{
+ if (self = [super init]) {
+
+ _streamType = @(0);
+
+ _videoStreamID = nil;
+
+ _audioStreamID = nil;
+
+ _iceServers = nil;
+
+ _iceTransportPolicy = nil;
+
+ _metadataOptions = nil;
+ _timedInvokeTimeoutMs = nil;
+ _serverSideProcessingTimeout = nil;
+ }
+ return self;
+}
+
+- (id)copyWithZone:(NSZone * _Nullable)zone;
+{
+ auto other = [[MTRWebRTCTransportProviderClusterSolicitOfferParams alloc] init];
+
+ other.streamType = self.streamType;
+ other.videoStreamID = self.videoStreamID;
+ other.audioStreamID = self.audioStreamID;
+ other.iceServers = self.iceServers;
+ other.iceTransportPolicy = self.iceTransportPolicy;
+ other.metadataOptions = self.metadataOptions;
+ other.timedInvokeTimeoutMs = self.timedInvokeTimeoutMs;
+ other.serverSideProcessingTimeout = self.serverSideProcessingTimeout;
+
+ return other;
+}
+
+- (NSString *)description
+{
+ NSString * descriptionString = [NSString stringWithFormat:@"<%@: streamType:%@; videoStreamID:%@; audioStreamID:%@; iceServers:%@; iceTransportPolicy:%@; metadataOptions:%@; >", NSStringFromClass([self class]), _streamType, _videoStreamID, _audioStreamID, _iceServers, _iceTransportPolicy, _metadataOptions];
+ return descriptionString;
+}
+
+@end
+
+@implementation MTRWebRTCTransportProviderClusterSolicitOfferParams (InternalMethods)
+
+- (CHIP_ERROR)_encodeToTLVReader:(chip::System::PacketBufferTLVReader &)reader
+{
+ chip::app::Clusters::WebRTCTransportProvider::Commands::SolicitOffer::Type encodableStruct;
+ ListFreer listFreer;
+ {
+ encodableStruct.streamType = static_cast>(self.streamType.unsignedCharValue);
+ }
+ {
+ if (self.videoStreamID != nil) {
+ auto & definedValue_0 = encodableStruct.videoStreamID.Emplace();
+ if (self.videoStreamID == nil) {
+ definedValue_0.SetNull();
+ } else {
+ auto & nonNullValue_1 = definedValue_0.SetNonNull();
+ nonNullValue_1 = self.videoStreamID.unsignedShortValue;
+ }
+ }
+ }
+ {
+ if (self.audioStreamID != nil) {
+ auto & definedValue_0 = encodableStruct.audioStreamID.Emplace();
+ if (self.audioStreamID == nil) {
+ definedValue_0.SetNull();
+ } else {
+ auto & nonNullValue_1 = definedValue_0.SetNonNull();
+ nonNullValue_1 = self.audioStreamID.unsignedShortValue;
+ }
+ }
+ }
+ {
+ if (self.iceServers != nil) {
+ auto & definedValue_0 = encodableStruct.ICEServers.Emplace();
+ {
+ using ListType_1 = std::remove_reference_t;
+ using ListMemberType_1 = ListMemberTypeGetter::Type;
+ if (self.iceServers.count != 0) {
+ auto * listHolder_1 = new ListHolder(self.iceServers.count);
+ if (listHolder_1 == nullptr || listHolder_1->mList == nullptr) {
+ return CHIP_ERROR_INVALID_ARGUMENT;
+ }
+ listFreer.add(listHolder_1);
+ for (size_t i_1 = 0; i_1 < self.iceServers.count; ++i_1) {
+ if (![self.iceServers[i_1] isKindOfClass:[MTRWebRTCTransportProviderClusterICEServerStruct class]]) {
+ // Wrong kind of value.
+ return CHIP_ERROR_INVALID_ARGUMENT;
+ }
+ auto element_1 = (MTRWebRTCTransportProviderClusterICEServerStruct *) self.iceServers[i_1];
+ {
+ using ListType_3 = std::remove_reference_tmList[i_1].urls)>;
+ using ListMemberType_3 = ListMemberTypeGetter::Type;
+ if (element_1.urls.count != 0) {
+ auto * listHolder_3 = new ListHolder(element_1.urls.count);
+ if (listHolder_3 == nullptr || listHolder_3->mList == nullptr) {
+ return CHIP_ERROR_INVALID_ARGUMENT;
+ }
+ listFreer.add(listHolder_3);
+ for (size_t i_3 = 0; i_3 < element_1.urls.count; ++i_3) {
+ if (![element_1.urls[i_3] isKindOfClass:[NSString class]]) {
+ // Wrong kind of value.
+ return CHIP_ERROR_INVALID_ARGUMENT;
+ }
+ auto element_3 = (NSString *) element_1.urls[i_3];
+ listHolder_3->mList[i_3] = AsCharSpan(element_3);
+ }
+ listHolder_1->mList[i_1].urls = ListType_3(listHolder_3->mList, element_1.urls.count);
+ } else {
+ listHolder_1->mList[i_1].urls = ListType_3();
+ }
+ }
+ if (element_1.username != nil) {
+ auto & definedValue_3 = listHolder_1->mList[i_1].username.Emplace();
+ definedValue_3 = AsCharSpan(element_1.username);
+ }
+ if (element_1.credential != nil) {
+ auto & definedValue_3 = listHolder_1->mList[i_1].credential.Emplace();
+ definedValue_3 = AsCharSpan(element_1.credential);
+ }
+ if (element_1.caid != nil) {
+ auto & definedValue_3 = listHolder_1->mList[i_1].caid.Emplace();
+ definedValue_3 = element_1.caid.unsignedShortValue;
+ }
+ }
+ definedValue_0 = ListType_1(listHolder_1->mList, self.iceServers.count);
+ } else {
+ definedValue_0 = ListType_1();
+ }
+ }
+ }
+ }
+ {
+ if (self.iceTransportPolicy != nil) {
+ auto & definedValue_0 = encodableStruct.ICETransportPolicy.Emplace();
+ definedValue_0 = AsCharSpan(self.iceTransportPolicy);
+ }
+ }
+ {
+ if (self.metadataOptions != nil) {
+ auto & definedValue_0 = encodableStruct.metadataOptions.Emplace();
+ definedValue_0 = static_cast>(self.metadataOptions.unsignedCharValue);
+ }
+ }
+
+ auto buffer = chip::System::PacketBufferHandle::New(chip::System::PacketBuffer::kMaxSizeWithoutReserve, 0);
+ if (buffer.IsNull()) {
+ return CHIP_ERROR_NO_MEMORY;
+ }
+
+ chip::System::PacketBufferTLVWriter writer;
+ // Commands never need chained buffers, since they cannot be chunked.
+ writer.Init(std::move(buffer), /* useChainedBuffers = */ false);
+
+ ReturnErrorOnFailure(chip::app::DataModel::Encode(writer, chip::TLV::AnonymousTag(), encodableStruct));
+
+ ReturnErrorOnFailure(writer.Finalize(&buffer));
+
+ reader.Init(std::move(buffer));
+ return reader.Next(chip::TLV::kTLVType_Structure, chip::TLV::AnonymousTag());
+}
+
+- (NSDictionary * _Nullable)_encodeAsDataValue:(NSError * __autoreleasing *)error
+{
+ chip::System::PacketBufferTLVReader reader;
+ CHIP_ERROR err = [self _encodeToTLVReader:reader];
+ if (err != CHIP_NO_ERROR) {
+ if (error) {
+ *error = [MTRError errorForCHIPErrorCode:err];
+ }
+ return nil;
+ }
+
+ auto decodedObj = MTRDecodeDataValueDictionaryFromCHIPTLV(&reader);
+ if (decodedObj == nil) {
+ if (error) {
+ *error = [MTRError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE];
+ }
+ }
+ return decodedObj;
+}
+@end
+
+@implementation MTRWebRTCTransportProviderClusterSolicitOfferResponseParams
+- (instancetype)init
+{
+ if (self = [super init]) {
+
+ _webRTCSessionID = @(0);
+
+ _deferredOffer = @(0);
+
+ _videoStreamID = nil;
+
+ _audioStreamID = nil;
+ }
+ return self;
+}
+
+- (id)copyWithZone:(NSZone * _Nullable)zone;
+{
+ auto other = [[MTRWebRTCTransportProviderClusterSolicitOfferResponseParams alloc] init];
+
+ other.webRTCSessionID = self.webRTCSessionID;
+ other.deferredOffer = self.deferredOffer;
+ other.videoStreamID = self.videoStreamID;
+ other.audioStreamID = self.audioStreamID;
+
+ return other;
+}
+
+- (NSString *)description
+{
+ NSString * descriptionString = [NSString stringWithFormat:@"<%@: webRTCSessionID:%@; deferredOffer:%@; videoStreamID:%@; audioStreamID:%@; >", NSStringFromClass([self class]), _webRTCSessionID, _deferredOffer, _videoStreamID, _audioStreamID];
+ return descriptionString;
+}
+
+- (nullable instancetype)initWithResponseValue:(NSDictionary *)responseValue
+ error:(NSError * __autoreleasing *)error
+{
+ if (!(self = [super init])) {
+ return nil;
+ }
+
+ using DecodableType = chip::app::Clusters::WebRTCTransportProvider::Commands::SolicitOfferResponse::DecodableType;
+ chip::System::PacketBufferHandle buffer = [MTRBaseDevice _responseDataForCommand:responseValue
+ clusterID:DecodableType::GetClusterId()
+ commandID:DecodableType::GetCommandId()
+ error:error];
+ if (buffer.IsNull()) {
+ return nil;
+ }
+
+ chip::TLV::TLVReader reader;
+ reader.Init(buffer->Start(), buffer->DataLength());
+
+ CHIP_ERROR err = reader.Next(chip::TLV::AnonymousTag());
+ if (err == CHIP_NO_ERROR) {
+ DecodableType decodedStruct;
+ err = chip::app::DataModel::Decode(reader, decodedStruct);
+ if (err == CHIP_NO_ERROR) {
+ err = [self _setFieldsFromDecodableStruct:decodedStruct];
+ if (err == CHIP_NO_ERROR) {
+ return self;
+ }
+ }
+ }
+
+ NSString * errorStr = [NSString stringWithFormat:@"Command payload decoding failed: %s", err.AsString()];
+ MTR_LOG_ERROR("%s", errorStr.UTF8String);
+ if (error != nil) {
+ NSDictionary * userInfo = @{ NSLocalizedFailureReasonErrorKey : NSLocalizedString(errorStr, nil) };
+ *error = [NSError errorWithDomain:MTRErrorDomain code:MTRErrorCodeSchemaMismatch userInfo:userInfo];
+ }
+ return nil;
+}
+
+@end
+
+@implementation MTRWebRTCTransportProviderClusterSolicitOfferResponseParams (InternalMethods)
+
+- (CHIP_ERROR)_setFieldsFromDecodableStruct:(const chip::app::Clusters::WebRTCTransportProvider::Commands::SolicitOfferResponse::DecodableType &)decodableStruct
+{
+ {
+ self.webRTCSessionID = [NSNumber numberWithUnsignedShort:decodableStruct.webRTCSessionID];
+ }
+ {
+ self.deferredOffer = [NSNumber numberWithBool:decodableStruct.deferredOffer];
+ }
+ {
+ if (decodableStruct.videoStreamID.HasValue()) {
+ if (decodableStruct.videoStreamID.Value().IsNull()) {
+ self.videoStreamID = nil;
+ } else {
+ self.videoStreamID = [NSNumber numberWithUnsignedShort:decodableStruct.videoStreamID.Value().Value()];
+ }
+ } else {
+ self.videoStreamID = nil;
+ }
+ }
+ {
+ if (decodableStruct.audioStreamID.HasValue()) {
+ if (decodableStruct.audioStreamID.Value().IsNull()) {
+ self.audioStreamID = nil;
+ } else {
+ self.audioStreamID = [NSNumber numberWithUnsignedShort:decodableStruct.audioStreamID.Value().Value()];
+ }
+ } else {
+ self.audioStreamID = nil;
+ }
+ }
+ return CHIP_NO_ERROR;
+}
+
+@end
+
+@implementation MTRWebRTCTransportProviderClusterProvideOfferParams
+- (instancetype)init
+{
+ if (self = [super init]) {
+
+ _webRTCSessionID = nil;
+
+ _sdp = @"";
+
+ _streamType = @(0);
+
+ _videoStreamID = nil;
+
+ _audioStreamID = nil;
+
+ _iceServers = nil;
+
+ _iceTransportPolicy = nil;
+
+ _metadataOptions = nil;
+ _timedInvokeTimeoutMs = nil;
+ _serverSideProcessingTimeout = nil;
+ }
+ return self;
+}
+
+- (id)copyWithZone:(NSZone * _Nullable)zone;
+{
+ auto other = [[MTRWebRTCTransportProviderClusterProvideOfferParams alloc] init];
+
+ other.webRTCSessionID = self.webRTCSessionID;
+ other.sdp = self.sdp;
+ other.streamType = self.streamType;
+ other.videoStreamID = self.videoStreamID;
+ other.audioStreamID = self.audioStreamID;
+ other.iceServers = self.iceServers;
+ other.iceTransportPolicy = self.iceTransportPolicy;
+ other.metadataOptions = self.metadataOptions;
+ other.timedInvokeTimeoutMs = self.timedInvokeTimeoutMs;
+ other.serverSideProcessingTimeout = self.serverSideProcessingTimeout;
+
+ return other;
+}
+
+- (NSString *)description
+{
+ NSString * descriptionString = [NSString stringWithFormat:@"<%@: webRTCSessionID:%@; sdp:%@; streamType:%@; videoStreamID:%@; audioStreamID:%@; iceServers:%@; iceTransportPolicy:%@; metadataOptions:%@; >", NSStringFromClass([self class]), _webRTCSessionID, _sdp, _streamType, _videoStreamID, _audioStreamID, _iceServers, _iceTransportPolicy, _metadataOptions];
+ return descriptionString;
+}
+
+@end
+
+@implementation MTRWebRTCTransportProviderClusterProvideOfferParams (InternalMethods)
+
+- (CHIP_ERROR)_encodeToTLVReader:(chip::System::PacketBufferTLVReader &)reader
+{
+ chip::app::Clusters::WebRTCTransportProvider::Commands::ProvideOffer::Type encodableStruct;
+ ListFreer listFreer;
+ {
+ if (self.webRTCSessionID == nil) {
+ encodableStruct.webRTCSessionID.SetNull();
+ } else {
+ auto & nonNullValue_0 = encodableStruct.webRTCSessionID.SetNonNull();
+ nonNullValue_0 = self.webRTCSessionID.unsignedShortValue;
+ }
+ }
+ {
+ encodableStruct.sdp = AsCharSpan(self.sdp);
+ }
+ {
+ encodableStruct.streamType = static_cast>(self.streamType.unsignedCharValue);
+ }
+ {
+ if (self.videoStreamID != nil) {
+ auto & definedValue_0 = encodableStruct.videoStreamID.Emplace();
+ if (self.videoStreamID == nil) {
+ definedValue_0.SetNull();
+ } else {
+ auto & nonNullValue_1 = definedValue_0.SetNonNull();
+ nonNullValue_1 = self.videoStreamID.unsignedShortValue;
+ }
+ }
+ }
+ {
+ if (self.audioStreamID != nil) {
+ auto & definedValue_0 = encodableStruct.audioStreamID.Emplace();
+ if (self.audioStreamID == nil) {
+ definedValue_0.SetNull();
+ } else {
+ auto & nonNullValue_1 = definedValue_0.SetNonNull();
+ nonNullValue_1 = self.audioStreamID.unsignedShortValue;
+ }
+ }
+ }
+ {
+ if (self.iceServers != nil) {
+ auto & definedValue_0 = encodableStruct.ICEServers.Emplace();
+ {
+ using ListType_1 = std::remove_reference_t;
+ using ListMemberType_1 = ListMemberTypeGetter::Type;
+ if (self.iceServers.count != 0) {
+ auto * listHolder_1 = new ListHolder(self.iceServers.count);
+ if (listHolder_1 == nullptr || listHolder_1->mList == nullptr) {
+ return CHIP_ERROR_INVALID_ARGUMENT;
+ }
+ listFreer.add(listHolder_1);
+ for (size_t i_1 = 0; i_1 < self.iceServers.count; ++i_1) {
+ if (![self.iceServers[i_1] isKindOfClass:[MTRWebRTCTransportProviderClusterICEServerStruct class]]) {
+ // Wrong kind of value.
+ return CHIP_ERROR_INVALID_ARGUMENT;
+ }
+ auto element_1 = (MTRWebRTCTransportProviderClusterICEServerStruct *) self.iceServers[i_1];
+ {
+ using ListType_3 = std::remove_reference_tmList[i_1].urls)>;
+ using ListMemberType_3 = ListMemberTypeGetter::Type;
+ if (element_1.urls.count != 0) {
+ auto * listHolder_3 = new ListHolder(element_1.urls.count);
+ if (listHolder_3 == nullptr || listHolder_3->mList == nullptr) {
+ return CHIP_ERROR_INVALID_ARGUMENT;
+ }
+ listFreer.add(listHolder_3);
+ for (size_t i_3 = 0; i_3 < element_1.urls.count; ++i_3) {
+ if (![element_1.urls[i_3] isKindOfClass:[NSString class]]) {
+ // Wrong kind of value.
+ return CHIP_ERROR_INVALID_ARGUMENT;
+ }
+ auto element_3 = (NSString *) element_1.urls[i_3];
+ listHolder_3->mList[i_3] = AsCharSpan(element_3);
+ }
+ listHolder_1->mList[i_1].urls = ListType_3(listHolder_3->mList, element_1.urls.count);
+ } else {
+ listHolder_1->mList[i_1].urls = ListType_3();
+ }
+ }
+ if (element_1.username != nil) {
+ auto & definedValue_3 = listHolder_1->mList[i_1].username.Emplace();
+ definedValue_3 = AsCharSpan(element_1.username);
+ }
+ if (element_1.credential != nil) {
+ auto & definedValue_3 = listHolder_1->mList[i_1].credential.Emplace();
+ definedValue_3 = AsCharSpan(element_1.credential);
+ }
+ if (element_1.caid != nil) {
+ auto & definedValue_3 = listHolder_1->mList[i_1].caid.Emplace();
+ definedValue_3 = element_1.caid.unsignedShortValue;
+ }
+ }
+ definedValue_0 = ListType_1(listHolder_1->mList, self.iceServers.count);
+ } else {
+ definedValue_0 = ListType_1();
+ }
+ }
+ }
+ }
+ {
+ if (self.iceTransportPolicy != nil) {
+ auto & definedValue_0 = encodableStruct.ICETransportPolicy.Emplace();
+ definedValue_0 = AsCharSpan(self.iceTransportPolicy);
+ }
+ }
+ {
+ if (self.metadataOptions != nil) {
+ auto & definedValue_0 = encodableStruct.metadataOptions.Emplace();
+ definedValue_0 = static_cast>(self.metadataOptions.unsignedCharValue);
+ }
+ }
+
+ auto buffer = chip::System::PacketBufferHandle::New(chip::System::PacketBuffer::kMaxSizeWithoutReserve, 0);
+ if (buffer.IsNull()) {
+ return CHIP_ERROR_NO_MEMORY;
+ }
+
+ chip::System::PacketBufferTLVWriter writer;
+ // Commands never need chained buffers, since they cannot be chunked.
+ writer.Init(std::move(buffer), /* useChainedBuffers = */ false);
+
+ ReturnErrorOnFailure(chip::app::DataModel::Encode(writer, chip::TLV::AnonymousTag(), encodableStruct));
+
+ ReturnErrorOnFailure(writer.Finalize(&buffer));
+
+ reader.Init(std::move(buffer));
+ return reader.Next(chip::TLV::kTLVType_Structure, chip::TLV::AnonymousTag());
+}
+
+- (NSDictionary * _Nullable)_encodeAsDataValue:(NSError * __autoreleasing *)error
+{
+ chip::System::PacketBufferTLVReader reader;
+ CHIP_ERROR err = [self _encodeToTLVReader:reader];
+ if (err != CHIP_NO_ERROR) {
+ if (error) {
+ *error = [MTRError errorForCHIPErrorCode:err];
+ }
+ return nil;
+ }
+
+ auto decodedObj = MTRDecodeDataValueDictionaryFromCHIPTLV(&reader);
+ if (decodedObj == nil) {
+ if (error) {
+ *error = [MTRError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE];
+ }
+ }
+ return decodedObj;
+}
+@end
+
+@implementation MTRWebRTCTransportProviderClusterProvideOfferResponseParams
+- (instancetype)init
+{
+ if (self = [super init]) {
+
+ _webRTCSessionID = @(0);
+
+ _videoStreamID = @(0);
+
+ _audioStreamID = @(0);
+ }
+ return self;
+}
+
+- (id)copyWithZone:(NSZone * _Nullable)zone;
+{
+ auto other = [[MTRWebRTCTransportProviderClusterProvideOfferResponseParams alloc] init];
+
+ other.webRTCSessionID = self.webRTCSessionID;
+ other.videoStreamID = self.videoStreamID;
+ other.audioStreamID = self.audioStreamID;
+
+ return other;
+}
+
+- (NSString *)description
+{
+ NSString * descriptionString = [NSString stringWithFormat:@"<%@: webRTCSessionID:%@; videoStreamID:%@; audioStreamID:%@; >", NSStringFromClass([self class]), _webRTCSessionID, _videoStreamID, _audioStreamID];
+ return descriptionString;
+}
+
+- (nullable instancetype)initWithResponseValue:(NSDictionary *)responseValue
+ error:(NSError * __autoreleasing *)error
+{
+ if (!(self = [super init])) {
+ return nil;
+ }
+
+ using DecodableType = chip::app::Clusters::WebRTCTransportProvider::Commands::ProvideOfferResponse::DecodableType;
+ chip::System::PacketBufferHandle buffer = [MTRBaseDevice _responseDataForCommand:responseValue
+ clusterID:DecodableType::GetClusterId()
+ commandID:DecodableType::GetCommandId()
+ error:error];
+ if (buffer.IsNull()) {
+ return nil;
+ }
+
+ chip::TLV::TLVReader reader;
+ reader.Init(buffer->Start(), buffer->DataLength());
+
+ CHIP_ERROR err = reader.Next(chip::TLV::AnonymousTag());
+ if (err == CHIP_NO_ERROR) {
+ DecodableType decodedStruct;
+ err = chip::app::DataModel::Decode(reader, decodedStruct);
+ if (err == CHIP_NO_ERROR) {
+ err = [self _setFieldsFromDecodableStruct:decodedStruct];
+ if (err == CHIP_NO_ERROR) {
+ return self;
+ }
+ }
+ }
+
+ NSString * errorStr = [NSString stringWithFormat:@"Command payload decoding failed: %s", err.AsString()];
+ MTR_LOG_ERROR("%s", errorStr.UTF8String);
+ if (error != nil) {
+ NSDictionary * userInfo = @{ NSLocalizedFailureReasonErrorKey : NSLocalizedString(errorStr, nil) };
+ *error = [NSError errorWithDomain:MTRErrorDomain code:MTRErrorCodeSchemaMismatch userInfo:userInfo];
+ }
+ return nil;
+}
+
+@end
+
+@implementation MTRWebRTCTransportProviderClusterProvideOfferResponseParams (InternalMethods)
+
+- (CHIP_ERROR)_setFieldsFromDecodableStruct:(const chip::app::Clusters::WebRTCTransportProvider::Commands::ProvideOfferResponse::DecodableType &)decodableStruct
+{
+ {
+ self.webRTCSessionID = [NSNumber numberWithUnsignedShort:decodableStruct.webRTCSessionID];
+ }
+ {
+ self.videoStreamID = [NSNumber numberWithUnsignedShort:decodableStruct.videoStreamID];
+ }
+ {
+ self.audioStreamID = [NSNumber numberWithUnsignedShort:decodableStruct.audioStreamID];
+ }
+ return CHIP_NO_ERROR;
+}
+
+@end
+
+@implementation MTRWebRTCTransportProviderClusterProvideAnswerParams
+- (instancetype)init
+{
+ if (self = [super init]) {
+
+ _webRTCSessionID = @(0);
+
+ _sdp = @"";
+ _timedInvokeTimeoutMs = nil;
+ _serverSideProcessingTimeout = nil;
+ }
+ return self;
+}
+
+- (id)copyWithZone:(NSZone * _Nullable)zone;
+{
+ auto other = [[MTRWebRTCTransportProviderClusterProvideAnswerParams alloc] init];
+
+ other.webRTCSessionID = self.webRTCSessionID;
+ other.sdp = self.sdp;
+ other.timedInvokeTimeoutMs = self.timedInvokeTimeoutMs;
+ other.serverSideProcessingTimeout = self.serverSideProcessingTimeout;
+
+ return other;
+}
+
+- (NSString *)description
+{
+ NSString * descriptionString = [NSString stringWithFormat:@"<%@: webRTCSessionID:%@; sdp:%@; >", NSStringFromClass([self class]), _webRTCSessionID, _sdp];
+ return descriptionString;
+}
+
+@end
+
+@implementation MTRWebRTCTransportProviderClusterProvideAnswerParams (InternalMethods)
+
+- (CHIP_ERROR)_encodeToTLVReader:(chip::System::PacketBufferTLVReader &)reader
+{
+ chip::app::Clusters::WebRTCTransportProvider::Commands::ProvideAnswer::Type encodableStruct;
+ ListFreer listFreer;
+ {
+ encodableStruct.webRTCSessionID = self.webRTCSessionID.unsignedShortValue;
+ }
+ {
+ encodableStruct.sdp = AsCharSpan(self.sdp);
+ }
+
+ auto buffer = chip::System::PacketBufferHandle::New(chip::System::PacketBuffer::kMaxSizeWithoutReserve, 0);
+ if (buffer.IsNull()) {
+ return CHIP_ERROR_NO_MEMORY;
+ }
+
+ chip::System::PacketBufferTLVWriter writer;
+ // Commands never need chained buffers, since they cannot be chunked.
+ writer.Init(std::move(buffer), /* useChainedBuffers = */ false);
+
+ ReturnErrorOnFailure(chip::app::DataModel::Encode(writer, chip::TLV::AnonymousTag(), encodableStruct));
+
+ ReturnErrorOnFailure(writer.Finalize(&buffer));
+
+ reader.Init(std::move(buffer));
+ return reader.Next(chip::TLV::kTLVType_Structure, chip::TLV::AnonymousTag());
+}
+
+- (NSDictionary * _Nullable)_encodeAsDataValue:(NSError * __autoreleasing *)error
+{
+ chip::System::PacketBufferTLVReader reader;
+ CHIP_ERROR err = [self _encodeToTLVReader:reader];
+ if (err != CHIP_NO_ERROR) {
+ if (error) {
+ *error = [MTRError errorForCHIPErrorCode:err];
+ }
+ return nil;
+ }
+
+ auto decodedObj = MTRDecodeDataValueDictionaryFromCHIPTLV(&reader);
+ if (decodedObj == nil) {
+ if (error) {
+ *error = [MTRError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE];
+ }
+ }
+ return decodedObj;
+}
+@end
+
+@implementation MTRWebRTCTransportProviderClusterProvideICECandidateParams
+- (instancetype)init
+{
+ if (self = [super init]) {
+
+ _webRTCSessionID = @(0);
+
+ _iceCandidate = @"";
+ _timedInvokeTimeoutMs = nil;
+ _serverSideProcessingTimeout = nil;
+ }
+ return self;
+}
+
+- (id)copyWithZone:(NSZone * _Nullable)zone;
+{
+ auto other = [[MTRWebRTCTransportProviderClusterProvideICECandidateParams alloc] init];
+
+ other.webRTCSessionID = self.webRTCSessionID;
+ other.iceCandidate = self.iceCandidate;
+ other.timedInvokeTimeoutMs = self.timedInvokeTimeoutMs;
+ other.serverSideProcessingTimeout = self.serverSideProcessingTimeout;
+
+ return other;
+}
+
+- (NSString *)description
+{
+ NSString * descriptionString = [NSString stringWithFormat:@"<%@: webRTCSessionID:%@; iceCandidate:%@; >", NSStringFromClass([self class]), _webRTCSessionID, _iceCandidate];
+ return descriptionString;
+}
+
+@end
+
+@implementation MTRWebRTCTransportProviderClusterProvideICECandidateParams (InternalMethods)
+
+- (CHIP_ERROR)_encodeToTLVReader:(chip::System::PacketBufferTLVReader &)reader
+{
+ chip::app::Clusters::WebRTCTransportProvider::Commands::ProvideICECandidate::Type encodableStruct;
+ ListFreer listFreer;
+ {
+ encodableStruct.webRTCSessionID = self.webRTCSessionID.unsignedShortValue;
+ }
+ {
+ encodableStruct.ICECandidate = AsCharSpan(self.iceCandidate);
+ }
+
+ auto buffer = chip::System::PacketBufferHandle::New(chip::System::PacketBuffer::kMaxSizeWithoutReserve, 0);
+ if (buffer.IsNull()) {
+ return CHIP_ERROR_NO_MEMORY;
+ }
+
+ chip::System::PacketBufferTLVWriter writer;
+ // Commands never need chained buffers, since they cannot be chunked.
+ writer.Init(std::move(buffer), /* useChainedBuffers = */ false);
+
+ ReturnErrorOnFailure(chip::app::DataModel::Encode(writer, chip::TLV::AnonymousTag(), encodableStruct));
+
+ ReturnErrorOnFailure(writer.Finalize(&buffer));
+
+ reader.Init(std::move(buffer));
+ return reader.Next(chip::TLV::kTLVType_Structure, chip::TLV::AnonymousTag());
+}
+
+- (NSDictionary * _Nullable)_encodeAsDataValue:(NSError * __autoreleasing *)error
+{
+ chip::System::PacketBufferTLVReader reader;
+ CHIP_ERROR err = [self _encodeToTLVReader:reader];
+ if (err != CHIP_NO_ERROR) {
+ if (error) {
+ *error = [MTRError errorForCHIPErrorCode:err];
+ }
+ return nil;
+ }
+
+ auto decodedObj = MTRDecodeDataValueDictionaryFromCHIPTLV(&reader);
+ if (decodedObj == nil) {
+ if (error) {
+ *error = [MTRError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE];
+ }
+ }
+ return decodedObj;
+}
+@end
+
+@implementation MTRWebRTCTransportProviderClusterEndSessionParams
+- (instancetype)init
+{
+ if (self = [super init]) {
+
+ _webRTCSessionID = @(0);
+
+ _reason = @(0);
+ _timedInvokeTimeoutMs = nil;
+ _serverSideProcessingTimeout = nil;
+ }
+ return self;
+}
+
+- (id)copyWithZone:(NSZone * _Nullable)zone;
+{
+ auto other = [[MTRWebRTCTransportProviderClusterEndSessionParams alloc] init];
+
+ other.webRTCSessionID = self.webRTCSessionID;
+ other.reason = self.reason;
+ other.timedInvokeTimeoutMs = self.timedInvokeTimeoutMs;
+ other.serverSideProcessingTimeout = self.serverSideProcessingTimeout;
+
+ return other;
+}
+
+- (NSString *)description
+{
+ NSString * descriptionString = [NSString stringWithFormat:@"<%@: webRTCSessionID:%@; reason:%@; >", NSStringFromClass([self class]), _webRTCSessionID, _reason];
+ return descriptionString;
+}
+
+@end
+
+@implementation MTRWebRTCTransportProviderClusterEndSessionParams (InternalMethods)
+
+- (CHIP_ERROR)_encodeToTLVReader:(chip::System::PacketBufferTLVReader &)reader
+{
+ chip::app::Clusters::WebRTCTransportProvider::Commands::EndSession::Type encodableStruct;
+ ListFreer listFreer;
+ {
+ encodableStruct.webRTCSessionID = self.webRTCSessionID.unsignedShortValue;
+ }
+ {
+ encodableStruct.reason = static_cast>(self.reason.unsignedCharValue);
+ }
+
+ auto buffer = chip::System::PacketBufferHandle::New(chip::System::PacketBuffer::kMaxSizeWithoutReserve, 0);
+ if (buffer.IsNull()) {
+ return CHIP_ERROR_NO_MEMORY;
+ }
+
+ chip::System::PacketBufferTLVWriter writer;
+ // Commands never need chained buffers, since they cannot be chunked.
+ writer.Init(std::move(buffer), /* useChainedBuffers = */ false);
+
+ ReturnErrorOnFailure(chip::app::DataModel::Encode(writer, chip::TLV::AnonymousTag(), encodableStruct));
+
+ ReturnErrorOnFailure(writer.Finalize(&buffer));
+
+ reader.Init(std::move(buffer));
+ return reader.Next(chip::TLV::kTLVType_Structure, chip::TLV::AnonymousTag());
+}
+
+- (NSDictionary * _Nullable)_encodeAsDataValue:(NSError * __autoreleasing *)error
+{
+ chip::System::PacketBufferTLVReader reader;
+ CHIP_ERROR err = [self _encodeToTLVReader:reader];
+ if (err != CHIP_NO_ERROR) {
+ if (error) {
+ *error = [MTRError errorForCHIPErrorCode:err];
+ }
+ return nil;
+ }
+
+ auto decodedObj = MTRDecodeDataValueDictionaryFromCHIPTLV(&reader);
+ if (decodedObj == nil) {
+ if (error) {
+ *error = [MTRError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE];
+ }
+ }
+ return decodedObj;
+}
+@end
+
@implementation MTRChimeClusterPlayChimeSoundParams
- (instancetype)init
{
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloads_Internal.h b/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloads_Internal.h
index e7c5f23867e2ac..144ee696afc63a 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloads_Internal.h
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloads_Internal.h
@@ -2032,6 +2032,48 @@ NS_ASSUME_NONNULL_BEGIN
@end
+@interface MTRWebRTCTransportProviderClusterSolicitOfferParams (InternalMethods)
+
+- (NSDictionary * _Nullable)_encodeAsDataValue:(NSError * __autoreleasing *)error;
+
+@end
+
+@interface MTRWebRTCTransportProviderClusterSolicitOfferResponseParams (InternalMethods)
+
+- (CHIP_ERROR)_setFieldsFromDecodableStruct:(const chip::app::Clusters::WebRTCTransportProvider::Commands::SolicitOfferResponse::DecodableType &)decodableStruct;
+
+@end
+
+@interface MTRWebRTCTransportProviderClusterProvideOfferParams (InternalMethods)
+
+- (NSDictionary * _Nullable)_encodeAsDataValue:(NSError * __autoreleasing *)error;
+
+@end
+
+@interface MTRWebRTCTransportProviderClusterProvideOfferResponseParams (InternalMethods)
+
+- (CHIP_ERROR)_setFieldsFromDecodableStruct:(const chip::app::Clusters::WebRTCTransportProvider::Commands::ProvideOfferResponse::DecodableType &)decodableStruct;
+
+@end
+
+@interface MTRWebRTCTransportProviderClusterProvideAnswerParams (InternalMethods)
+
+- (NSDictionary * _Nullable)_encodeAsDataValue:(NSError * __autoreleasing *)error;
+
+@end
+
+@interface MTRWebRTCTransportProviderClusterProvideICECandidateParams (InternalMethods)
+
+- (NSDictionary * _Nullable)_encodeAsDataValue:(NSError * __autoreleasing *)error;
+
+@end
+
+@interface MTRWebRTCTransportProviderClusterEndSessionParams (InternalMethods)
+
+- (NSDictionary * _Nullable)_encodeAsDataValue:(NSError * __autoreleasing *)error;
+
+@end
+
@interface MTRChimeClusterPlayChimeSoundParams (InternalMethods)
- (NSDictionary * _Nullable)_encodeAsDataValue:(NSError * __autoreleasing *)error;
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRCommandTimedCheck.mm b/src/darwin/Framework/CHIP/zap-generated/MTRCommandTimedCheck.mm
index 6b5fed7921cfc9..91f69fd4e1f192 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRCommandTimedCheck.mm
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRCommandTimedCheck.mm
@@ -1124,6 +1124,15 @@ static BOOL CommandNeedsTimedInvokeInContentAppObserverCluster(AttributeId aAttr
}
}
}
+static BOOL CommandNeedsTimedInvokeInWebRTCTransportProviderCluster(AttributeId aAttributeId)
+{
+ using namespace Clusters::WebRTCTransportProvider;
+ switch (aAttributeId) {
+ default: {
+ return NO;
+ }
+ }
+}
static BOOL CommandNeedsTimedInvokeInChimeCluster(AttributeId aAttributeId)
{
using namespace Clusters::Chime;
@@ -1521,6 +1530,9 @@ BOOL MTRCommandNeedsTimedInvoke(NSNumber * _Nonnull aClusterID, NSNumber * _Nonn
case Clusters::ContentAppObserver::Id: {
return CommandNeedsTimedInvokeInContentAppObserverCluster(commandID);
}
+ case Clusters::WebRTCTransportProvider::Id: {
+ return CommandNeedsTimedInvokeInWebRTCTransportProviderCluster(commandID);
+ }
case Clusters::Chime::Id: {
return CommandNeedsTimedInvokeInChimeCluster(commandID);
}
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTREventTLVValueDecoder.mm b/src/darwin/Framework/CHIP/zap-generated/MTREventTLVValueDecoder.mm
index d3163c2aa1dbec..5a10da85b1be79 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTREventTLVValueDecoder.mm
+++ b/src/darwin/Framework/CHIP/zap-generated/MTREventTLVValueDecoder.mm
@@ -4543,6 +4543,18 @@ static id _Nullable DecodeEventPayloadForContentAppObserverCluster(EventId aEven
*aError = CHIP_ERROR_IM_MALFORMED_EVENT_PATH_IB;
return nil;
}
+static id _Nullable DecodeEventPayloadForWebRTCTransportProviderCluster(EventId aEventId, TLV::TLVReader & aReader, CHIP_ERROR * aError)
+{
+ using namespace Clusters::WebRTCTransportProvider;
+ switch (aEventId) {
+ default: {
+ break;
+ }
+ }
+
+ *aError = CHIP_ERROR_IM_MALFORMED_EVENT_PATH_IB;
+ return nil;
+}
static id _Nullable DecodeEventPayloadForChimeCluster(EventId aEventId, TLV::TLVReader & aReader, CHIP_ERROR * aError)
{
using namespace Clusters::Chime;
@@ -5145,6 +5157,9 @@ id _Nullable MTRDecodeEventPayload(const ConcreteEventPath & aPath, TLV::TLVRead
case Clusters::ContentAppObserver::Id: {
return DecodeEventPayloadForContentAppObserverCluster(aPath.mEventId, aReader, aError);
}
+ case Clusters::WebRTCTransportProvider::Id: {
+ return DecodeEventPayloadForWebRTCTransportProviderCluster(aPath.mEventId, aReader, aError);
+ }
case Clusters::Chime::Id: {
return DecodeEventPayloadForChimeCluster(aPath.mEventId, aReader, aError);
}
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRStructsObjc.h b/src/darwin/Framework/CHIP/zap-generated/MTRStructsObjc.h
index 42ee02b58d5abc..bb93511dbf43f9 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRStructsObjc.h
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRStructsObjc.h
@@ -2117,6 +2117,25 @@ MTR_PROVISIONALLY_AVAILABLE
@interface MTRContentControlClusterRemainingScreenTimeExpiredEvent : NSObject
@end
+MTR_PROVISIONALLY_AVAILABLE
+@interface MTRWebRTCTransportProviderClusterICEServerStruct : NSObject
+@property (nonatomic, copy) NSArray * _Nonnull urls MTR_PROVISIONALLY_AVAILABLE;
+@property (nonatomic, copy) NSString * _Nullable username MTR_PROVISIONALLY_AVAILABLE;
+@property (nonatomic, copy) NSString * _Nullable credential MTR_PROVISIONALLY_AVAILABLE;
+@property (nonatomic, copy) NSNumber * _Nullable caid MTR_PROVISIONALLY_AVAILABLE;
+@end
+
+MTR_PROVISIONALLY_AVAILABLE
+@interface MTRWebRTCTransportProviderClusterWebRTCSessionStruct : NSObject
+@property (nonatomic, copy) NSNumber * _Nonnull id MTR_PROVISIONALLY_AVAILABLE;
+@property (nonatomic, copy) NSNumber * _Nonnull peerNodeID MTR_PROVISIONALLY_AVAILABLE;
+@property (nonatomic, copy) NSNumber * _Nonnull peerFabricIndex MTR_PROVISIONALLY_AVAILABLE;
+@property (nonatomic, copy) NSNumber * _Nonnull streamType MTR_PROVISIONALLY_AVAILABLE;
+@property (nonatomic, copy) NSNumber * _Nullable videoStreamID MTR_PROVISIONALLY_AVAILABLE;
+@property (nonatomic, copy) NSNumber * _Nullable audioStreamID MTR_PROVISIONALLY_AVAILABLE;
+@property (nonatomic, copy) NSNumber * _Nonnull metadataOptions MTR_PROVISIONALLY_AVAILABLE;
+@end
+
MTR_PROVISIONALLY_AVAILABLE
@interface MTRChimeClusterChimeSoundStruct : NSObject
@property (nonatomic, copy) NSNumber * _Nonnull chimeID MTR_PROVISIONALLY_AVAILABLE;
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRStructsObjc.mm b/src/darwin/Framework/CHIP/zap-generated/MTRStructsObjc.mm
index a632603cb5a79e..6ba439eb02727a 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRStructsObjc.mm
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRStructsObjc.mm
@@ -8768,6 +8768,87 @@ - (NSString *)description
@end
+@implementation MTRWebRTCTransportProviderClusterICEServerStruct
+- (instancetype)init
+{
+ if (self = [super init]) {
+
+ _urls = [NSArray array];
+
+ _username = nil;
+
+ _credential = nil;
+
+ _caid = nil;
+ }
+ return self;
+}
+
+- (id)copyWithZone:(NSZone * _Nullable)zone
+{
+ auto other = [[MTRWebRTCTransportProviderClusterICEServerStruct alloc] init];
+
+ other.urls = self.urls;
+ other.username = self.username;
+ other.credential = self.credential;
+ other.caid = self.caid;
+
+ return other;
+}
+
+- (NSString *)description
+{
+ NSString * descriptionString = [NSString stringWithFormat:@"<%@: urls:%@; username:%@; credential:%@; caid:%@; >", NSStringFromClass([self class]), _urls, _username, _credential, _caid];
+ return descriptionString;
+}
+
+@end
+
+@implementation MTRWebRTCTransportProviderClusterWebRTCSessionStruct
+- (instancetype)init
+{
+ if (self = [super init]) {
+
+ _id = @(0);
+
+ _peerNodeID = @(0);
+
+ _peerFabricIndex = @(0);
+
+ _streamType = @(0);
+
+ _videoStreamID = nil;
+
+ _audioStreamID = nil;
+
+ _metadataOptions = @(0);
+ }
+ return self;
+}
+
+- (id)copyWithZone:(NSZone * _Nullable)zone
+{
+ auto other = [[MTRWebRTCTransportProviderClusterWebRTCSessionStruct alloc] init];
+
+ other.id = self.id;
+ other.peerNodeID = self.peerNodeID;
+ other.peerFabricIndex = self.peerFabricIndex;
+ other.streamType = self.streamType;
+ other.videoStreamID = self.videoStreamID;
+ other.audioStreamID = self.audioStreamID;
+ other.metadataOptions = self.metadataOptions;
+
+ return other;
+}
+
+- (NSString *)description
+{
+ NSString * descriptionString = [NSString stringWithFormat:@"<%@: id:%@; peerNodeID:%@; peerFabricIndex:%@; streamType:%@; videoStreamID:%@; audioStreamID:%@; metadataOptions:%@; >", NSStringFromClass([self class]), _id, _peerNodeID, _peerFabricIndex, _streamType, _videoStreamID, _audioStreamID, _metadataOptions];
+ return descriptionString;
+}
+
+@end
+
@implementation MTRChimeClusterChimeSoundStruct
- (instancetype)init
{
diff --git a/zzz_generated/app-common/app-common/zap-generated/attributes/Accessors.cpp b/zzz_generated/app-common/app-common/zap-generated/attributes/Accessors.cpp
index fa1f9659ebe6e5..8d488688d7c3aa 100644
--- a/zzz_generated/app-common/app-common/zap-generated/attributes/Accessors.cpp
+++ b/zzz_generated/app-common/app-common/zap-generated/attributes/Accessors.cpp
@@ -9044,6 +9044,53 @@ Protocols::InteractionModel::Status Set(EndpointId endpoint, chip::app::Clusters
} // namespace OperatingMode
+namespace MaximumCheckInBackOff {
+
+Protocols::InteractionModel::Status Get(EndpointId endpoint, uint32_t * value)
+{
+ using Traits = NumericAttributeTraits