diff -r 000000000000 -r 1bce908db942 multimediacommsengine/tsrc/MMCTestDriver/MCETester/src/TCmdGetSessionId.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/multimediacommsengine/tsrc/MMCTestDriver/MCETester/src/TCmdGetSessionId.cpp Tue Feb 02 01:04:58 2010 +0200 @@ -0,0 +1,171 @@ +/* +* Copyright (c) 2005 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: Implementation +* +*/ + + + + +#include +#include +#include +#include + +#include "MCEConstants.h" +#include "TCmdGetSessionId.h" +#include "CTcMCEContext.h" +#include "CTcMCEReceived.h" + +void TCmdGetSessionId::ExecuteL() + { + + // -- Setup --------- + + // Connection selection + + // -- Execution ------ + + // Get an item off the receive queue (waits until timeout if none is present) + + TInt timeout = ExtractIntegerL( KParamTimeout, KDefaultReceiveTimeout, + EFalse ); + TBool update = ExtractBooleanL( KParamSessionUpdate, EFalse ); + + CTcMCEReceived* item; + + if (update) + { + item = &(iContext.ReceivedUpdatedSessionItemL( timeout )); + } + else + { + item = &(iContext.ReceivedSessionItemL( timeout )); + } + + + if ( !item->InSession() ) + { + if ( item->Error() != KErrNone ) + { + AddIdResponseL( KSessionId, item->Session() ); + AddIntegerResponseL( KResponseError, item->Error() ); + } + else + { + User::Leave(KErrNotFound); + } + } + + + CMceSession::TState state = item->InSession()->State(); + CTcStructure* structure; + do + { + structure = FindStructureL( KParamSessionModifier, EFalse ); + if( structure ) + { + //structure contains a list of name-value pairs + for (int i=0; i < structure->Count(); i++) + { + CTcNameValue* itemVal = structure->ItemL( i ); + //sessionMod->SetModifierL( itemVal->NameAsIntL(), itemVal->ValueAsIntL() ); + item->InSession()->SetModifierL( itemVal->NameAsIntL(), itemVal->ValueAsIntL() ); + + //checking + TMceSessionModifier nameInt = itemVal->NameAsIntL(); + TUint valueInt = itemVal->ValueAsIntL(); + item->InSession()->GetModifierL( nameInt, valueInt ); + + //sending response output + + AddIntegerResponseL( KParamSessionModifier, valueInt ); + + } + iContext.List().RemoveParameter( KParamSessionModifier ); + + } + } while( structure ); + // -- Response creation -------- + + // Add Session + AddIdResponseL( KSessionId, *(item->InSession()) ); + + // Add Headers + AddHeadersL( item->Headers() ); + + // Add Session state + AddIntegerResponseL( KResponseState, state ); + AddTextualSessionStateL( state ); + + // Add Originator and Recipient + AddTextResponseL( KResponseOriginator, item->InSession()->Originator() ); + AddTextResponseL( KResponseRecipient, item->InSession()->Recipient() ); + + // Add Body + if (item->Body()) + { + if (item->Body()->Length() > 0) + { + AddTextResponseL(KResponseBody, *(item->Body())); + } + } + + // Add ContentType + if (item->ContentType()) + { + if (item->ContentType()->Length() > 0) + { + AddTextResponseL(KResponseContentType, *(item->ContentType())); + } + + } + + + // Find and add streams + + CDesC8Array* streams = new(ELeave)CDesC8ArraySeg(1); + CleanupStack::PushL( streams ); + + const RPointerArray& streamPtrs = + item->InSession()->Streams(); + + for (TInt streamIndex=0; streamIndex < streamPtrs.Count(); streamIndex++) + { + // Add to registry by reference and fetch name + iContext.Registry().AddObjectL( *(streamPtrs[streamIndex]) ); + TBuf8< KTcMaxObjectName > streamId = + iContext.Registry().ObjectNameL( streamPtrs[streamIndex] ); + streams->AppendL( streamId ); + } + + if ( streams->Count() > 0 ) + { + AddArrayResponseL( KResponseStreams, *streams ); + } + + CleanupStack::PopAndDestroy( streams ); + + } + +TBool TCmdGetSessionId::Match( const TTcIdentifier& aId ) + { + return TTcMceCommandBase::Match( aId, _L8("GetSessionId") ); + } + +TTcCommandBase* TCmdGetSessionId::CreateL( MTcTestContext& aContext ) + { + return new( ELeave ) TCmdGetSessionId( aContext ); + } +