securitydialogs/secuidialognotifier/src/secuidialogs.cpp
author hgs
Thu, 14 Oct 2010 13:56:11 +0300
changeset 63 989397f9511c
parent 59 881d92421467
permissions -rw-r--r--
201039_03
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
59
881d92421467 201037_03
hgs
parents:
diff changeset
     1
/*
881d92421467 201037_03
hgs
parents:
diff changeset
     2
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
881d92421467 201037_03
hgs
parents:
diff changeset
     3
* All rights reserved.
881d92421467 201037_03
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
881d92421467 201037_03
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
881d92421467 201037_03
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
881d92421467 201037_03
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
881d92421467 201037_03
hgs
parents:
diff changeset
     8
*
881d92421467 201037_03
hgs
parents:
diff changeset
     9
* Initial Contributors:
881d92421467 201037_03
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
881d92421467 201037_03
hgs
parents:
diff changeset
    11
*
881d92421467 201037_03
hgs
parents:
diff changeset
    12
* Contributors:
881d92421467 201037_03
hgs
parents:
diff changeset
    13
*
881d92421467 201037_03
hgs
parents:
diff changeset
    14
* Description:  CSecuiDialogs active object
881d92421467 201037_03
hgs
parents:
diff changeset
    15
*
881d92421467 201037_03
hgs
parents:
diff changeset
    16
*/
881d92421467 201037_03
hgs
parents:
diff changeset
    17
881d92421467 201037_03
hgs
parents:
diff changeset
    18
#include "secuidialogs.h"            // CSecuiDialogs
881d92421467 201037_03
hgs
parents:
diff changeset
    19
#include "secuidialogstrace.h"       // TRACE macro
881d92421467 201037_03
hgs
parents:
diff changeset
    20
881d92421467 201037_03
hgs
parents:
diff changeset
    21
#include <securitynotification.h>
881d92421467 201037_03
hgs
parents:
diff changeset
    22
881d92421467 201037_03
hgs
parents:
diff changeset
    23
// ======== MEMBER FUNCTIONS ========
881d92421467 201037_03
hgs
parents:
diff changeset
    24
881d92421467 201037_03
hgs
parents:
diff changeset
    25
// ---------------------------------------------------------------------------
881d92421467 201037_03
hgs
parents:
diff changeset
    26
// CSecuiDialogs::NewL()
881d92421467 201037_03
hgs
parents:
diff changeset
    27
// ---------------------------------------------------------------------------
881d92421467 201037_03
hgs
parents:
diff changeset
    28
//
881d92421467 201037_03
hgs
parents:
diff changeset
    29
CSecuiDialogs* CSecuiDialogs::NewL(  TBool& aIsDeleted )
881d92421467 201037_03
hgs
parents:
diff changeset
    30
    {
881d92421467 201037_03
hgs
parents:
diff changeset
    31
    return new( ELeave ) CSecuiDialogs( aIsDeleted );
881d92421467 201037_03
hgs
parents:
diff changeset
    32
    }
881d92421467 201037_03
hgs
parents:
diff changeset
    33
881d92421467 201037_03
hgs
parents:
diff changeset
    34
// ---------------------------------------------------------------------------
881d92421467 201037_03
hgs
parents:
diff changeset
    35
// CSecuiDialogs::~CSecuiDialogs()
881d92421467 201037_03
hgs
parents:
diff changeset
    36
// ---------------------------------------------------------------------------
881d92421467 201037_03
hgs
parents:
diff changeset
    37
//
881d92421467 201037_03
hgs
parents:
diff changeset
    38
CSecuiDialogs::~CSecuiDialogs()
881d92421467 201037_03
hgs
parents:
diff changeset
    39
    {
63
989397f9511c 201039_03
hgs
parents: 59
diff changeset
    40
    RDEBUG("0", 0);
59
881d92421467 201037_03
hgs
parents:
diff changeset
    41
    Cancel();
881d92421467 201037_03
hgs
parents:
diff changeset
    42
    iServer.Close();
881d92421467 201037_03
hgs
parents:
diff changeset
    43
    delete iInputBuffer;
881d92421467 201037_03
hgs
parents:
diff changeset
    44
    iInputBuffer = NULL;
881d92421467 201037_03
hgs
parents:
diff changeset
    45
    delete iOutputBuffer;
881d92421467 201037_03
hgs
parents:
diff changeset
    46
    iOutputBuffer = NULL;
881d92421467 201037_03
hgs
parents:
diff changeset
    47
    iIsDeleted = ETrue;
63
989397f9511c 201039_03
hgs
parents: 59
diff changeset
    48
    RDEBUG("0x99", 0x99);
59
881d92421467 201037_03
hgs
parents:
diff changeset
    49
    }
881d92421467 201037_03
hgs
parents:
diff changeset
    50
881d92421467 201037_03
hgs
parents:
diff changeset
    51
// ---------------------------------------------------------------------------
881d92421467 201037_03
hgs
parents:
diff changeset
    52
// CSecuiDialogs::StartLD()
881d92421467 201037_03
hgs
parents:
diff changeset
    53
// ---------------------------------------------------------------------------
881d92421467 201037_03
hgs
parents:
diff changeset
    54
//
881d92421467 201037_03
hgs
parents:
diff changeset
    55
void CSecuiDialogs::StartLD( const TDesC8& aBuffer, TInt aReplySlot,
881d92421467 201037_03
hgs
parents:
diff changeset
    56
        const RMessagePtr2& aMessage )
881d92421467 201037_03
hgs
parents:
diff changeset
    57
    {
63
989397f9511c 201039_03
hgs
parents: 59
diff changeset
    58
    RDEBUG("0", 0);
59
881d92421467 201037_03
hgs
parents:
diff changeset
    59
    User::LeaveIfError( iServer.Connect() );
881d92421467 201037_03
hgs
parents:
diff changeset
    60
881d92421467 201037_03
hgs
parents:
diff changeset
    61
    const TInt* ptr = reinterpret_cast< const TInt* >( aBuffer.Ptr() );
881d92421467 201037_03
hgs
parents:
diff changeset
    62
    iOperation = static_cast< TSecurityDialogOperation >( *ptr & KSecurityDialogOperationMask );
881d92421467 201037_03
hgs
parents:
diff changeset
    63
    iReplySlot = aReplySlot;
63
989397f9511c 201039_03
hgs
parents: 59
diff changeset
    64
    RDEBUG("iReplySlot", iReplySlot);
59
881d92421467 201037_03
hgs
parents:
diff changeset
    65
63
989397f9511c 201039_03
hgs
parents: 59
diff changeset
    66
    RDEBUG("iMessagePtr.Handle()", iMessagePtr.Handle());
59
881d92421467 201037_03
hgs
parents:
diff changeset
    67
    iMessagePtr = aMessage;
881d92421467 201037_03
hgs
parents:
diff changeset
    68
63
989397f9511c 201039_03
hgs
parents: 59
diff changeset
    69
    RDEBUG("iOperation", iOperation);
59
881d92421467 201037_03
hgs
parents:
diff changeset
    70
881d92421467 201037_03
hgs
parents:
diff changeset
    71
    TSecurityNotificationPckg pckg;
881d92421467 201037_03
hgs
parents:
diff changeset
    72
    pckg.Copy( aBuffer );
63
989397f9511c 201039_03
hgs
parents: 59
diff changeset
    73
    RDEBUG("0", 0);
59
881d92421467 201037_03
hgs
parents:
diff changeset
    74
    TInt iStartup = pckg().iStartup;
63
989397f9511c 201039_03
hgs
parents: 59
diff changeset
    75
    RDEBUG("iStartup", iStartup);
59
881d92421467 201037_03
hgs
parents:
diff changeset
    76
    TInt iEvent = pckg().iEvent;
63
989397f9511c 201039_03
hgs
parents: 59
diff changeset
    77
    RDEBUG("iEvent", iEvent);
59
881d92421467 201037_03
hgs
parents:
diff changeset
    78
		TInt lOperation = 0x0000;
881d92421467 201037_03
hgs
parents:
diff changeset
    79
    if(iStartup)
881d92421467 201037_03
hgs
parents:
diff changeset
    80
			lOperation = 0x1000;
881d92421467 201037_03
hgs
parents:
diff changeset
    81
		lOperation += iEvent;
881d92421467 201037_03
hgs
parents:
diff changeset
    82
    iOperation = static_cast< TSecurityDialogOperation >( lOperation );
63
989397f9511c 201039_03
hgs
parents: 59
diff changeset
    83
    RDEBUG("new iOperation", iOperation);
59
881d92421467 201037_03
hgs
parents:
diff changeset
    84
881d92421467 201037_03
hgs
parents:
diff changeset
    85
    __ASSERT_DEBUG( iOutputBuffer == NULL, User::Invariant() );
881d92421467 201037_03
hgs
parents:
diff changeset
    86
    TInt outputBufLen = 0;
881d92421467 201037_03
hgs
parents:
diff changeset
    87
    if( iEvent < 0x100 || iEvent == 0x106 /* from Autolock*/)	// a simple test to prevent unknown codes. Nevertheless they will also be stopped later in case that no dialog can answer the request
881d92421467 201037_03
hgs
parents:
diff changeset
    88
        {
881d92421467 201037_03
hgs
parents:
diff changeset
    89
            iOutputBuffer = new( ELeave ) TPINValueBuf;
881d92421467 201037_03
hgs
parents:
diff changeset
    90
            outputBufLen = sizeof( TPINValueBuf );
881d92421467 201037_03
hgs
parents:
diff changeset
    91
        }
881d92421467 201037_03
hgs
parents:
diff changeset
    92
    else
881d92421467 201037_03
hgs
parents:
diff changeset
    93
    		{
63
989397f9511c 201039_03
hgs
parents: 59
diff changeset
    94
        		RDEBUG("not allowed iOperation", iOperation);
59
881d92421467 201037_03
hgs
parents:
diff changeset
    95
            User::Leave( KErrNotSupported );
881d92421467 201037_03
hgs
parents:
diff changeset
    96
        }
881d92421467 201037_03
hgs
parents:
diff changeset
    97
881d92421467 201037_03
hgs
parents:
diff changeset
    98
    __ASSERT_DEBUG( iInputBuffer == NULL, User::Invariant() );
881d92421467 201037_03
hgs
parents:
diff changeset
    99
    iInputBuffer = aBuffer.AllocL();
881d92421467 201037_03
hgs
parents:
diff changeset
   100
881d92421467 201037_03
hgs
parents:
diff changeset
   101
    if( iOutputBuffer )
881d92421467 201037_03
hgs
parents:
diff changeset
   102
        {
63
989397f9511c 201039_03
hgs
parents: 59
diff changeset
   103
        RDEBUG("outputBufLen", outputBufLen);
59
881d92421467 201037_03
hgs
parents:
diff changeset
   104
        iOutputPtr.Set( static_cast< TUint8* >( iOutputBuffer ), outputBufLen, outputBufLen );
881d92421467 201037_03
hgs
parents:
diff changeset
   105
        iServer.SecuiDialogOperation( iOperation, *iInputBuffer, iOutputPtr, iStatus );
881d92421467 201037_03
hgs
parents:
diff changeset
   106
        }
881d92421467 201037_03
hgs
parents:
diff changeset
   107
    else
881d92421467 201037_03
hgs
parents:
diff changeset
   108
        {
63
989397f9511c 201039_03
hgs
parents: 59
diff changeset
   109
        RDEBUG("KErrNotSupported", KErrNotSupported);
59
881d92421467 201037_03
hgs
parents:
diff changeset
   110
        User::Leave( KErrNotSupported );
881d92421467 201037_03
hgs
parents:
diff changeset
   111
        }
881d92421467 201037_03
hgs
parents:
diff changeset
   112
    SetActive();
63
989397f9511c 201039_03
hgs
parents: 59
diff changeset
   113
    RDEBUG("0x99", 0x99);
59
881d92421467 201037_03
hgs
parents:
diff changeset
   114
    }
881d92421467 201037_03
hgs
parents:
diff changeset
   115
881d92421467 201037_03
hgs
parents:
diff changeset
   116
// ---------------------------------------------------------------------------
881d92421467 201037_03
hgs
parents:
diff changeset
   117
// CSecuiDialogs::RunL()
881d92421467 201037_03
hgs
parents:
diff changeset
   118
// ---------------------------------------------------------------------------
881d92421467 201037_03
hgs
parents:
diff changeset
   119
//
881d92421467 201037_03
hgs
parents:
diff changeset
   120
void CSecuiDialogs::RunL()
881d92421467 201037_03
hgs
parents:
diff changeset
   121
    {
63
989397f9511c 201039_03
hgs
parents: 59
diff changeset
   122
    RDEBUG("0", 0);
59
881d92421467 201037_03
hgs
parents:
diff changeset
   123
    TInt error = iStatus.Int();
63
989397f9511c 201039_03
hgs
parents: 59
diff changeset
   124
    RDEBUG("error", error);
59
881d92421467 201037_03
hgs
parents:
diff changeset
   125
    User::LeaveIfError( error );
881d92421467 201037_03
hgs
parents:
diff changeset
   126
    __ASSERT_DEBUG( iOutputPtr.Ptr(), User::Invariant() );
63
989397f9511c 201039_03
hgs
parents: 59
diff changeset
   127
    RDEBUG("iReplySlot", iReplySlot);
59
881d92421467 201037_03
hgs
parents:
diff changeset
   128
    TInt maxx = iMessagePtr.GetDesMaxLength(iReplySlot);
63
989397f9511c 201039_03
hgs
parents: 59
diff changeset
   129
    RDEBUG("maxx", maxx);
59
881d92421467 201037_03
hgs
parents:
diff changeset
   130
    TInt curr = iMessagePtr.GetDesLength(iReplySlot);
63
989397f9511c 201039_03
hgs
parents: 59
diff changeset
   131
    RDEBUG("curr", curr);
59
881d92421467 201037_03
hgs
parents:
diff changeset
   132
    // no need to copy. Besides, it seems to crash because it's too long
881d92421467 201037_03
hgs
parents:
diff changeset
   133
    // iMessagePtr.WriteL( iReplySlot, iOutputPtr );
63
989397f9511c 201039_03
hgs
parents: 59
diff changeset
   134
    RDEBUG("not called WriteL", 0);
59
881d92421467 201037_03
hgs
parents:
diff changeset
   135
63
989397f9511c 201039_03
hgs
parents: 59
diff changeset
   136
    RDEBUG("completing iMessagePtr.Handle()", iMessagePtr.Handle());
59
881d92421467 201037_03
hgs
parents:
diff changeset
   137
    iMessagePtr.Complete( error );
881d92421467 201037_03
hgs
parents:
diff changeset
   138
63
989397f9511c 201039_03
hgs
parents: 59
diff changeset
   139
    RDEBUG("0", 0);
59
881d92421467 201037_03
hgs
parents:
diff changeset
   140
    delete this;
63
989397f9511c 201039_03
hgs
parents: 59
diff changeset
   141
    RDEBUG("0x99", 0x99);
59
881d92421467 201037_03
hgs
parents:
diff changeset
   142
    }
881d92421467 201037_03
hgs
parents:
diff changeset
   143
881d92421467 201037_03
hgs
parents:
diff changeset
   144
// ---------------------------------------------------------------------------
881d92421467 201037_03
hgs
parents:
diff changeset
   145
// CSecuiDialogs::DoCancel()
881d92421467 201037_03
hgs
parents:
diff changeset
   146
// ---------------------------------------------------------------------------
881d92421467 201037_03
hgs
parents:
diff changeset
   147
//
881d92421467 201037_03
hgs
parents:
diff changeset
   148
void CSecuiDialogs::DoCancel()
881d92421467 201037_03
hgs
parents:
diff changeset
   149
    {
63
989397f9511c 201039_03
hgs
parents: 59
diff changeset
   150
    RDEBUG("0", 0);
59
881d92421467 201037_03
hgs
parents:
diff changeset
   151
    iServer.CancelOperation();
881d92421467 201037_03
hgs
parents:
diff changeset
   152
    if( !iMessagePtr.IsNull() )
881d92421467 201037_03
hgs
parents:
diff changeset
   153
        {
63
989397f9511c 201039_03
hgs
parents: 59
diff changeset
   154
        RDEBUG("completing iMessagePtr.Handle()", iMessagePtr.Handle());
59
881d92421467 201037_03
hgs
parents:
diff changeset
   155
        iMessagePtr.Complete( KErrCancel );
881d92421467 201037_03
hgs
parents:
diff changeset
   156
        }
63
989397f9511c 201039_03
hgs
parents: 59
diff changeset
   157
    RDEBUG("0x99", 0x99);
59
881d92421467 201037_03
hgs
parents:
diff changeset
   158
    }
881d92421467 201037_03
hgs
parents:
diff changeset
   159
881d92421467 201037_03
hgs
parents:
diff changeset
   160
// ---------------------------------------------------------------------------
881d92421467 201037_03
hgs
parents:
diff changeset
   161
// CSecuiDialogs::RunError()
881d92421467 201037_03
hgs
parents:
diff changeset
   162
// ---------------------------------------------------------------------------
881d92421467 201037_03
hgs
parents:
diff changeset
   163
//
881d92421467 201037_03
hgs
parents:
diff changeset
   164
TInt CSecuiDialogs::RunError( TInt aError )
881d92421467 201037_03
hgs
parents:
diff changeset
   165
    {
63
989397f9511c 201039_03
hgs
parents: 59
diff changeset
   166
    RDEBUG("aError", aError);
59
881d92421467 201037_03
hgs
parents:
diff changeset
   167
    if( !iMessagePtr.IsNull() )
881d92421467 201037_03
hgs
parents:
diff changeset
   168
        {
63
989397f9511c 201039_03
hgs
parents: 59
diff changeset
   169
        RDEBUG("completing iMessagePtr.Handle()", iMessagePtr.Handle());
59
881d92421467 201037_03
hgs
parents:
diff changeset
   170
        iMessagePtr.Complete( aError );
881d92421467 201037_03
hgs
parents:
diff changeset
   171
        }
881d92421467 201037_03
hgs
parents:
diff changeset
   172
63
989397f9511c 201039_03
hgs
parents: 59
diff changeset
   173
    RDEBUG("0", 0);
59
881d92421467 201037_03
hgs
parents:
diff changeset
   174
    delete this;
881d92421467 201037_03
hgs
parents:
diff changeset
   175
63
989397f9511c 201039_03
hgs
parents: 59
diff changeset
   176
    RDEBUG("0x99", 0x99);
59
881d92421467 201037_03
hgs
parents:
diff changeset
   177
    return KErrNone;
881d92421467 201037_03
hgs
parents:
diff changeset
   178
    }
881d92421467 201037_03
hgs
parents:
diff changeset
   179
881d92421467 201037_03
hgs
parents:
diff changeset
   180
// ---------------------------------------------------------------------------
881d92421467 201037_03
hgs
parents:
diff changeset
   181
// CSecuiDialogs::CSecuiDialogs()
881d92421467 201037_03
hgs
parents:
diff changeset
   182
// ---------------------------------------------------------------------------
881d92421467 201037_03
hgs
parents:
diff changeset
   183
//
881d92421467 201037_03
hgs
parents:
diff changeset
   184
CSecuiDialogs::CSecuiDialogs( TBool& aIsDeleted ) : CActive( CActive::EPriorityLow ),
881d92421467 201037_03
hgs
parents:
diff changeset
   185
        iIsDeleted( aIsDeleted ), iOutputPtr( NULL, 0, 0 )
881d92421467 201037_03
hgs
parents:
diff changeset
   186
    {
63
989397f9511c 201039_03
hgs
parents: 59
diff changeset
   187
    RDEBUG("0", 0);
59
881d92421467 201037_03
hgs
parents:
diff changeset
   188
    CActiveScheduler::Add( this );
881d92421467 201037_03
hgs
parents:
diff changeset
   189
    iIsDeleted = EFalse;
881d92421467 201037_03
hgs
parents:
diff changeset
   190
    }
881d92421467 201037_03
hgs
parents:
diff changeset
   191