diff -r 000000000000 -r ff3b6d0fd310 phoneclientserver/phoneclient/Src/Messenger/RPhCltMessenger.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneclientserver/phoneclient/Src/Messenger/RPhCltMessenger.cpp Tue Feb 02 01:11:09 2010 +0200 @@ -0,0 +1,207 @@ +/* +* Copyright (c) 2004 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: This class is used to perform Phone Client Extension +* Messenger originated commands. +* +*/ + + + +// INCLUDES + +#include "RPhCltMessenger.h" +#include +#include "PhCltClientServer.h" + + + +// ============================ MEMBER FUNCTIONS =============================== + + +// ----------------------------------------------------------------------------- +// RPhCltMessenger::RPhCltMessenger +// +// C++ constructor can NOT contain any code, that might leave. +// ----------------------------------------------------------------------------- +// +RPhCltMessenger::RPhCltMessenger() +: RSubSessionBase(), + iReceiveMessageSize( NULL, 0 ), + iMesParPckg( iMessengerParameters ) + { + } + + +// ----------------------------------------------------------------------------- +// RPhCltMessenger::~RPhCltMessenger +// +// Destructor. +// ----------------------------------------------------------------------------- +// +RPhCltMessenger::~RPhCltMessenger() + { + // Ensure that the subsession is closed. + Close(); + } + + +// ----------------------------------------------------------------------------- +// RPhCltMessenger::Open +// +// Open subsession to Phone Server. +// ----------------------------------------------------------------------------- +// +TInt RPhCltMessenger::Open( + RPhCltServer& aServer, + const TUid& aCategoryUid, + const TInt& aDefaultMessageSize ) + { + __ASSERT_ALWAYS( aServer.Handle(), User::Panic( + KPhClientPanicCategory, + EPhCltClientSidePanicNullHandle ) ); + + TInt err = CreateSubSession( + aServer, + EPhoneServerMessengerSubSessionOpen, + TIpcArgs() ); + + + // If subsession was created successfully, construct it properly. + if ( !err ) + { + // Set the needed variables to be transferred to PhoneServer side. + iMessengerParameters.iCategoryUid = aCategoryUid; + iMessengerParameters.iDefaultMessageSize = aDefaultMessageSize; + + err = SendReceive( + EPhoneServerMessengerSubSessionConstruct, + TIpcArgs( &iMesParPckg ) ); + + // If memory reservations failed, close subsession. + if ( err ) + { + Close(); + } + } + + return err; + } + + +// ----------------------------------------------------------------------------- +// RPhCltMessenger::Close +// +// Close subsession. +// ----------------------------------------------------------------------------- +// +void RPhCltMessenger::Close() + { + CloseSubSession( EPhoneServerMessengerSubSessionClose ); + } + + +// ----------------------------------------------------------------------------- +// RPhCltMessenger::Receive +// +// Receive message. +// ----------------------------------------------------------------------------- +// +void RPhCltMessenger::Receive( + TRequestStatus& aStatus, + TInt& aMessageSize, + TDes8& aMessagePayload ) + { + __ASSERT_ALWAYS( + SubSessionHandle(), User::Panic( + KPhClientPanicCategory, EPhCltClientSidePanicNullHandle ) ); + + // Set message size variables to be byte descriptor. + iReceiveMessageSize.Set( ( TUint8* )&aMessageSize, 0, sizeof( TInt ) ) ; + iMessengerParameters.iReceiveMessageSizePtr = &iReceiveMessageSize; + + iMessengerParameters.iReceiveBufferMaxSize = aMessagePayload.MaxSize(); + + SendReceive( + EPhoneServerMessengerSubSessionReceive, + TIpcArgs( + &iMesParPckg, + &aMessagePayload, + &iReceiveMessageSize ), + aStatus ); + } + + +// ----------------------------------------------------------------------------- +// RPhCltMessenger::Send +// +// Send message. +// ----------------------------------------------------------------------------- +// +void RPhCltMessenger::Send( + TRequestStatus& aStatus, + const TDesC8& aMessagePayload ) + { + __ASSERT_ALWAYS( + SubSessionHandle(), User::Panic( + KPhClientPanicCategory, EPhCltClientSidePanicNullHandle ) ); + + iMessengerParameters.iSendPayloadLength = aMessagePayload.Length(); + + SendReceive( + EPhoneServerMessengerSubSessionSend, + TIpcArgs( + &iMesParPckg, + &aMessagePayload ), + aStatus ); + } + + +// ----------------------------------------------------------------------------- +// RPhCltMessenger::CancelRequest +// +// Cancel ongoing request. +// ----------------------------------------------------------------------------- +// +void RPhCltMessenger::CancelRequest( const TPhCltMessengerRequest& aRequest ) + { + __ASSERT_ALWAYS( SubSessionHandle(), User::Panic( + KPhClientPanicCategory, EPhCltClientSidePanicNullHandle ) ); + + iMessengerParameters.iCancelRequest = aRequest; + + SendReceive( + EPhoneServerMessengerSubSessionCancel, + TIpcArgs( &iMesParPckg ) ); + } + + +// ----------------------------------------------------------------------------- +// RPhCltMessenger::Skip +// +// Skip the current message. +// ----------------------------------------------------------------------------- +// +void RPhCltMessenger::Skip() + { + __ASSERT_ALWAYS( + SubSessionHandle(), User::Panic( + KPhClientPanicCategory, EPhCltClientSidePanicNullHandle ) ); + + SendReceive( + EPhoneServerMessengerSubSessionSkip, + TIpcArgs() ); + } + + +// End of File