bluetooth/btexample/testui/BTUIAutoNotifiers/Inc/btuinotifiers.h
changeset 0 29b1cd4cb562
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetooth/btexample/testui/BTUIAutoNotifiers/Inc/btuinotifiers.h	Fri Jan 15 08:13:17 2010 +0200
@@ -0,0 +1,642 @@
+// 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
+ @test
+*/
+
+
+#ifndef BTUINOTIFIERS_H
+#define BTUINOTIFIERS_H
+
+#include <e32std.h>
+#include <e32base.h>
+#include <e32property.h>
+#include <eiknotapi.h>
+#include <btdevice.h>
+#include <btmanclient.h>
+
+/**
+UID of Publish & Subscribe variable category to control auto notifiers
+
+UID of the automatic authorisation RNotifier plugin - unused
+@publishedPartner
+@released
+*/
+const TUid KUidAutoNotifierCat = { 0x1020DBC4}; // unused
+
+/**
+UID range for Publish & Subscribe variables to control auto notifiers
+
+@internalTechnology
+*/
+const TUint KUidBluetoothTestPubSubKeyBase = 0x1027235E; //	Range of 10 values registered
+const TUint KUidBluetoothTestPubSubKeyBase2 = 0x10286508; // Range of 50 values registered
+/**
+UID for auto notifiers - Pin Code
+
+@internalTechnology
+*/
+const TUint KUidAutoPropertyPinCode = (KUidBluetoothTestPubSubKeyBase +0); 
+
+/**
+UID for auto notifiers - Authorise Accept
+
+@internalTechnology
+*/
+const TUint KUidAutoPropertyAuthoriseAccept = (KUidBluetoothTestPubSubKeyBase +1);
+
+/**
+UID for Pbap auto notifiers - Password
+
+@internalTechnology
+*/
+const TUint KUidPbapAutoNotifierPassword = (KUidBluetoothTestPubSubKeyBase + 2); 
+
+/**
+UID for Pbap auto notifiers - Executed Status
+
+@internalTechnology
+*/
+const TUint KUidPbapAutoNotifierExecuted = (KUidBluetoothTestPubSubKeyBase + 3);
+
+/**
+UID for PAN NAP Auth auto notifiers - Result (i.e., accept as NAP, GN or disallow)
+
+@internalTechnology
+*/
+const TUint KUidPanNapAutoNotifierResult = (KUidBluetoothTestPubSubKeyBase + 4); 
+
+/**
+UID for PAN NAP Auth auto notifiers - Executed Status
+
+@internalTechnology
+*/
+const TUint KUidPanNapAutoNotifierExecuted = (KUidBluetoothTestPubSubKeyBase + 5);
+
+/**
+Pin input completed - Status
+
+@internalTechnology
+*/
+const TUint KUidAuthenticationExecuted = (KUidBluetoothTestPubSubKeyBase + 6);
+
+/**
+Authorisation completed - Status
+
+*/
+const TUint KUidAuthorisationExecuted = (KUidBluetoothTestPubSubKeyBase + 7);
+
+
+/**
+Numeric value from the controller
+
+*/
+const TUint KUidSspNumericValue = (KUidBluetoothTestPubSubKeyBase + 8);
+
+/**
+Passkey value
+*/
+const TUint KUidSspPassKey = (KUidBluetoothTestPubSubKeyBase + 9);
+
+/**
+ * P&S key for identifying the type of notifier that has run.
+ */
+const TUint KUidLastNotifierTypeRun = (KUidBluetoothTestPubSubKeyBase2 + 1);
+
+/** 
+ * P&S key to hold the information whether the autonotifier should pass the authorization or not
+ * By default it will pass. 
+ */
+const TUint KUidSspAuthorisation = (KUidBluetoothTestPubSubKeyBase2 + 2);
+
+/** 
+ * P&S key to hold the error which should be issued from the notifiers. Currently it is mainly used
+ * for canceling the Notifiers.
+ * Offset 3 and 4 are used by PLM and LSTO tests so I am using offset 5
+ */
+const TUint KUidErrorNotifiers = (KUidBluetoothTestPubSubKeyBase2 + 5);
+
+/** 
+ * P&S key to hold the information about who initiated the authetication. 
+ */
+const TUint KUidLocallyInitiated = (KUidBluetoothTestPubSubKeyBase2 + 6);
+
+
+
+_LIT(KPanicCat, "BTAutoNotifiers");
+enum TPanicCode
+	{
+	ESynchronousStartWithNumericComparison,
+	ESynchronousStartWithPasskeyDisplay,
+	ESynchronousStartWithPinCodeEntry,
+	};
+
+
+enum TAutoNotifierType
+	{
+	ENone,
+	ESspPassKeyNotifier,
+	ESspNumericComparisonNotifier,
+	ELegacyPinCodeNotifier,
+	};
+
+class CBTUIAutoPasskeyNotifier:  public MEikSrvNotifierBase2
+	{
+public:
+	/*
+	 * Contructs a CBTUIPasskeyNotifier object.
+	 * @return CBTUIPasskeyNotifier which is the actual object.
+	 */
+	static CBTUIAutoPasskeyNotifier* NewL();
+	/*
+	 * Destructor
+	 */
+	virtual ~CBTUIAutoPasskeyNotifier();
+
+	//from MEikSrvNotifierBase2
+	/**
+	 * Called when all resources allocated by notifiers shoudl be freed.
+	 * @see MEikSrvNotifierBase2::Release()
+	 */
+	void Release();
+	/**
+	 * Called when a notifier is first loaded to allow any initial construction that is required.
+	 * @see MEikSrvNotifierBase2::RegisterL()
+	 */
+	TNotifierInfo RegisterL();
+	/**
+	 * Return the priority a notifier takes and the channels it acts on.  The return value may be varied 
+	 * at run-time.
+	 * @see MEikSrvNotifierBase2::Info()
+	 */
+	TNotifierInfo Info() const;
+	/**
+	 * Start the notifier with data aBuffer and return an initial response.
+	 * @see MEikSrvNotifierBase2::StartL(const TDesC8& aBuffer) 
+	 */
+	TPtrC8 StartL( const TDesC8& aBuffer );
+	/**
+	 * Start the notifier with data aBuffer.  aMessage should be completed when the notifier is deactivated.
+	 * May be called multiple times if more than one client starts the notifier.  The notifier is immediately
+	 * responsible for completing aMessage.
+	 * @see MEikSrvNotifierBase2::StartL(const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage)
+	 */
+	void StartL( const TDesC8& aBuffer, TInt aReplySlot,  const RMessagePtr2& aMessage );
+	/**
+	 * Update a currently active notifier with data aBuffer.
+	 * This is called as a result of a client-side call to the asynchronous 
+	 * function RNotifier::UpdateNotifierAndGetResponse(). 
+	 * @see MEikSrvNotifierBase2::UpdateL(const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage);
+	 */
+	void UpdateL(const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage);
+	/**
+	 * Update a currently active notifier with data aBuffer.
+	 * This is called as a result of a client-side call to the synchronous function RNotifier::UpdateNotifier().
+	 * @see MEikSrvNotifierBase2::UpdateL(const TDesC8& aBuffer)
+	 */
+	TPtrC8 UpdateL(const TDesC8& aBuffer);
+	/**
+	 * The notifier has been deactivated so resources can be freed and outstanding messages completed.
+	 * @see MEikSrvNotifierBase2::Cancel()
+	 */
+	void Cancel();	//implemented by CActive!!
+
+private:
+	/*
+	 * Constructor
+	 */
+	CBTUIAutoPasskeyNotifier();
+	/*
+	 * Reads and loads the resource file.
+	 */
+	void ConstructL();
+	/*
+	 * Calls SetActive() and starts the active object.
+	 */ 
+
+private:
+	
+	/**
+	* RMessagePtr2
+	*/
+	RMessagePtr2			iMessage;
+	
+	/**
+	* Return value from iMessage
+	*/
+	TInt iReplySlot;
+
+	/**
+	* Notifier info
+	*/
+	TNotifierInfo		iInfo;
+
+	void PinInputComplete(const TBTPinCode& aPin, TInt aReason);
+	
+	};
+
+
+class CBTUIAutoAuthNotifier:  public MEikSrvNotifierBase2
+	{
+public:
+	/*
+	 * Contructs a CBTUIPasskeyNotifier object.
+	 * @return CBTUIPasskeyNotifier which is the actual object.
+	 */
+	static CBTUIAutoAuthNotifier* NewL();
+	/*
+	 * Destructor
+	 */
+	virtual ~CBTUIAutoAuthNotifier();
+
+	//from MEikSrvNotifierBase2
+	/**
+	 * Called when all resources allocated by notifiers shoudl be freed.
+	 * @see MEikSrvNotifierBase2::Release()
+	 */
+	void Release();
+	/**
+	 * Called when a notifier is first loaded to allow any initial construction that is required.
+	 * @see MEikSrvNotifierBase2::RegisterL()
+	 */
+	TNotifierInfo RegisterL();
+	/**
+	 * Return the priority a notifier takes and the channels it acts on.  The return value may be varied 
+	 * at run-time.
+	 * @see MEikSrvNotifierBase2::Info()
+	 */
+	TNotifierInfo Info() const;
+	/**
+	 * Start the notifier with data aBuffer and return an initial response.
+	 * @see MEikSrvNotifierBase2::StartL(const TDesC8& aBuffer) 
+	 */
+	TPtrC8 StartL( const TDesC8& aBuffer );
+	/**
+	 * Start the notifier with data aBuffer.  aMessage should be completed when the notifier is deactivated.
+	 * May be called multiple times if more than one client starts the notifier.  The notifier is immediately
+	 * responsible for completing aMessage.
+	 * @see MEikSrvNotifierBase2::StartL(const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage)
+	 */
+	void StartL( const TDesC8& aBuffer, TInt aReplySlot,  const RMessagePtr2& aMessage );
+	/**
+	 * Update a currently active notifier with data aBuffer.
+	 * This is called as a result of a client-side call to the asynchronous 
+	 * function RNotifier::UpdateNotifierAndGetResponse(). 
+	 * @see MEikSrvNotifierBase2::UpdateL(const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage);
+	 */
+	void UpdateL(const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage);
+	/**
+	 * Update a currently active notifier with data aBuffer.
+	 * This is called as a result of a client-side call to the synchronous function RNotifier::UpdateNotifier().
+	 * @see MEikSrvNotifierBase2::UpdateL(const TDesC8& aBuffer)
+	 */
+	TPtrC8 UpdateL(const TDesC8& aBuffer);
+	/**
+	 * The notifier has been deactivated so resources can be freed and outstanding messages completed.
+	 * @see MEikSrvNotifierBase2::Cancel()
+	 */
+	void Cancel();	//implemented by CActive!!
+
+private:
+	/*
+	 * Constructor
+	 */
+	CBTUIAutoAuthNotifier();
+	/*
+	 * Reads and loads the resource file.
+	 */
+	void ConstructL();
+	/*
+	 * Calls SetActive() and starts the active object.
+	 */ 
+
+private:
+	
+	/**
+	* RMessagePtr2
+	*/
+	RMessagePtr2			iMessage;
+	
+	/**
+	* Return value from iMessage
+	*/
+	TInt iReplySlot;
+
+	/**
+	* Notifier info
+	*/
+	TNotifierInfo		iInfo;
+
+	void AuthorisationComplete(TInt aAuthorised);
+	
+	};
+
+
+class CPbapUIAutoAuthNotifier:  public MEikSrvNotifierBase2
+	{
+public:
+	/*
+	 * Contructs a CPbapUIAutoAuthNotifier object.
+	 * @return CPbapUIAutoAuthNotifier which is the actual object.
+	 */
+	static CPbapUIAutoAuthNotifier* NewL();
+	/*
+	 * Destructor
+	 */
+	virtual ~CPbapUIAutoAuthNotifier();
+
+	//from MEikSrvNotifierBase2
+	/**
+	 * Called when all resources allocated by notifiers shoudl be freed.
+	 * @see MEikSrvNotifierBase2::Release()
+	 */
+	void Release();
+	/**
+	 * Called when a notifier is first loaded to allow any initial construction that is required.
+	 * @see MEikSrvNotifierBase2::RegisterL()
+	 */
+	TNotifierInfo RegisterL();
+	/**
+	 * Return the priority a notifier takes and the channels it acts on.  The return value may be varied 
+	 * at run-time.
+	 * @see MEikSrvNotifierBase2::Info()
+	 */
+	TNotifierInfo Info() const;
+	/**
+	 * Start the notifier with data aBuffer and return an initial response.
+	 * @see MEikSrvNotifierBase2::StartL(const TDesC8& aBuffer) 
+	 */
+	TPtrC8 StartL( const TDesC8& aBuffer );
+	/**
+	 * Start the notifier with data aBuffer.  aMessage should be completed when the notifier is deactivated.
+	 * May be called multiple times if more than one client starts the notifier.  The notifier is immediately
+	 * responsible for completing aMessage.
+	 * @see MEikSrvNotifierBase2::StartL(const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage)
+	 */
+	void StartL( const TDesC8& aBuffer, TInt aReplySlot,  const RMessagePtr2& aMessage );
+	/**
+	 * Update a currently active notifier with data aBuffer.
+	 * This is called as a result of a client-side call to the asynchronous 
+	 * function RNotifier::UpdateNotifierAndGetResponse(). 
+	 * @see MEikSrvNotifierBase2::UpdateL(const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage);
+	 */
+	void UpdateL(const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage);
+	/**
+	 * Update a currently active notifier with data aBuffer.
+	 * This is called as a result of a client-side call to the synchronous function RNotifier::UpdateNotifier().
+	 * @see MEikSrvNotifierBase2::UpdateL(const TDesC8& aBuffer)
+	 */
+	TPtrC8 UpdateL(const TDesC8& aBuffer);
+	/**
+	 * The notifier has been deactivated so resources can be freed and outstanding messages completed.
+	 * @see MEikSrvNotifierBase2::Cancel()
+	 */
+	void Cancel();	//implemented by CActive!!
+
+private:
+	/*
+	 * Constructor
+	 */
+	CPbapUIAutoAuthNotifier();
+
+private:	
+	/**
+	* RMessagePtr2
+	*/
+	RMessagePtr2			iMessage;
+	
+	/**
+	* Return value from iMessage
+	*/
+	TInt iReplySlot;
+
+	/**
+	* Notifier info
+	*/
+	TNotifierInfo iInfo;
+
+	RProperty iProperty;
+	
+	void PasswordInputComplete(const TDesC& aPassword, TInt aReason);	
+	};
+
+
+class CPanNapAuthAutoNotifier:  public MEikSrvNotifierBase2
+	{
+public:
+	/*
+	 * Contructs a CPanNapAuthAutoNotifier object.
+	 * @return CPanNapAuthAutoNotifier which is the actual object.
+	 */
+	static CPanNapAuthAutoNotifier* NewL();
+	/*
+	 * Destructor
+	 */
+	virtual ~CPanNapAuthAutoNotifier();
+
+	//from MEikSrvNotifierBase2
+	/**
+	 * Called when all resources allocated by notifiers shoudl be freed.
+	 * @see MEikSrvNotifierBase2::Release()
+	 */
+	void Release();
+	/**
+	 * Called when a notifier is first loaded to allow any initial construction that is required.
+	 * @see MEikSrvNotifierBase2::RegisterL()
+	 */
+	TNotifierInfo RegisterL();
+	/**
+	 * Return the priority a notifier takes and the channels it acts on.  The return value may be varied 
+	 * at run-time.
+	 * @see MEikSrvNotifierBase2::Info()
+	 */
+	TNotifierInfo Info() const;
+	/**
+	 * Start the notifier with data aBuffer and return an initial response.
+	 * @see MEikSrvNotifierBase2::StartL(const TDesC8& aBuffer) 
+	 */
+	TPtrC8 StartL( const TDesC8& aBuffer );
+	/**
+	 * Start the notifier with data aBuffer.  aMessage should be completed when the notifier is deactivated.
+	 * May be called multiple times if more than one client starts the notifier.  The notifier is immediately
+	 * responsible for completing aMessage.
+	 * @see MEikSrvNotifierBase2::StartL(const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage)
+	 */
+	void StartL( const TDesC8& aBuffer, TInt aReplySlot,  const RMessagePtr2& aMessage );
+	/**
+	 * Update a currently active notifier with data aBuffer.
+	 * @see MEikSrvNotifierBase2::UpdateL(const TDesC8& aBuffer)
+	 */
+	TPtrC8 UpdateL(const TDesC8& aBuffer);
+	/**
+	 * The notifier has been deactivated so resources can be freed and outstanding messages completed.
+	 * @see MEikSrvNotifierBase2::Cancel()
+	 */
+	void Cancel();	//implemented by CActive!!
+
+private:
+	/*
+	 * Constructor
+	 */
+	CPanNapAuthAutoNotifier();
+
+private:	
+	/**
+	* RMessagePtr2
+	*/
+	RMessagePtr2			iMessage;
+	
+	/**
+	* Return value from iMessage
+	*/
+	TInt iReplySlot;
+
+	/**
+	* Notifier info
+	*/
+	TNotifierInfo iInfo;
+
+	RProperty iProperty;
+	
+	void PanNapNotifierComplete(TNapConnectionResult aResult, TInt aReason);	
+	};
+
+	
+	
+
+// ========================================
+// |                                      |
+// | Secure Simple Pairing Auto Notifiers |
+// v                                      v
+//	
+	
+NONSHARABLE_CLASS(CSSPNumericComparisionAutoNotifier)
+	: public CBase
+	, public MEikSrvNotifierBase2
+	{
+public:
+	static CSSPNumericComparisionAutoNotifier* NewL();
+
+private: // from MEikSrvNotifierBase2
+	void Release();
+	TNotifierInfo RegisterL();
+	TNotifierInfo Info() const;
+	TPtrC8 StartL( const TDesC8& aBuffer );
+	void StartL( const TDesC8& aBuffer, TInt aReplySlot,  const RMessagePtr2& aMessage );
+	/**
+	 * Update a currently active notifier with data aBuffer.
+	 * This is called as a result of a client-side call to the asynchronous 
+	 * function RNotifier::UpdateNotifierAndGetResponse(). 
+	 * @see MEikSrvNotifierBase2::UpdateL(const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage);
+	 */
+	void UpdateL(const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage);
+	/**
+	 * Update a currently active notifier with data aBuffer.
+	 * This is called as a result of a client-side call to the synchronous function RNotifier::UpdateNotifier().
+	 * @see MEikSrvNotifierBase2::UpdateL(const TDesC8& aBuffer)
+	 */
+	TPtrC8 UpdateL(const TDesC8& aBuffer);
+	
+	void Cancel();
+
+private:
+	CSSPNumericComparisionAutoNotifier();
+	~CSSPNumericComparisionAutoNotifier();
+	
+	void SSPNumericComparisonComplete(TInt aReason);	
+
+private:	
+	RMessagePtr2	iMessage;
+	TInt			iReplySlot;
+	TNotifierInfo	iInfo;
+	};
+	
+	
+
+NONSHARABLE_CLASS(CSSPPassKeyAutoNotifier)
+	: public CBase
+	, public MEikSrvNotifierBase2
+	{
+public:
+	static CSSPPassKeyAutoNotifier* NewL();
+
+private: // from MEikSrvNotifierBase2
+	void Release();
+	TNotifierInfo RegisterL();
+	TNotifierInfo Info() const;
+	TPtrC8 StartL( const TDesC8& aBuffer );
+	void StartL( const TDesC8& aBuffer, TInt aReplySlot,  const RMessagePtr2& aMessage );	
+	/**
+	 * Update a currently active notifier with data aBuffer.
+	 * This is called as a result of a client-side call to the asynchronous 
+	 * function RNotifier::UpdateNotifierAndGetResponse(). 
+	 * @see MEikSrvNotifierBase2::UpdateL(const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage);
+	 */
+	void UpdateL(const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage);
+	/**
+	 * Update a currently active notifier with data aBuffer.
+	 * This is called as a result of a client-side call to the synchronous function RNotifier::UpdateNotifier().
+	 * @see MEikSrvNotifierBase2::UpdateL(const TDesC8& aBuffer)
+	 */
+	TPtrC8 UpdateL(const TDesC8& aBuffer);
+	void Cancel();
+
+private:
+	CSSPPassKeyAutoNotifier();
+	~CSSPPassKeyAutoNotifier();
+	
+private:	
+	RMessagePtr2	iMessage;
+	TInt			iReplySlot;
+	TNotifierInfo	iInfo;
+	TBool iNeedToCompleteMessage;
+	};
+
+
+
+NONSHARABLE_CLASS(CBTUIAutoPinCodeNotifier)
+	: public CBase
+	, public MEikSrvNotifierBase2
+	{
+public:
+	static CBTUIAutoPinCodeNotifier* NewL();
+
+private: //from MEikSrvNotifierBase2
+	void Release();
+	TNotifierInfo RegisterL();
+	TNotifierInfo Info() const;
+	TPtrC8 StartL( const TDesC8& aBuffer );
+	void StartL( const TDesC8& aBuffer, TInt aReplySlot,  const RMessagePtr2& aMessage );
+	void UpdateL(const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage);
+	TPtrC8 UpdateL(const TDesC8& aBuffer);
+	void Cancel();
+
+private:
+	CBTUIAutoPinCodeNotifier();
+	~CBTUIAutoPinCodeNotifier();
+	
+	void PinInputComplete(const TBTPinCode& aPin, TInt aReason);
+
+private:
+	RMessagePtr2	iMessage;
+	TInt			iReplySlot;
+	TNotifierInfo	iInfo;
+	};
+	
+#endif //BTUINOTIFIERS_H
+