--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/multimediacommscontroller/mmccinterface/src/mmcccryptocontextcontainer.cpp Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,185 @@
+/*
+* Copyright (c) 2006 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: Class is used for configuring secure RTP.
+*
+*/
+
+
+
+
+#include <mmf/common/mmfcontrollerframework.h>
+#include <e32math.h>
+
+#include "mmccinterfacelogs.h"
+#include "mmcccryptocontextcontainer.h"
+#include "mmcccryptocontext.h"
+
+// ======== MEMBER FUNCTIONS ========
+
+
+// ---------------------------------------------------------------------------
+// CMccCryptoContextContainer::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CMccCryptoContextContainer::ConstructL( )
+ {
+ __INTERFACE( "CMccCryptoContextContainer::ConstructL" )
+ }
+
+// ---------------------------------------------------------------------------
+// CMccCryptoContextContainer::NewL()
+// ---------------------------------------------------------------------------
+//
+CMccCryptoContextContainer* CMccCryptoContextContainer::NewL( )
+ {
+ CMccCryptoContextContainer* self = new(ELeave) CMccCryptoContextContainer();
+ CleanupStack::PushL( self );
+ self->ConstructL( );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CMccCryptoContextContainer::~CMccCryptoContextContainer
+// ---------------------------------------------------------------------------
+//
+CMccCryptoContextContainer::~CMccCryptoContextContainer()
+ {
+ iContextArray.Close();
+ }
+
+// ---------------------------------------------------------------------------
+// CMccCryptoContextContainer::CreateContext
+// ---------------------------------------------------------------------------
+//
+TInt CMccCryptoContextContainer::CreateContext( const TMccSrtpMasterKey& aMasterKey,
+ const TMccSrtpMasterSalt& aSaltKey,
+ TUint32& aContextId,
+ const TMccSrtpCryptoParams& aCryptoParams )
+ {
+ __INTERFACE( "CMccCryptoContextContainer::CreateContext" )
+
+ TUint32 contextId( GenerateContextId() );
+
+ TMccCryptoContext cryptoContext( contextId,
+ aMasterKey,
+ aSaltKey,
+ aCryptoParams );
+
+
+ TInt error( cryptoContext.ValidateContext() );
+
+ if ( KErrNone == error )
+ {
+ error = iContextArray.Append( cryptoContext );
+ aContextId = contextId;
+ }
+
+ return error;
+ }
+
+// ---------------------------------------------------------------------------
+// CMccCryptoContextContainer::RemoveContext
+// ---------------------------------------------------------------------------
+//
+TInt CMccCryptoContextContainer::RemoveContext( TUint32 aContextId )
+ {
+ __INTERFACE( "CMccContextContainer::RemoveContext" )
+
+ TInt contextId = FindContext( aContextId );
+
+ if ( KErrNotFound != contextId )
+ {
+ iContextArray.Remove( contextId );
+ return KErrNone;
+ }
+
+ return KErrNotFound;
+ }
+
+// ---------------------------------------------------------------------------
+// CMccCryptoContextContainer::UpdateContextL
+// ---------------------------------------------------------------------------
+//
+TInt CMccCryptoContextContainer::UpdateContext( TUint32 aContextId,
+ TMccCryptoContext& aContext )
+ {
+ __INTERFACE( "CMccContextContainer::UpdateContext" )
+
+ TInt contextId = FindContext( aContextId );
+
+ if ( KErrNotFound != contextId )
+ {
+ iContextArray[ contextId ].UpdateContext( aContext );
+
+ return KErrNone;
+ }
+ return KErrNotFound;
+ }
+
+// ---------------------------------------------------------------------------
+// CMccCryptoContextContainer::GetContext
+// ---------------------------------------------------------------------------
+//
+TInt CMccCryptoContextContainer::GetContext( TUint32 aContextId,
+ TMccCryptoContext* &aContext )
+ {
+ __INTERFACE( "CMccContextContainer::GetContext" )
+
+ TInt contextId = FindContext( aContextId );
+
+ if ( KErrNotFound != contextId )
+ {
+ aContext = &iContextArray[ contextId ];
+ return KErrNone;
+ }
+
+ return KErrNotFound;
+ }
+
+// -----------------------------------------------------------------------------
+// CMccCryptoContextContainer::GenerateContextId
+// -----------------------------------------------------------------------------
+//
+TUint32 CMccCryptoContextContainer::GenerateContextId()
+ {
+ __INTERFACE( "CMccContextContainer::GenerateContextId" )
+ TUint32 id( 0 );
+
+ do
+ {
+ id = static_cast<TUint32>( Math::Random() );
+ } while ( KErrNotFound != FindContext( id ) );
+
+ return id;
+ }
+
+// ---------------------------------------------------------------------------
+// CMccCryptoContextContainer::FindContext
+// ---------------------------------------------------------------------------
+//
+TInt CMccCryptoContextContainer::FindContext( TUint32 aContextId )
+ {
+ TInt count( iContextArray.Count() );
+
+ for ( TInt i = 0; i < count; i++ )
+ {
+ if ( iContextArray[ i ].ContextId() == aContextId )
+ {
+ return i;
+ }
+ }
+ return KErrNotFound;
+ }
+// End of File