realtimenetprots/sipfw/SIP/SIPSec/DigestPlugin/src/CSIPSecUserCredentialsProvider.cpp
changeset 0 307788aac0a8
equal deleted inserted replaced
-1:000000000000 0:307788aac0a8
       
     1 // Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 // Name          : CSIPSecUserCredentialsProvider.cpp
       
    15 // Part of       : SIPSec
       
    16 // Version       : SIP/6.0
       
    17 //
       
    18 
       
    19 
       
    20 
       
    21 #include "CSIPSecUserCredentialsProvider.h"
       
    22 #include "CSIPSecUserRecord.h"
       
    23 #include "sipsecdigestcache.h"
       
    24 #include "sipsecdigestcontext.h"
       
    25 #include "CSIPSecDigestPlugin.h"
       
    26 #include "MSIPSecUser.h"
       
    27 
       
    28 
       
    29 // ============================ MEMBER FUNCTIONS ===============================
       
    30 
       
    31 // ----------------------------------------------------------------------------
       
    32 // CSIPSecCredentialsProvider::CSIPSecCredentialsProvider
       
    33 // ----------------------------------------------------------------------------
       
    34 //
       
    35 CSIPSecCredentialsProvider::CSIPSecCredentialsProvider(
       
    36 	CSIPSecUserRecord& aUserRecord ) :
       
    37 	iUserRecord( aUserRecord )
       
    38     {
       
    39     }
       
    40 
       
    41 // ----------------------------------------------------------------------------
       
    42 // CSIPSecCredentialsProvider::~CSIPSecCredentialsProvider
       
    43 // ----------------------------------------------------------------------------
       
    44 //
       
    45 CSIPSecCredentialsProvider::~CSIPSecCredentialsProvider() 
       
    46     {
       
    47     }
       
    48 
       
    49 // ----------------------------------------------------------------------------
       
    50 // CSIPSecCredentialsProvider::RequestAgainL
       
    51 // IMS credentials are never asked again, so no action.
       
    52 // ----------------------------------------------------------------------------
       
    53 //
       
    54 void CSIPSecCredentialsProvider::RequestAgainL()
       
    55 	{
       
    56 	}
       
    57 
       
    58 // ----------------------------------------------------------------------------
       
    59 // CSIPSecCredentialsProvider::UserRecord
       
    60 // ----------------------------------------------------------------------------
       
    61 //
       
    62 CSIPSecUserRecord& CSIPSecCredentialsProvider::UserRecord() const
       
    63     {
       
    64     return iUserRecord;
       
    65     }
       
    66 
       
    67 // ============================ MEMBER FUNCTIONS ===============================
       
    68 
       
    69 // ----------------------------------------------------------------------------
       
    70 // CSIPSecUserCredentialsProvider::CSIPSecUserCredentialsProvider
       
    71 // ----------------------------------------------------------------------------
       
    72 //
       
    73 CSIPSecUserCredentialsProvider::CSIPSecUserCredentialsProvider(
       
    74 	CSIPSecUserRecord& aUserRecord ) :
       
    75 	CSIPSecCredentialsProvider( aUserRecord ),
       
    76 	iTimer( NULL ),
       
    77 	iUser( NULL ),
       
    78     iTimerId( 0 )
       
    79     {    
       
    80     }    
       
    81 
       
    82 // ----------------------------------------------------------------------------
       
    83 // CSIPSecUserCredentialsProvider::~CSIPSecUserCredentialsProvider
       
    84 // ----------------------------------------------------------------------------
       
    85 //
       
    86 CSIPSecUserCredentialsProvider::~CSIPSecUserCredentialsProvider()
       
    87     {
       
    88     CSIPSecUserCredentialsProvider::Cancel();
       
    89     }
       
    90 
       
    91 // ----------------------------------------------------------------------------
       
    92 // CSIPSecUserCredentialsProvider::TimerExpiredL
       
    93 // ----------------------------------------------------------------------------
       
    94 //
       
    95 void CSIPSecUserCredentialsProvider::TimerExpiredL( TTimerId /*aTimerId*/,
       
    96 													TAny* /*aTimerParam*/ )
       
    97     {
       
    98   	TRAPD( error, iUser->RequestCredentialsL( UserRecord().Realm() ) )
       
    99   	if ( error != KErrNone )
       
   100   	    {
       
   101   	    UserRecord().Invalidate( CSIPSecUserRecord::ECredentialsFailed );
       
   102 		// Timer is used only when PassOnlyRealmsToUser()==ETrue, so use
       
   103 		// KEmptyTransactionId returned by TransactionIdPassedToClient().
       
   104   	    iPlugin->SetCredentialsL( UserRecord().TransactionIdPassedToClient(),
       
   105   	                              UserRecord().Realm(),
       
   106   	                              KNullDesC8,
       
   107   	                              KNullDesC8,
       
   108   	                              KNullDesC8 );
       
   109   	    }
       
   110     }
       
   111 
       
   112 // ----------------------------------------------------------------------------
       
   113 // CSIPSecUserCredentialsProvider::RequestL
       
   114 // If application wants the whole SIP response, timer is not started and
       
   115 // credentials are not requested here.
       
   116 // ----------------------------------------------------------------------------
       
   117 //
       
   118 void CSIPSecUserCredentialsProvider::RequestL( TSIPSecDigestCtxSetup& aContext )
       
   119     {
       
   120     TSIPSecPluginCtxResponse& parent =
       
   121     	static_cast<TSIPSecPluginCtxResponse&>( aContext.Parent() );
       
   122 
       
   123     iPlugin = &parent.Plugin();
       
   124     iTimer = &parent.Cache().Timer();
       
   125 
       
   126 	RequestFromUserL();
       
   127     }
       
   128 
       
   129 // ----------------------------------------------------------------------------
       
   130 // CSIPSecUserCredentialsProvider::Cancel
       
   131 // ----------------------------------------------------------------------------
       
   132 //
       
   133 void CSIPSecUserCredentialsProvider::Cancel()
       
   134     {
       
   135     if ( iTimer )
       
   136         {
       
   137     	iTimer->Stop( iTimerId );
       
   138         }        
       
   139     }    
       
   140 
       
   141 // ----------------------------------------------------------------------------
       
   142 // CSIPSecUserCredentialsProvider::RequestAgainL
       
   143 // ----------------------------------------------------------------------------
       
   144 //
       
   145 void CSIPSecUserCredentialsProvider::RequestAgainL()
       
   146 	{
       
   147 	// Cancel previous timer, though it should not be running anymore
       
   148 	Cancel();
       
   149 
       
   150 	RequestFromUserL();
       
   151 	}
       
   152 
       
   153 // ----------------------------------------------------------------------------
       
   154 // CSIPSecUserCredentialsProvider::RequestFromUserL
       
   155 // ----------------------------------------------------------------------------
       
   156 //
       
   157 void CSIPSecUserCredentialsProvider::RequestFromUserL()
       
   158 	{
       
   159 	iUser = const_cast< MSIPSecUser* >( &UserRecord().SIPSecUser() );
       
   160 
       
   161     if ( iUser->PassOnlyRealmsToUser() )
       
   162     	{
       
   163     	iTimerId = iTimer->StartL( this, KSIPSecWaitBeforeRequestUC );
       
   164     	}
       
   165 	}
       
   166 
       
   167 // End of File