webservices/idwsfplugin/src/idwsfmessage.cpp
changeset 0 62f9d29f7211
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/webservices/idwsfplugin/src/idwsfmessage.cpp	Thu Jan 07 16:19:19 2010 +0200
@@ -0,0 +1,170 @@
+/*
+* 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 <SenDateUtils.h>
+
+#include "idwsfmessage.h"
+
+namespace
+    {
+    _LIT8(KSB11XmlNs,           "urn:liberty:sb:2004-04");
+    _LIT8(KStatus,              "Status");
+    _LIT8(KStatusCodeAttr,      "code");
+    //_LIT8(KStatusOK,          "ok");
+    _LIT8(KDetail,              "detail");
+    }
+
+CIdWsfMessage* CIdWsfMessage::NewL(const TDesC8& aRefToMessageId)
+    {
+    CIdWsfMessage* pNew = new (ELeave) CIdWsfMessage;
+    CleanupStack::PushL(pNew);
+    pNew->BaseConstructL(aRefToMessageId);
+    CleanupStack::Pop(); // pNew;
+    return pNew;
+    }
+
+CIdWsfMessage::~CIdWsfMessage()
+    {
+    TInt leaveCode(KErrNone);
+    TRAP(leaveCode, delete CSenSoapEnvelope::HeaderL().RemoveElement(KSiuXmlns, KSiuName);)
+    leaveCode=0; // not used
+    if(ipSiuHeader)
+        {
+        // We do not own the element, so remove it from the fragment.
+        ipSiuHeader->ExtractElement();
+        delete ipSiuHeader;
+        }
+    }
+
+CIdWsfMessage::CIdWsfMessage()
+    {
+    }
+
+void CIdWsfMessage::BaseConstructL(const TDesC8& aRefToMessageId)
+    {
+    CIdWsfSoapMessage::BaseConstructL();
+
+    // Add correlation header
+    ipCorrelationHeader = CIdWsfCorrelationHeader::NewL(aRefToMessageId);
+    AddHeaderL(*ipCorrelationHeader);
+    }
+
+void CIdWsfMessage::ParseHeaderL(
+    const TDesC8& aNsUri,
+    const TDesC8& aLocalName,
+    const TDesC8& aQName,
+    const RAttributeArray& aAttributes
+    )
+    {
+    if ((aNsUri == KSBXmlNs) && (aLocalName == KCorrelationName))
+        {
+        // Remove existing stuff
+        delete HeaderL().RemoveElement(KSBXmlNs, KCorrelationName);
+
+        // Add new correlation header
+        ipCorrelationHeader = NULL;
+        ipCorrelationHeader = CIdWsfCorrelationHeader::NewL(aAttributes);
+        AddHeaderL(*ipCorrelationHeader);
+        }
+    else if ((aNsUri == KSB11XmlNs) && (aLocalName == KSiuName))
+        {
+        // Remove existing stuff
+        delete HeaderL().RemoveElement(KSB11XmlNs, KSiuName);
+        if (ipSiuHeader)
+            {
+            // We do not own the element, so remove it from the fragment.
+            ipSiuHeader->ExtractElement();
+            delete ipSiuHeader;
+            }
+        ipSiuHeader = NULL;
+        ipSiuHeader = CIdWsfSiuHeader::NewL();
+        DelegateParsingL(*ipSiuHeader);
+        AddHeaderL(ipSiuHeader->AsElement());
+        }
+    else
+        {
+        CIdWsfSoapMessage::ParseHeaderL(aNsUri, aLocalName, aQName, aAttributes);
+        }
+    }
+
+void CIdWsfMessage::SetCorrelationL(const TDesC8& aRefToMessageId)
+    {
+    ipCorrelationHeader->SetCorrelationL(aRefToMessageId);
+    }
+
+TPtrC8 CIdWsfMessage::MessageId()
+    {
+    return ipCorrelationHeader->MessageId();
+    }
+
+
+TPtrC8 CIdWsfMessage::RefToMessageId()
+    {
+    return ipCorrelationHeader->RefToMessageId();
+    }
+
+TPtrC8 CIdWsfMessage::Timestamp()
+    {
+    return ipCorrelationHeader->Timestamp();
+    }
+
+CIdWsfSiuHeader* CIdWsfMessage::SiuHeader()
+    {
+    return ipSiuHeader;
+    }
+
+const TDesC8* CIdWsfMessage::StatusCodeL()
+    {
+    const TDesC8* pCode = NULL;
+    CSenElement* pStatus = NULL;
+    // this fetched first child of Body,not yet the status
+    CSenElement* pBodyChild = CIdWsfSoapMessage::BodyL().Child(0);
+
+    if (pBodyChild)
+        {
+        //now we should have the S:Fault/detail element
+        pStatus = pBodyChild->Element(KSBXmlNs,KStatus);
+        }
+
+    if (!pStatus && pBodyChild)
+        {
+        //now we should have the S:Fault/detail element
+        pBodyChild = pBodyChild->Element(KNullDesC8, KDetail);
+        if (pBodyChild)
+            {
+            //now we should have the S:Fault/detail element
+            pStatus = pBodyChild->Element(KSBXmlNs,KStatus);
+            }
+        }
+
+    if (pStatus)
+        {
+        pCode = pStatus->AttrValue(KStatusCodeAttr);
+        }
+
+    return pCode;
+    }
+
+// End of File