Skip to content

Commit 04f9022

Browse files
committed
No using "<vector>" to fix the error from check_include_config.py
Change the management of PAFInfo items Signed-off-by: Lo,Chin-Ran <chin-ran.lo@nxp.com>
1 parent 497b534 commit 04f9022

File tree

8 files changed

+190
-99
lines changed

8 files changed

+190
-99
lines changed

scripts/tools/check_includes_config.py

-1
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,6 @@
188188
'src/controller/CHIPDeviceController.cpp': {'string'},
189189
'src/qrcodetool/setup_payload_commands.cpp': {'string'},
190190
'src/access/AccessRestrictionProvider.h': {'vector', 'map'},
191-
'src/wifipaf/WiFiPAFLayer.h': {'vector'},
192191
# nrfconnect test runner
193192
'src/test_driver/nrfconnect/main/runner.cpp': {'vector'},
194193
}

src/controller/CHIPDeviceController.cpp

+4-2
Original file line numberDiff line numberDiff line change
@@ -842,8 +842,10 @@ CHIP_ERROR DeviceCommissioner::EstablishPASEConnection(NodeId remoteDeviceId, Re
842842
const SetupDiscriminator connDiscriminator(params.GetSetupDiscriminator().value());
843843
VerifyOrReturnValue(!connDiscriminator.IsShortDiscriminator(), CHIP_ERROR_INVALID_ARGUMENT,
844844
ChipLogError(Controller, "Error, Long discriminator is required"));
845-
uint16_t discriminator = connDiscriminator.GetLongValue();
846-
DeviceLayer::ConnectivityMgr().GetWiFiPAF()->AddPafSession(nodeId, discriminator);
845+
uint16_t discriminator = connDiscriminator.GetLongValue();
846+
WiFiPAF::WiFiPAFSession sessionInfo = { .nodeId = nodeId, .discriminator = discriminator };
847+
ReturnErrorOnFailure(
848+
DeviceLayer::ConnectivityMgr().GetWiFiPAF()->AddPafSession(WiFiPAF::PafInfoAccess::kAccNodeInfo, sessionInfo));
847849
DeviceLayer::ConnectivityMgr().WiFiPAFSubscribe(discriminator, reinterpret_cast<void *>(this),
848850
OnWiFiPAFSubscribeComplete, OnWiFiPAFSubscribeError);
849851
ExitNow(CHIP_NO_ERROR);

src/controller/SetUpCodePairer.cpp

+4-2
Original file line numberDiff line numberDiff line change
@@ -263,8 +263,10 @@ CHIP_ERROR SetUpCodePairer::StartDiscoverOverWiFiPAF(SetupPayload & payload)
263263
const SetupDiscriminator connDiscriminator(payload.discriminator);
264264
VerifyOrReturnValue(!connDiscriminator.IsShortDiscriminator(), CHIP_ERROR_INVALID_ARGUMENT,
265265
ChipLogError(Controller, "Error, Long discriminator is required"));
266-
uint16_t discriminator = connDiscriminator.GetLongValue();
267-
DeviceLayer::ConnectivityMgr().GetWiFiPAF()->AddPafSession(mRemoteId, discriminator);
266+
uint16_t discriminator = connDiscriminator.GetLongValue();
267+
WiFiPAF::WiFiPAFSession sessionInfo = { .nodeId = mRemoteId, .discriminator = discriminator };
268+
ReturnErrorOnFailure(
269+
DeviceLayer::ConnectivityMgr().GetWiFiPAF()->AddPafSession(WiFiPAF::PafInfoAccess::kAccNodeInfo, sessionInfo));
268270
CHIP_ERROR err = DeviceLayer::ConnectivityMgr().WiFiPAFSubscribe(discriminator, (void *) this, OnWiFiPAFSubscribeComplete,
269271
OnWiFiPAFSubscribeError);
270272
if (err != CHIP_NO_ERROR)

src/platform/Linux/ConnectivityManagerImpl.cpp

+15-6
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,9 @@ using namespace ::chip::app::Clusters::GeneralDiagnostics;
7676
using namespace ::chip::app::Clusters::WiFiNetworkDiagnostics;
7777

7878
using namespace ::chip::DeviceLayer::NetworkCommissioning;
79+
#if CHIP_DEVICE_CONFIG_ENABLE_WIFIPAF
80+
using namespace ::chip::WiFiPAF;
81+
#endif
7982

8083
namespace chip {
8184

@@ -938,7 +941,8 @@ CHIP_ERROR ConnectivityManagerImpl::_WiFiPAFPublish(ConnectivityManager::WiFiPAF
938941
wpa_supplicant_1_interface_call_nanpublish_sync(mWpaSupplicant.iface, args, &publish_id, nullptr, &err.GetReceiver());
939942

940943
ChipLogProgress(DeviceLayer, "WiFi-PAF: publish_id: %u ! ", publish_id);
941-
_GetWiFiPAF()->AddPafSession(publish_id);
944+
WiFiPAFSession sessionInfo = { .id = publish_id };
945+
ReturnErrorOnFailure(_GetWiFiPAF()->AddPafSession(PafInfoAccess::kAccSessionId, sessionInfo));
942946
InArgs.publish_id = publish_id;
943947

944948
g_signal_connect(mWpaSupplicant.iface, "nanreplied",
@@ -1461,7 +1465,8 @@ void ConnectivityManagerImpl::OnDiscoveryResult(GVariant * discov_info)
14611465
/*
14621466
Error Checking
14631467
*/
1464-
auto pPafInfo = _GetWiFiPAF()->GetPAFInfo(pPublishSSI->DevInfo);
1468+
WiFiPAFSession sessionInfo = { .discriminator = pPublishSSI->DevInfo };
1469+
auto pPafInfo = _GetWiFiPAF()->GetPAFInfo(PafInfoAccess::kAccDisc, sessionInfo);
14651470
if (pPafInfo == nullptr)
14661471
{
14671472
ChipLogError(DeviceLayer, "WiFi-PAF: DiscoveryResult, no valid session with discriminator: %u", pPublishSSI->DevInfo);
@@ -1559,7 +1564,8 @@ void ConnectivityManagerImpl::OnReplied(GVariant * reply_info)
15591564
SetupDiscriminator);
15601565
return;
15611566
}
1562-
auto pPafInfo = _GetWiFiPAF()->GetPAFInfo(publish_id);
1567+
WiFiPAFSession sessionInfo = { .id = publish_id };
1568+
auto pPafInfo = _GetWiFiPAF()->GetPAFInfo(PafInfoAccess::kAccSessionId, sessionInfo);
15631569
if (pPafInfo == nullptr)
15641570
{
15651571
ChipLogError(DeviceLayer, "WiFi-PAF: OnReplied, no valid session with publish_id: %d", publish_id);
@@ -1635,13 +1641,15 @@ void ConnectivityManagerImpl::OnNanReceive(GVariant * obj)
16351641
void ConnectivityManagerImpl::OnNanPublishTerminated(guint public_id, gchar * reason)
16361642
{
16371643
ChipLogProgress(Controller, "WiFi-PAF: Publish terminated (%u, %s)", public_id, reason);
1638-
_GetWiFiPAF()->RmPafSession(public_id);
1644+
WiFiPAFSession sessionInfo = { .id = public_id };
1645+
_GetWiFiPAF()->RmPafSession(PafInfoAccess::kAccSessionId, sessionInfo);
16391646
}
16401647

16411648
void ConnectivityManagerImpl::OnNanSubscribeTerminated(guint subscribe_id, gchar * reason)
16421649
{
16431650
ChipLogProgress(Controller, "WiFi-PAF: Subscription terminated (%u, %s)", subscribe_id, reason);
1644-
_GetWiFiPAF()->RmPafSession(subscribe_id);
1651+
WiFiPAFSession sessionInfo = { .id = subscribe_id };
1652+
_GetWiFiPAF()->RmPafSession(PafInfoAccess::kAccSessionId, sessionInfo);
16451653
/*
16461654
Indicate the connection event
16471655
*/
@@ -1699,7 +1707,8 @@ CHIP_ERROR ConnectivityManagerImpl::_WiFiPAFSubscribe(const uint16_t & connDiscr
16991707
mOnPafSubscribeComplete = onSuccess;
17001708
mOnPafSubscribeError = onError;
17011709

1702-
auto pPafInfo = _GetWiFiPAF()->GetPAFInfo(PafPublish_ssi.DevInfo);
1710+
WiFiPAFSession sessionInfo = { .discriminator = PafPublish_ssi.DevInfo };
1711+
auto pPafInfo = _GetWiFiPAF()->GetPAFInfo(PafInfoAccess::kAccDisc, sessionInfo);
17031712
if (pPafInfo != nullptr)
17041713
{
17051714
pPafInfo->id = subscribe_id;

src/transport/raw/WiFiPAF.cpp

+3-2
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,8 @@ CHIP_ERROR WiFiPAFBase::SendMessage(const Transport::PeerAddress & address, Pack
7171
VerifyOrReturnError(address.GetTransportType() == Type::kWiFiPAF, CHIP_ERROR_INVALID_ARGUMENT);
7272
VerifyOrReturnError(mWiFiPAFLayer->GetWiFiPAFState() != State::kNotReady, CHIP_ERROR_INCORRECT_STATE);
7373

74-
WiFiPAFSession * pTxInfo = mWiFiPAFLayer->GetPAFInfo(address.GetRemoteId());
74+
WiFiPAFSession sessionInfo = { .nodeId = address.GetRemoteId() };
75+
WiFiPAFSession * pTxInfo = mWiFiPAFLayer->GetPAFInfo(chip::WiFiPAF::PafInfoAccess::kAccNodeId, sessionInfo);
7576
if (pTxInfo == nullptr)
7677
{
7778
/*
@@ -96,7 +97,7 @@ bool WiFiPAFBase::CanSendToPeer(const Transport::PeerAddress & address)
9697

9798
CHIP_ERROR WiFiPAFBase::WiFiPAFMessageReceived(WiFiPAFSession & RxInfo, PacketBufferHandle && buffer)
9899
{
99-
auto pPafInfo = mWiFiPAFLayer->GetPAFInfo(RxInfo.id);
100+
auto pPafInfo = mWiFiPAFLayer->GetPAFInfo(chip::WiFiPAF::PafInfoAccess::kAccSessionId, RxInfo);
100101
if (pPafInfo == nullptr)
101102
{
102103
/*

src/wifipaf/WiFiPAFLayer.cpp

+124-57
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,11 @@ CHIP_ERROR PAFTransportCapabilitiesResponseMessage::Decode(const PacketBufferHan
228228
* WiFiPAFLayer Implementation
229229
*/
230230

231+
WiFiPAFLayer::WiFiPAFLayer()
232+
{
233+
InitialPafInfo();
234+
}
235+
231236
CHIP_ERROR WiFiPAFLayer::Init(chip::System::Layer * systemLayer)
232237
{
233238
mSystemLayer = systemLayer;
@@ -238,23 +243,26 @@ CHIP_ERROR WiFiPAFLayer::Init(chip::System::Layer * systemLayer)
238243

239244
void WiFiPAFLayer::Shutdown(OnCancelDeviceHandle OnCancelDevice)
240245
{
241-
ChipLogProgress(WiFiPAF, "WiFiPAF: Closing all WiFiPAF sessions (%lu)", PafInfoVect.size());
242-
for (WiFiPAFSession & PafInfoElm : PafInfoVect)
246+
ChipLogProgress(WiFiPAF, "WiFiPAF: Closing all WiFiPAF sessions to shutdown");
247+
uint8_t i;
248+
WiFiPAFSession * pPafSession;
249+
250+
for (i = 0; i < WIFIPAF_LAYER_NUM_PAF_ENDPOINTS; i++)
243251
{
244-
if (PafInfoElm.id == UINT32_MAX)
252+
pPafSession = &mPafInfoVect[i];
253+
if (pPafSession->id == UINT32_MAX)
245254
{
246255
// Unused session
247256
continue;
248257
}
249-
ChipLogProgress(WiFiPAF, "WiFiPAF: Canceling id: %u", PafInfoElm.id);
250-
OnCancelDevice(PafInfoElm.id, PafInfoElm.role);
251-
WiFiPAFEndPoint * endPoint = sWiFiPAFEndPointPool.Find(reinterpret_cast<WIFIPAF_CONNECTION_OBJECT>(&PafInfoElm));
258+
ChipLogProgress(WiFiPAF, "WiFiPAF: Canceling id: %u", pPafSession->id);
259+
OnCancelDevice(pPafSession->id, pPafSession->role);
260+
WiFiPAFEndPoint * endPoint = sWiFiPAFEndPointPool.Find(reinterpret_cast<WIFIPAF_CONNECTION_OBJECT>(pPafSession));
252261
if (endPoint != nullptr)
253262
{
254263
endPoint->DoClose(kWiFiPAFCloseFlag_AbortTransmission, WIFIPAF_ERROR_APP_CLOSED_CONNECTION);
255264
}
256265
}
257-
PafInfoVect.clear();
258266
}
259267

260268
bool WiFiPAFLayer::OnWiFiPAFMessageReceived(WiFiPAFSession & RxInfo, System::PacketBufferHandle && msg)
@@ -384,84 +392,143 @@ WiFiPAFLayer::GetHighestSupportedProtocolVersion(const PAFTransportCapabilitiesR
384392
return retVersion;
385393
}
386394

387-
void WiFiPAFLayer::AddPafSession(const NodeId nodeId, const uint16_t discriminator)
395+
#define INVALID_PAF_SESSION_ID 0xff
396+
void WiFiPAFLayer::InitialPafInfo()
388397
{
389-
for (auto PafInfoElm : PafInfoVect)
398+
for (uint8_t i = 0; i < WIFIPAF_LAYER_NUM_PAF_ENDPOINTS; i++)
390399
{
391-
if (PafInfoElm.nodeId == nodeId)
392-
{
393-
assert(PafInfoElm.discriminator == discriminator);
394-
// Already exist
395-
return;
396-
}
400+
cleanPafInfo(mPafInfoVect[i]);
397401
}
398-
PafInfoVect.push_back({ .id = UINT32_MAX, .peer_id = UINT32_MAX, .nodeId = nodeId, .discriminator = discriminator });
399-
ChipLogProgress(WiFiPAF, "WiFiPAF: Add session with nodeId: %lu, disc: %x, total %lu sessions", nodeId, discriminator,
400-
PafInfoVect.size());
401402
}
402403

403-
void WiFiPAFLayer::AddPafSession(uint32_t id)
404+
void WiFiPAFLayer::cleanPafInfo(WiFiPAFSession & SessionInfo)
404405
{
405-
for (auto PafInfoElm : PafInfoVect)
406-
{
407-
if (PafInfoElm.id == id)
408-
{
409-
// Already exist
410-
return;
411-
}
412-
}
413-
PafInfoVect.push_back({ .id = id });
414-
ChipLogProgress(WiFiPAF, "WiFiPAF: Add session with id: %u, total %lu sessions", id, PafInfoVect.size());
406+
memset(&SessionInfo, 0, sizeof(WiFiPAFSession));
407+
SessionInfo.id = UINT32_MAX;
408+
SessionInfo.peer_id = UINT32_MAX;
409+
SessionInfo.nodeId = UINT32_MAX;
410+
SessionInfo.discriminator = UINT16_MAX;
411+
return;
415412
}
416413

417-
void WiFiPAFLayer::RmPafSession(uint32_t id)
414+
CHIP_ERROR WiFiPAFLayer::AddPafSession(PafInfoAccess accType, WiFiPAFSession & SessionInfo)
418415
{
419-
for (std::vector<WiFiPAFSession>::iterator it = PafInfoVect.begin(); it != PafInfoVect.end(); it++)
416+
uint8_t i;
417+
uint8_t eSlotId = INVALID_PAF_SESSION_ID;
418+
WiFiPAFSession * pPafSession = nullptr;
419+
420+
// Check if the session has existed
421+
for (i = 0; i < WIFIPAF_LAYER_NUM_PAF_ENDPOINTS; i++)
420422
{
421-
if (it->id == id)
423+
pPafSession = &mPafInfoVect[i];
424+
switch (accType)
422425
{
423-
PafInfoVect.erase(it);
424-
return;
425-
}
426+
case PafInfoAccess::kAccNodeInfo:
427+
if (pPafSession->nodeId == SessionInfo.nodeId)
428+
{
429+
assert(pPafSession->discriminator == SessionInfo.discriminator);
430+
// Already exist
431+
return CHIP_NO_ERROR;
432+
}
433+
break;
434+
case PafInfoAccess::kAccSessionId:
435+
if (pPafSession->id == SessionInfo.id)
436+
{
437+
// Already exist
438+
return CHIP_NO_ERROR;
439+
}
440+
break;
441+
default:
442+
return CHIP_ERROR_NOT_IMPLEMENTED;
443+
};
444+
if ((pPafSession->id == UINT32_MAX) && (pPafSession->nodeId == UINT32_MAX) && (pPafSession->discriminator == UINT16_MAX))
445+
eSlotId = i;
426446
}
427-
}
428-
429-
WiFiPAFSession * WiFiPAFLayer::GetPAFInfo(NodeId nodeId)
430-
{
431-
for (WiFiPAFSession & PafInfoElm : PafInfoVect)
447+
// Add the session if available
448+
if (eSlotId != INVALID_PAF_SESSION_ID)
432449
{
433-
if (PafInfoElm.nodeId == nodeId)
450+
pPafSession = &mPafInfoVect[eSlotId];
451+
switch (accType)
434452
{
435-
return &PafInfoElm;
436-
}
453+
case PafInfoAccess::kAccNodeInfo:
454+
pPafSession->nodeId = SessionInfo.nodeId;
455+
pPafSession->discriminator = SessionInfo.discriminator;
456+
ChipLogProgress(WiFiPAF, "WiFiPAF: Add session with nodeId: %lu, disc: %x, sessions", SessionInfo.nodeId,
457+
SessionInfo.discriminator);
458+
return CHIP_NO_ERROR;
459+
case PafInfoAccess::kAccSessionId:
460+
pPafSession->id = SessionInfo.id;
461+
ChipLogProgress(WiFiPAF, "WiFiPAF: Add session with id: %u", SessionInfo.id);
462+
return CHIP_NO_ERROR;
463+
default:
464+
return CHIP_ERROR_NOT_IMPLEMENTED;
465+
};
437466
}
438-
return nullptr;
467+
ChipLogError(WiFiPAF, "WiFiPAF: No available space for the new sessions");
468+
return CHIP_ERROR_PROVIDER_LIST_EXHAUSTED;
439469
}
440470

441-
WiFiPAFSession * WiFiPAFLayer::GetPAFInfo(uint32_t id)
471+
CHIP_ERROR WiFiPAFLayer::RmPafSession(PafInfoAccess accType, WiFiPAFSession & SessionInfo)
442472
{
443-
for (WiFiPAFSession & PafInfoElm : PafInfoVect)
473+
uint8_t i;
474+
WiFiPAFSession * pPafSession;
475+
476+
for (i = 0; i < WIFIPAF_LAYER_NUM_PAF_ENDPOINTS; i++)
444477
{
445-
if (PafInfoElm.id == id)
478+
pPafSession = &mPafInfoVect[i];
479+
switch (accType)
446480
{
447-
return &PafInfoElm;
448-
}
481+
case PafInfoAccess::kAccSessionId:
482+
if (pPafSession->id == SessionInfo.id)
483+
{
484+
ChipLogProgress(WiFiPAF, "Removing session with id: %u", pPafSession->id);
485+
// Clear the slot
486+
cleanPafInfo(*pPafSession);
487+
return CHIP_NO_ERROR;
488+
}
489+
break;
490+
default:
491+
return CHIP_ERROR_NOT_IMPLEMENTED;
492+
};
449493
}
450-
return nullptr;
494+
ChipLogError(WiFiPAF, "No PAF session found");
495+
return CHIP_ERROR_NOT_FOUND;
451496
}
452497

453-
WiFiPAFSession * WiFiPAFLayer::GetPAFInfo(uint16_t discriminator)
498+
WiFiPAFSession * WiFiPAFLayer::GetPAFInfo(PafInfoAccess accType, WiFiPAFSession & SessionInfo)
454499
{
455-
for (WiFiPAFSession & PafInfoElm : PafInfoVect)
500+
uint8_t i;
501+
WiFiPAFSession * pPafSession = nullptr;
502+
503+
for (i = 0; i < WIFIPAF_LAYER_NUM_PAF_ENDPOINTS; i++)
456504
{
457-
if (PafInfoElm.discriminator == discriminator)
505+
pPafSession = &mPafInfoVect[i];
506+
switch (accType)
458507
{
459-
// Available session
460-
return &PafInfoElm;
461-
}
508+
case PafInfoAccess::kAccSessionId:
509+
if (pPafSession->id == SessionInfo.id)
510+
{
511+
return pPafSession;
512+
}
513+
break;
514+
case PafInfoAccess::kAccNodeId:
515+
if (pPafSession->nodeId == SessionInfo.nodeId)
516+
{
517+
return pPafSession;
518+
}
519+
break;
520+
case PafInfoAccess::kAccDisc:
521+
if (pPafSession->discriminator == SessionInfo.discriminator)
522+
{
523+
return pPafSession;
524+
}
525+
break;
526+
default:
527+
return nullptr;
528+
};
462529
}
530+
463531
return nullptr;
464532
}
465-
466533
} /* namespace WiFiPAF */
467534
} /* namespace chip */

0 commit comments

Comments
 (0)