diff -r 000000000000 -r 094583676ce7 PECengine/ListLibrary2/AuthSrc/CPEngAuthorizationTransactionIn.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PECengine/ListLibrary2/AuthSrc/CPEngAuthorizationTransactionIn.cpp Thu Dec 17 08:41:52 2009 +0200 @@ -0,0 +1,309 @@ +/* +* 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: Authorization in transaction handler. +* +*/ + + +// INCLUDE FILES +#include "CPEngAuthorizationTransactionIn.h" +#include "CPEngAuthorizationRequest.h" +#include "CPEngAuthorizationResponse.h" +#include "MPEngAuthorizationEngine.h" +#include "MPEngXMLParser.h" + +#include "MPEngPresenceAttrManager.h" +#include "PEngWVPresenceErrors2.h" +#include "PresenceDebugPrint.h" + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CPEngAuthorizationTransactionIn::CPEngAuthorizationTransactionIn() +// ----------------------------------------------------------------------------- +// +CPEngAuthorizationTransactionIn::CPEngAuthorizationTransactionIn( + MPEngAuthorizationEngine& aAuthEngine, + MPEngPresenceAttrManager& aAttrManager, + MPEngXMLParser& aXMLParser, + const TDesC8& aParseBlock, + TPEngAuthorizationTransType aType ) + : iAuthEngine( aAuthEngine ), + iAttributeManager( aAttrManager ), + iXMLParser( aXMLParser ), + iParseBlock( aParseBlock ), + iResponseType( aType ) + { + PENG_DP( D_PENG_LIT( "CPEngAuthorizationTransactionIn::CPEngAuthorizationTransactionIn" ) ); + } + + +// ----------------------------------------------------------------------------- +// CPEngAuthorizationTransactionIn::ConstructL() +// ----------------------------------------------------------------------------- +// +void CPEngAuthorizationTransactionIn::ConstructL() + { + } + + +// ----------------------------------------------------------------------------- +// CPEngAuthorizationTransactionIn::NewL() +// ----------------------------------------------------------------------------- +// +CPEngAuthorizationTransactionIn* CPEngAuthorizationTransactionIn::NewL( + MPEngAuthorizationEngine& aAuthEngine, + MPEngPresenceAttrManager& aAttrManager, + MPEngXMLParser& aXMLParser, + const TDesC8& aParseBlock, + TPEngAuthorizationTransType aType ) + { + CPEngAuthorizationTransactionIn* self = NewLC( aAuthEngine, + aAttrManager, + aXMLParser, + aParseBlock, + aType ); + + CleanupStack::Pop(); + return self; + } + + +// ----------------------------------------------------------------------------- +// CPEngAuthorizationTransactionIn::NewLC() +// ----------------------------------------------------------------------------- +// +CPEngAuthorizationTransactionIn* CPEngAuthorizationTransactionIn::NewLC( + MPEngAuthorizationEngine& aAuthEngine, + MPEngPresenceAttrManager& aAttrManager, + MPEngXMLParser& aXMLParser, + const TDesC8& aParseBlock, + TPEngAuthorizationTransType aType ) + { + CPEngAuthorizationTransactionIn* self = + new ( ELeave ) CPEngAuthorizationTransactionIn( + aAuthEngine, + aAttrManager, + aXMLParser, + aParseBlock, + aType ); + CleanupStack::PushL( self ); + self->ConstructL( ); + + return self; + } + + +// Destructor +CPEngAuthorizationTransactionIn::~CPEngAuthorizationTransactionIn() + { + } + + + +// ----------------------------------------------------------------------------- +// CPEngAuthorizationTransactionIn::ProcessRequestL() +// ----------------------------------------------------------------------------- +// +void CPEngAuthorizationTransactionIn::ProcessRequestL( + const TDesC8& /*aRequest*/, + TRequestStatus& /*aStatus*/ ) + { + HBufC* userId = ParseUserIdLC(); + switch ( iResponseType ) + { + case EPEngAuthorizationRequest: + { + PENG_DP( D_PENG_LIT( "CPEngAuthorizationTransactionIn::ProcessRequestL() - AuthRequest[%S]" ), + userId ); + + + CPEngAuthorizationRequest* authRequest = + CPEngAuthorizationRequest::NewLC( *userId, + iAuthEngine.SizeCounter() ); + ParseAttrListL( *authRequest, + &CPEngAuthorizationRequest::AddRequestedAttributeL ); + + // store authorization request + // removes authRequest from cleanupstack + iAuthEngine.AddAuthRequestLX( authRequest ); + break; + } + + + case EPEngAuthorizationResponse: + { + PENG_DP( D_PENG_LIT( "CPEngAuthorizationTransactionIn::ProcessRequestL() - AuthResponse[%S]" ), + userId ); + + CPEngAuthorizationResponse* authStatus = + CPEngAuthorizationResponse::NewLC( *userId, + iAuthEngine.SizeCounter() ); + + ParseAttrListL( *authStatus, + &CPEngAuthorizationResponse::AddAttributeL ); + ParseAuthorizationStatusL( *authStatus ); + + // store authorization status + // removes authStatus from cleanupstack + iAuthEngine.AddAuthStatusLX( authStatus ); + break; + } + + + default: + { + break; + } + } + + CleanupStack::PopAndDestroy( userId ); + } + + +// ----------------------------------------------------------------------------- +// CPEngAuthorizationTransactionIn::CancelProcessing() +// ----------------------------------------------------------------------------- +// +void CPEngAuthorizationTransactionIn::CancelProcessing() + { + } + + +// ----------------------------------------------------------------------------- +// CPEngAuthorizationTransactionIn::ParseUserIdL() +// ----------------------------------------------------------------------------- +// +HBufC* CPEngAuthorizationTransactionIn::ParseUserIdLC() + { + if ( !iXMLParser.DecodeL( iParseBlock, KUserIDXMLTag, EFalse ) ) + { + // message is corrupted, ignore it + User::Leave( KErrArgument ); + return NULL; + } + + HBufC* userId = iXMLParser.ResultAsWVAddressL(); + CleanupStack::PushL( userId ); + return userId; + } + + +// ----------------------------------------------------------------------------- +// CPEngAuthorizationTransactionIn::ParseAttrListL() +// ----------------------------------------------------------------------------- +// +template +void CPEngAuthorizationTransactionIn::ParseAttrListL( + AuthItem& aAuthItem, + void ( AuthItem::* aAddFunc )( TUint32 ) ) + { + // read list of attributes + if ( iXMLParser.DecodeL( iParseBlock, KPresenceSubList, ETrue ) ) + { + // store list of attributes + TPtrC8 attributesBlock = iXMLParser.ResultL(); + + //look for all supported attributes + TArray supportedAt = iAttributeManager.KnownAttributeTypes(); + TInt count( supportedAt.Count() ); + for ( TInt x( 0 ); x < count ; ++x ) + { + // get attribute's name + TPtrC8 nameSpace; + TPtrC8 attrName; + if ( ( KErrNone == iAttributeManager.GetAttributeXmlNameAndNameSpace( + supportedAt[ x ], + attrName, + nameSpace ) ) + && + ( iXMLParser.DecodeL( attributesBlock, attrName, EFalse ) ) ) + { + ( aAuthItem.*aAddFunc )( supportedAt[ x ] ); + } + } + } + } + + +// ----------------------------------------------------------------------------- +// CPEngAuthorizationTransactionIn::ParseAuthorizationStatusL() +// ----------------------------------------------------------------------------- +// +void CPEngAuthorizationTransactionIn::ParseAuthorizationStatusL( + CPEngAuthorizationResponse& aAuthStatus ) + { + TBool acceptance( EFalse ); + if ( iXMLParser.DecodeL( iParseBlock, + KAcceptance, + EFalse ) ) + { + acceptance = ( iXMLParser.ResultL().CompareF( KXMLValueTrue ) == KErrNone ); + } + + if ( acceptance ) + { + aAuthStatus.SetResponseType( MPEngAuthorizationStatus::EPEngAuthAccepted ); + } + else + { + aAuthStatus.SetResponseType( MPEngAuthorizationStatus::EPEngAuthDenied ); + } + } + + +// End of File + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +