--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetooth/btstack/secman/simplepairingresult.cpp Fri Jan 15 08:13:17 2010 +0200
@@ -0,0 +1,199 @@
+// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#include "simplepairingresult.h"
+
+#include <bluetooth/logger.h>
+#ifdef __FLOG_ACTIVE
+_LIT8(KLogComponent, LOG_COMPONENT_PAIRING_SERVER);
+#endif
+
+
+
+CSimplePairingResultList* CSimplePairingResultList::NewL()
+ {
+ LOG_STATIC_FUNC
+ CSimplePairingResultList* self = new(ELeave) CSimplePairingResultList();
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+CSimplePairingResultList::CSimplePairingResultList()
+ : CBluetoothSecurityResultList(KSimplePairingResultListMaxSize)
+ {
+ LOG_FUNC
+ }
+
+CAuthenticationResultList* CAuthenticationResultList::NewL()
+ {
+ LOG_STATIC_FUNC
+ CAuthenticationResultList* self = new(ELeave) CAuthenticationResultList();
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+CAuthenticationResultList::CAuthenticationResultList()
+ : CBluetoothSecurityResultList(KAuthenticationResultListMaxSize)
+ {
+ LOG_FUNC
+ }
+
+CBluetoothSecurityResultList::CBluetoothSecurityResultList(TInt aMaxListCount)
+ : iResultList(_FOFF(TBluetoothSecurityResult, iLink))
+ , iListCount(0)
+ , iMaxListCount(aMaxListCount)
+ {
+ LOG_FUNC
+ }
+
+void CBluetoothSecurityResultList::ConstructL()
+ {
+ LOG_FUNC
+ }
+
+CBluetoothSecurityResultList::~CBluetoothSecurityResultList()
+ {
+ LOG_FUNC
+ while(!iResultList.IsEmpty())
+ {
+ TBluetoothSecurityResult* entry = iResultList.First();
+ entry->iLink.Deque();
+ delete entry;
+ }
+ }
+
+void CBluetoothSecurityResultList::NewResult(const TBTDevAddr& aDevAddr, TInt aResult)
+ {
+ LOG_FUNC
+ if(iObserver)
+ {
+ // Add the new entry.
+ TBluetoothSecurityResult* entry = new TBluetoothSecurityResult(aDevAddr, aResult);
+ if(!entry)
+ {
+ // OOM so we've lost a result - oh well we did our best.
+ return;
+ }
+ iResultList.AddLast(*entry);
+ ++iListCount;
+
+ // Trim the list if needed
+ while(iListCount > iMaxListCount)
+ {
+ entry = iResultList.First();
+ entry->iLink.Deque();
+ --iListCount;
+ delete entry;
+ }
+
+ // Complete any outstanding notifications.
+ if(iOutstandingNotification)
+ {
+ iOutstandingNotification = EFalse;
+ ReturnResult();
+ }
+ }
+
+ }
+
+void CBluetoothSecurityResultList::RegisterObserverL(MBluetoothSecurityResultObserver& aObserver)
+ {
+ LOG_FUNC
+ if(iObserver)
+ {
+ LEAVEL(KErrAlreadyExists);
+ }
+ iObserver = &aObserver;
+ }
+
+void CBluetoothSecurityResultList::ReleaseObserver(MBluetoothSecurityResultObserver& aObserver)
+ {
+ LOG_FUNC
+ if(iObserver == &aObserver)
+ {
+ iObserver = NULL;
+ //Clear the list so that any queued results are not returned to the observer during the next session
+ //(not doing this can cause results for a previous pairing request to be returned to a client-side app during the next pairing request).
+ while (!iResultList.IsEmpty())
+ {
+ TBluetoothSecurityResult* entry = iResultList.First();
+ entry->iLink.Deque();
+ delete entry;
+ }
+
+ //Set iListCount to zero.
+ iListCount=0;
+ }
+ }
+
+void CBluetoothSecurityResultList::ReturnResult()
+ {
+ LOG_FUNC
+ if(iListCount > 0)
+ {
+ __ASSERT_DEBUG(!iResultList.IsEmpty(), PANIC(KBluetoothSecListFaultCat, EResultListCountMismatch));
+ __ASSERT_DEBUG(iObserver, PANIC(KBluetoothSecListFaultCat, ENoBoundObserver));
+ TBluetoothSecurityResult* entry = iResultList.First();
+ __ASSERT_DEBUG(entry, PANIC(KBluetoothSecListFaultCat, ENullResultListEntry));
+ TInt err = iObserver->MbsroResult(entry->DeviceAddress(), entry->Result());
+ if(err == KErrNone)
+ {
+ entry->iLink.Deque();
+ --iListCount;
+ delete entry;
+ }
+ }
+ else
+ {
+ __ASSERT_DEBUG(!iOutstandingNotification, PANIC(KBluetoothSecListFaultCat, ENotificationAlreadyOutstanding));
+ iOutstandingNotification = ETrue;
+ }
+ }
+
+void CBluetoothSecurityResultList::CancelReturn()
+ {
+ LOG_FUNC
+ iOutstandingNotification = EFalse;
+ }
+
+
+//
+// TBluetoothSecurityResult
+//
+
+
+TBluetoothSecurityResult::TBluetoothSecurityResult(const TBTDevAddr& aDevAddr, TInt aResult)
+ : iDeviceAddress(aDevAddr)
+ , iResult(aResult)
+ {
+ LOG_FUNC
+ }
+
+const TBTDevAddr& TBluetoothSecurityResult::DeviceAddress() const
+ {
+ LOG_FUNC
+ return iDeviceAddress;
+ }
+
+TInt TBluetoothSecurityResult::Result() const
+ {
+ LOG_FUNC
+ return iResult;
+ }
+