--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetooth/btstack/secman/oobdata.h Fri Jan 15 08:13:17 2010 +0200
@@ -0,0 +1,144 @@
+// 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:
+//
+
+/**
+ @file
+ @internalComponent
+*/
+
+#ifndef OOBDATA_H
+#define OOBDATA_H
+
+#include <e32base.h>
+#include <bttypes.h>
+#include <bluetooth/hcicommandqueueclient.h>
+#include "internaltypes.h"
+
+class CPairingServer;
+class MHCICommandQueue;
+
+class COobDataManager;
+class CBTSecMan;
+
+
+NONSHARABLE_CLASS(TOobData)
+ {
+public:
+ TOobData(const TBTDevAddr& aAddr, const TBluetoothSimplePairingHash& aHashC, const TBluetoothSimplePairingRandomizer& aRandomizerR);
+
+ const TBTDevAddr& Addr() const;
+ const TBluetoothSimplePairingHash& HashC() const;
+ const TBluetoothSimplePairingRandomizer& RandomizerR() const;
+
+ static TBool IsForAddress(const TBTDevAddr* aAddr, const TOobData& aOobData);
+
+private:
+ TBTDevAddr iAddr;
+ TBluetoothSimplePairingHash iHashC;
+ TBluetoothSimplePairingRandomizer iRandomizerR;
+ };
+
+
+
+NONSHARABLE_CLASS(XOobLocalDataObserver)
+ {
+friend class COobDataManager;
+private:
+ virtual void XoldoLocalOobDataRetrieved(TInt aResult, const TBluetoothSimplePairingHash& aHash, const TBluetoothSimplePairingRandomizer& aRandomizer) = 0;
+
+private:
+ TBTDblQueLink iLink;
+ };
+
+
+NONSHARABLE_CLASS(COobDataManager)
+ : public CBase
+ , public MHCICommandQueueClient
+ {
+public:
+ static COobDataManager* NewL(CBTSecMan& aSecMan);
+ ~COobDataManager();
+
+ void SetHCICommandQueue(MHCICommandQueue& aCommandQueue);
+ void ClearHCICommandQueue();
+
+public:
+ void RefreshLocalOobData();
+ void ReadLocalOobData(XOobLocalDataObserver& aObserver);
+ void CancelReadLocalOobData(XOobLocalDataObserver& aObserver);
+ void ProvideRemoteOobDataL(const TOobData& aData);
+ void ClearRemoteOobData(const TBTDevAddr& aAddr);
+
+ TBool GetRemoteOobData(const TBTDevAddr& aAddr, TBluetoothSimplePairingHash& aHashC, TBluetoothSimplePairingRandomizer& aRandomizerR);
+ TBool HasRemoteOobData(const TBTDevAddr& aAddr);
+
+ MHCICommandQueue& CommandQueueL() const;
+
+private:
+ COobDataManager(CBTSecMan& aSecMan);
+ void ConstructL();
+ void MakeLocalOobRequestToController();
+ void MakeLocalOobRequestToControllerL();
+ void CompleteQueuedLocalOobObservers(TInt aResult);
+
+private: // from MHCICommandQueueClient
+ void MhcqcCommandEventReceived(const THCIEventBase& aEvent, const CHCICommandBase* aRelatedCommand);
+ void MhcqcCommandErrored(TInt aErrorCode, const CHCICommandBase* aCommand);
+
+private:
+ enum TLocalOobState
+ {
+ ELocalOobInvalid,
+ ELocalOobUpdating,
+ ELocalOobValid,
+ };
+
+
+private: // owned
+ // Remote OOB Data
+ RArray<TOobData> iOobDataFromPeers;
+
+ // Local OOB Data
+ TLocalOobState iLocalOobState;
+ TBluetoothSimplePairingHash iOobHashC;
+ TBluetoothSimplePairingRandomizer iOobRandomizerR;
+
+private: // unowned
+ TDblQue<XOobLocalDataObserver> iLocalOobObservers;
+ MHCICommandQueue* iCommandQueue;
+ CBTSecMan& iSecMan;
+ };
+
+
+_LIT(KOobDataPanicCat, "OobDataManager");
+enum TOobDataPanicCode
+ {
+ EOobDataPanicCommandQueueAlreadyProvided,
+ EOobDataPanicMultipleOobEntriesForDevice,
+ EOobDataPanicLocalOobObserverIsAlreadyQueuedDuringUpdate,
+ EOobDataPanicLocalOobObserverIsAlreadyQueuedWhileInvalid,
+ EOobDataPanicUnknownState,
+ EOobDataPanicUnexpectedHciCommandAssociated,
+ EOobDataPanicUnexpectedHciCommandAssociatedWithError,
+ EOobDataPanicUnexpectedHciEventReceived,
+ EOobDataPanicUnexpectedHciCommandCompleteEventReceived,
+ EOobDataPanicErrorWhenFindingOobDataForProvision,
+ EOobDataPanicErrorWhenFindingOobDataForClear,
+ EOobDataPanicErrorWhenFindingOobDataForGet,
+ EOobDataPanicErrorWhenFindingOobDataForHas,
+ };
+
+#endif // OOBDATA_H
+