/*
* Copyright (c) 2010 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:
*
*/
#ifndef BTNOTIFPAIRNOTIFIER_H
#define BTNOTIFPAIRNOTIFIER_H
#include <e32base.h>
#include <btmanclient.h>
#include "bluetoothdevicedialogs.h"
#include "btnotificationresult.h"
#include "bluetoothtrace.h"
class CBTNotifPairingManager;
class CBTNotifConnectionTracker;
class CBluetoothNotification;
/**
* Helper class for performing user prompt for pairing and authorization.
*
* The design of this class is focussed on structure and maintainability first.
* Duplicate (state) information is kept to a minimum. And memory usage comes
* before processing. Pairing is an infrequent operation, and this class is
* only instantiated when there is pairing-related processing, so extreme
* focus on memory or processing efficiency would have relatively little effect.
*
* Auth represents Authenticate and Authorize
*
* @since Symbian^4
*/
NONSHARABLE_CLASS( CBTNotifPairNotifier ) : public CBase,
public MBTNotificationResult
{
public:
/**
* Two-phased constructor.
* @param aConnection Pointer to the parent.
* @param aDevice Pointer to information of the remote device.
* aParam The owner of this object
*/
static CBTNotifPairNotifier* NewL( CBTNotifPairingManager& aParent );
/**
* Destructor.
*/
virtual ~CBTNotifPairNotifier();
/**
* Handle a notifier request for pairing with the remote device
* of this connection.
*
* @since Symbian^4
* @param aMessage The client of this request.
*/
void StartPairingNotifierL( const RMessage2& aMessage );
/**
* Update an outstanding request for this connection.
*
* @since Symbian^4
* @param aUid The UID of the notifier for this update.
* @param aParams The updated parameters for this request from the client.
*/
void UpdatePairingNotifierL( TInt aUid, const TDesC8& aParams );
/**
* Cancel an outstanding request for this connection.
*
* @since Symbian^4
* @param aUid The UID of the notifier for this pairing request.
*/
void CancelPairingNotifierL( TInt aUid );
// from base class MBTNotificationResult
/**
* From MBTNotificationResult.
* Handle an intermediate result from a user query.
* This function is called if the user query passes information
* back before it has finished i.e. is dismissed. The final acceptance/
* denial of a query is passed back in MBRNotificationClosed.
*
* @since Symbian^4
* @param aData the returned data. The actual format
* is dependent on the actual notifier.
*/
virtual void MBRDataReceived( CHbSymbianVariantMap& aData );
/**
* From MBTNotificationResult.
* The notification is finished. The resulting data (e.g. user input or
* acceptance/denial of the query) is passed back here.
*
* @since Symbian^4
* @param aErr KErrNone or one of the system-wide error codes.
* @param aData the returned data. The actual format
* is dependent on the actual notifier.
*/
virtual void MBRNotificationClosed( TInt aError, const TDesC8& aData );
private:
/**
* C++ default constructor.
*/
CBTNotifPairNotifier( CBTNotifPairingManager& aParent );
/**
* Symbian 2nd-phase constructor.
*/
void ConstructL();
void StartPairingUserInputL();
/**
* Process the user input and complete the outstanding pairing request.
*
* @since Symbian^4
* @param aError The result off the notification.
* @param aResult The user response; ETrue if the user accepted the query,
* otherwise EFalse.
* @param aData The data returned from the notification dialog.
*/
void CompletePairingNotifierL( TInt aError, TBool aResult, const TDesC8& aData );
/**
* Ask the user to allow incoming pairing.
*
* @since Symbian^4
*/
void StartAcceptPairingQueryL();
/**
* Process the user input and for accepting an incoming pairing and
* continue with the outstanding pairing request.
*
* @since Symbian^4
* @param aError The result of the notification.
* @param aResult The user response; ETrue if the user accepted the query,
* otherwise EFalse.
*/
void CompleteAcceptPairingQueryL( TInt aError, TBool aResult );
/**
* Parse the parameters of a request for pairing.
* This function also returns values to use for dialog config, and sets
* the operation state member variable (iOperation).
*
* @since Symbian^4
*/
void ParseNotifierReqParamsL();
/**
* Parse the parameters of a request for pairing using pin query.
*
* @since Symbian^4
* @param aLocallyInitiated On return, will be set to ETrue if the pairing
* was initiated by us.
* @param aMinPinLength On return, this will contain the minimum passcode length.
*/
void ParseLegacyPinCodeReqParamsL( TBool& aLocallyInitiated,
TInt& aMinPinLength, TBTDevAddr& aAddr );
/**
* Parse the parameters of a request for pairing using pin query.
*
* @since Symbian^4
* @param aLocallyInitiated On return, will be set to ETrue if the pairing
* was initiated by us.
* @param aMinPinLength On return, this will contain the minimum passcode length.
*/
void ParsePinCodeReqParamsL( TBool& aLocallyInitiated, TInt& aMinPinLength,
TBTDevAddr& aAddr);
/**
* Parse the parameters of a request for pairing using numeric comparison.
*
* @since Symbian^4
* @param aLocallyInitiated On return, will be set to ETrue if the pairing
* was initiated by us.
* @param aNumVal On return, this descriptor will contain the passkey to
* show to the user.
*/
void ParseNumericCompReqParamsL( TBool& aLocallyInitiated, TDes& aNumVal,
TBTDevAddr& aAddr);
/**
* Parse the parameters of a request for pairing using passkey display.
*
* @since Symbian^4
* @param aLocallyInitiated On return, will be set to ETrue if the pairing
* was initiated by us.
* @param aNumVal On return, this descriptor will contain the passkey to
* show to the user.
*/
void ParsePasskeyDisplayReqParamsL( TBool& aLocallyInitiated, TDes& aNumVal,
TBTDevAddr& aAddr );
/**
* Get a notification and configure it according to the current operation.
*
* @since Symbian^4
* @param aType The notification type.
* @param aResourceId Identifier for the resource to display.
*/
void PrepareNotificationL( TBluetoothDialogParams::TBTDialogType aType,
TBTDialogResourceId aResourceId );
/**
* Handle the result from a notification that is finished.
*
* @since Symbian^4
* @param aErr KErrNone or one of the system-wide error codes.
* @param aData The returned data. The actual format
* is dependent on the actual notifier.
*/
void NotificationClosedL( TInt aError, const TDesC8& aData );
/**
* Ask the user if he/she wants to block future connection requests.
*
* @since Symbian^4
*/
void LaunchBlockingQueryL();
private: // data
enum TNotifierState
{
EIncomingPairingAcceptconfirm,
EPairingInputConfirm,
};
CBTNotifPairingManager& iParent;
/**
* The client request.
*/
RMessage2 iNotifierMessage;
/**
* Buffer containing the parameters of the client message.
* Own.
*/
RBuf8 iParams;
/**
* Pointer to an outstanding user interaction.
* Not own.
*/
CBluetoothNotification* iNotification;
// will be set to ETrue if the pairing
// was initiated by us.
TBool iLocallyInitiated;
// contain a number to use in the pairing dialog.
TBuf<8> iDialogNumeric;
// the dialog type.
TBluetoothDialogParams::TBTDialogType iDialog;
// the resource id to be loaded to the dialog
TBTDialogResourceId iDialogResource;
// the address of the device with which the pairing is performed.
TBTDevAddr iRemote;
// contains the minimum requirements for pin
// code length. -1 indicates this is not PIn code pairing.
TInt iMinPinLength;
// Contains the device name provided in params
TBTDeviceName iCurrentDeviceName;
TNotifierState iState;
BTUNITTESTHOOK
};
#endif // BTNOTIFPAIRNOTIFIER_H