eapol/eapol_framework/eapol_symbian/am/eap_notifier/src/eap_auth_notifier.cpp
changeset 26 9abfd4f00d37
child 28 0e43dd645395
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eapol/eapol_framework/eapol_symbian/am/eap_notifier/src/eap_auth_notifier.cpp	Mon May 24 20:32:47 2010 +0300
@@ -0,0 +1,526 @@
+/*
+* 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: EAP Auth notitier implementation
+*
+*/
+
+// INCLUDE FILES
+#include <hb/hbcore/hbsymbianvariant.h>
+#include <e32debug.h> 
+#include <eapexpandedtype.h> 
+#include "eap_auth_notifier.h"
+#include "eap_auth_observer.h"
+#include "eap_auth_ui_strings.h"
+
+// CONSTANTS
+const TInt KVariableLength = 30; 
+const TInt KDlgTypeStrLength = 100; 
+const TInt KMaxAuthMethodLength = 50;
+
+_LIT( KUsername, "username");
+_LIT( KAuthmethod, "authmethod");
+_LIT( KPacservername, "pacservername");
+_LIT( KPacfilename, "pacfilename");
+_LIT( KEaptype, "eaptype");
+_LIT( KMessage, "messagetxt");
+_LIT( KFastprovwaitnote, "notificationtxt");
+
+_LIT(KTypeunamepwddlg, "com.nokia.eap.usernamepassworddialog/1.0");
+_LIT(KTypepwdquerydlg, "com.nokia.eap.passwordquerydialog/1.0");
+_LIT(KTypequerydlg, "com.nokia.eap.querydialog/1.0"); 
+_LIT(KTypeinstallpacquerydlg, "com.nokia.eap.fastinstallpacquerydialog/1.0");
+_LIT(KTypepacstorepwquerydlg, "com.nokia.eap.fastpacstorepwquerydialog/1.0"); 
+_LIT(KTypemasterkeyquerydlg, "com.nokia.eap.fastcreatemasterkeyquerydialog/1.0"); 
+_LIT(KTypepacfilepwquerydlg, "com.nokia.eap.fastpacfilepwquerydialog/1.0"); 
+_LIT(KTypeprovwaitnotedlg, "com.nokia.eap.fastprovwaitnotedialog/1.0"); 
+_LIT(KTypepwdexpnotedlg,"com.nokia.eap.mschapv2passwordexpirednotedialog/1.0"); 
+_LIT(KTypeoldpwddlg,"com.nokia.eap.mschapv2oldpassworddialog/1.0"); 
+_LIT(KTypenewpwddlg,"com.nokia.eap.mschapv2newpassworddialog/1.0"); 
+_LIT(KTypeshowprovnotsuccdlg,"com.nokia.eap.fastshowprovnotsuccessnotedialog/1.0"); 
+
+// ---------------------------------------------------------
+// CEapAuthNotifier::CEapAuthNotifier()
+// ---------------------------------------------------------
+//
+CEapAuthNotifier::CEapAuthNotifier( MNotificationCallback& aClient )
+    :iClient(aClient)
+    {
+    RDebug::Print(_L("CEapAuthNotifier::CEapAuthNotifier DLL++") );
+    
+    iCompleted = EFalse; 
+    iCancelled = EFalse;
+    iObserver = NULL;
+    iDialog = NULL;
+    }
+
+// ---------------------------------------------------------
+// CEapAuthNotifier::~CEapAuthNotifier()
+// ---------------------------------------------------------
+//
+CEapAuthNotifier::~CEapAuthNotifier()
+    {
+    RDebug::Print(_L("CEapAuthNotifier::~CEapAuthNotifier") );
+    
+    if ( iCancelled == EFalse )
+        {
+        iCompleted = ETrue;
+        if ( iDialog )
+            { 
+            iDialog->Cancel();
+            }
+        }
+    if ( iDialog )
+        { 
+        delete iDialog;
+        }
+    if ( iObserver )
+        {
+        delete iObserver;
+        }
+    }
+
+// ---------------------------------------------------------
+// CEapAuthNotifier* CEapAuthNotifier::NewL
+// ---------------------------------------------------------
+//
+EXPORT_C CEapAuthNotifier* CEapAuthNotifier::NewL( MNotificationCallback& aClient )
+    {
+    RDebug::Print(_L("CEapAuthNotifier::NewL"));
+    
+    CEapAuthNotifier* self = new ( ELeave ) CEapAuthNotifier( aClient );
+    return self;
+    }
+
+// ---------------------------------------------------------
+// void CEapAuthNotifier::StartL
+// ---------------------------------------------------------
+//
+EXPORT_C void CEapAuthNotifier::StartL( 
+    EEapNotifierType aType,
+    TEapDialogInfo* aEapInfo, 
+    TEapExpandedType& aEapType )
+    {
+    TInt error;
+    TBuf<KDlgTypeStrLength> EapNtfType;
+    TBuf16<KMaxAuthMethodLength> authMethod;
+               
+    RDebug::Print(_L("CEapAuthNotifier::StartL: ENTERING"));
+    
+    iCancelled = EFalse;
+    iCompleted = EFalse;
+    iEapInfo = aEapInfo;
+        
+    // Observer is needed in order to get the user inputs
+    iObserver = CEapAuthObserver::NewL( this, aType ); 
+    iDialog = CHbDeviceDialogSymbian::NewL();
+        
+    //The variant map is needed to construct the dialog correctly,
+    CHbSymbianVariantMap* map = CHbSymbianVariantMap::NewL();
+    CleanupStack::PushL( map );
+    
+    if ( aType == EEapNotifierTypeLEapUsernamePasswordDialog )
+        {
+        authMethod.Copy(EapAuthUiStrings::Leap);
+        SetUsernamePasswordDataL( aEapInfo, aEapType, map, authMethod );  
+        EapNtfType.Copy(KTypeunamepwddlg);
+        }   
+    else if ( aType == EEapNotifierTypeGTCUsernamePasswordDialog )
+        {
+        authMethod.Copy(EapAuthUiStrings::EapGtc);
+        SetUsernamePasswordDataL( aEapInfo, aEapType, map, authMethod );  
+        EapNtfType.Copy(KTypeunamepwddlg);
+        }   
+    else if ( aType == EEapNotifierTypePapUsernamePasswordDialog )
+        {
+        authMethod.Copy(EapAuthUiStrings::Pap);
+        SetUsernamePasswordDataL( aEapInfo, aEapType, map, authMethod );    
+        EapNtfType.Copy(KTypeunamepwddlg);
+        }   
+    else if ( aType == EEapNotifierTypeEapMsChapV2UsernamePasswordDialog )
+        {
+        authMethod.Copy(EapAuthUiStrings::EapMschapv2);
+        SetUsernamePasswordDataL( aEapInfo, aEapType, map, authMethod );   
+        EapNtfType.Copy(KTypeunamepwddlg);
+        }   
+    else if ( aType == EEapNotifierTypeMsChapV2UsernamePasswordDialog )
+        {
+        authMethod.Copy(EapAuthUiStrings::Mschapv2);
+        SetUsernamePasswordDataL( aEapInfo, aEapType, map, authMethod );  
+        EapNtfType.Copy(KTypeunamepwddlg);
+        }   
+    else if ( aType == EEapNotifierTypeGTCSecurIDPasscodeQueryUidDialog )
+        {
+        authMethod.Copy(EapAuthUiStrings::EapGtc);
+        SetPasswordQueryDataL( aEapType, map, authMethod );
+        EapNtfType.Copy(KTypepwdquerydlg);
+        }
+    else if ( aType == EEapNotifierTypePapChallengeReplyQueryDialog )
+        {
+        authMethod.Copy(EapAuthUiStrings::Pap);
+        SetPasswordQueryDataL( aEapType, map, authMethod );
+        EapNtfType.Copy(KTypepwdquerydlg);
+        }
+    else if ( aType == EEapNotifierTypeGTCQueryDialog )
+        {
+        authMethod.Copy(EapAuthUiStrings::EapGtc);
+        SetQueryDialogDataL( aEapInfo, map, authMethod );
+        EapNtfType.Copy(KTypequerydlg);
+        }
+    else if ( aType == EEapNotifierTypePapAuthQueryDialog )
+        {
+        authMethod.Copy(EapAuthUiStrings::Pap);
+        SetQueryDialogDataL( aEapInfo, map, authMethod );
+        EapNtfType.Copy(KTypequerydlg);    
+        }
+    else if ( aType == EEapNotifierTypeFastInstallPacQueryDialog ) 
+        {
+        SetFastInstallPacQueryDialogDataL( aEapInfo, map );
+        EapNtfType.Copy(KTypeinstallpacquerydlg);
+        }
+    else if ( aType == EEapNotifierTypeFastPacStorePwQueryDialog ) 
+        {
+        EapNtfType.Copy(KTypepacstorepwquerydlg);
+        }
+    else if ( aType == EEapNotifierTypeFastCreateMasterkeyQueryDialog ) 
+        {
+        EapNtfType.Copy(KTypemasterkeyquerydlg);
+        }
+    else if ( aType == EEapNotifierTypeFastPacFilePwQueryDialog ) 
+        {
+        setFastPacFileQueryPwDialogDataL( aEapInfo, map );
+        EapNtfType.Copy(KTypepacfilepwquerydlg);
+        }
+    else if ( aType == EEapNotifierTypeFastStartAuthProvWaitNote )
+        {
+        setFastProvWaitNoteDialogDataL( map, ETrue );
+        EapNtfType.Copy(KTypeprovwaitnotedlg);
+        }
+    else if ( aType == EEapNotifierTypeFastStartUnauthProvWaitNote )
+        {
+        setFastProvWaitNoteDialogDataL( map, EFalse );
+        EapNtfType.Copy(KTypeprovwaitnotedlg);
+        }   
+    else if ( aType == EEapNotifierTypeMsChapV2PasswordExpiredNote )
+        {
+        EapNtfType.Copy(KTypepwdexpnotedlg);
+        }
+    else if ( aType == EEapNotifierTypeMsChapV2OldPasswordDialog )
+        {
+        EapNtfType.Copy(KTypeoldpwddlg);
+        }
+    else if ( aType == EEapNotifierTypeMsChapV2NewPasswordDialog )
+        {
+        EapNtfType.Copy(KTypenewpwddlg);
+        }
+    else if ( aType == EEapNotifierTypeFastShowProvNotSuccessNote )
+        {
+        EapNtfType.Copy(KTypeshowprovnotsuccdlg);
+        }
+
+    RDebug::Print(_L("CEapAuthNotifier::StartL: Load the Dialog NOW!"));
+    // Show the dialog.
+    error = iDialog->Show( EapNtfType, *map, iObserver );
+    
+    User::LeaveIfError( error );
+    CleanupStack::PopAndDestroy( map ); 
+
+    RDebug::Print(_L("CEapAuthNotifier::StartL: LEAVING") );
+    }
+
+// ---------------------------------------------------------
+// void CEapAuthNotifier::setFastProvWaitNoteDialogDataL
+// ---------------------------------------------------------
+//
+void CEapAuthNotifier::setFastProvWaitNoteDialogDataL(    
+    CHbSymbianVariantMap* aMap,
+    TBool aAuthProvWaitNote )
+    {
+    TInt error;  
+    TBuf<KVariableLength> key(KFastprovwaitnote);
+            
+    CHbSymbianVariant *variant = NULL;
+    
+    RDebug::Print(_L("CEapAuthNotifier::setFastProvWaitNoteDialogData: ENTERING"));    
+
+    //Create the variant data information for the plugin
+    variant =  CHbSymbianVariant::NewL ( &aAuthProvWaitNote, CHbSymbianVariant::EBool );
+    CleanupStack::PushL( variant );
+    error = aMap->Add( key, variant);
+    User::LeaveIfError( error );
+    CleanupStack::Pop( variant ); // map's cleanup sequence handles variant.
+    
+    RDebug::Print(_L("CEapAuthNotifier::setFastProvWaitNoteDialogData: LEAVING") );
+    }
+
+// ---------------------------------------------------------
+// void CEapAuthNotifier::setFastPacFileQueryPwDialogDataL
+// ---------------------------------------------------------
+//
+void CEapAuthNotifier::setFastPacFileQueryPwDialogDataL( 
+    TEapDialogInfo* aEapInfo,
+    CHbSymbianVariantMap* aMap )
+    {
+    TInt error;  
+    TBuf<KVariableLength> key(KPacfilename);
+                
+    CHbSymbianVariant *variant = NULL;
+        
+    RDebug::Print(_L("CEapAuthNotifier::setFastPacFileQueryPwDialogData: ENTERING"));
+        
+    if( 0 < aEapInfo->iUidata.Length() )
+       {
+       RDebug::Print(_L("CEapAuthNotifier::setFastPacFileQueryPwDialogData: Set PAC filename"));
+       RDebug::Print(_L("CEapAuthNotifier::setFastPacFileQueryPwDialogData: aEapInfo->iUidata = %S\n"), &aEapInfo->iUidata );
+        
+       // Create the variant data information for the plugin
+       variant =  CHbSymbianVariant::NewL ( &aEapInfo->iUidata, CHbSymbianVariant::EDes );
+       CleanupStack::PushL( variant );
+       error = aMap->Add( key, variant);
+       User::LeaveIfError( error );
+       CleanupStack::Pop( variant ); // map's cleanup sequence handles variant.
+       }     
+    RDebug::Print(_L("CEapAuthNotifier::setFastPacFileQueryPwDialogData: LEAVING") );
+    }
+
+// --------------------------------------------------------------
+// void CEapAuthNotifier::SetFastInstallPacQueryDialogDataL
+// --------------------------------------------------------------
+//
+void CEapAuthNotifier::SetFastInstallPacQueryDialogDataL( 
+    TEapDialogInfo* aEapInfo,
+    CHbSymbianVariantMap* aMap )
+    {
+    TInt error;  
+    TBuf<KVariableLength> key(KPacservername);
+            
+    CHbSymbianVariant *variant = NULL;
+    
+    RDebug::Print(_L("CEapAuthNotifier::SetFastInstallPacQueryDialogData: ENTERING"));
+    
+    if( 0 < aEapInfo->iUidata.Length() )
+        {
+        RDebug::Print(_L("CEapAuthNotifier::SetFastInstallPacQueryDialogData: Set PAC Install server name"));
+        RDebug::Print(_L("CEapAuthNotifier::SetFastInstallPacQueryDialogData: aEapInfo->iUidata = %S\n"), &aEapInfo->iUidata );
+    
+        // Create the variant data information for the plugin
+        variant =  CHbSymbianVariant::NewL ( &aEapInfo->iUidata, CHbSymbianVariant::EDes );
+        CleanupStack::PushL( variant );
+        error = aMap->Add( key, variant);
+        User::LeaveIfError( error );
+        CleanupStack::Pop( variant ); // map's cleanup sequence handles variant.
+        }     
+    RDebug::Print(_L("CEapAuthNotifier::SetFastInstallPacQueryDialogData: LEAVING") );
+    }
+
+// ---------------------------------------------------------
+// void CEapAuthNotifier::SetQueryDialogDataL
+// ---------------------------------------------------------
+//
+void CEapAuthNotifier::SetQueryDialogDataL( 
+    TEapDialogInfo* aEapInfo,
+    CHbSymbianVariantMap* aMap,
+    TDesC& aAuthMethod )
+    {
+    TInt error;  
+    TBuf<KVariableLength> key1(KAuthmethod);
+    TBuf<KVariableLength> key2(KMessage);
+        
+    CHbSymbianVariant *variant = NULL;
+    
+    RDebug::Print(_L("CEapAuthNotifier::SetQueryDialogData: ENTERING"));
+    
+    RDebug::Print(_L("CEapAuthNotifier::SetQueryDialogData: Set Heading"));
+    RDebug::Print(_L("CEapAuthNotifier::SetQueryDialogData: aAuthMethod = %S\n"), &aAuthMethod );
+    
+    // Create the variant data information for the plugin
+    variant =  CHbSymbianVariant::NewL ( &aAuthMethod, CHbSymbianVariant::EDes );
+    CleanupStack::PushL( variant );
+    error = aMap->Add( key1, variant);
+    User::LeaveIfError( error );
+    CleanupStack::Pop( variant ); // map's cleanup sequence handles variant.
+            
+    if( 0 < aEapInfo->iUidata.Length() )
+        {
+        RDebug::Print(_L("CEapAuthNotifier::SetQueryDialogData: Set user input message"));
+        RDebug::Print(_L("CEapAuthObserver::SetQueryDialogData: aEapInfo->iUidata = %S\n"), &aEapInfo->iUidata );
+    
+        // Create the variant data information for the plugin
+        variant =  CHbSymbianVariant::NewL ( &aEapInfo->iUidata, CHbSymbianVariant::EDes );
+        CleanupStack::PushL( variant );
+        error = aMap->Add( key2, variant);
+        User::LeaveIfError( error );
+        CleanupStack::Pop( variant ); // map's cleanup sequence handles variant.
+        }     
+    RDebug::Print(_L("CEapAuthNotifier::SetQueryDialogData: LEAVING") );
+    }
+
+// ---------------------------------------------------------
+// void CEapAuthNotifier::SetPasswordQueryDataL
+// ---------------------------------------------------------
+//
+void CEapAuthNotifier::SetPasswordQueryDataL( 
+    TEapExpandedType& aEapType,
+    CHbSymbianVariantMap* aMap,
+    TDesC& aAuthMethod )
+    {
+    TInt error;  
+    TBuf<KVariableLength> key2(KAuthmethod);
+    TBuf<KVariableLength> key3(KEaptype);
+    CHbSymbianVariant *variant = NULL;
+    
+    RDebug::Print(_L("CEapAuthNotifier::SetPasswordQueryData: ENTERING"));
+    RDebug::Print(_L("CEapAuthNotifier::SetPasswordQueryData: aAuthMethod = %S\n"), &aAuthMethod );
+    
+    //Create the variant data information for the plugin
+    //Set authentication method 
+    variant =  CHbSymbianVariant::NewL ( &aAuthMethod, CHbSymbianVariant::EDes );
+    CleanupStack::PushL( variant );
+    error = aMap->Add( key2, variant);
+    User::LeaveIfError( error );
+    CleanupStack::Pop( variant ); // map's cleanup sequence handles variant.
+    
+    //Set EAP type
+    variant =  CHbSymbianVariant::NewL( &aEapType.GetValue(), CHbSymbianVariant::EBinary );
+    CleanupStack::PushL( variant );
+    error = aMap->Add( key3, variant);
+    User::LeaveIfError( error );
+    CleanupStack::Pop( variant ); // map's cleanup sequence handles variant.    
+    RDebug::Print(_L("CEapAuthNotifier::SetPasswordQueryData: LEAVING") );
+    }
+
+// ---------------------------------------------------------
+// void CEapAuthNotifier::SetUsernamePasswordDataL
+// ---------------------------------------------------------
+//
+void CEapAuthNotifier::SetUsernamePasswordDataL( 
+    TEapDialogInfo* aEapInfo,
+    TEapExpandedType& aEapType,
+    CHbSymbianVariantMap* aMap,
+    TDesC& aAuthMethod )
+    {
+    TInt error;  
+    TBuf<KVariableLength> key1(KUsername);
+    TBuf<KVariableLength> key2(KAuthmethod);
+    TBuf<KVariableLength> key3(KEaptype);
+    CHbSymbianVariant *variant = NULL;
+    
+    RDebug::Print(_L("CEapAuthNotifier::SetUsernamePasswordData: ENTERING"));
+    RDebug::Print(_L("CEapAuthNotifier::SetUsernamePasswordData: aAuthMethod = %S\n"), &aAuthMethod );
+    
+    //Create the variant data information for the plugin
+    //Set authentication method 
+    variant =  CHbSymbianVariant::NewL ( &aAuthMethod, CHbSymbianVariant::EDes );
+    CleanupStack::PushL( variant );
+    error = aMap->Add( key2, variant);
+    User::LeaveIfError( error );
+    CleanupStack::Pop( variant ); // map's cleanup sequence handles variant.
+    
+    //Set username
+    if( 0 < aEapInfo->iUsername.Length() )
+        {
+        RDebug::Print(_L("CEapAuthNotifier::SetUsernamePasswordData: Set default UNAME"));
+        RDebug::Print(_L("CEapAuthNotifier::SetUsernamePasswordData: iEapInfo->iUsername = %S\n"), &iEapInfo->iUsername );
+    
+        // Create the variant data information for the plugin
+        variant =  CHbSymbianVariant::NewL ( &aEapInfo->iUsername, CHbSymbianVariant::EDes );
+        CleanupStack::PushL( variant );
+        error = aMap->Add( key1, variant);
+        User::LeaveIfError( error );
+        CleanupStack::Pop( variant ); // map's cleanup sequence handles variant.
+        }
+
+    //Set EAP type
+    variant =  CHbSymbianVariant::NewL( &aEapType.GetValue(), CHbSymbianVariant::EBinary );
+    CleanupStack::PushL( variant );
+    error = aMap->Add( key3, variant);
+    User::LeaveIfError( error );
+    CleanupStack::Pop( variant ); // map's cleanup sequence handles variant.    
+    RDebug::Print(_L("CEapAuthNotifier::SetUsernamePasswordData: LEAVING") );
+    }
+
+// --------------------------------------------------------------------------
+// void CEapAuthNotifier::SetSelectedUnameAndPwd( TEapDialogInfo& aEapInfo )
+// --------------------------------------------------------------------------
+//
+void CEapAuthNotifier::SetSelectedUnameAndPwd ( TEapDialogInfo& aEapInfo )
+    {
+    RDebug::Print(_L("CEapAuthNotifier::SetSelectedUnameAndPwd"));
+    
+    iEapInfo->iIsIdentityQuery = aEapInfo.iIsIdentityQuery;
+    if ( aEapInfo.iIsIdentityQuery ) 
+        {
+        iEapInfo->iUsername = aEapInfo.iUsername;
+        RDebug::Print(_L("CEapAuthNotifier::SetSelectedUnameAndPwd: iEapInfo->iUsername = %S\n"), &iEapInfo->iUsername );
+        }
+    
+    iEapInfo->iPasswordPromptEnabled = aEapInfo.iPasswordPromptEnabled;
+    if ( aEapInfo.iPasswordPromptEnabled )
+        {
+        iEapInfo->iPassword = aEapInfo.iPassword;
+        RDebug::Print(_L("CEapAuthNotifier::SetSelectedUnameAndPwd: iEapInfo->iPassword = %S\n"), &iEapInfo->iPassword );
+        }    
+    }
+
+// ------------------------------------------------------------------------------
+// void CEapAuthNotifier::SetSelectedPassword( TEapDialogInfo& aPasswordInfo )
+// ------------------------------------------------------------------------------
+//
+void CEapAuthNotifier::SetSelectedPassword ( TEapDialogInfo& aPasswordInfo )
+    {
+    RDebug::Print(_L("CEapAuthNotifier::SetSelectedPassword"));
+
+    iEapInfo->iPassword = aPasswordInfo.iPassword;
+    RDebug::Print(_L("CEapAuthNotifier::SetSelectedPassword: iEapInfo->iPassword = %S\n"), &iEapInfo->iPassword );    
+    }
+
+// ---------------------------------------------------------------------------------
+// void CEapAuthNotifier::SetSelectedOldPassword( TEapDialogInfo& aPasswordInfo )
+// ---------------------------------------------------------------------------------
+//
+void CEapAuthNotifier::SetSelectedOldPassword ( TEapDialogInfo& aPasswordInfo )
+    {
+    RDebug::Print(_L("CEapAuthNotifier::SetSelectedOldPassword"));
+
+    iEapInfo->iOldPassword = aPasswordInfo.iOldPassword;
+    RDebug::Print(_L("CEapAuthNotifier::SetSelectedOldPassword: iEapInfo->iOldPassword = %S\n"), &iEapInfo->iOldPassword );    
+    }
+
+// ---------------------------------------------------------
+// void CEapAuthNotifier::CompleteL( TInt aStatus )
+// ---------------------------------------------------------
+//
+void CEapAuthNotifier::CompleteL( TInt aStatus )
+    {
+    RDebug::Print(_L("CEapAuthNotifier::CompleteL"));
+    
+    if ( !iCompleted )
+        {
+        iClient.DlgComplete(aStatus);
+        iCompleted = ETrue;
+        }
+    }
+
+// ------------------------------------------------------------
+// void CEapAuthNotifier::Cancel()
+// ------------------------------------------------------------
+//
+EXPORT_C void CEapAuthNotifier::Cancel()
+    {
+    RDebug::Print(_L("CEapAuthNotifier::Cancel"));
+    if ( !iCompleted )
+        {
+        iCancelled = ETrue;
+        iDialog->Cancel();
+        }
+    }