Skip to content

Commit 7a92e07

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 7a92e07

File tree

7 files changed

+165
-78
lines changed

7 files changed

+165
-78
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

+3-1
Original file line numberDiff line numberDiff line change
@@ -843,7 +843,9 @@ CHIP_ERROR DeviceCommissioner::EstablishPASEConnection(NodeId remoteDeviceId, Re
843843
VerifyOrReturnValue(!connDiscriminator.IsShortDiscriminator(), CHIP_ERROR_INVALID_ARGUMENT,
844844
ChipLogError(Controller, "Error, Long discriminator is required"));
845845
uint16_t discriminator = connDiscriminator.GetLongValue();
846-
DeviceLayer::ConnectivityMgr().GetWiFiPAF()->AddPafSession(nodeId, discriminator);
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

+3-1
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,9 @@ CHIP_ERROR SetUpCodePairer::StartDiscoverOverWiFiPAF(SetupPayload & payload)
264264
VerifyOrReturnValue(!connDiscriminator.IsShortDiscriminator(), CHIP_ERROR_INVALID_ARGUMENT,
265265
ChipLogError(Controller, "Error, Long discriminator is required"));
266266
uint16_t discriminator = connDiscriminator.GetLongValue();
267-
DeviceLayer::ConnectivityMgr().GetWiFiPAF()->AddPafSession(mRemoteId, discriminator);
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

+16-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,9 @@ 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(
946+
_GetWiFiPAF()->AddPafSession(PafInfoAccess::kAccSessionId, sessionInfo));
942947
InArgs.publish_id = publish_id;
943948

944949
g_signal_connect(mWpaSupplicant.iface, "nanreplied",
@@ -1461,7 +1466,8 @@ void ConnectivityManagerImpl::OnDiscoveryResult(GVariant * discov_info)
14611466
/*
14621467
Error Checking
14631468
*/
1464-
auto pPafInfo = _GetWiFiPAF()->GetPAFInfo(pPublishSSI->DevInfo);
1469+
WiFiPAFSession sessionInfo = { .discriminator = pPublishSSI->DevInfo};
1470+
auto pPafInfo = _GetWiFiPAF()->GetPAFInfo(PafInfoAccess::kAccDisc, sessionInfo);
14651471
if (pPafInfo == nullptr)
14661472
{
14671473
ChipLogError(DeviceLayer, "WiFi-PAF: DiscoveryResult, no valid session with discriminator: %u", pPublishSSI->DevInfo);
@@ -1559,7 +1565,8 @@ void ConnectivityManagerImpl::OnReplied(GVariant * reply_info)
15591565
SetupDiscriminator);
15601566
return;
15611567
}
1562-
auto pPafInfo = _GetWiFiPAF()->GetPAFInfo(publish_id);
1568+
WiFiPAFSession sessionInfo = { .id = publish_id };
1569+
auto pPafInfo = _GetWiFiPAF()->GetPAFInfo(PafInfoAccess::kAccSessionId, sessionInfo);
15631570
if (pPafInfo == nullptr)
15641571
{
15651572
ChipLogError(DeviceLayer, "WiFi-PAF: OnReplied, no valid session with publish_id: %d", publish_id);
@@ -1635,13 +1642,15 @@ void ConnectivityManagerImpl::OnNanReceive(GVariant * obj)
16351642
void ConnectivityManagerImpl::OnNanPublishTerminated(guint public_id, gchar * reason)
16361643
{
16371644
ChipLogProgress(Controller, "WiFi-PAF: Publish terminated (%u, %s)", public_id, reason);
1638-
_GetWiFiPAF()->RmPafSession(public_id);
1645+
WiFiPAFSession sessionInfo = { .id = public_id };
1646+
_GetWiFiPAF()->RmPafSession(PafInfoAccess::kAccSessionId, sessionInfo);
16391647
}
16401648

16411649
void ConnectivityManagerImpl::OnNanSubscribeTerminated(guint subscribe_id, gchar * reason)
16421650
{
16431651
ChipLogProgress(Controller, "WiFi-PAF: Subscription terminated (%u, %s)", subscribe_id, reason);
1644-
_GetWiFiPAF()->RmPafSession(subscribe_id);
1652+
WiFiPAFSession sessionInfo = { .id = subscribe_id };
1653+
_GetWiFiPAF()->RmPafSession(PafInfoAccess::kAccSessionId, sessionInfo);
16451654
/*
16461655
Indicate the connection event
16471656
*/
@@ -1699,7 +1708,8 @@ CHIP_ERROR ConnectivityManagerImpl::_WiFiPAFSubscribe(const uint16_t & connDiscr
16991708
mOnPafSubscribeComplete = onSuccess;
17001709
mOnPafSubscribeError = onError;
17011710

1702-
auto pPafInfo = _GetWiFiPAF()->GetPAFInfo(PafPublish_ssi.DevInfo);
1711+
WiFiPAFSession sessionInfo = { .discriminator = PafPublish_ssi.DevInfo};
1712+
auto pPafInfo = _GetWiFiPAF()->GetPAFInfo(PafInfoAccess::kAccDisc, sessionInfo);
17031713
if (pPafInfo != nullptr)
17041714
{
17051715
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

+125-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,144 @@ 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) &&
445+
(pPafSession->discriminator == UINT16_MAX))
446+
eSlotId = i;
426447
}
427-
}
428-
429-
WiFiPAFSession * WiFiPAFLayer::GetPAFInfo(NodeId nodeId)
430-
{
431-
for (WiFiPAFSession & PafInfoElm : PafInfoVect)
448+
// Add the session if available
449+
if (eSlotId != INVALID_PAF_SESSION_ID)
432450
{
433-
if (PafInfoElm.nodeId == nodeId)
451+
pPafSession = &mPafInfoVect[eSlotId];
452+
switch (accType)
434453
{
435-
return &PafInfoElm;
436-
}
454+
case PafInfoAccess::kAccNodeInfo:
455+
pPafSession->nodeId = SessionInfo.nodeId;
456+
pPafSession->discriminator = SessionInfo.discriminator;
457+
ChipLogProgress(WiFiPAF, "WiFiPAF: Add session with nodeId: %lu, disc: %x, sessions",
458+
SessionInfo.nodeId, SessionInfo.discriminator);
459+
return CHIP_NO_ERROR;
460+
case PafInfoAccess::kAccSessionId:
461+
pPafSession->id = SessionInfo.id;
462+
ChipLogProgress(WiFiPAF, "WiFiPAF: Add session with id: %u", SessionInfo.id);
463+
return CHIP_NO_ERROR;
464+
default:
465+
return CHIP_ERROR_NOT_IMPLEMENTED;
466+
};
437467
}
438-
return nullptr;
468+
ChipLogError(WiFiPAF, "WiFiPAF: No available space for the new sessions");
469+
return CHIP_ERROR_PROVIDER_LIST_EXHAUSTED;
439470
}
440471

441-
WiFiPAFSession * WiFiPAFLayer::GetPAFInfo(uint32_t id)
472+
CHIP_ERROR WiFiPAFLayer::RmPafSession(PafInfoAccess accType, WiFiPAFSession &SessionInfo)
442473
{
443-
for (WiFiPAFSession & PafInfoElm : PafInfoVect)
474+
uint8_t i;
475+
WiFiPAFSession *pPafSession;
476+
477+
for (i=0 ; i<WIFIPAF_LAYER_NUM_PAF_ENDPOINTS ; i++)
444478
{
445-
if (PafInfoElm.id == id)
479+
pPafSession = &mPafInfoVect[i];
480+
switch (accType)
446481
{
447-
return &PafInfoElm;
448-
}
482+
case PafInfoAccess::kAccSessionId:
483+
if (pPafSession->id == SessionInfo.id)
484+
{
485+
ChipLogProgress(WiFiPAF, "Removing session with id: %u", pPafSession->id);
486+
// Clear the slot
487+
cleanPafInfo(*pPafSession);
488+
return CHIP_NO_ERROR;
489+
}
490+
break;
491+
default:
492+
return CHIP_ERROR_NOT_IMPLEMENTED;
493+
};
449494
}
450-
return nullptr;
495+
ChipLogError(WiFiPAF, "No PAF session found");
496+
return CHIP_ERROR_NOT_FOUND;
451497
}
452498

453-
WiFiPAFSession * WiFiPAFLayer::GetPAFInfo(uint16_t discriminator)
499+
WiFiPAFSession * WiFiPAFLayer::GetPAFInfo(PafInfoAccess accType, WiFiPAFSession &SessionInfo)
454500
{
455-
for (WiFiPAFSession & PafInfoElm : PafInfoVect)
501+
uint8_t i;
502+
WiFiPAFSession *pPafSession = nullptr;
503+
504+
for (i=0 ; i<WIFIPAF_LAYER_NUM_PAF_ENDPOINTS ; i++)
456505
{
457-
if (PafInfoElm.discriminator == discriminator)
506+
pPafSession = &mPafInfoVect[i];
507+
switch (accType)
458508
{
459-
// Available session
460-
return &PafInfoElm;
461-
}
509+
case PafInfoAccess::kAccSessionId:
510+
if (pPafSession->id == SessionInfo.id)
511+
{
512+
return pPafSession;
513+
}
514+
break;
515+
case PafInfoAccess::kAccNodeId:
516+
if (pPafSession->nodeId == SessionInfo.nodeId)
517+
{
518+
return pPafSession;
519+
}
520+
break;
521+
case PafInfoAccess::kAccDisc:
522+
if (pPafSession->discriminator == SessionInfo.discriminator)
523+
{
524+
return pPafSession;
525+
}
526+
break;
527+
default:
528+
return nullptr;
529+
};
462530
}
531+
463532
return nullptr;
464533
}
465-
466534
} /* namespace WiFiPAF */
467535
} /* namespace chip */

0 commit comments

Comments
 (0)