--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/realtimenetprots/sipfw/SIP/SIPSec/DigestPlugin/src/CSIPSecDigestCacheEntry.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 : CSIPSecDigestCacheEntry.cpp
+// Part of : SIPSec
+// Version : SIP/6.0
+//
+
+
+
+#include "CSIPSecDigestCacheEntry.h"
+#include "sipsecplugincontext.h"
+#include "CSIPSecUserRecord.h"
+#include "CSIPSecSIMRecord.h"
+#include "MSIPSecUser.h"
+#include <uri8.h>
+
+
+const TInt CSIPSecDigestCacheEntry::iSIPSecOffset =
+ _FOFF( CSIPSecDigestCacheEntry, iLink );
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// ----------------------------------------------------------------------------
+// CSIPSecDigestCacheEntry::CSIPSecDigestCacheEntry
+// ----------------------------------------------------------------------------
+//
+CSIPSecDigestCacheEntry::CSIPSecDigestCacheEntry( const MSIPSecUser& aUser ) :
+ iUser( aUser )
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CSIPSecDigestCacheEntry::ConstructL
+// ----------------------------------------------------------------------------
+//
+void CSIPSecDigestCacheEntry::ConstructL( CSIPSecDigest::TChallengeType aType,
+ const CUri8& aRemoteTarget )
+ {
+ if ( aType == CSIPSecDigest::EEndPoint )
+ {
+ iRemoteTarget = CUri8::NewL( aRemoteTarget.Uri() );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CSIPSecDigestCacheEntry::~CSIPSecDigestCacheEntry
+// ----------------------------------------------------------------------------
+//
+CSIPSecDigestCacheEntry::~CSIPSecDigestCacheEntry()
+ {
+ delete iRemoteTarget;
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPSecDigestCacheEntry::UserData
+// Once CSIPSecDigestCacheEntry has been constructed, iUserCredentials always
+// exist.
+// -----------------------------------------------------------------------------
+//
+CSIPSecUserRecord& CSIPSecDigestCacheEntry::UserData()
+ {
+ __ASSERT_ALWAYS( iUserCredentials,
+ User::Panic( _L( "DigestCacheEntry:UserData !cred" ), KErrNotFound ) );
+
+ return *iUserCredentials;
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPSecDigestCacheEntry::HoldsUserData
+// -----------------------------------------------------------------------------
+//
+TBool CSIPSecDigestCacheEntry::HoldsUserData(
+ const CSIPSecUserRecord& aUserData ) const
+ {
+ return iUserCredentials == &aUserData;
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPSecDigestCacheEntry::SetUserData
+// -----------------------------------------------------------------------------
+//
+void CSIPSecDigestCacheEntry::SetUserData( CSIPSecUserRecord& aUserData )
+ {
+ iUserCredentials = &aUserData;
+ iUserCredentials->CredentialsAttach();
+ }
+
+// ----------------------------------------------------------------------------
+// CSIPSecDigestCacheEntry::Match
+// ----------------------------------------------------------------------------
+//
+TBool CSIPSecDigestCacheEntry::Match( TSIPSecPluginContext& aContext ) const
+ {
+ __ASSERT_ALWAYS( iUserCredentials,
+ User::Panic( _L( "DigestCacheEntry:Match !cred" ), KErrNotFound ) );
+
+ if ( IsUsedByUser( aContext.SIPSecUser(),
+ aContext.AlsoTrustedUser(),
+ aContext.RegistrationId() ) )
+ {
+ switch ( Type( aContext ) )
+ {
+ case CSIPSecDigest::EOutboundProxy:
+ return iUserCredentials->OutboundProxy().CompareF(
+ aContext.OutboundProxy() ) == 0;
+
+ case CSIPSecDigest::EProxy:
+ return ETrue; // IsUsedByUser checked that SIPSec user is same
+
+ default: // CSIPSecDigest::EEndPoint:
+ return iRemoteTarget &&
+ ( iRemoteTarget->Uri().Equivalent(
+ aContext.RemoteTarget().Uri() ) == KErrNone );
+ }
+ }
+
+ return EFalse;
+ }
+
+// ----------------------------------------------------------------------------
+// CSIPSecDigestCacheEntry::IsUsedByUser
+// ----------------------------------------------------------------------------
+//
+TBool CSIPSecDigestCacheEntry::IsUsedByUser( const MSIPSecUser& aUser,
+ TBool aAlsoTrustedUser,
+ TRegistrationId aRegistrationId ) const
+ {
+ return CompareUsers( aUser, iUser, aAlsoTrustedUser, aRegistrationId );
+ }
+
+// ----------------------------------------------------------------------------
+// CSIPSecDigestCacheEntry::CompareUsers
+// SIPSec user can have only one trusted user. I.e. a trusted user doesn't
+// have another trusted user.
+// ----------------------------------------------------------------------------
+//
+TBool CSIPSecDigestCacheEntry::CompareUsers( const MSIPSecUser& aUser,
+ const MSIPSecUser& aCachedUser,
+ TBool aAlsoTrustedUser,
+ TRegistrationId aRegistrationId )
+ {
+ MSIPSecUser* user = const_cast< MSIPSecUser* >( &aUser );
+ return ( user == &aCachedUser ) ||
+ ( aAlsoTrustedUser &&
+ user->TrustedUser( aRegistrationId ) == &aCachedUser );
+ }
+
+// ----------------------------------------------------------------------------
+// CSIPSecDigestCacheEntry::SIPSecUser
+// ----------------------------------------------------------------------------
+//
+const MSIPSecUser& CSIPSecDigestCacheEntry::SIPSecUser() const
+ {
+ return iUser;
+ }