diff -r 000000000000 -r 307788aac0a8 realtimenetprots/sipfw/SIP/SigCompController/DefaultPlugin/src/sipsigcompcompartmentuser.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/realtimenetprots/sipfw/SIP/SigCompController/DefaultPlugin/src/sipsigcompcompartmentuser.cpp Tue Feb 02 01:03:15 2010 +0200 @@ -0,0 +1,184 @@ +// Copyright (c) 2005-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 : sipsigcompcompartmentuser.cpp +// Part of : SIPSigComp +// Version : SIP/4.0 +// + + + +#include "sipsigcompcompartmentuser.h" +#include "sipsigcompcompartmentctx.h" +#include "MCompartmentUserOwner.h" + +// ----------------------------------------------------------------------------- +// CSipSigCompCompartmentUser::NewL +// ----------------------------------------------------------------------------- +// +CSipSigCompCompartmentUser* CSipSigCompCompartmentUser::NewL( + MCompartmentUserOwner& aMyOwner, + TUint32 aCompartmentId, + TUint32 aIapId, + TBool aDynamicCompression ) + { + CSipSigCompCompartmentUser* self = + CSipSigCompCompartmentUser::NewLC( aMyOwner, + aCompartmentId, + aIapId, + aDynamicCompression ); + CleanupStack::Pop(); + return self; + } + + +// ----------------------------------------------------------------------------- +// CSipSigCompCompartmentUser::NewLC +// ----------------------------------------------------------------------------- +// +CSipSigCompCompartmentUser* CSipSigCompCompartmentUser::NewLC( + MCompartmentUserOwner& aMyOwner, + TUint32 aCompartmentId, + TUint32 aIapId, + TBool aDynamicCompression ) + { + CSipSigCompCompartmentUser* self = + new ( ELeave ) CSipSigCompCompartmentUser( aMyOwner, + aCompartmentId, + aIapId, + aDynamicCompression ); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// ----------------------------------------------------------------------------- +// CSipSigCompCompartmentUser::ConstructL +// ----------------------------------------------------------------------------- +// +void CSipSigCompCompartmentUser::ConstructL() + { + } + +// ----------------------------------------------------------------------------- +// CSipSigCompCompartmentUser::~CSipSigCompCompartmentUser +// ----------------------------------------------------------------------------- +// +CSipSigCompCompartmentUser::~CSipSigCompCompartmentUser() + { + if ( iCompartmentCtx ) + { + iCompartmentCtx->DetachCompartmentUser( this ); + } + } + +// ----------------------------------------------------------------------------- +// CSipSigCompCompartmentUser::CompartmentDeleted +// ----------------------------------------------------------------------------- +// +void CSipSigCompCompartmentUser::CompartmentDeleted() + { + // Cannot use ctx anymore + iCompartmentCtx = 0; + } + +// ----------------------------------------------------------------------------- +// CSipSigCompCompartmentUser::Compartment +// ----------------------------------------------------------------------------- +// +CSigCompCompartment* CSipSigCompCompartmentUser::Compartment() + { + if ( iCompartmentCtx ) + { + return iCompartmentCtx->Compartment(); + } + return 0; + } + +// ----------------------------------------------------------------------------- +// CSipSigCompCompartmentUser::SetAddressL +// ----------------------------------------------------------------------------- +// +void CSipSigCompCompartmentUser::SetAddressL( const TInetAddr& aAddress ) + { + CSipSigCompCompartmentCtx* compCtx = + iMyOwner.SearchCompartmentByInetAddr( aAddress, iIapId ); + + if ( compCtx ) + { + if ( iCompartmentCtx && iCompartmentCtx != compCtx ) + { + // Change compartment, first detach from old compartment + iCompartmentCtx->DetachCompartmentUser( this ); + } + } + else + { + // Create new compartment because there wasn't any for this + // remote addr + compCtx = + iMyOwner.CreateCompartmentL( aAddress, iIapId, iDynamicCompression ); + } + + iCompartmentCtx = compCtx; + + // Attach to compartment, no effect if already attached + iCompartmentCtx->AttachCompartmentUserL( this ); + } + +// ----------------------------------------------------------------------------- +// CSipSigCompCompartmentUser::Match +// ----------------------------------------------------------------------------- +// +TBool CSipSigCompCompartmentUser::Match( const TInetAddr& aAddress ) const + { + return ( iCompartmentCtx && iCompartmentCtx->Match( aAddress, iIapId ) ); + } + +// ----------------------------------------------------------------------------- +// CSipSigCompCompartmentUser::Match +// ----------------------------------------------------------------------------- +// +TBool CSipSigCompCompartmentUser::Match( TUint32 aCompartmentId ) const + { + return ( iCompartmentId == aCompartmentId ); + } + +// ----------------------------------------------------------------------------- +// CSipSigCompCompartmentUser::SendFailedL +// ----------------------------------------------------------------------------- +// +void CSipSigCompCompartmentUser::SendFailedL() + { + if ( iCompartmentCtx ) + { + iCompartmentCtx->SendFailedL(); + } + } + +// ----------------------------------------------------------------------------- +// Constructor +// ----------------------------------------------------------------------------- +// +CSipSigCompCompartmentUser::CSipSigCompCompartmentUser( + MCompartmentUserOwner& aMyOwner, + TUint32 aCompartmentId, + TUint32 aIapId, + TBool aDynamicCompression ) : + iMyOwner( aMyOwner ), + iCompartmentId( aCompartmentId ), + iIapId( aIapId ), + iDynamicCompression( aDynamicCompression ) + { + } +