diff --git a/examples/platform/linux/CommissioneeShellCommands.cpp b/examples/platform/linux/CommissioneeShellCommands.cpp index f04051b36e8f88..18f8355080201d 100644 --- a/examples/platform/linux/CommissioneeShellCommands.cpp +++ b/examples/platform/linux/CommissioneeShellCommands.cpp @@ -37,7 +37,8 @@ namespace chip { namespace Shell { #if CHIP_DEVICE_CONFIG_ENABLE_COMMISSIONER_DISCOVERY_CLIENT -static CHIP_ERROR SendUDC(bool printHeader, chip::Transport::PeerAddress commissioner) +static CHIP_ERROR SendUDC(bool printHeader, chip::Transport::PeerAddress commissioner, + Protocols::UserDirectedCommissioning::IdentificationDeclaration id) { streamer_t * sout = streamer_get(); @@ -46,7 +47,7 @@ static CHIP_ERROR SendUDC(bool printHeader, chip::Transport::PeerAddress commiss streamer_printf(sout, "SendUDC: "); } - Server::GetInstance().SendUserDirectedCommissioningRequest(commissioner); + Server::GetInstance().SendUserDirectedCommissioningRequest(commissioner, id); streamer_printf(sout, "done\r\n"); @@ -60,6 +61,13 @@ static CHIP_ERROR PrintAllCommands() streamer_printf(sout, " help Usage: commissionee \r\n"); #if CHIP_DEVICE_CONFIG_ENABLE_COMMISSIONER_DISCOVERY_CLIENT streamer_printf(sout, " sendudc
Send UDC message to address. Usage: commissionee sendudc ::1 5543\r\n"); + streamer_printf(sout, " udccancel
Send UDC cancel message to address. Usage: cast udccancel ::1 5543\r\n"); + streamer_printf(sout, + " udccommissionerpasscode
[CommissionerPasscodeReady] [PairingHint] [PairingInst] Send UDC " + "commissioner passcode message to address. Usage: udccommissionerpasscode ::1 5543 t 5 HelloWorld\r\n"); + streamer_printf(sout, + " testudc
[NoPasscode] [CdUponPasscodeDialog] [vid] [PairingHint] [PairingInst] Send UDC " + "message to address. Usage: cast testudc ::1 5543 t t 5 HelloWorld\r\n"); #endif // CHIP_DEVICE_CONFIG_ENABLE_COMMISSIONER_DISCOVERY_CLIENT // TODO: Figure out whether setdiscoverytimeout is a reasonable thing to do // at all, and if so what semantics it should have. Presumably it should @@ -92,12 +100,93 @@ static CHIP_ERROR CommissioneeHandler(int argc, char ** argv) } #if CHIP_DEVICE_CONFIG_ENABLE_COMMISSIONER_DISCOVERY_CLIENT if (strcmp(argv[0], "sendudc") == 0) + { + Protocols::UserDirectedCommissioning::IdentificationDeclaration id; + + char * eptr; + chip::Inet::IPAddress commissioner; + chip::Inet::IPAddress::FromString(argv[1], commissioner); + uint16_t port = (uint16_t) strtol(argv[2], &eptr, 10); + + return SendUDC(true, chip::Transport::PeerAddress::UDP(commissioner, port), id); + } + if (strcmp(argv[0], "udccancel") == 0) + { + char * eptr; + chip::Inet::IPAddress commissioner; + chip::Inet::IPAddress::FromString(argv[1], commissioner); + uint16_t port = (uint16_t) strtol(argv[2], &eptr, 10); + + Protocols::UserDirectedCommissioning::IdentificationDeclaration id; + id.SetCancelPasscode(true); + return Server::GetInstance().SendUserDirectedCommissioningRequest(chip::Transport::PeerAddress::UDP(commissioner, port), + id); + } + if (strcmp(argv[0], "udccommissionerpasscode") == 0) { char * eptr; chip::Inet::IPAddress commissioner; chip::Inet::IPAddress::FromString(argv[1], commissioner); uint16_t port = (uint16_t) strtol(argv[2], &eptr, 10); - return SendUDC(true, chip::Transport::PeerAddress::UDP(commissioner, port)); + + // udccommissionerpasscode
[CommissionerPasscodeReady] [PairingHint] [PairingInst] + // ex. udccommissionerpasscode
t 5 'hello world' + + Protocols::UserDirectedCommissioning::IdentificationDeclaration id; + id.SetCommissionerPasscode(true); + if (argc > 3) + { + id.SetCommissionerPasscodeReady(strcmp(argv[3], "t") == 0); + } + if (argc > 4) + { + uint16_t hint = (uint16_t) strtol(argv[4], &eptr, 10); + id.SetPairingHint(hint); + } + if (argc > 5) + { + id.SetPairingInst(argv[5]); + } + return Server::GetInstance().SendUserDirectedCommissioningRequest(chip::Transport::PeerAddress::UDP(commissioner, port), + id); + } + if (strcmp(argv[0], "testudc") == 0) + { + char * eptr; + chip::Inet::IPAddress commissioner; + chip::Inet::IPAddress::FromString(argv[1], commissioner); + uint16_t port = (uint16_t) strtol(argv[2], &eptr, 10); + + // sendudc
[NoPasscode] [CdUponPasscodeDialog] [vid] [PairingHint] [PairingInst] + // ex. sendudc
t t 111 5 'hello world' + + Protocols::UserDirectedCommissioning::IdentificationDeclaration id; + if (argc > 3) + { + id.SetNoPasscode(strcmp(argv[3], "t") == 0); + } + if (argc > 4) + { + id.SetCdUponPasscodeDialog(strcmp(argv[4], "t") == 0); + } + if (argc > 5) + { + uint16_t vid = (uint16_t) strtol(argv[5], &eptr, 10); + Protocols::UserDirectedCommissioning::TargetAppInfo info; + info.vendorId = vid; + id.AddTargetAppInfo(info); + } + if (argc > 6) + { + uint16_t hint = (uint16_t) strtol(argv[6], &eptr, 10); + id.SetPairingHint(hint); + } + if (argc > 7) + { + id.SetPairingInst(argv[7]); + } + return Server::GetInstance().SendUserDirectedCommissioningRequest(chip::Transport::PeerAddress::UDP(commissioner, port), + id); } #endif // CHIP_DEVICE_CONFIG_ENABLE_COMMISSIONER_DISCOVERY_CLIENT // TODO: Figure out whether setdiscoverytimeout is a reasonable thing to do diff --git a/examples/tv-casting-app/linux/CastingShellCommands.cpp b/examples/tv-casting-app/linux/CastingShellCommands.cpp index 136c0fef46625f..f6b245b42dc13a 100644 --- a/examples/tv-casting-app/linux/CastingShellCommands.cpp +++ b/examples/tv-casting-app/linux/CastingShellCommands.cpp @@ -60,6 +60,13 @@ static CHIP_ERROR PrintAllCommands() sout, " access Read and display clusters on each endpoint for . Usage: cast access 0xFFFFFFEFFFFFFFFF\r\n"); streamer_printf(sout, " sendudc
Send UDC message to address. Usage: cast sendudc ::1 5543\r\n"); + streamer_printf(sout, " udccancel
Send UDC cancel message to address. Usage: cast udccancel ::1 5543\r\n"); + streamer_printf(sout, + " udccommissionerpasscode
[CommissionerPasscodeReady] [PairingHint] [PairingInst] Send UDC " + "commissioner passcode message to address. Usage: udccommissionerpasscode ::1 5543 t 5 HelloWorld\r\n"); + streamer_printf(sout, + " testudc
[NoPasscode] [CdUponPasscodeDialog] [vid] [PairingHint] [PairingInst] Send UDC " + "message to address. Usage: cast testudc ::1 5543 t t 5 HelloWorld\r\n"); streamer_printf( sout, " cluster [clustercommand] Send cluster command. Usage: cast cluster keypadinput send-key 1 18446744004990074879 1\r\n"); @@ -148,6 +155,84 @@ static CHIP_ERROR CastingHandler(int argc, char ** argv) return CastingServer::GetInstance()->SendUserDirectedCommissioningRequest( chip::Transport::PeerAddress::UDP(commissioner, port)); } + if (strcmp(argv[0], "udccancel") == 0) + { + char * eptr; + chip::Inet::IPAddress commissioner; + chip::Inet::IPAddress::FromString(argv[1], commissioner); + uint16_t port = (uint16_t) strtol(argv[2], &eptr, 10); + + Protocols::UserDirectedCommissioning::IdentificationDeclaration id; + id.SetCancelPasscode(true); + return Server::GetInstance().SendUserDirectedCommissioningRequest(chip::Transport::PeerAddress::UDP(commissioner, port), + id); + } + if (strcmp(argv[0], "udccommissionerpasscode") == 0) + { + char * eptr; + chip::Inet::IPAddress commissioner; + chip::Inet::IPAddress::FromString(argv[1], commissioner); + uint16_t port = (uint16_t) strtol(argv[2], &eptr, 10); + + // udccommissionerpasscode
[CommissionerPasscodeReady] [PairingHint] [PairingInst] + // ex. udccommissionerpasscode
t 5 'hello world' + + Protocols::UserDirectedCommissioning::IdentificationDeclaration id; + id.SetCommissionerPasscode(true); + if (argc > 3) + { + id.SetCommissionerPasscodeReady(strcmp(argv[3], "t") == 0); + } + if (argc > 4) + { + uint16_t hint = (uint16_t) strtol(argv[4], &eptr, 10); + id.SetPairingHint(hint); + } + if (argc > 5) + { + id.SetPairingInst(argv[5]); + } + return Server::GetInstance().SendUserDirectedCommissioningRequest(chip::Transport::PeerAddress::UDP(commissioner, port), + id); + } + if (strcmp(argv[0], "testudc") == 0) + { + char * eptr; + chip::Inet::IPAddress commissioner; + chip::Inet::IPAddress::FromString(argv[1], commissioner); + uint16_t port = (uint16_t) strtol(argv[2], &eptr, 10); + + // sendudc
[NoPasscode] [CdUponPasscodeDialog] [vid] [PairingHint] [PairingInst] + // ex. sendudc
t t 111 5 'hello world' + + Protocols::UserDirectedCommissioning::IdentificationDeclaration id; + if (argc > 3) + { + id.SetNoPasscode(strcmp(argv[3], "t") == 0); + } + if (argc > 4) + { + id.SetCdUponPasscodeDialog(strcmp(argv[4], "t") == 0); + } + if (argc > 5) + { + uint16_t vid = (uint16_t) strtol(argv[5], &eptr, 10); + Protocols::UserDirectedCommissioning::TargetAppInfo info; + info.vendorId = vid; + id.AddTargetAppInfo(info); + } + if (argc > 6) + { + uint16_t hint = (uint16_t) strtol(argv[6], &eptr, 10); + id.SetPairingHint(hint); + } + if (argc > 7) + { + id.SetPairingInst(argv[7]); + } + return Server::GetInstance().SendUserDirectedCommissioningRequest(chip::Transport::PeerAddress::UDP(commissioner, port), + id); + } #endif // CHIP_DEVICE_CONFIG_ENABLE_COMMISSIONER_DISCOVERY_CLIENT if (strcmp(argv[0], "print-bindings") == 0) { diff --git a/examples/tv-casting-app/tv-casting-common/core/CastingPlayer.cpp b/examples/tv-casting-app/tv-casting-common/core/CastingPlayer.cpp index e469775ce27bc0..8ea90c21edb969 100644 --- a/examples/tv-casting-app/tv-casting-common/core/CastingPlayer.cpp +++ b/examples/tv-casting-app/tv-casting-common/core/CastingPlayer.cpp @@ -163,8 +163,10 @@ CHIP_ERROR CastingPlayer::SendUserDirectedCommissioningRequest() ReturnErrorOnFailure(support::ChipDeviceEventHandler::SetUdcStatus(true)); + // TODO: expose options to the higher layer + chip::Protocols::UserDirectedCommissioning::IdentificationDeclaration id; ReturnErrorOnFailure(chip::Server::GetInstance().SendUserDirectedCommissioningRequest( - chip::Transport::PeerAddress::UDP(*ipAddressToUse, mAttributes.port, mAttributes.interfaceId))); + chip::Transport::PeerAddress::UDP(*ipAddressToUse, mAttributes.port, mAttributes.interfaceId), id)); return CHIP_NO_ERROR; } diff --git a/examples/tv-casting-app/tv-casting-common/src/CastingServer.cpp b/examples/tv-casting-app/tv-casting-common/src/CastingServer.cpp index fbbb9d32d8f030..e4bb7647085b40 100644 --- a/examples/tv-casting-app/tv-casting-common/src/CastingServer.cpp +++ b/examples/tv-casting-app/tv-casting-common/src/CastingServer.cpp @@ -191,7 +191,9 @@ void CastingServer::OnCommissioningSessionEstablishmentStarted() #if CHIP_DEVICE_CONFIG_ENABLE_COMMISSIONER_DISCOVERY_CLIENT CHIP_ERROR CastingServer::SendUserDirectedCommissioningRequest(chip::Transport::PeerAddress commissioner) { - return Server::GetInstance().SendUserDirectedCommissioningRequest(commissioner); + // TODO: expose options to the higher layer + Protocols::UserDirectedCommissioning::IdentificationDeclaration id; + return Server::GetInstance().SendUserDirectedCommissioningRequest(commissioner, id); } chip::Inet::IPAddress * CastingServer::getIpAddressForUDCRequest(chip::Inet::IPAddress ipAddresses[], const size_t numIPs) diff --git a/src/app/server/Server.cpp b/src/app/server/Server.cpp index eb9b5835dd23d5..4a0fa91f56d520 100644 --- a/src/app/server/Server.cpp +++ b/src/app/server/Server.cpp @@ -567,65 +567,84 @@ void Server::Shutdown() // NOTE: UDC client is located in Server.cpp because it really only makes sense // to send UDC from a Matter device. The UDC message payload needs to include the device's // randomly generated service name. -CHIP_ERROR Server::SendUserDirectedCommissioningRequest(chip::Transport::PeerAddress commissioner) +CHIP_ERROR Server::SendUserDirectedCommissioningRequest(chip::Transport::PeerAddress commissioner, + Protocols::UserDirectedCommissioning::IdentificationDeclaration & id) { ChipLogDetail(AppServer, "SendUserDirectedCommissioningRequest2"); CHIP_ERROR err; - char nameBuffer[chip::Dnssd::Commission::kInstanceNameMaxLength + 1]; - err = app::DnssdServer::Instance().GetCommissionableInstanceName(nameBuffer, sizeof(nameBuffer)); - if (err != CHIP_NO_ERROR) - { - ChipLogError(AppServer, "Failed to get mdns instance name error: %" CHIP_ERROR_FORMAT, err.Format()); - return err; - } - ChipLogDetail(AppServer, "instanceName=%s", nameBuffer); - - Protocols::UserDirectedCommissioning::IdentificationDeclaration id; - id.SetInstanceName(nameBuffer); - uint16_t vendorId = 0; - if (DeviceLayer::GetDeviceInstanceInfoProvider()->GetVendorId(vendorId) != CHIP_NO_ERROR) + // only populate fields left blank by the client + if (strlen(id.GetInstanceName()) == 0) { - ChipLogDetail(Discovery, "Vendor ID not known"); - } - else - { - id.SetVendorId(vendorId); + char nameBuffer[chip::Dnssd::Commission::kInstanceNameMaxLength + 1]; + err = app::DnssdServer::Instance().GetCommissionableInstanceName(nameBuffer, sizeof(nameBuffer)); + if (err != CHIP_NO_ERROR) + { + ChipLogError(AppServer, "Failed to get mdns instance name error: %" CHIP_ERROR_FORMAT, err.Format()); + return err; + } + id.SetInstanceName(nameBuffer); } + ChipLogDetail(AppServer, "instanceName=%s", id.GetInstanceName()); - uint16_t productId = 0; - if (DeviceLayer::GetDeviceInstanceInfoProvider()->GetProductId(productId) != CHIP_NO_ERROR) - { - ChipLogDetail(Discovery, "Product ID not known"); - } - else + if (id.GetVendorId() == 0) { - id.SetProductId(productId); + uint16_t vendorId = 0; + if (DeviceLayer::GetDeviceInstanceInfoProvider()->GetVendorId(vendorId) != CHIP_NO_ERROR) + { + ChipLogDetail(Discovery, "Vendor ID not known"); + } + else + { + id.SetVendorId(vendorId); + } } - char deviceName[chip::Dnssd::kKeyDeviceNameMaxLength + 1] = {}; - if (!chip::DeviceLayer::ConfigurationMgr().IsCommissionableDeviceNameEnabled() || - chip::DeviceLayer::ConfigurationMgr().GetCommissionableDeviceName(deviceName, sizeof(deviceName)) != CHIP_NO_ERROR) + if (id.GetProductId() == 0) { - ChipLogDetail(Discovery, "Device Name not known"); + uint16_t productId = 0; + if (DeviceLayer::GetDeviceInstanceInfoProvider()->GetProductId(productId) != CHIP_NO_ERROR) + { + ChipLogDetail(Discovery, "Product ID not known"); + } + else + { + id.SetProductId(productId); + } } - else + + if (strlen(id.GetDeviceName()) == 0) { - id.SetDeviceName(deviceName); + char deviceName[chip::Dnssd::kKeyDeviceNameMaxLength + 1] = {}; + if (!chip::DeviceLayer::ConfigurationMgr().IsCommissionableDeviceNameEnabled() || + chip::DeviceLayer::ConfigurationMgr().GetCommissionableDeviceName(deviceName, sizeof(deviceName)) != CHIP_NO_ERROR) + { + ChipLogDetail(Discovery, "Device Name not known"); + } + else + { + id.SetDeviceName(deviceName); + } } #if CHIP_ENABLE_ROTATING_DEVICE_ID && defined(CHIP_DEVICE_CONFIG_ROTATING_DEVICE_ID_UNIQUE_ID) - char rotatingDeviceIdHexBuffer[RotatingDeviceId::kHexMaxLength]; - ReturnErrorOnFailure( - app::DnssdServer::Instance().GenerateRotatingDeviceId(rotatingDeviceIdHexBuffer, ArraySize(rotatingDeviceIdHexBuffer))); + if (id.GetRotatingIdLength() == 0) + { + char rotatingDeviceIdHexBuffer[RotatingDeviceId::kHexMaxLength]; + ReturnErrorOnFailure( + app::DnssdServer::Instance().GenerateRotatingDeviceId(rotatingDeviceIdHexBuffer, ArraySize(rotatingDeviceIdHexBuffer))); - uint8_t * rotatingId = reinterpret_cast(rotatingDeviceIdHexBuffer); - size_t rotatingIdLen = strlen(rotatingDeviceIdHexBuffer); - id.SetRotatingId(rotatingId, rotatingIdLen); + uint8_t * rotatingId = reinterpret_cast(rotatingDeviceIdHexBuffer); + size_t rotatingIdLen = strlen(rotatingDeviceIdHexBuffer); + id.SetRotatingId(rotatingId, rotatingIdLen); + } #endif - id.SetCdPort(mCdcListenPort); + if (id.GetCdPort() == 0) + { + id.SetCdPort(mCdcListenPort); + } err = gUDCClient->SendUDCMessage(&mTransports, id, commissioner); diff --git a/src/app/server/Server.h b/src/app/server/Server.h index e6263ccddc6431..3bb5e4537336ec 100644 --- a/src/app/server/Server.h +++ b/src/app/server/Server.h @@ -314,7 +314,9 @@ class Server CHIP_ERROR Init(const ServerInitParams & initParams); #if CHIP_DEVICE_CONFIG_ENABLE_COMMISSIONER_DISCOVERY_CLIENT - CHIP_ERROR SendUserDirectedCommissioningRequest(chip::Transport::PeerAddress commissioner); + CHIP_ERROR + SendUserDirectedCommissioningRequest(chip::Transport::PeerAddress commissioner, + Protocols::UserDirectedCommissioning::IdentificationDeclaration & id); #endif // CHIP_DEVICE_CONFIG_ENABLE_COMMISSIONER_DISCOVERY_CLIENT /** diff --git a/src/protocols/user_directed_commissioning/UserDirectedCommissioningClient.cpp b/src/protocols/user_directed_commissioning/UserDirectedCommissioningClient.cpp index 1d93ae5bb1d75e..9b73b45ab9be61 100644 --- a/src/protocols/user_directed_commissioning/UserDirectedCommissioningClient.cpp +++ b/src/protocols/user_directed_commissioning/UserDirectedCommissioningClient.cpp @@ -132,27 +132,30 @@ uint32_t IdentificationDeclaration::WritePayload(uint8_t * payloadBuffer, size_t (err = writer.PutBytes(chip::TLV::ContextTag(kRotatingIdTag), mRotatingId, static_cast(mRotatingIdLen))), LogErrorOnFailure(err)); - // AppVendorIdList - VerifyOrExit( - CHIP_NO_ERROR == - (err = writer.StartContainer(chip::TLV::ContextTag(kTargetAppListTag), chip::TLV::kTLVType_List, listContainerType)), - LogErrorOnFailure(err)); - for (size_t i = 0; i < mNumTargetAppInfos; i++) + if (mNumTargetAppInfos > 0) { - // start the TargetApp structure + // AppVendorIdList VerifyOrExit(CHIP_NO_ERROR == - (err = writer.StartContainer(chip::TLV::ContextTag(kTargetAppTag), chip::TLV::kTLVType_Structure, - outerContainerType)), - LogErrorOnFailure(err)); - // add the vendor Id - VerifyOrExit(CHIP_NO_ERROR == (err = writer.Put(chip::TLV::ContextTag(kAppVendorIdTag), mTargetAppInfos[i].vendorId)), + (err = writer.StartContainer(chip::TLV::ContextTag(kTargetAppListTag), chip::TLV::kTLVType_List, + listContainerType)), LogErrorOnFailure(err)); - VerifyOrExit(CHIP_NO_ERROR == (err = writer.Put(chip::TLV::ContextTag(kAppProductIdTag), mTargetAppInfos[i].productId)), - LogErrorOnFailure(err)); - // end the TargetApp structure - VerifyOrExit(CHIP_NO_ERROR == (err = writer.EndContainer(outerContainerType)), LogErrorOnFailure(err)); + for (size_t i = 0; i < mNumTargetAppInfos; i++) + { + // start the TargetApp structure + VerifyOrExit(CHIP_NO_ERROR == + (err = writer.StartContainer(chip::TLV::ContextTag(kTargetAppTag), chip::TLV::kTLVType_Structure, + outerContainerType)), + LogErrorOnFailure(err)); + // add the vendor Id + VerifyOrExit(CHIP_NO_ERROR == (err = writer.Put(chip::TLV::ContextTag(kAppVendorIdTag), mTargetAppInfos[i].vendorId)), + LogErrorOnFailure(err)); + VerifyOrExit(CHIP_NO_ERROR == (err = writer.Put(chip::TLV::ContextTag(kAppProductIdTag), mTargetAppInfos[i].productId)), + LogErrorOnFailure(err)); + // end the TargetApp structure + VerifyOrExit(CHIP_NO_ERROR == (err = writer.EndContainer(outerContainerType)), LogErrorOnFailure(err)); + } + VerifyOrExit(CHIP_NO_ERROR == (err = writer.EndContainer(listContainerType)), LogErrorOnFailure(err)); } - VerifyOrExit(CHIP_NO_ERROR == (err = writer.EndContainer(listContainerType)), LogErrorOnFailure(err)); VerifyOrExit(CHIP_NO_ERROR == (err = writer.PutBoolean(chip::TLV::ContextTag(kNoPasscodeTag), mNoPasscode)), LogErrorOnFailure(err)); @@ -169,9 +172,10 @@ uint32_t IdentificationDeclaration::WritePayload(uint8_t * payloadBuffer, size_t VerifyOrExit(CHIP_NO_ERROR == (err = writer.EndContainer(outerContainerType)), LogErrorOnFailure(err)); VerifyOrExit(CHIP_NO_ERROR == (err = writer.Finalize()), LogErrorOnFailure(err)); - return writer.GetLengthWritten(); + return writer.GetLengthWritten() + sizeof(mInstanceName); exit: + ChipLogError(AppServer, "IdentificationDeclaration::WritePayload exiting early error %" CHIP_ERROR_FORMAT, err.Format()); return 0; } diff --git a/src/protocols/user_directed_commissioning/UserDirectedCommissioningServer.cpp b/src/protocols/user_directed_commissioning/UserDirectedCommissioningServer.cpp index 1a2f125ae5d282..746df853436877 100644 --- a/src/protocols/user_directed_commissioning/UserDirectedCommissioningServer.cpp +++ b/src/protocols/user_directed_commissioning/UserDirectedCommissioningServer.cpp @@ -327,6 +327,10 @@ CHIP_ERROR IdentificationDeclaration::ReadPayload(uint8_t * udcPayload, size_t p err = reader.Get(mCancelPasscode); break; } + if (err != CHIP_NO_ERROR) + { + ChipLogError(AppServer, "IdentificationDeclaration::ReadPayload read error %" CHIP_ERROR_FORMAT, err.Format()); + } } if (err == CHIP_END_OF_TLV) @@ -334,6 +338,10 @@ CHIP_ERROR IdentificationDeclaration::ReadPayload(uint8_t * udcPayload, size_t p // Exiting container ReturnErrorOnFailure(reader.ExitContainer(outerContainerType)); } + else + { + ChipLogError(AppServer, "IdentificationDeclaration::ReadPayload exiting early error %" CHIP_ERROR_FORMAT, err.Format()); + } ChipLogProgress(AppServer, "UDC TLV parse complete"); return CHIP_NO_ERROR;