diff -r 000000000000 -r c8caa15ef882 simpleengine/engine/src/simpleengineimhandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/simpleengine/engine/src/simpleengineimhandler.cpp Tue Feb 02 01:05:17 2010 +0200 @@ -0,0 +1,229 @@ +/* +* Copyright (c) 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: SIMPLE Engine IM Handler +* +*/ + +#include "simpleengineimhandler.h" +#include "simpleenginerequest.h" +#include "simpleinstantmsgobserver.h" +#include "simplesipconnection.h" +#ifdef _DEBUG +#include "simpledebugutils.h" +#endif + + +// ======== MEMBER FUNCTIONS ======== + + +// --------------------------------------------------------------------------- +// CSimpleEngineImHandler::CSimpleEngineImHandler +// --------------------------------------------------------------------------- +// +CSimpleEngineImHandler::CSimpleEngineImHandler( MSimpleConnection& aConn, + MSimpleInstantMsgObserver& aObserver ) : CSimpleClient( aConn ), + iObserver( aObserver ) + { + + } + +// --------------------------------------------------------------------------- +// CSimpleEngineImHandler::ConstructL +// --------------------------------------------------------------------------- +// +void CSimpleEngineImHandler::ConstructL() + { + BaseConstructL(); + + // Enable instant message receiving + ReceiveInstantMessageL(); + } + +// --------------------------------------------------------------------------- +// CSimpleEngineImHandler::NewL +// --------------------------------------------------------------------------- +// +CSimpleEngineImHandler* CSimpleEngineImHandler::NewL( + MSimpleConnection& aConn, + MSimpleInstantMsgObserver& aObserver ) + { + CSimpleEngineImHandler* self = new (ELeave) CSimpleEngineImHandler( + aConn, aObserver ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); +#ifdef _DEBUG + TSimpleLogger::Log( _L("CSimpleEngineImHandler::NewL this=%d"), + (TInt)self ); +#endif + return self; + } + +// --------------------------------------------------------------------------- +// CSimpleEngineImHandler::~CSimpleEngineImHandler +// --------------------------------------------------------------------------- +// +CSimpleEngineImHandler::~CSimpleEngineImHandler() + { +#ifdef _DEBUG + TSimpleLogger::Log( + _L("CSimpleEngineImHandler::~CSimpleEngineImHandler this=%d"), + (TInt)this ); +#endif + } + +// --------------------------------------------------------------------------- +// From class MSimpleInstantMessage +// Send instant message +// --------------------------------------------------------------------------- +// +TInt CSimpleEngineImHandler::SendInstantMessage( TPtrC8 aMsgContent, + TPtrC8 aRecipient ) + { +#ifdef _DEBUG + TSimpleLogger::Log( _L("CSimpleEngineImHandler::SendInstantMessage") ); +#endif + + IncreaseOpId(); + TRAPD( error, DoSendInstantMessageRequestL( aMsgContent, aRecipient ) ) + + if ( error ) + { + return error; + } + + return iOpId; + } + +// ---------------------------------------------------------- +// From class MSimpleInstantMessage +// CSimpleEngineImHandler::Close +// ---------------------------------------------------------- +// +void CSimpleEngineImHandler::Close() + { + delete this; + } + +// --------------------------------------------------------------------------- +// From class CSimpleClient +// Complete the open client request +// --------------------------------------------------------------------------- +// +void CSimpleEngineImHandler::Complete( TInt aOpId, TInt aStatus, + MSimpleEngineRequest& aReq ) + { +#ifdef _DEBUG + TSimpleLogger::Log( + _L( "CSimpleEngineImHandler::Complete opid=%d, status=%d - Start"), + aOpId, aStatus ); +#endif + + if( MSimpleEngineRequest::EReceiveIM == aReq.RequestType() ) + { + if( !aStatus ) + { + iObserver.HandleReceiveTextMessage( aReq.Recipient(), + aReq.ResponseData() ); + } + // Open receive request was already deleted from SIP Utils side + // Activate receiving again + TRAP_IGNORE( ReceiveInstantMessageL() ) + } + else if( MSimpleEngineRequest::ESendIM == aReq.RequestType() ) + { + iObserver.SendInstantMsgReqComplete( aOpId, aStatus ); + + // Delete the request as not needed anymore + + iRequest = MSimpleEngineRequest::ENone; + // Delete corresponding request from another DLL too. + aReq.ModifyType( MSimpleEngineRequest::EDestroy ); + TRAP_IGNORE( SendReqL( aReq ) ); + // delete request from this DLL. + aReq.Destroy(); + } + else + { + // Unknown request + #ifdef _DEBUG + TSimpleLogger::Log( + _L( "CSimpleEngineImHandler::Complete - Unknown request") ); + #endif + } + +#ifdef _DEBUG + TSimpleLogger::Log( _L( "CSimpleEngineImHandler::Complete - End") ); +#endif + } + +// --------------------------------------------------------------------------- +// Do Send Instant Message request +// --------------------------------------------------------------------------- +// +void CSimpleEngineImHandler::DoSendInstantMessageRequestL( TPtrC8 aMsgContent, + TPtrC8 aRecipient ) + { +#ifdef _DEBUG + TSimpleLogger::Log( + _L( "CSimpleEngineImHandler::DoSendInstantMessageRequestL - Start") ); +#endif + CSimpleEngineRequest* req = CSimpleEngineRequest::NewL( *this, + MSimpleEngineRequest::ESendIM, iOpId ); + CleanupStack::PushL( req ); + + req->SetRefresh( ETrue ); + req->SetRequestData( aMsgContent ); + req->SetRecipientL( aRecipient ); + + // send a request to engine DLL + SendReqL( *req ); + iRequestList.AddLast( *req ); + CleanupStack::Pop( req ); + iRequest = MSimpleEngineRequest::ESendIM; + iSipStatus = KErrNone; +#ifdef _DEBUG + TSimpleLogger::Log( + _L( "CSimpleEngineImHandler::DoSendInstantMessageRequestL - End") ); +#endif + } + +// --------------------------------------------------------------------------- +// Receive instant message +// --------------------------------------------------------------------------- +// +void CSimpleEngineImHandler::ReceiveInstantMessageL() + { +#ifdef _DEBUG + TSimpleLogger::Log( + _L( "CSimpleEngineImHandler::ReceiveInstantMessageL - Start") ); +#endif + IncreaseOpId(); + + CSimpleEngineRequest* req = CSimpleEngineRequest::NewL( *this, + MSimpleEngineRequest::EReceiveIM, iOpId ); + CleanupStack::PushL( req ); + + req->SetRefresh( ETrue ); + // Send a request to engine DLL + SendReqL( *req ); + iRequestList.AddLast( *req ); + CleanupStack::Pop( req ); + iRequest = MSimpleEngineRequest::EReceiveIM; + iSipStatus = KErrNone; +#ifdef _DEBUG + TSimpleLogger::Log( + _L( "CSimpleEngineImHandler::ReceiveInstantMessageL - End") ); +#endif + }