webservices/idwsfplugin/src/idwsfsessionconsumer.cpp
changeset 0 62f9d29f7211
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/webservices/idwsfplugin/src/idwsfsessionconsumer.cpp	Thu Jan 07 16:19:19 2010 +0200
@@ -0,0 +1,278 @@
+/*
+* 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:        
+*
+*/
+
+
+
+
+
+
+
+
+// INCLUDE FILES
+#include <SenXmlUtils.h>
+#include <SenServiceConnection.h>
+
+
+#include "idwsfsessionconsumer.h"
+#include "idwsfmessage.h"
+#include "sendebug.h"
+#include "senlogger.h"
+
+#include <flogger.h>
+
+CIdWsfSessionConsumer* CIdWsfSessionConsumer::NewL(MSenRemoteServiceConsumer& aServiceConsumer,
+                                                   RFileLogger& aLogger)
+    {
+    CIdWsfSessionConsumer* pSelf =
+        CIdWsfSessionConsumer::NewLC(aServiceConsumer, aLogger);
+    CleanupStack::Pop(pSelf);
+    return pSelf;
+    }
+
+CIdWsfSessionConsumer* CIdWsfSessionConsumer::NewLC(MSenRemoteServiceConsumer& aServiceConsumer,
+                                                    RFileLogger& aLogger)
+    {
+    CIdWsfSessionConsumer* pSelf =
+                        new (ELeave) CIdWsfSessionConsumer(aServiceConsumer, aLogger);
+    CleanupStack::PushL(pSelf);
+    pSelf->ConstructL();
+    return pSelf;
+    }
+
+CIdWsfSessionConsumer::~CIdWsfSessionConsumer()
+    {
+    delete iSentMessageId;
+    delete iReceivedMessageId;
+    iSentMessages.Reset();
+    }
+
+CIdWsfSessionConsumer::CIdWsfSessionConsumer(MSenRemoteServiceConsumer& aServiceConsumer,
+                                             RFileLogger& aLogger)
+:   iConsumer(aServiceConsumer),
+    iLogger(aLogger),
+    iSentMessageId(NULL),
+    iReceivedMessageId(NULL),
+    iSentMessages(ETrue, ETrue)
+    {
+    }
+
+
+const TDesC8& CIdWsfSessionConsumer::Id() const
+    {
+    return iConsumer.Id();
+    }
+
+TInt CIdWsfSessionConsumer::SetSessionL(MSenRemoteServiceSession& aServiceSession)
+    {
+    iConsumer.SetSessionL(aServiceSession);
+    return KErrNone;
+    }
+
+TInt CIdWsfSessionConsumer::HandleIdWsfMessageL( CIdWsfMessage* apMessage,
+                                                 const TInt aTxnId,
+                                                 MSenProperties* aResponseTransportProperties,
+                                                 TBool aCompleteMessage )
+    {
+    TLSLOG_L(KSenCoreServiceManagerLogChannelBase  , KMinLogLevel ,"CIdWsfSessionConsumer::HandleIdWsfMessageL");
+    
+    TInt retVal(KErrNone);
+    if ( apMessage )
+        {
+        CleanupStack::PushL( apMessage ); // ownership is here
+    
+        iSentMessages.RemoveByKey( apMessage->MessageId() );
+    
+        HBufC8* pMessageAsString = NULL;
+        
+    	//TSW ID: EMKY-6S4CGS & ID:EMKY-6N3AGA
+    	// Check if aCompleteMessage in ON then get entire envelope or else only body
+        if ( aCompleteMessage )
+            {
+            pMessageAsString = apMessage->AsXmlL();
+            }
+        else
+            {
+            pMessageAsString = apMessage->BodyAsStringL();
+            }
+        CleanupStack::PopAndDestroy( apMessage ); // object serialized to descriptor, de-alloc!
+    
+        if( pMessageAsString )
+            {
+            retVal = iConsumer.HandleMessageL(pMessageAsString, aTxnId, aResponseTransportProperties);
+            }
+        else
+            {
+            TLSLOG_L(KSenCoreServiceManagerLogChannelBase  , KMinLogLevel ,"CIdWsfSessionConsumer::HandleIdWsfMessageL:");
+            TLSLOG_L(KSenCoreServiceManagerLogChannelBase  , KMinLogLevel ,"- Fatal(!): pMessageAsString == NULL, calling remote consumer's HandleErrorL with KErrSenNoSoapBody");
+            retVal = iConsumer.HandleErrorL(NULL, KErrSenNoSoapBody, aTxnId, aResponseTransportProperties);
+            }
+        }
+    else // apMessage == NULL
+        {
+        TLSLOG_L(KSenCoreServiceManagerLogChannelBase  , KMinLogLevel ,"CIdWsfSessionConsumer::HandleIdWsfMessageL:");
+        TLSLOG_L(KSenCoreServiceManagerLogChannelBase  , KMinLogLevel ,"- Fatal(!): apMessage == NULL, calling remote consumer's HandleErrorL with KErrSenInternalError");
+        retVal = iConsumer.HandleErrorL( NULL, KErrSenInternal, aTxnId, aResponseTransportProperties);
+        TLSLOG_FORMAT((KSenCoreServiceManagerLogChannelBase   , KMinLogLevel  ,_L("CIdWsfSessionConsumer::HandleIdWsfMessageL - HandleErrorL returned: %d. Returning KErrSenInternalError in ANY case."), retVal));
+        retVal = KErrSenInternal;            
+        }        
+    return retVal;
+    }
+
+TInt CIdWsfSessionConsumer::HandleMessageL( HBufC8* apMessage,
+                                            const TInt aTxnId,
+                                            MSenProperties* aResponseTransportProperties ) 
+    {
+    TLSLOG_L(KSenCoreServiceManagerLogChannelBase  , KMinLogLevel ,"CIdWsfSessionConsumer::HandleMessageL - passing message to consumer");
+    return iConsumer.HandleMessageL( apMessage, aTxnId, aResponseTransportProperties );
+    }
+
+TInt CIdWsfSessionConsumer::HandleErrorL( HBufC8* apError,
+                                          const TInt aErrorCode,
+                                          const TInt aTxnId,
+                                          MSenProperties* aResponseTransportProperties )
+    {
+    TLSLOG_L(KSenCoreServiceManagerLogChannelBase  , KMinLogLevel ,"CIdWsfSessionConsumer::HandleErrorL - passing error to consumer");
+    return iConsumer.HandleErrorL( apError, aErrorCode, aTxnId, aResponseTransportProperties );
+    }
+
+void CIdWsfSessionConsumer::SetStatusL(const TInt status)
+    {
+    TLSLOG_L(KSenCoreServiceManagerLogChannelBase  , KMinLogLevel ,"CIdWsfSessionConsumer::SetStatusL");
+    iConsumer.SetStatusL(status);
+    }
+
+TInt CIdWsfSessionConsumer::MessageForSendingL( const TDesC8& aBody,
+                                                const TDesC8& aReceivedMessageId,
+                                                CIdWsfMessage*& apMessage )
+    {
+    TLSLOG_L(KSenCoreServiceManagerLogChannelBase  , KMinLogLevel ,"CIdWsfSessionConsumer::MessageForSendingL");
+    if(aReceivedMessageId.Length()>0)
+        {
+        apMessage = CIdWsfMessage::NewL(aReceivedMessageId);
+        }
+    else
+        {
+        apMessage = CIdWsfMessage::NewL();
+        }
+
+    apMessage->SetBodyL(aBody);
+    iSentMessages.Append(apMessage->MessageId().AllocL(), aBody.AllocL());
+    return KErrNone;
+    }
+
+void CIdWsfSessionConsumer::ConstructL()
+    {
+    }
+
+void CIdWsfSessionConsumer::SetSentMessageIdL(const TDesC8& aSentMessageId)
+    {
+    HBufC8* pNew = NULL;
+    if(aSentMessageId.Length()>0)
+    pNew = aSentMessageId.AllocL();    
+    delete iSentMessageId;
+    iSentMessageId = pNew;
+    }
+
+TPtrC8 CIdWsfSessionConsumer::SentMessageId()
+    {
+    if(iSentMessageId)
+        {
+        return *iSentMessageId;
+        }
+    else
+        {
+        return KNullDesC8();
+        }
+    }
+
+void CIdWsfSessionConsumer::SetReceivedMessageIdL(
+                                            const TDesC8& aReceivedMessageId)
+    {
+    HBufC8* pNew =NULL;
+    if(aReceivedMessageId.Length()>0)
+        pNew = aReceivedMessageId.AllocL();
+    delete iReceivedMessageId;
+    iReceivedMessageId = pNew;
+    }
+
+TPtrC8 CIdWsfSessionConsumer::ReceivedMessageId()
+    {
+    if(iReceivedMessageId)
+        return *iReceivedMessageId;
+    else
+        return KNullDesC8();
+    }
+
+
+
+TBool CIdWsfSessionConsumer::Expects(const TDesC8& aRefToMessageID)
+    {
+    TInt index = iSentMessages.Find(aRefToMessageID);
+    if (index != KErrNotFound)
+        {
+        return ETrue;
+        }
+
+    return EFalse;
+    }
+
+TDesC8* CIdWsfSessionConsumer::BodyL(const TDesC8& aMessageID) const
+    {
+    HBufC8* pBody = NULL;
+
+    TInt index = iSentMessages.Find(aMessageID);
+    if (index != KErrNotFound)
+        {
+        pBody = (HBufC8*)iSentMessages.ValueAt(index);
+        }
+
+    return pBody;
+    }
+
+MSenTransport& CIdWsfSessionConsumer::TransportL()
+    {
+    return iConsumer.TransportL();
+    }
+
+CSenIdentifier& CIdWsfSessionConsumer::Identifier() const
+    {
+    return iConsumer.Identifier();
+    }
+
+
+// enable file logging (macros)
+RFileLogger* CIdWsfSessionConsumer::Log() const
+    {
+    return (RFileLogger*) &iLogger;
+    }
+
+
+TInt CIdWsfSessionConsumer::ChunkByTxnIdL(TInt aTxnId, CSenChunk*& aChunk)
+    {
+    return iConsumer.ChunkByTxnIdL(aTxnId, aChunk);
+    }
+
+void CIdWsfSessionConsumer::FileProgress(TInt /*aTxnId*/, TBool /*aIncoming*/, TBool /*aIsSoap*/,
+                const TDesC8& /*aSoapOrCid*/, TInt /*aProgress*/)
+    {
+    }
+void CIdWsfSessionConsumer::SetDataTrafficDetails( TSenDataTrafficDetails& /* aDetails*/)  
+	{
+	}
+// End of file
+
+