diff -r 000000000000 -r 094583676ce7 IMPSengine/client/src/impspurehandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/IMPSengine/client/src/impspurehandler.cpp Thu Dec 17 08:41:52 2009 +0200 @@ -0,0 +1,162 @@ +/* +* Copyright (c) 2002-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: +* WV engine pure data API +* +* +*/ + + +// INCLUDE FILES +// INCLUDE FILES +#include + +#include "impspurecli.h" +#include "impspurehandler.h" +#include "impserrors.h" +#include "impsdataaccessor.h" +#include "impscdatautils.h" +#include "impsutils.h" + +// MACROS +#ifndef _DEBUG +#define _NO_IMPS_LOGGING_ +#endif + +// ================= MEMBER FUNCTIONS ======================= + +// ---------------------------------------------------------------------------- +// CImpsPureHandler2::CImpsPureHandler2 +// ---------------------------------------------------------------------------- +CImpsPureHandler2::CImpsPureHandler2( + TInt aPriority, + RImpsPureClient2& aClient ) : + // The base class adds this to the scheduler + CImpsHandler2( aPriority, aClient) + { + } + +// ---------------------------------------------------------------------------- +// CImpsPureHandler2::NewL +// ---------------------------------------------------------------------------- +CImpsPureHandler2* CImpsPureHandler2::NewL( + RImpsPureClient2& aClient, + TInt aPriority ) + { + + // Perform the construction. + CImpsPureHandler2* self = new (ELeave) + CImpsPureHandler2( aPriority, aClient); + + CleanupStack::PushL( self ); + self->CImpsHandler2::ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ---------------------------------------------------------------------------- +// CImpsPureHandler2::~CImpsPureHandler2() +// ---------------------------------------------------------------------------- +CImpsPureHandler2::~CImpsPureHandler2() + { + } + +// ---------------------------------------------------------------------------- +// CImpsPureHandler2::HandleEventL() +// ---------------------------------------------------------------------------- +void CImpsPureHandler2::HandleEventL( CImpsFields* aErrorFields ) + { + // get the event data from server thread. + SImpsEventData* event = (SImpsEventData*)iEventData.Ptr(); + TImpsMessageType msgType = (TImpsMessageType)event->iMessageType; + +#ifndef _NO_IMPS_LOGGING_ + CImpsClientLogger::Log(_L("CImpsPureHandler::HandleEventL opid=%d cli=%d"), + event->iOpCode, (TInt)&iClient ); +#endif + if ( msgType != EImpsPureData ) + { + HandleErrorEventL( event->iOpCode, event->iStatus, aErrorFields ); + } + // Call regular observer + // iStatus is error code or message size + else if ( iStatus >= 0 ) + { + HandlePureEventL( ); + } + } + +// ---------------------------------------------------------------------------- +// CImpsPureHandler2::HandlePureEventL() +// ---------------------------------------------------------------------------- +void CImpsPureHandler2::HandlePureEventL( ) + { + SImpsEventData* event = (SImpsEventData*)iEventData.Ptr(); + RImpsPureClient2& client = (RImpsPureClient2&)iClient; + MImpsPureHandler2* handler = client.Handler(); + + // Check request message type + TInt myType = event->iMessageType; + + CImpsDataAccessor* myAccess = CImpsDataAccessor::NewLC( iFields ); // << + CImpsKey* myKey = CImpsKey::NewLC(); // <<< myKey + + switch ( myType ) + { + case EImpsStatus: + case EImpsPureData: + { + if ( !handler ) + { +#ifndef _NO_IMPS_LOGGING_ + CImpsClientLogger::Log(_L("CImpsPureHandler2:HandlePureEventL: NO HANDLER opid=%d cli=%d h=%d"), + event->iOpCode, (TInt)&iClient, (TInt)this ); +#endif + break; + } + TPtrC8 pureData; + pureData.Set( KNullDesC8 ); + + TImpsCDataUtils::AddValuesFromArrayL( + myKey, + KTransContentElements, + sizeof( KTransContentElements ) / + sizeof( KTransContentElements[0] ) ); + myKey->AddL( CREATEKEY( EImpsKeyPureData, 0 ) ); + TDesC8* temp = NULL; + if( myAccess->RestoreDesc8L( myKey, temp ) ) + pureData.Set( *temp ); + +#ifndef _NO_IMPS_LOGGING_ + CImpsClientLogger::Log(_L("CImpsPureHandler2:HandlePureEventL: calls HandlePureDataL opid=%d cli=%d h=%d"), + event->iOpCode, (TInt)&iClient, (TInt)this ); +#endif + + // Call API observer method + TInt err( KErrNone ); + TRAP( err, handler->HandlePureDataL( event->iOpCode, pureData, *iClient.CspIdentifier() )); + } + break; + default: // responses + __ASSERT_DEBUG( 0 == 1, + User::Panic( KImpsPanicCategory, + EImpsCorrupted ) ); + User::Leave( KErrNotSupported ); + break; + } // switch + CleanupStack::PopAndDestroy(2); // myKey, myAccess + } + +// End of File +