diff -r 000000000000 -r 307788aac0a8 realtimenetprots/sipfw/SIP/SIPSec/DigestPlugin/src/CSIPSecUserCredentialsProvider.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/realtimenetprots/sipfw/SIP/SIPSec/DigestPlugin/src/CSIPSecUserCredentialsProvider.cpp Tue Feb 02 01:03:15 2010 +0200 @@ -0,0 +1,167 @@ +// Copyright (c) 2008-2009 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: +// Name : CSIPSecUserCredentialsProvider.cpp +// Part of : SIPSec +// Version : SIP/6.0 +// + + + +#include "CSIPSecUserCredentialsProvider.h" +#include "CSIPSecUserRecord.h" +#include "sipsecdigestcache.h" +#include "sipsecdigestcontext.h" +#include "CSIPSecDigestPlugin.h" +#include "MSIPSecUser.h" + + +// ============================ MEMBER FUNCTIONS =============================== + +// ---------------------------------------------------------------------------- +// CSIPSecCredentialsProvider::CSIPSecCredentialsProvider +// ---------------------------------------------------------------------------- +// +CSIPSecCredentialsProvider::CSIPSecCredentialsProvider( + CSIPSecUserRecord& aUserRecord ) : + iUserRecord( aUserRecord ) + { + } + +// ---------------------------------------------------------------------------- +// CSIPSecCredentialsProvider::~CSIPSecCredentialsProvider +// ---------------------------------------------------------------------------- +// +CSIPSecCredentialsProvider::~CSIPSecCredentialsProvider() + { + } + +// ---------------------------------------------------------------------------- +// CSIPSecCredentialsProvider::RequestAgainL +// IMS credentials are never asked again, so no action. +// ---------------------------------------------------------------------------- +// +void CSIPSecCredentialsProvider::RequestAgainL() + { + } + +// ---------------------------------------------------------------------------- +// CSIPSecCredentialsProvider::UserRecord +// ---------------------------------------------------------------------------- +// +CSIPSecUserRecord& CSIPSecCredentialsProvider::UserRecord() const + { + return iUserRecord; + } + +// ============================ MEMBER FUNCTIONS =============================== + +// ---------------------------------------------------------------------------- +// CSIPSecUserCredentialsProvider::CSIPSecUserCredentialsProvider +// ---------------------------------------------------------------------------- +// +CSIPSecUserCredentialsProvider::CSIPSecUserCredentialsProvider( + CSIPSecUserRecord& aUserRecord ) : + CSIPSecCredentialsProvider( aUserRecord ), + iTimer( NULL ), + iUser( NULL ), + iTimerId( 0 ) + { + } + +// ---------------------------------------------------------------------------- +// CSIPSecUserCredentialsProvider::~CSIPSecUserCredentialsProvider +// ---------------------------------------------------------------------------- +// +CSIPSecUserCredentialsProvider::~CSIPSecUserCredentialsProvider() + { + CSIPSecUserCredentialsProvider::Cancel(); + } + +// ---------------------------------------------------------------------------- +// CSIPSecUserCredentialsProvider::TimerExpiredL +// ---------------------------------------------------------------------------- +// +void CSIPSecUserCredentialsProvider::TimerExpiredL( TTimerId /*aTimerId*/, + TAny* /*aTimerParam*/ ) + { + TRAPD( error, iUser->RequestCredentialsL( UserRecord().Realm() ) ) + if ( error != KErrNone ) + { + UserRecord().Invalidate( CSIPSecUserRecord::ECredentialsFailed ); + // Timer is used only when PassOnlyRealmsToUser()==ETrue, so use + // KEmptyTransactionId returned by TransactionIdPassedToClient(). + iPlugin->SetCredentialsL( UserRecord().TransactionIdPassedToClient(), + UserRecord().Realm(), + KNullDesC8, + KNullDesC8, + KNullDesC8 ); + } + } + +// ---------------------------------------------------------------------------- +// CSIPSecUserCredentialsProvider::RequestL +// If application wants the whole SIP response, timer is not started and +// credentials are not requested here. +// ---------------------------------------------------------------------------- +// +void CSIPSecUserCredentialsProvider::RequestL( TSIPSecDigestCtxSetup& aContext ) + { + TSIPSecPluginCtxResponse& parent = + static_cast( aContext.Parent() ); + + iPlugin = &parent.Plugin(); + iTimer = &parent.Cache().Timer(); + + RequestFromUserL(); + } + +// ---------------------------------------------------------------------------- +// CSIPSecUserCredentialsProvider::Cancel +// ---------------------------------------------------------------------------- +// +void CSIPSecUserCredentialsProvider::Cancel() + { + if ( iTimer ) + { + iTimer->Stop( iTimerId ); + } + } + +// ---------------------------------------------------------------------------- +// CSIPSecUserCredentialsProvider::RequestAgainL +// ---------------------------------------------------------------------------- +// +void CSIPSecUserCredentialsProvider::RequestAgainL() + { + // Cancel previous timer, though it should not be running anymore + Cancel(); + + RequestFromUserL(); + } + +// ---------------------------------------------------------------------------- +// CSIPSecUserCredentialsProvider::RequestFromUserL +// ---------------------------------------------------------------------------- +// +void CSIPSecUserCredentialsProvider::RequestFromUserL() + { + iUser = const_cast< MSIPSecUser* >( &UserRecord().SIPSecUser() ); + + if ( iUser->PassOnlyRealmsToUser() ) + { + iTimerId = iTimer->StartL( this, KSIPSecWaitBeforeRequestUC ); + } + } + +// End of File