|
34 | 34 |
|
35 | 35 | namespace chip {
|
36 | 36 |
|
| 37 | +#ifdef IFNAMSIZ |
| 38 | +constexpr uint16_t kMaxInterfaceName = IFNAMSIZ; |
| 39 | +#else |
| 40 | +constexpr uint16_t kMaxInterfaceName = 32; |
| 41 | +#endif |
| 42 | + |
| 43 | +constexpr char kAPInterfaceNamePrefix[] = "ap"; |
| 44 | +constexpr char kLoobackInterfaceNamePrefix[] = "lo"; |
| 45 | + |
37 | 46 | void NetworkProvisioning::Init(NetworkProvisioningDelegate * delegate)
|
38 | 47 | {
|
39 | 48 | mDelegate = delegate;
|
@@ -81,6 +90,12 @@ CHIP_ERROR NetworkProvisioning::HandleNetworkProvisioningMessage(uint8_t msgType
|
81 | 90 | #if defined(CHIP_DEVICE_LAYER_TARGET)
|
82 | 91 | DeviceLayer::DeviceNetworkProvisioningDelegateImpl deviceDelegate;
|
83 | 92 | err = deviceDelegate.ProvisionWiFi(SSID, passwd);
|
| 93 | + SuccessOrExit(err); |
| 94 | + |
| 95 | + if (DeviceLayer::ConnectivityMgr().IsWiFiStationConnected()) |
| 96 | + { |
| 97 | + err = SendCurrentIPv4Address(); |
| 98 | + } |
84 | 99 | #endif
|
85 | 100 | #endif
|
86 | 101 | }
|
@@ -187,6 +202,26 @@ CHIP_ERROR NetworkProvisioning::SendIPAddress(const Inet::IPAddress & addr)
|
187 | 202 | return err;
|
188 | 203 | }
|
189 | 204 |
|
| 205 | +CHIP_ERROR NetworkProvisioning::SendCurrentIPv4Address() |
| 206 | +{ |
| 207 | + for (chip::Inet::InterfaceAddressIterator it; it.HasCurrent(); it.Next()) |
| 208 | + { |
| 209 | + char ifName[kMaxInterfaceName]; |
| 210 | + if (it.IsUp() && CHIP_NO_ERROR == it.GetInterfaceName(ifName, sizeof(ifName)) && |
| 211 | + memcmp(ifName, kAPInterfaceNamePrefix, sizeof(kAPInterfaceNamePrefix) - 1) && |
| 212 | + memcmp(ifName, kLoobackInterfaceNamePrefix, sizeof(kLoobackInterfaceNamePrefix) - 1)) |
| 213 | + { |
| 214 | + chip::Inet::IPAddress addr = it.GetAddress(); |
| 215 | + if (addr.IsIPv4()) |
| 216 | + { |
| 217 | + return SendIPAddress(addr); |
| 218 | + } |
| 219 | + } |
| 220 | + } |
| 221 | + |
| 222 | + return CHIP_NO_ERROR; |
| 223 | +} |
| 224 | + |
190 | 225 | CHIP_ERROR NetworkProvisioning::SendNetworkCredentials(const char * ssid, const char * passwd)
|
191 | 226 | {
|
192 | 227 | CHIP_ERROR err = CHIP_NO_ERROR;
|
|
0 commit comments