diff -r 000000000000 -r 1bce908db942 multimediacommsengine/mmcecli/src/mcesecureinsession.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/multimediacommsengine/mmcecli/src/mcesecureinsession.cpp Tue Feb 02 01:04:58 2010 +0200 @@ -0,0 +1,187 @@ +/* +* Copyright (c) 2007 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: +* +*/ + + + + +#include "mcesecureinsession.h" +#include "mcemanager.h" +#include "mceclientserver.h" +#include "mceserial.h" +#include "mceclilogs.h" + +#include "mcecomsession.h" +#include "mceitcsender.h" + +#define _FLAT_DATA static_cast( iFlatData ) +#define FLAT_DATA( data ) _FLAT_DATA->data + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CMceSecureInSession::NewL +// ----------------------------------------------------------------------------- +// +CMceSecureInSession* CMceSecureInSession::NewL( RReadStream& aReadStream, + CMceManager& aManager, + TUint32 aProfileId, + TBool aUpdateSession ) + { + CMceSecureInSession* self = + new ( ELeave ) CMceSecureInSession( &aManager, aProfileId ); + CleanupStack::PushL( self ); + + MMceComSerializationContext serCtx( aReadStream ); + CleanupClosePushL( serCtx ); + + self->InitializeInSessionL( serCtx, aUpdateSession ); + CleanupStack::PopAndDestroy(); // serCtx + + self->InitializeL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CMceSecureInSession::NewL +// ----------------------------------------------------------------------------- +// + +CMceSecureInSession* CMceSecureInSession::NewL() + { + CMceSecureInSession* self = new (ELeave) CMceSecureInSession( NULL, NULL ); + CleanupStack::PushL( self ); + self->ConstructL( KNullDesC8, KNullDesC8 ); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CMceSecureInSession::~CMceSecureInSession +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceSecureInSession::~CMceSecureInSession() + { + iTemp.Close(); + } + +// ----------------------------------------------------------------------------- +// CMceSecureInSession::Type +// ----------------------------------------------------------------------------- +// +TMceSessionType CMceSecureInSession::Type() const + { + return KMceSessionSecure; + } + +// ----------------------------------------------------------------------------- +// CMceSecureInSession::SupportedCryptoContextsL +// ----------------------------------------------------------------------------- +// +const RArray& +CMceSecureInSession::SupportedCryptoContextsL() const + { + return iTemp; + } + +// ----------------------------------------------------------------------------- +// CMceSecureInSession::CryptoContexts +// ----------------------------------------------------------------------------- +// +const RArray& CMceSecureInSession::CryptoContexts() const + { + return FLAT_DATA( iClientCryptoSuites ); + } + +// ----------------------------------------------------------------------------- +// CMceSecureInSession::SetCryptoContextsL +// ----------------------------------------------------------------------------- +// +void CMceSecureInSession::SetCryptoContextsL( + const RArray& aArray ) + { + MCECLI_DEBUG( "CMceSecureInSession::SetCryptoContextsL, Entry" ) + TBool equal( ETrue ); + TInt index = 0; + TInt count = aArray.Count(); + if ( count != FLAT_DATA( iClientCryptoSuites ).Count() ) + { + equal = !equal; + } + else + { + for ( index = 0; index < count; index ++ ) + { + if ( aArray[ index ] != FLAT_DATA( iClientCryptoSuites )[ index ] ) + { + equal = !equal; + } + } + } + if ( !equal ) + { + MCECLI_DEBUG( "CMceSecureInSession::SetCryptoContextsL, setting" ) + + FLAT_DATA( iClientCryptoSuites ).Reset(); + for ( index = 0; index < count; index++ ) + { + FLAT_DATA( iClientCryptoSuites ).InsertL( aArray[ index ], index ); + } + } + + MCECLI_DEBUG( "CMceSecureInSession::SetCryptoContextsL, Exit" ) + } + +// ----------------------------------------------------------------------------- +// CMceSecureInSession::CMceSecureInSession +// ----------------------------------------------------------------------------- +// +CMceSecureInSession::CMceSecureInSession( CMceManager* aManager, + TUint32 aProfileId ) : + CMceInSession( aManager, aProfileId ) + { + } + +// ----------------------------------------------------------------------------- +// CMceSecureInSession::ConstructL +// ----------------------------------------------------------------------------- +// +void CMceSecureInSession::ConstructL( const TDesC8& aOriginator, + const TDesC8& aRecipient ) + { + CMceInSession::ConstructL( aOriginator, aRecipient ); + FLAT_DATA( iClientCryptoSuites ).InsertL( EAES_CM_128_HMAC_SHA1_80, 0 ); + FLAT_DATA( iClientCryptoSuites ).InsertL( EAES_CM_128_HMAC_SHA1_32, 1 ); + iTemp.Reset(); + + User::LeaveIfError( iTemp.Append(EAES_CM_128_HMAC_SHA1_80 ) ); + User::LeaveIfError( iTemp.Append(EAES_CM_128_HMAC_SHA1_32 ) ); + } + +// ----------------------------------------------------------------------------- +// CMceSecureInSession::InitializeInSessionL +// ----------------------------------------------------------------------------- +// +void CMceSecureInSession:: InitializeInSessionL( + MMceComSerializationContext& aSerCtx, + TBool aUpdateSession ) + { + CMceInSession::InitializeInSessionL( aSerCtx, aUpdateSession ); + iTemp.Reset(); + User::LeaveIfError( iTemp.Append( EAES_CM_128_HMAC_SHA1_80 ) ); + User::LeaveIfError( iTemp.Append( EAES_CM_128_HMAC_SHA1_32 ) ); + }