Skip to content

Commit

Permalink
[Python] Parse Interface ID from IP address string as well (#31321)
Browse files Browse the repository at this point in the history
* [Python] Parse Interface ID from IP address string as well

Currently, when passing a link-local address with an interface specified
using the %<interface> notation leads to "CHIP Error 0x0000002F: Invalid
argument".

Correctly parse the interface ID as well and pass it to the PeerAddress
object.

* Restyled by clang-format

---------

Co-authored-by: Restyled.io <[email protected]>
  • Loading branch information
2 people authored and pull[bot] committed Feb 16, 2024
1 parent b868022 commit 8575724
Showing 1 changed file with 8 additions and 4 deletions.
12 changes: 8 additions & 4 deletions src/controller/python/ChipDeviceController-ScriptBinding.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -385,13 +385,15 @@ PyChipError pychip_DeviceController_ConnectIP(chip::Controller::DeviceCommission
uint32_t setupPINCode, chip::NodeId nodeid)
{
chip::Inet::IPAddress peerAddr;
chip::Inet::InterfaceId ifaceOutput;
chip::Transport::PeerAddress addr;
chip::RendezvousParameters params = chip::RendezvousParameters().SetSetupPINCode(setupPINCode);

VerifyOrReturnError(chip::Inet::IPAddress::FromString(peerAddrStr, peerAddr), ToPyChipError(CHIP_ERROR_INVALID_ARGUMENT));
VerifyOrReturnError(chip::Inet::IPAddress::FromString(peerAddrStr, peerAddr, ifaceOutput),
ToPyChipError(CHIP_ERROR_INVALID_ARGUMENT));

// TODO: IP rendezvous should use TCP connection.
addr.SetTransportType(chip::Transport::Type::kUdp).SetIPAddress(peerAddr);
addr.SetTransportType(chip::Transport::Type::kUdp).SetIPAddress(peerAddr).SetInterface(ifaceOutput);
params.SetPeerAddress(addr).SetDiscriminator(0);

sPairingDelegate.SetExpectingPairingComplete(true);
Expand Down Expand Up @@ -594,10 +596,12 @@ PyChipError pychip_DeviceController_EstablishPASESessionIP(chip::Controller::Dev
uint32_t setupPINCode, chip::NodeId nodeid, uint16_t port)
{
chip::Inet::IPAddress peerAddr;
chip::Inet::InterfaceId ifaceOutput;
chip::Transport::PeerAddress addr;
RendezvousParameters params = chip::RendezvousParameters().SetSetupPINCode(setupPINCode);
VerifyOrReturnError(chip::Inet::IPAddress::FromString(peerAddrStr, peerAddr), ToPyChipError(CHIP_ERROR_INVALID_ARGUMENT));
addr.SetTransportType(chip::Transport::Type::kUdp).SetIPAddress(peerAddr);
VerifyOrReturnError(chip::Inet::IPAddress::FromString(peerAddrStr, peerAddr, ifaceOutput),
ToPyChipError(CHIP_ERROR_INVALID_ARGUMENT));
addr.SetTransportType(chip::Transport::Type::kUdp).SetIPAddress(peerAddr).SetInterface(ifaceOutput);
if (port != 0)
{
addr.SetPort(port);
Expand Down

0 comments on commit 8575724

Please sign in to comment.