bluetooth/btexample/testui/BTTextNotifiers/inc/BTTextNotifiers.h
changeset 0 29b1cd4cb562
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetooth/btexample/testui/BTTextNotifiers/inc/BTTextNotifiers.h	Fri Jan 15 08:13:17 2010 +0200
@@ -0,0 +1,913 @@
+// Copyright (c) 2000-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 BTTEXTNOTIFIERS_H
+#define BTTEXTNOTIFIERS_H
+
+#include <e32std.h>
+#include <e32base.h>
+#include <bt_sock.h>
+#include <btextnotifiers.h> // contains definitions of standard Bluetooth notifiers
+#include <btextnotifierspartner.h>
+#include <twintnotifier.h>
+#include <btdevice.h>
+#include <btmanclient.h> // contains definitions of standard Bluetooth secuirty notfiers (pre-SSP)
+#include <networking/panuiinterfaces.h> // for KBTPanDeviceSelectionNotifierUid
+
+const TUid KScreenOutputChannel ={0x00000666};
+
+/**
+The maximum number of devices to show on screen at once
+@internalComponent
+*/
+const TInt KMaxDeviceRows=12;
+
+typedef RPointerArray<CBTDevice> RBTDevices;
+
+enum TRegistryState
+/**
+The state of the registry lookup to get info about a device
+@internalComponent
+*/
+	{
+	EFinding,	//< finding device details in registry
+	EGetting,	//< getting PIN from console
+	};
+
+/**
+Class for containing console utility methods used by BTTextNotifiers.
+*/
+class BTTextNotifiersConsole
+	{
+public:
+	static CConsoleBase* AutoSizeNewL(const TDesC& aTitle, TSize aSize);
+	};
+	
+	
+	
+// -----------------
+// PIN Code Entry UI
+// -----------------
+
+/**
+Mixing for receiving notifications about PIN code entry from the UI.
+*/
+class MBTPinCodeEntryObserver
+	{
+public:
+	virtual void MbpceoPinInputComplete(const TBTPinCode& aPin, TInt aReason) = 0;	
+	};
+
+
+class CBTManPinNotifierEngine;
+
+/**
+Notifier to get a PIN for pairing - This is the legacy version (i.e. not SSP aware).
+@internalTechnology
+*/
+NONSHARABLE_CLASS(CBTManPinNotifier)
+	: public CBase
+	, public MNotifierBase2
+	, public MBTPinCodeEntryObserver
+	{
+public:
+	static CBTManPinNotifier* NewLC();
+	
+private: // from MNotifierBase2
+	void Release();
+	TNotifierInfo RegisterL();
+	TNotifierInfo Info() const;
+	TPtrC8 StartL(const TDesC8& aBuffer);
+	void StartL(const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage);
+	void Cancel();
+	TPtrC8 UpdateL(const TDesC8& aBuffer);
+	
+private: // from MBTPinCodeEntryObserver
+	void MbpceoPinInputComplete(const TBTPinCode& aPin, TInt aReason);
+
+private:
+	CBTManPinNotifier();
+	void ConstructL();
+	~CBTManPinNotifier();
+	
+private:
+	TNotifierInfo iInfo;
+	RMessage2 iMessage;
+	TInt iReplySlot;
+	TBool iNeedToCompleteMessage;
+	CBTManPinNotifierEngine* iEngine;
+	};
+
+
+#ifndef __BT_TEXT_NOTIFIERS_NO_SSP__
+/**
+Notifier to get a PIN for pairing - This is the SSP aware version.
+@internalTechnology
+*/
+NONSHARABLE_CLASS(CBTUIPinCodeEntry)
+	: public CBase
+	, public MNotifierBase2
+	, public MBTPinCodeEntryObserver
+	{
+public:
+	static CBTUIPinCodeEntry* NewLC();
+	
+private: // from MNotifierBase2
+	void Release();
+	TNotifierInfo RegisterL();
+	TNotifierInfo Info() const;
+	TPtrC8 StartL(const TDesC8& aBuffer);
+	void StartL(const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage);
+	void Cancel();
+	TPtrC8 UpdateL(const TDesC8& aBuffer);
+	
+private: // from MBTPinCodeEntryObserver
+	void MbpceoPinInputComplete(const TBTPinCode& aPin, TInt aReason);
+
+private:
+	CBTUIPinCodeEntry();
+	void ConstructL();
+	~CBTUIPinCodeEntry();
+	
+private:
+	TNotifierInfo iInfo;
+	RMessage2 iMessage;
+	TInt iReplySlot;
+	TBool iNeedToCompleteMessage;
+	CBTManPinNotifierEngine* iEngine;
+	};
+
+#endif // __BT_TEXT_NOTIFIERS_NO_SSP__
+
+
+class CHostResolverCacheProdder;
+class CBTGetPinFromConsole;
+
+NONSHARABLE_CLASS(CBTManPinNotifierEngine) : public CActive
+	{
+public:
+	static CBTManPinNotifierEngine* NewL(MBTPinCodeEntryObserver& aObserver);
+	~CBTManPinNotifierEngine();
+	
+	void StartLegacyPinEntryL(const TDesC8& aBuffer);
+	void StartPinEntryL(const TDesC8& aBuffer);
+	void Stop();
+	
+	TPtrC8 LegacyUpdateL(const TDesC8& aBuffer);
+	TPtrC8 UpdateL(const TDesC8& aBuffer);
+	
+	void HostResolverCacheInfoReceived(const TNameEntry& aResult);
+	void PinInputComplete(const TBTPinCode& aPin, TInt aReason);
+
+private:
+	CBTManPinNotifierEngine(MBTPinCodeEntryObserver& aObserver);
+	void DoStartPinEntryL();
+	void StoreNameUpdateL(const TDesC8& aBuffer);
+	void PerformNameUpdateL(TInt aResult);
+	
+private: // from CActive
+	void RunL();
+	void DoCancel();
+	void ConstructL();
+	
+private:
+	MBTPinCodeEntryObserver& iObserver;	// the notifier to signal when we have a PIN
+	
+	CHostResolverCacheProdder* iHostResolverCacheProdder;
+	CBTDevice* iDevice;			// the device for which we're prompting for a PIN
+	CBTGetPinFromConsole* iGetPinFromConsole;	// responsible for getting the PIN from the user
+	RBTRegServ iRegistry;
+	RBTRegistry iRegistryView;
+	TBTRegistrySearch iRegistrySearch;
+	TRegistryState iRegistryState;
+	CBTRegistryResponse* iResponse;
+	
+	TBTDevAddr						iDeviceAddress;
+	TBTDeviceName					iDeviceName;
+	TUint							iPasskeyMinLength;
+	TBool							iLocallyInitiated;
+	TBool							iStrongKeyRequired;
+	TUint							iRecommendedPasskeyMinLength;
+	};
+
+NONSHARABLE_CLASS(CHostResolverCacheProdder): public CActive
+/** 
+Get CoD from HostResolver class
+@internalComponent
+*/
+	{
+public:
+	static CHostResolverCacheProdder* NewL(CBTManPinNotifierEngine* aParent);
+	static CHostResolverCacheProdder* NewLC(CBTManPinNotifierEngine* aParent);
+	~CHostResolverCacheProdder();
+	TInt Start(const TBTDevAddr& aBDAddr);
+	
+private:
+	CHostResolverCacheProdder(CBTManPinNotifierEngine* aParent);
+	void DoCancel(){iHostResolver.Cancel();};
+	void RunL();
+
+private:	
+ 	CBTManPinNotifierEngine* iParent;
+	RHostResolver iHostResolver;
+	TNameEntry iResult;
+	TInquirySockAddr iAddr;
+	};
+
+/**
+Display a console and get a PIN response
+@internalComponent
+*/
+NONSHARABLE_CLASS(CBTGetPinFromConsole) 
+	: public CActive
+	{
+public:
+	static CBTGetPinFromConsole* NewL(CBTManPinNotifierEngine* aParent, const CBTDevice& aDevice,
+									  TUint aPasskeyMinLength, TBool aInternallyInitiated, TBool aStringKeyRequired, 
+									  TUint aRecommendedPasskeyMinLength);
+	~CBTGetPinFromConsole();
+	
+	void GetPinL();
+	void DeviceNameRetrieved(const TPtrC aName, TInt aResult);
+	void CoDRetrieved(TBTDeviceClass& aCoD);
+	
+private: // from CActive
+	void RunL();
+	void DoCancel();
+
+#ifdef __BT_TEXT_NOTIFIERS_AUTO__
+	static TInt AutoNotifierCallBack(TAny *aConsolePin);
+#endif
+	
+protected:
+	CBTGetPinFromConsole(CBTManPinNotifierEngine* aPtr, TUint aPasskeyMinLength, TBool aInternallyInitiated, TBool aStrongKeyRequired, TUint aRecommendedPasskeyMinLength);
+	
+private:
+	void ConstructL(const CBTDevice& aDevice);
+	void IssueRequestL();
+	
+private:
+	const CBTDevice* iDevice;
+	CBTManPinNotifierEngine* iParent;	// the class to notify when we have a PIN code
+	CConsoleBase* iConsole;	// console for interaction with the user
+	TBTPinCode iPin;
+	TInt iInsert;
+	TUint	iPasskeyMinLength;
+	TBool	iInternallyInitiated;
+	TBool	iStrongKeyRequired;
+	TUint	iRecommendedPasskeyMinLength;
+	
+#ifdef __BT_TEXT_NOTIFIERS_AUTO__
+	CAsyncCallBack* iAutoNotifierCallback;
+#endif
+	};
+
+class CBTManAuthNotifierEngine;
+NONSHARABLE_CLASS(CBTManAuthNotifier): public CBase, public MNotifierBase2
+	{
+public:
+	static CBTManAuthNotifier* NewLC();
+	~CBTManAuthNotifier();
+	void Release();
+	TNotifierInfo RegisterL();
+	TNotifierInfo Info() const;
+	TPtrC8 StartL(const TDesC8& aBuffer);
+	void StartL(const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage);
+	void Cancel();
+	TPtrC8 UpdateL(const TDesC8& aBuffer);
+	void AuthorisationComplete(TBool aDecision, TInt aReason);
+
+private:
+	void ConstructL();
+
+private:
+	TNotifierInfo iInfo;
+	CBTManAuthNotifierEngine* iEngine;
+	RMessage2 iMessage;
+	TInt iReplySlot;
+	TBool iNeedToCompleteMessage;
+	};
+	
+class CBTGetAuthFromConsole;
+NONSHARABLE_CLASS(CBTManAuthNotifierEngine) : public CActive
+/**
+The implementation of authorisation notifier plugin.
+@note Separate class to avoid CActive and MNotifyBase Cancel name clash.
+*/
+	{
+public:
+	static CBTManAuthNotifierEngine* NewL(CBTManAuthNotifier& aParent);
+	void StartAuthorisationL(const TDesC8& aBuffer);
+	void AuthorisationComplete(TBool aDecision, TInt aReason);
+	TPtrC8 UpdateL(const TDesC8& aBuffer);
+	~CBTManAuthNotifierEngine();
+	void Stop();
+
+private:
+	CBTManAuthNotifierEngine(CBTManAuthNotifier& aParent);
+	void RunL();
+	void DoCancel();
+
+private:
+	CBTGetAuthFromConsole* iGetAuthFromConsole;
+	RBTRegServ iRegistry;
+	RBTRegistry	iRegistryView;
+	TBTRegistrySearch iRegistrySearch;
+	TRegistryState iRegistryState;
+	CBTRegistryResponse* iResponse;
+	CBTDevice* iDevice;
+	TBTAuthorisationParamsPckg iAuthPckg;
+	CBTManAuthNotifier&	iParent;
+	};
+
+NONSHARABLE_CLASS(CBTGetAuthFromConsole) : public CActive
+/**
+Display a console and get a Y/N response
+@internalComponent
+*/
+	{
+public:
+	static CBTGetAuthFromConsole* NewL(CBTManAuthNotifierEngine* aParent, const CBTDevice& aDevice, TUid aUid);
+	static CBTGetAuthFromConsole* NewLC(CBTManAuthNotifierEngine* aParent, const CBTDevice& aDevice, TUid aUid);
+	~CBTGetAuthFromConsole();
+	void AuthoriseL();
+	void RunL();
+	void DoCancel();
+	void DeviceNameRetrieved(const TDesC& aName, TInt aResult);
+	
+#ifdef __BT_TEXT_NOTIFIERS_AUTO__
+	static TInt AutoNotifierCallBack(TAny *aConsoleAuth);
+#endif
+
+protected:
+	CBTGetAuthFromConsole(CBTManAuthNotifierEngine* aParent);
+	
+private:
+	TInt GetDeviceName(const TBTDevAddr& aBDAddr, TDes& aName);
+	void ConstructL(const CBTDevice& aDevice, TUid aUid);
+	void IssueRequest();
+	
+private:
+	TUid iServiceUid;
+	const CBTDevice* iDevice;
+	CBTManAuthNotifierEngine* iParent;
+	CConsoleBase* iConsole;
+
+#ifdef __BT_TEXT_NOTIFIERS_AUTO__
+	CAsyncCallBack* iAutoNotifierCallback;
+#endif
+	};
+
+NONSHARABLE_CLASS(CBTManDeviceSelectionNotifier)
+	: public CBase
+	, public MNotifierBase2
+	{
+public:
+	enum TUserResult
+		{
+		EScanStateSelected,
+		EScanStateContinue,
+		EScanStateCancelled
+		};
+public:
+	static CBTManDeviceSelectionNotifier* NewLC();
+	~CBTManDeviceSelectionNotifier();
+	TKeyCode GetResponseL(TRefByValue<const TDesC> aPrompt, TInt aWidth, TInt aHeight);
+	void GetAddressL(TBTDevAddr& aBDAddr);
+	void GetNameL(TBTDeviceName& aName);
+	//void GetClassL(TBTDeviceClass& aClass);
+	void DisplayErrorMessageL();
+	
+private: // from MNotifierBase2
+	void Release();
+	TNotifierInfo RegisterL();
+	TNotifierInfo Info() const;
+	TPtrC8 StartL(const TDesC8& aBuffer);
+	void StartL(const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage);
+	void Cancel();
+	TPtrC8 UpdateL(const TDesC8& aBuffer);
+	
+private:
+	CBTManDeviceSelectionNotifier();
+	void ConstructL();
+	TNotifierInfo iInfo;
+	TBTDevAddr iBDAddr;
+	TBTDeviceName iName;
+	TBTDeviceClass iClass;
+	};
+
+NONSHARABLE_CLASS(CBTManDeviceScanner): public CBase
+	{
+public:
+	enum TScanState
+		{
+		EScanStateUnfinished,
+		EScanStateCancelled,
+		EScanStateSelected
+		};
+public:
+	static CBTManDeviceScanner* NewL();
+	~CBTManDeviceScanner();
+	TBool GetByScanL(TBTDevAddr& aBDAddr, TBTDeviceName& aName, TBTDeviceClass& aClass);
+private:
+	CBTManDeviceScanner();
+	void ConstructL();
+
+	void NotifyErrorL(TRefByValue<const TDesC> aErrorNotification);
+	void ResetDeviceLists();
+	void EnsureConsoleExistsL();
+	void StartWaitMessageL();
+	void StopWaitMessage();
+	void AddDiscoveredDeviceL(RBTDevices& aDeviceArray, const TNameEntry& aNameEntry);
+//	void AddDiscoveredDeviceL(CBTDevInfoArray& aDevInfoArray, TNameEntry aNameEntry);
+	void SetupDeviceParams(RHostResolver aHr, TBTNamelessDevice& aDevInfo);
+	void SetupDeviceParams(const THostName& aName, TBTNamelessDevice& aDevInfo);
+	void PrintDiscoveredDevice(TUint aCount, CBTDevice& aDevice);
+	void RubOutWaitMessage();
+	void PrintDiscoveredDevice();
+	TBool DeviceNumberFromUserL(TBool allowMore);
+	void DisplayNoDeviceMessageL(TBool isMore);
+	void CheckUnfinishedL();
+
+private:
+	CConsoleBase*		iConsole;
+	CConsoleBase*		iWaitConsole;
+	TPtrC				iWaitMessage;
+	RBTDevices			iDevices;
+	RPointerArray<TNameEntry>		iNoNameDevices;
+//	CBTDevInfoArray* iDevsWithName;
+
+	TUint iPrintedCounter;
+	TUint iChosenDeviceIndex;
+	TUint iResultCountWithName;
+	TUint iResultCountNoName;
+	TBTDeviceResponseParams iDevPms;
+
+	TScanState iScanState;
+	};
+
+//
+// BT PAN profile device discovery notifier classes
+//
+
+class MBTPanDeviceSelectionNotify
+/**
+Notification interface from PAN device selection engine to the notifier
+@internalComponent
+*/
+	{
+public:
+	/**
+	Remote device(s) have been selected
+	*/
+	virtual void DeviceSelectionComplete(TBTDeviceList& aDevices) = 0;
+	virtual void DeviceSelectionError(TInt aError) = 0;
+	
+protected:
+	~MBTPanDeviceSelectionNotify() {};
+	};
+
+class CBTPanDeviceSelectionNotifierEngine;
+class CBTPanDeviceSelectionNotifier
+	: public CBase
+	, public MNotifierBase2
+	, private MBTPanDeviceSelectionNotify
+/**
+An example notifier for Bluetooth PAN profile device selection.  This allows the selection of 
+multiple devices.
+@internalTechnology
+*/
+	{
+public:
+	static CBTPanDeviceSelectionNotifier* NewLC();
+	~CBTPanDeviceSelectionNotifier();
+
+	// MNotifierBase2 methods
+	virtual void Release();
+	virtual TNotifierInfo RegisterL();
+	virtual TNotifierInfo Info() const;
+	virtual TPtrC8 StartL(const TDesC8& aBuffer);
+	virtual void StartL(const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage);
+	virtual void Cancel();
+	virtual TPtrC8 UpdateL(const TDesC8& aBuffer);
+
+	// MBTPanDeviceSelectionNotify methods
+	virtual void DeviceSelectionComplete(TBTDeviceList& aDevices);
+	virtual void DeviceSelectionError(TInt aError);
+
+private:
+	CBTPanDeviceSelectionNotifier();
+	void ConstructL();
+
+public:
+
+private:
+	TNotifierInfo iInfo;			//< Info about this notifier
+	RMessage2 iMessage;				//< Client message to signal when device selection is complete
+	TBool iMessageOutstanding;		//< Have we got a message outstanding that needs to be completed?
+	TInt iReplySlot;				//< The slot in the message that contains the reply buffer
+
+	CBTPanDeviceSelectionNotifierEngine* iEngine;	//< Engine to do the actual device scanning and selection
+	};
+
+class MBTPanDeviceDiscoveryNotify
+/**
+Notification interface for when new devices are discovered
+@internalComponent
+*/
+	{
+public:
+	/**
+	A new device has been found
+	@param aNewDevice Information about the new device
+	@note aNewDevice must be copied if you want to use it after this method completes
+	*/
+	virtual void NewDeviceFoundL(TNameRecord& aNewDevice) = 0;
+	
+	/**
+	The search for devices has completed
+	*/
+	virtual void DeviceSearchComplete(TInt aError) = 0;
+	
+protected:
+	~MBTPanDeviceDiscoveryNotify() {};
+	};
+
+class CBTPanDeviceSelectionNotifierDeviceDiscoverer;
+class CBTPanDeviceSelectionNotifierEngine : public CActive, private MBTPanDeviceDiscoveryNotify
+/**
+Engine to display discovered devices to the user and get them to select some
+@internalComponent
+*/
+	{
+public:
+	static CBTPanDeviceSelectionNotifierEngine* NewL(MBTPanDeviceSelectionNotify& aNotify);
+	~CBTPanDeviceSelectionNotifierEngine();
+	
+	void PromptForDevicesL(const TDesC8& aBuffer);
+	void Stop();
+	
+	// CActive methods
+	virtual void RunL();
+	virtual void DoCancel();
+
+	// MBTPanDeviceDiscoveryNotify methods
+	virtual void NewDeviceFoundL(TNameRecord& aNewDevice);
+	virtual void DeviceSearchComplete(TInt aError);
+
+private:
+	CBTPanDeviceSelectionNotifierEngine(MBTPanDeviceSelectionNotify& aNotify);
+	void ConstructL();
+	
+	void DisplayInstructions(TPtr& aDisplayBuf);
+	TInt DisplayDevice(TUint aDeviceNumber, TPtr& aDisplayBuf);
+	void Redraw();
+	void PackageSelectedDevicesAndCompleteNotifier();
+	void CompleteNotifierWithError(TInt aError);
+	void AbortEverything();
+	
+	TInt NumberOfDevicesSelected();
+
+public:
+
+private:
+	class TBTDeviceSelectionInfo
+		{
+	public:
+		TBool iSelected;
+		TNameRecord iNameRecord;
+		};
+		
+	RPointerArray<TBTDeviceSelectionInfo> iDevices;
+	
+	CConsoleBase* iConsole;
+	HBufC* iDisplayBuf;					//< Buffer into which to put text for display
+	TPtr iDisplayPtr;
+	TUint iCurrentlySelectedDevice;		//< The index of the device to which the cursor is currently pointing
+	TUint iPositionOfTopDeviceInList;	//< The index of the device which is at the top of the list currently being displayed to the user
+	TBool iDeviceSearchComplete;		//< Has the device search completed?
+	
+	TBool iAborting;					//< Flag to stop us going round in circles as AOs complete with KErrCancel and signal us
+	
+	CBTPanDeviceSelectionNotifierDeviceDiscoverer* iDeviceDiscoverer;
+	MBTPanDeviceSelectionNotify& iNotify;	//< the class to be notified when the devices have been selected
+	};
+	
+class CBTPanDeviceSelectionNotifierDeviceDiscoverer : public CActive
+/**
+Discovers remote devices and notifies the engine about them
+@internalComponent
+*/
+	{
+public:
+	static CBTPanDeviceSelectionNotifierDeviceDiscoverer* NewL(MBTPanDeviceDiscoveryNotify& iNotify);
+	~CBTPanDeviceSelectionNotifierDeviceDiscoverer();
+	
+	void StartDeviceDiscovery();
+	
+	// CActive methods
+	virtual void RunL();
+	virtual void DoCancel();
+
+private:
+	CBTPanDeviceSelectionNotifierDeviceDiscoverer(MBTPanDeviceDiscoveryNotify& iNotify);
+	void ConstructL();
+
+public:
+
+private:
+	RSocketServ iSockServ;					//< Socket server session
+	RHostResolver iHostResolver;			//< Host resolver to discover devices
+	TNameEntry iNameEntry;					//< Name entry into which to return results
+	TInquirySockAddr iInquiryAddr;			//< The inquiry address to use to discover devices
+
+	MBTPanDeviceDiscoveryNotify& iNotify;	//< The class to notify when a new device is found
+	};
+
+// forward declarations
+class CPbapAuthNotifierConsole;
+class CPbapAuthNotifierEngine;
+
+/**
+Console utility class
+@internalTechnology
+*/
+class PbapTextNotifiersConsole
+	{
+public:
+	static CConsoleBase* AutoSizeNewL(const TDesC& aTitle, TSize aSize);
+	};
+
+/**
+PBAP OBEX authentication notifier.
+Handles notification of a PBAP client challenge when attempting to connect to the server.
+@internalTechnology
+*/
+NONSHARABLE_CLASS(CPbapAuthNotifier): public CBase, public MNotifierBase2
+	{
+public:
+	static CPbapAuthNotifier* NewLC();
+	~CPbapAuthNotifier();
+
+	void PasswordInputComplete(const TDesC& aPassword, TInt aReason);
+
+public:
+	// from MNotifierBase2
+	void Release();
+	TNotifierInfo RegisterL();
+	TNotifierInfo Info() const;
+	TPtrC8 StartL(const TDesC8& aBuffer);
+	void StartL(const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage);
+	void Cancel();
+	TPtrC8 UpdateL(const TDesC8& aBuffer);
+
+private:
+	CPbapAuthNotifier();
+	void ConstructL();
+
+private:
+	TNotifierInfo iInfo;
+	RMessage2 iMessage;
+	TInt iReplySlot;
+	TBool iNeedToCompleteMessage;
+	CPbapAuthNotifierEngine* iEngine;
+	};
+
+NONSHARABLE_CLASS(CPbapAuthNotifierEngine) : public CActive
+	{
+public:
+	static CPbapAuthNotifierEngine* NewL(CPbapAuthNotifier& aParent);
+	~CPbapAuthNotifierEngine();
+
+	void StartPasswordEntryL(const TDesC8& aBuffer);
+	void Stop();
+	void PasswordInputComplete(const TDesC& aPassword, TInt aReason);
+
+private:
+	CPbapAuthNotifierEngine(CPbapAuthNotifier& aParent);
+	void ConstructL();
+
+	// from CActive
+	void RunL();
+	void DoCancel();
+
+private:
+	enum TRegistryState
+		{
+		EFinding,
+		EGetting
+		};
+private:
+	CPbapAuthNotifier& iParent;
+	CBTDevice* iDevice;
+	CPbapAuthNotifierConsole* iAuthConsole;
+	RBTRegServ iRegistry;
+	RBTRegistry iRegistryView;
+	TBTRegistrySearch iRegistrySearch;
+	TRegistryState iRegistryState;
+	CBTRegistryResponse* iResponse;
+	TPbapAuthNotifierParamsPckg iParamsPckg;
+	};
+
+/**
+Display a console and get a password response
+@internalComponent
+*/
+NONSHARABLE_CLASS(CPbapAuthNotifierConsole) : public CActive
+	{
+public:
+	static CPbapAuthNotifierConsole* NewL(CPbapAuthNotifierEngine* aParent, const CBTDevice& aDevice, const TDesC& aRealm, TBool aRealmTruncated);
+	~CPbapAuthNotifierConsole();
+
+	void GetPasswordL();
+
+#ifdef __PBAP_TEXT_NOTIFIERS_AUTO__
+	static TInt AutoNotifierCallBack(TAny *aConsolePin);
+#endif
+
+protected:
+	CPbapAuthNotifierConsole(CPbapAuthNotifierEngine* aParent, const TDesC& aRealm, TBool aRealmTruncated);
+
+private:
+	void ConstructL(const CBTDevice& aDevice);
+	void IssueRequestL();
+
+	// from CActive
+	void RunL();
+	void DoCancel();
+
+private:
+	CPbapAuthNotifierEngine* iParent;
+	const CBTDevice* iDevice;
+	TBufC<KPbapAuthRealmLength> iRealm;
+	TBool iRealmTruncated;
+	CConsoleBase* iConsole;
+	TBuf<KPbapAuthPasswordLength> iPassword;
+	
+#ifdef __PBAP_TEXT_NOTIFIERS_AUTO__
+	CAsyncCallBack* iAutoNotifierCallback;
+#endif
+	};
+
+
+#ifndef __BT_TEXT_NOTIFIERS_NO_SSP__
+
+class MBTGetNCResultFromConsoleObserver
+	{
+public:
+	virtual void NumericComparisonComplete(TBool aDecision, TInt aReason)=0;		
+	};
+	
+class CBTUINumericComparisonEngine;
+NONSHARABLE_CLASS(CBTUINumericComparison):	public CBase,
+											public MNotifierBase2,
+											public MBTGetNCResultFromConsoleObserver
+	{
+public:
+	static CBTUINumericComparison* NewLC();
+	~CBTUINumericComparison();
+	void Release();
+	TNotifierInfo RegisterL();
+	TNotifierInfo Info() const;
+	TPtrC8 StartL(const TDesC8& aBuffer);
+	void StartL(const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage);
+	void Cancel();
+	TPtrC8 UpdateL(const TDesC8& aBuffer);
+	
+	// MBTGetNCResultFromConsoleObserver
+	void NumericComparisonComplete(TBool aDecision, TInt aReason);
+
+private:
+	void ConstructL();
+
+private:
+	TNotifierInfo iInfo;
+	CBTUINumericComparisonEngine* iEngine;
+	RMessage2 iMessage;
+	TInt iReplySlot;
+	TBTNumericComparisonParamsPckg		iNumericComparisonParamsPckg;
+	TBool iNeedToCompleteMessage;
+	};
+
+NONSHARABLE_CLASS(CBTUINumericComparisonEngine) : public CActive
+	{
+public:
+	static CBTUINumericComparisonEngine* NewL(MBTGetNCResultFromConsoleObserver& aObserver);
+	static CBTUINumericComparisonEngine* NewLC(MBTGetNCResultFromConsoleObserver& aObserver);
+	~CBTUINumericComparisonEngine();
+
+	void DoComparisonL(TBTNumericComparisonParams& aNumericComparisonParams);
+	TPtrC8 UpdateL(const TDesC8& aBuffer);
+	void Stop();
+	void RunL();
+	void DoCancel();
+
+protected:
+	CBTUINumericComparisonEngine(MBTGetNCResultFromConsoleObserver& aObserver);
+	
+private:
+	void ConstructL();
+	void IssueRequest();
+	
+private:
+	MBTGetNCResultFromConsoleObserver& iObserver;
+	CConsoleBase* iConsole;
+	};
+
+
+// ----------------------
+// Passkey Entry UI (SSP)
+// ----------------------
+
+class MBTGetPasskeyResultFromConsoleObserver
+	{
+public:
+	virtual void PasskeyComplete(TInt aReason)=0;		
+	};
+
+
+class CBTUIPasskeyEntryEngine;
+
+NONSHARABLE_CLASS(CBTUIPasskeyEntry)
+	: public CBase
+	, public MNotifierBase2
+	, public MBTGetPasskeyResultFromConsoleObserver
+	{
+public:
+	static CBTUIPasskeyEntry* NewLC();
+	
+private: // from MNotifierBase2
+	void Release();
+	TNotifierInfo RegisterL();
+	TNotifierInfo Info() const;
+	TPtrC8 StartL(const TDesC8& aBuffer);
+	void StartL(const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage);
+	void Cancel();
+	TPtrC8 UpdateL(const TDesC8& aBuffer);
+		
+private: // from MBTGetPasskeyResultFromConsoleObserver
+	void PasskeyComplete(TInt aReason);
+
+private:
+	void ConstructL();
+	~CBTUIPasskeyEntry();
+
+private:
+	TNotifierInfo iInfo;
+	CBTUIPasskeyEntryEngine* iEngine;
+	RMessage2 iMessage;
+	TInt iReplySlot;
+	TBTPasskeyDisplayParamsPckg			iPasskeyDisplayParamsPckg;
+	TBTDevAddr iAddr;
+	TBTDeviceName iName;
+	TUint32 iNumericValue;
+	TBool iNeedToCompleteMessage;
+	};
+
+NONSHARABLE_CLASS(CBTUIPasskeyEntryEngine)
+	: public CActive
+	{
+public:
+	static CBTUIPasskeyEntryEngine* NewL(MBTGetPasskeyResultFromConsoleObserver& aObserver);
+	static CBTUIPasskeyEntryEngine* NewLC(MBTGetPasskeyResultFromConsoleObserver& aObserver);
+	~CBTUIPasskeyEntryEngine();
+
+	void DoPasskeyL(TBTPasskeyDisplayParams& aPasskeyParams);
+	TPtrC8 UpdateL(const TDesC8& aBuffer);
+	void Stop();
+	void RunL();
+	void DoCancel();
+
+private:
+	CBTUIPasskeyEntryEngine(MBTGetPasskeyResultFromConsoleObserver& aObserver);
+	void ConstructL();
+	void IssueRequest();
+	
+private:
+	MBTGetPasskeyResultFromConsoleObserver& iObserver;
+	CConsoleBase* iConsole;
+	};
+
+
+#endif // __BT_TEXT_NOTIFIERS_NO_SSP__
+
+
+
+#endif // BTTEXTNOTIFIERS_H