diff -r 000000000000 -r 62f9d29f7211 webservices/wsstar/wsstarplugin/src/wsstarmessagecontext.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/webservices/wsstar/wsstarplugin/src/wsstarmessagecontext.cpp Thu Jan 07 16:19:19 2010 +0200 @@ -0,0 +1,491 @@ +/* +* Copyright (c) 2006-2006 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: +* +*/ + + + + + + + + + + + +#include "SenSoapEnvelope.h" +#include "wsstarmessagecontext.h" +#include "wsstarsessioncontext.h" +#include "SenXmlReader.h" + +#include "senlogger.h" + + +CWSStarMessageContext* CWSStarMessageContext::NewL(SenContext::TContextDirection aDirection, CSenXmlReader*& aParser) + { + CWSStarMessageContext* self = NewLC(aDirection, aParser); + CleanupStack::Pop(self); + return self; + } + +CWSStarMessageContext* CWSStarMessageContext::NewLC(SenContext::TContextDirection aDirection, CSenXmlReader*& aParser) + { + CWSStarMessageContext* self = new (ELeave) CWSStarMessageContext(aDirection, aParser); + CleanupStack::PushL (self); + self->ConstructL(); + return self; + } + +CWSStarMessageContext* CWSStarMessageContext::NewLC( + SenContext::TContextDirection aDirection, CSenXmlReader*& aParser, + CWSStarSessionContext& aSessionContext) + { + CWSStarMessageContext* self = + new (ELeave) CWSStarMessageContext(aDirection, aParser); + CleanupStack::PushL (self); + self->ConstructL(aSessionContext); + return self; + } + +// Constructor +CWSStarMessageContext::CWSStarMessageContext(SenContext::TContextDirection aDirection, CSenXmlReader*& aParser) + :iDirection(aDirection), + iOwnedEnvelope(EFalse), + iParser(aParser), + iDescs(EFalse, ETrue), + iInts(EFalse, ETrue) + { + } + +// Constructor +void CWSStarMessageContext::ConstructL() + { + } + +void CWSStarMessageContext::ConstructL(CWSStarSessionContext& aSessionContext) + { + UpdateFromSessionContextL(aSessionContext); + } + +// Destructor +CWSStarMessageContext::~CWSStarMessageContext() + { + if (iOwnedEnvelope) + { + delete iCurrentEnvelope; + } + iDescs.Reset(); + iInts.Reset(); + } + +//from SessionContext + +CSenSoapMessage* CWSStarMessageContext::GetCurrentSoapMessage() + { + if (iCurrentEnvelope) + { + return (CSenSoapMessage*)iCurrentEnvelope; + } + else + { + return NULL; + } +}; +TPtrC8 CWSStarMessageContext::GetMessageL() + { + return iCurrentEnvelopeTxt; + }; +void CWSStarMessageContext::UpdateDesC8L(CWSStarSessionContext& aSessionContext, const TDesC8& aKey) + { + const TDesC8* ptr = + aSessionContext.GetDesC8L(aKey); + if (ptr && !GetDesC8L(aKey)) + { + User::LeaveIfError(Update(aKey, *ptr)); + } + } +void CWSStarMessageContext::UpdateIntL(CWSStarSessionContext& aSessionContext, const TDesC8& aKey) + { + const TInt* ptr = + aSessionContext.GetIntL(aKey); + if (ptr &&!GetIntL(aKey)) + { + User::LeaveIfError(Update(aKey, *ptr)); + } + } + +void CWSStarMessageContext::UpdateFromSessionContextL( CWSStarSessionContext& aSessionContext ) + { + //becouse of resending we need keep veen message specific stuff inside session ctx + // (see ASYNC handkleerror) + if (Direction() == SenContext::EOutgoing) + { + const TDesC8* ptr = + aSessionContext.GetDesC8L( WSStarContextKeys::KTo ); + if ( ptr ) + { + TInt error = Remove( WSStarContextKeys::KTo ); + if( error ) + { + TLSLOG_L( KSenCoreServiceManagerLogChannelBase, KMinLogLevel, "CWSStarMessageContext::UpdateFromSessionContextL( CWSStarSessionContext& aSessionContext ):" ); + TLSLOG_FORMAT(( KSenCoreServiceManagerLogChannelBase, KMinLogLevel, _L8("- Remove( WSStarContextKeys::KTo ) returned an error(!): %d => going to 'throw a LEAVE'"), error )); + User::LeaveIfError( error ); + } + } + UpdateDesC8L(aSessionContext, WSStarContextKeys::KTo); + UpdateDesC8L(aSessionContext, WSStarContextKeys::KAction); + UpdateDesC8L(aSessionContext, WSStarContextKeys::KAddressingVersion); + UpdateDesC8L(aSessionContext, WSStarContextKeys::KTimestampExpires); + UpdateDesC8L(aSessionContext, WSStarContextKeys::KTimestampCreated); + UpdateDesC8L(aSessionContext, WSStarContextKeys::KPhoneTimeWhenMTResolved); + UpdateDesC8L(aSessionContext, WSStarContextKeys::KPOPBase64); + UpdateDesC8L(aSessionContext, WSStarContextKeys::KBinaryType); + UpdateIntL(aSessionContext, WSStarContextKeys::KSoapVersion); + UpdateIntL(aSessionContext, WSStarContextKeys::KPassportEnabled); + UpdateIntL(aSessionContext, WSStarContextKeys::KMTIsReplacedBySCT); + UpdateDesC8L(aSessionContext, WSStarContextKeys::KSecurityToken); + UpdateDesC8L(aSessionContext, WSStarContextKeys::KBody); + iBody = aSessionContext.GetSenElementL(WSStarContextKeys::KBodyElement); + UpdateDesC8L(aSessionContext, WSStarContextKeys::KSTR); + ipSignedParts = (RPointerArray*)aSessionContext.GetAnyL( WSStarContextKeys::KSignedPartsArray ); + +#ifdef _SENDEBUG + if( !ipSignedParts ) // ipSignedParts == NULL! + { + TLSLOG_L( KSenCoreServiceManagerLogChannelBase, KMinLogLevel, "CWSStarMessageContext::UpdateFromSessionContextL( CWSStarSessionContext& aSessionContext ):" ); + TLSLOG_L( KSenCoreServiceManagerLogChannelBase, KMinLogLevel, "- aSessionContext.GetAnyL( WSStarContextKeys::KSignedPartsArray ) returned NULL(!)" ); + } +#endif // _SENDEBUG + + UpdateIntL(aSessionContext, WSStarContextKeys::KAppInfoPresent); + UpdateDesC8L(aSessionContext, WSStarContextKeys::KApplicationName); + UpdateDesC8L(aSessionContext, WSStarContextKeys::KApplicationVendor); + UpdateDesC8L(aSessionContext, WSStarContextKeys::KApplicationVersion); + UpdateDesC8L(aSessionContext, WSStarContextKeys::KLocale); + UpdateDesC8L(aSessionContext, WSStarContextKeys::KManufacturer); + UpdateDesC8L(aSessionContext, WSStarContextKeys::KModel); + UpdateDesC8L(aSessionContext, WSStarContextKeys::KDeviceName); + UpdateDesC8L(aSessionContext, WSStarContextKeys::KDeviceVersion); + UpdateDesC8L(aSessionContext, WSStarContextKeys::KIMSI); + } + else + { + UpdateIntL(aSessionContext, WSStarContextKeys::KPassportEnabled); + } + } + +TInt CWSStarMessageContext::Add(const TDesC8& aKey, CSenSoapEnvelope* aValue) + { + TInt results = KErrNone; + if (aKey == SenContext::KSenCurrentSoapMessageCtxKey()) + { + if (!iCurrentEnvelope) + { + iCurrentEnvelope = aValue; + } + else + { + results = KErrAlreadyExists; + } + + } + return results; + }; +TInt CWSStarMessageContext::Update(const TDesC8& aKey, CSenSoapEnvelope* aValue) + { + if (aKey == SenContext::KSenCurrentSoapMessageCtxKey()) + { + if (iOwnedEnvelope) + { + delete iCurrentEnvelope; + } + iCurrentEnvelope = aValue; + } + return KErrNone; + }; +const CSenSoapEnvelope* CWSStarMessageContext::GetSenSoapEnvelopeL(const TDesC8& aKey) + { + if (aKey == SenContext::KSenCurrentSoapMessageCtxKey) + { + return iCurrentEnvelope; + } + else + { + return NULL; + } + }; + + + +//from MContext +SenContext::TContextType CWSStarMessageContext::Type() const + { + return SenContext::EMessageContext; + } + +SenContext::TContextDirection CWSStarMessageContext::Direction() const + { + return iDirection; + } +//-----------------descs +TInt CWSStarMessageContext::Add(const TDesC8& aKey, const TDesC8& aValue) + { + if (aKey == SenContext::KSenCurrentSoapMessageCtxKey()) + { + if (! iCurrentEnvelopeTxt.Length()) + { + iCurrentEnvelopeTxt.Set(aValue); + return KErrNone; + } + else + { + return KErrAlreadyExists; + } + } + //version without copy + //return iDescs.Append(&aKey,&aValue); + + //version with making of copy + if (!aValue.Length()) return KErrUnderflow; + HBufC8* newValue = NULL; + TInt error(KErrNone); + TRAP(error, newValue = aValue.AllocL()); + if (!error) + { + error = iDescs.Append(&aKey,newValue); + } + return error; + } + +//it add(if not exist) or update. So , it is like Set +TInt CWSStarMessageContext::Update(const TDesC8& aKey, const TDesC8& aValue) + { + if (aKey == SenContext::KSenCurrentSoapMessageCtxKey()) + { + iCurrentEnvelopeTxt.Set(aValue); + return KErrNone; + } + + //version with makeing of copy + TInt error(KErrNone); + if (!aValue.Length()) + { + error = Remove(aKey); + if (error == KErrNotFound) + return KErrNone; + else + return error; + } + HBufC8* newValue = NULL; + TRAP(error, newValue = aValue.AllocL()); + + if (!error) + { + error = iDescs.UpdateValue(&aKey,newValue); + } + return error; + } + +const TDesC8* CWSStarMessageContext::GetDesC8L(const TDesC8& aKey) + { + if (aKey == SenContext::KSenCurrentSoapMessageCtxKey()) + { + return NULL; + } + TInt index = iDescs.Find(aKey); + if (index != KErrNotFound) + { + return iDescs.ValueAt(index); + } + else + { + return NULL; + } + } + +TInt CWSStarMessageContext::Remove(const TDesC8& aKey) + { + if (aKey == WSStarContextKeys::KBodyElement) + { + iBody = NULL; + return KErrNone; + } + else + { + return iDescs.RemoveByKey(aKey); + } + } +//-------------Ints +TInt CWSStarMessageContext::Add(const TDesC8& aKey, TInt aValue) + { + TInt* a = NULL; + a = new TInt(aValue); + if (a) + { + return iInts.Append(&aKey, a); + } + else + { + return KErrNoMemory; + } + } + +TInt CWSStarMessageContext::Update(const TDesC8& aKey, TInt aValue) + { + TInt* a = NULL; + a = new TInt(aValue); + if (a) + { + return iInts.UpdateValue(&aKey, a); + } + else + { + return KErrNoMemory; + } + } + +const TInt* CWSStarMessageContext::GetIntL(const TDesC8& aKey) + { + TInt index = iInts.Find(aKey); + if (index!=KErrNotFound) + { + return iInts.ValueAt(index); + } + else + { + return NULL; + }; + } + +//-----------------elements +TInt CWSStarMessageContext::Add(const TDesC8& aKey, CSenElement* aValue) + { + return Update(aKey,aValue); + } + +TInt CWSStarMessageContext::Update(const TDesC8& aKey, CSenElement* aValue) + { + if (aKey == WSStarContextKeys::KBodyElement) + { + iBody = aValue; + return KErrNone; + } + return KErrNotFound; + } + +const CSenElement* CWSStarMessageContext::GetSenElementL(const TDesC8& aKey) + { + if (aKey == WSStarContextKeys::KBodyElement) + { + return iBody; + } + return NULL; + } +//-----------------TAnys +TInt CWSStarMessageContext::Add(const TDesC8& /*aKey*/, TAny* /*aValue*/) + { + return KErrNotSupported; + } + +TInt CWSStarMessageContext::Update(const TDesC8& /*aKey*/, TAny* /*aValue*/) + { + return KErrNotSupported; + } + +TAny* CWSStarMessageContext::GetAnyL(const TDesC8& aKey) //codescannerwarnings + { + if(aKey == WSStarContextKeys::KSignedPartsArray) + { + return ipSignedParts; + } + else + { + return NULL; + } + } + +const CSenXmlReader* CWSStarMessageContext::GetParser() + { + return iParser; + } + +TInt CWSStarMessageContext::Count() const + { + return KErrNotSupported; + } + +TPtrC8 CWSStarMessageContext::KeyAtL(TInt /*aIndex*/) + { + return KNullDesC8(); + } + +void CWSStarMessageContext::Reset() + { + } + +MSenMessage* CWSStarMessageContext::MessageL() //codescannerwarnigs + { + return NULL; + } + +TInt CWSStarMessageContext::SetMessage(MSenMessage* /* apMessage */, TBool /* aOwned */) + { + return KErrNotSupported; + } + +TInt CWSStarMessageContext::SetProperties(MSenProperties* /* apTransportProperties */, TBool /* aOwned */) + { + return KErrNotSupported; + } + +MSenProperties* CWSStarMessageContext::Properties() + { + return NULL; + } + +TInt CWSStarMessageContext::Add(const TDesC8& /* aKey */, MSenMessage* /* apMessage */, TBool /* aOwned */) + { + return KErrNotSupported; + } + +TInt CWSStarMessageContext::Update(const TDesC8& /* aKey */, MSenMessage* /* apMessage */, TBool /* aOwned */) + { + return KErrNotSupported; + } + +MSenMessage* CWSStarMessageContext::GetMessageL(const TDesC8& /* aKey */) // codescannerwarnings + { + return NULL; + } + + +CSenChunk* CWSStarMessageContext::ChunkL() //codescannerwarnings + { + return NULL; + } + +TInt CWSStarMessageContext::SetChunk(CSenChunk* /* apMsgAsChunk */, TBool /* aOwned */) + { + return KErrNotSupported; + } + +TInt CWSStarMessageContext::SetDirection( SenContext::TContextDirection /* aDirection */ ) + { + return KErrNotSupported; + } + + +// END OF FILE +