pkiutilities/securitydialognotifier/src/securitydialogs.cpp
author hgs
Fri, 20 Aug 2010 11:27:50 +0300
changeset 48 6ed68423b759
permissions -rw-r--r--
201033_01
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
48
6ed68423b759 201033_01
hgs
parents:
diff changeset
     1
/*
6ed68423b759 201033_01
hgs
parents:
diff changeset
     2
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
6ed68423b759 201033_01
hgs
parents:
diff changeset
     3
* All rights reserved.
6ed68423b759 201033_01
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
6ed68423b759 201033_01
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
6ed68423b759 201033_01
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
6ed68423b759 201033_01
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
6ed68423b759 201033_01
hgs
parents:
diff changeset
     8
*
6ed68423b759 201033_01
hgs
parents:
diff changeset
     9
* Initial Contributors:
6ed68423b759 201033_01
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
6ed68423b759 201033_01
hgs
parents:
diff changeset
    11
*
6ed68423b759 201033_01
hgs
parents:
diff changeset
    12
* Contributors:
6ed68423b759 201033_01
hgs
parents:
diff changeset
    13
*
6ed68423b759 201033_01
hgs
parents:
diff changeset
    14
* Description:  CSecurityDialogs active object
6ed68423b759 201033_01
hgs
parents:
diff changeset
    15
*
6ed68423b759 201033_01
hgs
parents:
diff changeset
    16
*/
6ed68423b759 201033_01
hgs
parents:
diff changeset
    17
6ed68423b759 201033_01
hgs
parents:
diff changeset
    18
#include "securitydialogs.h"            // CSecurityDialogs
6ed68423b759 201033_01
hgs
parents:
diff changeset
    19
#include "securitydialogstrace.h"       // TRACE macro
6ed68423b759 201033_01
hgs
parents:
diff changeset
    20
6ed68423b759 201033_01
hgs
parents:
diff changeset
    21
6ed68423b759 201033_01
hgs
parents:
diff changeset
    22
// ======== MEMBER FUNCTIONS ========
6ed68423b759 201033_01
hgs
parents:
diff changeset
    23
6ed68423b759 201033_01
hgs
parents:
diff changeset
    24
// ---------------------------------------------------------------------------
6ed68423b759 201033_01
hgs
parents:
diff changeset
    25
// CSecurityDialogs::NewL()
6ed68423b759 201033_01
hgs
parents:
diff changeset
    26
// ---------------------------------------------------------------------------
6ed68423b759 201033_01
hgs
parents:
diff changeset
    27
//
6ed68423b759 201033_01
hgs
parents:
diff changeset
    28
CSecurityDialogs* CSecurityDialogs::NewL(  TBool& aIsDeleted )
6ed68423b759 201033_01
hgs
parents:
diff changeset
    29
    {
6ed68423b759 201033_01
hgs
parents:
diff changeset
    30
    return new( ELeave ) CSecurityDialogs( aIsDeleted );
6ed68423b759 201033_01
hgs
parents:
diff changeset
    31
    }
6ed68423b759 201033_01
hgs
parents:
diff changeset
    32
6ed68423b759 201033_01
hgs
parents:
diff changeset
    33
// ---------------------------------------------------------------------------
6ed68423b759 201033_01
hgs
parents:
diff changeset
    34
// CSecurityDialogs::~CSecurityDialogs()
6ed68423b759 201033_01
hgs
parents:
diff changeset
    35
// ---------------------------------------------------------------------------
6ed68423b759 201033_01
hgs
parents:
diff changeset
    36
//
6ed68423b759 201033_01
hgs
parents:
diff changeset
    37
CSecurityDialogs::~CSecurityDialogs()
6ed68423b759 201033_01
hgs
parents:
diff changeset
    38
    {
6ed68423b759 201033_01
hgs
parents:
diff changeset
    39
    TRACE( "CSecurityDialogs::~CSecurityDialogs, begin" );
6ed68423b759 201033_01
hgs
parents:
diff changeset
    40
    Cancel();
6ed68423b759 201033_01
hgs
parents:
diff changeset
    41
    iServer.Close();
6ed68423b759 201033_01
hgs
parents:
diff changeset
    42
    delete iInputBuffer;
6ed68423b759 201033_01
hgs
parents:
diff changeset
    43
    iInputBuffer = NULL;
6ed68423b759 201033_01
hgs
parents:
diff changeset
    44
    delete iOutputBuffer;
6ed68423b759 201033_01
hgs
parents:
diff changeset
    45
    iOutputBuffer = NULL;
6ed68423b759 201033_01
hgs
parents:
diff changeset
    46
    iIsDeleted = ETrue;
6ed68423b759 201033_01
hgs
parents:
diff changeset
    47
    TRACE( "CSecurityDialogs::~CSecurityDialogs, end" );
6ed68423b759 201033_01
hgs
parents:
diff changeset
    48
    }
6ed68423b759 201033_01
hgs
parents:
diff changeset
    49
6ed68423b759 201033_01
hgs
parents:
diff changeset
    50
// ---------------------------------------------------------------------------
6ed68423b759 201033_01
hgs
parents:
diff changeset
    51
// CSecurityDialogs::StartLD()
6ed68423b759 201033_01
hgs
parents:
diff changeset
    52
// ---------------------------------------------------------------------------
6ed68423b759 201033_01
hgs
parents:
diff changeset
    53
//
6ed68423b759 201033_01
hgs
parents:
diff changeset
    54
void CSecurityDialogs::StartLD( const TDesC8& aBuffer, TInt aReplySlot,
6ed68423b759 201033_01
hgs
parents:
diff changeset
    55
        const RMessagePtr2& aMessage )
6ed68423b759 201033_01
hgs
parents:
diff changeset
    56
    {
6ed68423b759 201033_01
hgs
parents:
diff changeset
    57
    TRACE( "CSecurityDialogs::StartLD, begin" );
6ed68423b759 201033_01
hgs
parents:
diff changeset
    58
    User::LeaveIfError( iServer.Connect() );
6ed68423b759 201033_01
hgs
parents:
diff changeset
    59
6ed68423b759 201033_01
hgs
parents:
diff changeset
    60
    const TInt* ptr = reinterpret_cast< const TInt* >( aBuffer.Ptr() );
6ed68423b759 201033_01
hgs
parents:
diff changeset
    61
    iOperation = static_cast< TSecurityDialogOperation >( *ptr & KSecurityDialogOperationMask );
6ed68423b759 201033_01
hgs
parents:
diff changeset
    62
    iReplySlot = aReplySlot;
6ed68423b759 201033_01
hgs
parents:
diff changeset
    63
6ed68423b759 201033_01
hgs
parents:
diff changeset
    64
    TRACE( "CSecurityDialogs::StartLD, message 0x%08x", iMessagePtr.Handle() );
6ed68423b759 201033_01
hgs
parents:
diff changeset
    65
    iMessagePtr = aMessage;
6ed68423b759 201033_01
hgs
parents:
diff changeset
    66
6ed68423b759 201033_01
hgs
parents:
diff changeset
    67
    TRACE( "CSecurityDialogs::StartLD, iOperation=%d", iOperation );
6ed68423b759 201033_01
hgs
parents:
diff changeset
    68
    __ASSERT_DEBUG( iOutputBuffer == NULL, User::Invariant() );
6ed68423b759 201033_01
hgs
parents:
diff changeset
    69
    TInt outputBufLen = 0;
6ed68423b759 201033_01
hgs
parents:
diff changeset
    70
    switch( iOperation )
6ed68423b759 201033_01
hgs
parents:
diff changeset
    71
        {
6ed68423b759 201033_01
hgs
parents:
diff changeset
    72
        case ESecureConnection:
6ed68423b759 201033_01
hgs
parents:
diff changeset
    73
        case ESignText:
6ed68423b759 201033_01
hgs
parents:
diff changeset
    74
            iOutputBuffer = new( ELeave ) TCTTokenObjectHandleBuf;
6ed68423b759 201033_01
hgs
parents:
diff changeset
    75
            outputBufLen = sizeof( TCTTokenObjectHandleBuf );
6ed68423b759 201033_01
hgs
parents:
diff changeset
    76
            break;
6ed68423b759 201033_01
hgs
parents:
diff changeset
    77
        case EEnterPIN:
6ed68423b759 201033_01
hgs
parents:
diff changeset
    78
        case EEnablePIN:
6ed68423b759 201033_01
hgs
parents:
diff changeset
    79
        case EDisablePIN:
6ed68423b759 201033_01
hgs
parents:
diff changeset
    80
            iOutputBuffer = new( ELeave ) TPINValueBuf;
6ed68423b759 201033_01
hgs
parents:
diff changeset
    81
            outputBufLen = sizeof( TPINValueBuf );
6ed68423b759 201033_01
hgs
parents:
diff changeset
    82
            break;
6ed68423b759 201033_01
hgs
parents:
diff changeset
    83
        case EChangePIN:
6ed68423b759 201033_01
hgs
parents:
diff changeset
    84
        case EUnblockPIN:
6ed68423b759 201033_01
hgs
parents:
diff changeset
    85
            iOutputBuffer = new( ELeave ) TTwoPINOutputBuf;
6ed68423b759 201033_01
hgs
parents:
diff changeset
    86
            outputBufLen = sizeof( TTwoPINOutputBuf );
6ed68423b759 201033_01
hgs
parents:
diff changeset
    87
            break;
6ed68423b759 201033_01
hgs
parents:
diff changeset
    88
        case EPINBlocked:
6ed68423b759 201033_01
hgs
parents:
diff changeset
    89
        case ETotalBlocked:
6ed68423b759 201033_01
hgs
parents:
diff changeset
    90
            break;
6ed68423b759 201033_01
hgs
parents:
diff changeset
    91
        case EUnblockPINInClear:
6ed68423b759 201033_01
hgs
parents:
diff changeset
    92
            iOutputBuffer = new( ELeave ) TUnblockPINInClearOutputBuf;
6ed68423b759 201033_01
hgs
parents:
diff changeset
    93
            outputBufLen = sizeof( TUnblockPINInClearOutputBuf );
6ed68423b759 201033_01
hgs
parents:
diff changeset
    94
            break;
6ed68423b759 201033_01
hgs
parents:
diff changeset
    95
        case EServerAuthenticationFailure:
6ed68423b759 201033_01
hgs
parents:
diff changeset
    96
            iOutputBuffer = new( ELeave ) TServerAuthenticationFailureOutputBuf;
6ed68423b759 201033_01
hgs
parents:
diff changeset
    97
            outputBufLen = sizeof( TServerAuthenticationFailureOutputBuf );
6ed68423b759 201033_01
hgs
parents:
diff changeset
    98
            break;
6ed68423b759 201033_01
hgs
parents:
diff changeset
    99
        default:
6ed68423b759 201033_01
hgs
parents:
diff changeset
   100
            User::Leave( KErrNotSupported );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   101
            break;
6ed68423b759 201033_01
hgs
parents:
diff changeset
   102
        }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   103
6ed68423b759 201033_01
hgs
parents:
diff changeset
   104
    __ASSERT_DEBUG( iInputBuffer == NULL, User::Invariant() );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   105
    iInputBuffer = aBuffer.AllocL();
6ed68423b759 201033_01
hgs
parents:
diff changeset
   106
6ed68423b759 201033_01
hgs
parents:
diff changeset
   107
    if( iOutputBuffer )
6ed68423b759 201033_01
hgs
parents:
diff changeset
   108
        {
6ed68423b759 201033_01
hgs
parents:
diff changeset
   109
        iOutputPtr.Set( static_cast< TUint8* >( iOutputBuffer ), outputBufLen, outputBufLen );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   110
        iServer.SecurityDialogOperation( iOperation, *iInputBuffer, iOutputPtr, iStatus );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   111
        }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   112
    else
6ed68423b759 201033_01
hgs
parents:
diff changeset
   113
        {
6ed68423b759 201033_01
hgs
parents:
diff changeset
   114
        User::Leave( KErrNotSupported );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   115
        }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   116
    SetActive();
6ed68423b759 201033_01
hgs
parents:
diff changeset
   117
    TRACE( "CSecurityDialogs::StartLD, end" );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   118
    }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   119
6ed68423b759 201033_01
hgs
parents:
diff changeset
   120
// ---------------------------------------------------------------------------
6ed68423b759 201033_01
hgs
parents:
diff changeset
   121
// CSecurityDialogs::RunL()
6ed68423b759 201033_01
hgs
parents:
diff changeset
   122
// ---------------------------------------------------------------------------
6ed68423b759 201033_01
hgs
parents:
diff changeset
   123
//
6ed68423b759 201033_01
hgs
parents:
diff changeset
   124
void CSecurityDialogs::RunL()
6ed68423b759 201033_01
hgs
parents:
diff changeset
   125
    {
6ed68423b759 201033_01
hgs
parents:
diff changeset
   126
    TRACE( "CSecurityDialogs::RunL, iStatus.Int()=%d", iStatus.Int() );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   127
    TInt error = iStatus.Int();
6ed68423b759 201033_01
hgs
parents:
diff changeset
   128
    User::LeaveIfError( error );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   129
    __ASSERT_DEBUG( iOutputPtr.Ptr(), User::Invariant() );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   130
    iMessagePtr.WriteL( iReplySlot, iOutputPtr );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   131
6ed68423b759 201033_01
hgs
parents:
diff changeset
   132
    TRACE( "CSecurityDialogs::RunL, completing message 0x%08x", iMessagePtr.Handle() );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   133
    iMessagePtr.Complete( error );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   134
6ed68423b759 201033_01
hgs
parents:
diff changeset
   135
    TRACE( "CSecurityDialogs::RunL, deleting this" );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   136
    delete this;
6ed68423b759 201033_01
hgs
parents:
diff changeset
   137
    TRACE( "CSecurityDialogs::RunL, end" );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   138
    }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   139
6ed68423b759 201033_01
hgs
parents:
diff changeset
   140
// ---------------------------------------------------------------------------
6ed68423b759 201033_01
hgs
parents:
diff changeset
   141
// CSecurityDialogs::DoCancel()
6ed68423b759 201033_01
hgs
parents:
diff changeset
   142
// ---------------------------------------------------------------------------
6ed68423b759 201033_01
hgs
parents:
diff changeset
   143
//
6ed68423b759 201033_01
hgs
parents:
diff changeset
   144
void CSecurityDialogs::DoCancel()
6ed68423b759 201033_01
hgs
parents:
diff changeset
   145
    {
6ed68423b759 201033_01
hgs
parents:
diff changeset
   146
    TRACE( "CSecurityDialogs::DoCancel, begin" );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   147
    iServer.CancelOperation();
6ed68423b759 201033_01
hgs
parents:
diff changeset
   148
    if( !iMessagePtr.IsNull() )
6ed68423b759 201033_01
hgs
parents:
diff changeset
   149
        {
6ed68423b759 201033_01
hgs
parents:
diff changeset
   150
        TRACE( "CSecurityDialogs::DoCancel, completing message 0x%08x", iMessagePtr.Handle() );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   151
        iMessagePtr.Complete( KErrCancel );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   152
        }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   153
    TRACE( "CSecurityDialogs::DoCancel(), end" );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   154
    }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   155
6ed68423b759 201033_01
hgs
parents:
diff changeset
   156
// ---------------------------------------------------------------------------
6ed68423b759 201033_01
hgs
parents:
diff changeset
   157
// CSecurityDialogs::RunError()
6ed68423b759 201033_01
hgs
parents:
diff changeset
   158
// ---------------------------------------------------------------------------
6ed68423b759 201033_01
hgs
parents:
diff changeset
   159
//
6ed68423b759 201033_01
hgs
parents:
diff changeset
   160
TInt CSecurityDialogs::RunError( TInt aError )
6ed68423b759 201033_01
hgs
parents:
diff changeset
   161
    {
6ed68423b759 201033_01
hgs
parents:
diff changeset
   162
    TRACE( "CSecurityDialogs::RunError, aError=%d", aError );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   163
    if( !iMessagePtr.IsNull() )
6ed68423b759 201033_01
hgs
parents:
diff changeset
   164
        {
6ed68423b759 201033_01
hgs
parents:
diff changeset
   165
        TRACE( "CSecurityDialogs::RunError, completing message 0x%08x", iMessagePtr.Handle() );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   166
        iMessagePtr.Complete( aError );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   167
        }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   168
6ed68423b759 201033_01
hgs
parents:
diff changeset
   169
    TRACE( "CSecurityDialogs::RunError, deleting this" );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   170
    delete this;
6ed68423b759 201033_01
hgs
parents:
diff changeset
   171
6ed68423b759 201033_01
hgs
parents:
diff changeset
   172
    TRACE( "CSecurityDialogs::RunError, end" );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   173
    return KErrNone;
6ed68423b759 201033_01
hgs
parents:
diff changeset
   174
    }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   175
6ed68423b759 201033_01
hgs
parents:
diff changeset
   176
// ---------------------------------------------------------------------------
6ed68423b759 201033_01
hgs
parents:
diff changeset
   177
// CSecurityDialogs::CSecurityDialogs()
6ed68423b759 201033_01
hgs
parents:
diff changeset
   178
// ---------------------------------------------------------------------------
6ed68423b759 201033_01
hgs
parents:
diff changeset
   179
//
6ed68423b759 201033_01
hgs
parents:
diff changeset
   180
CSecurityDialogs::CSecurityDialogs( TBool& aIsDeleted ) : CActive( CActive::EPriorityLow ),
6ed68423b759 201033_01
hgs
parents:
diff changeset
   181
        iIsDeleted( aIsDeleted ), iOutputPtr( NULL, 0, 0 )
6ed68423b759 201033_01
hgs
parents:
diff changeset
   182
    {
6ed68423b759 201033_01
hgs
parents:
diff changeset
   183
    TRACE( "CSecurityDialogs::CSecurityDialogs" );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   184
    CActiveScheduler::Add( this );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   185
    iIsDeleted = EFalse;
6ed68423b759 201033_01
hgs
parents:
diff changeset
   186
    }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   187