--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/webservices/wsprovider/src/senhostletresponse.cpp Thu Jan 07 16:19:19 2010 +0200
@@ -0,0 +1,266 @@
+/*
+* 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 "senhostletresponse.h"
+
+#include <SenHttpTransportProperties.h>
+#include "senvtcptransportproperties.h"
+#include <SenParser.h>
+
+#include <MSenProperties.h>
+#include <MSenMessage.h>
+#include "senmessagecontext.h"
+#include "SenSoapMessage2.h"
+
+//using namespace SenContext;
+
+EXPORT_C CSenHostletResponse* CSenHostletResponse::NewL(const TInt aRequestId)
+ {
+ CSenHostletResponse* pNew = CSenHostletResponse::NewLC(aRequestId);
+ CleanupStack::Pop();
+ return pNew;
+ }
+
+EXPORT_C CSenHostletResponse* CSenHostletResponse::NewLC(const TInt aRequestId)
+ {
+ CSenHostletResponse* pNew = new(ELeave) CSenHostletResponse(aRequestId);
+ CleanupStack::PushL(pNew);
+ pNew->BaseConstructL();
+ return pNew;
+ }
+
+void CSenHostletResponse::BaseConstructL()
+ {
+ }
+
+CSenHostletResponse::CSenHostletResponse(const TInt aRequestId)
+: iRequestId(aRequestId),
+ iResponseCode(KErrNone),
+ ipOwnedResponseUtf8(NULL),
+ ipMessageContext(NULL)
+ {
+ }
+
+EXPORT_C CSenHostletResponse::~CSenHostletResponse()
+ {
+ delete ipOwnedResponseUtf8;
+ ipOwnedResponseUtf8 = NULL;
+ delete ipMessageContext;
+ ipMessageContext = NULL;
+ }
+
+EXPORT_C void CSenHostletResponse::SetResponseUtf8L(const TDesC8& aResponseBodyUtf8,
+ const TInt aResponseCode,
+ MSenProperties* apResponseProperties,
+ MSenMessage* apMessage)
+ {
+ HBufC8* pTemp = aResponseBodyUtf8.AllocL();
+ iResponseCode = aResponseCode;
+ delete ipOwnedResponseUtf8;
+ ipOwnedResponseUtf8 = NULL;
+ ipOwnedResponseUtf8 = pTemp;
+
+
+ TInt error(KErrNone);
+ MSenProperties* p = NULL;
+ if( apResponseProperties && apResponseProperties->PropertiesClassType() != MSenProperties::ENotInUse )
+ {
+ p = apResponseProperties->Clone(error);
+ }
+
+ if( p )
+ {
+ // Create new message context
+ delete ipMessageContext;
+ ipMessageContext = NULL;
+ MessageContextL( p );
+ }
+ else
+ {
+ MessageContextL();
+ }
+
+ MSenMessageContext& ctx = MessageContextL();
+ MSenMessage* pMessage = NULL;
+ if( !apMessage )
+ {
+ pMessage = CSenSoapMessage2::NewL( ctx ); // ctx holds the transport properties, if such exist
+ ctx.SetMessage(pMessage, ETrue);
+ }
+ else
+ {
+ pMessage = apMessage->CloneL();
+ ctx.SetMessage(pMessage, ETrue);
+ }
+
+ // Set the message into context, with possible properties..
+ error = 0; // not used in release builds
+
+/*
+ MSenProperties* pResponseProperties = NULL;
+
+ if( apResponseProperties && apResponseProperties->PropertiesClassType() != MSenProperties::ENotInUse )
+ {
+ switch(apResponseProperties->PropertiesClassType())
+ {
+ case MSenProperties::ENotInUse:
+ {
+ break;
+ }
+
+
+ case MSenProperties::ESenXmlProperties:
+ case MSenProperties::ESenLayeredXmlProperties: // flatten the props
+ {
+ pResponseProperties = CSenXmlProperties::NewL(); // iSerializedMessage, *pReader);
+ break;
+ }
+ case MSenProperties::ESenTransportProperties:
+ case MSenProperties::ESenLayeredTransportProperties: // flatten the props
+ {
+ pResponseProperties = CSenTransportProperties::NewL();
+ break;
+ }
+ case MSenProperties::ESenHttpTransportProperties:
+ case MSenProperties::ESenLayeredHttpTransportProperties: // flatten the props
+ {
+ pResponseProperties = CSenHttpTransportProperties::NewL();
+ break;
+ }
+ case MSenProperties::ESenVtcpTransportProperties:
+ case MSenProperties::ESenLayeredVtcpTransportProperties: // flatten the props
+ {
+ pResponseProperties = CSenVtcpTransportProperties::NewL();
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+
+ if( ipResponseProperties )
+ {
+ HBufC8* pSerializedProperties = apResponseProperties->AsUtf8LC();
+ if (pSerializedProperties && pSerializedProperties->Length()>0)
+ {
+ TRAPD( err, ipResponseProperties->ReadFromL(*pSerializedProperties); ) // suppress any parsing leave
+ TInt unused(err);
+ err = unused;
+ }
+ CleanupStack::PopAndDestroy(pSerializedProperties);
+ }
+ }
+*/
+ }
+
+
+EXPORT_C MSenProperties* CSenHostletResponse::ResponseProperties()
+ {
+ TInt leaveCode(KErrNone);
+ MSenMessageContext* pCtx = NULL;
+ MSenMessage* pMessage = NULL;
+ TRAP( leaveCode, pCtx = &(MessageContextL()); )
+ if( !leaveCode && pCtx )
+ {
+ TRAP( leaveCode, pMessage = pCtx->MessageL(); )
+ //pMessage = pCtx->Message();
+ if( !leaveCode && pMessage )
+ {
+ return pMessage->Properties();
+ }
+ }
+ return NULL; // not found
+ }
+
+EXPORT_C MSenMessage* CSenHostletResponse::ResponseMessageL()
+ {
+ TInt leaveCode(KErrNone);
+ MSenMessage* pMsg = NULL;
+ TRAP( leaveCode, pMsg = MessageContextL().MessageL(); )
+ if( leaveCode == KErrNone )
+ {
+ return pMsg;
+ }
+ leaveCode = 0; // ignored
+ return NULL;
+ }
+
+
+EXPORT_C HBufC8* CSenHostletResponse::ExtractResponseUtf8()
+ {
+ HBufC8* pResult = ipOwnedResponseUtf8;
+ ipOwnedResponseUtf8 = NULL;
+ return pResult;
+ }
+
+
+EXPORT_C TPtrC8 CSenHostletResponse::ResponseUtf8()
+ {
+ if(ipOwnedResponseUtf8)
+ {
+ return *ipOwnedResponseUtf8;
+ }
+ else
+ {
+ return KNullDesC8();
+ }
+ }
+
+EXPORT_C TInt CSenHostletResponse::RequestId() const
+ {
+ return iRequestId;
+ }
+
+EXPORT_C TInt CSenHostletResponse::ResponseCode() const
+ {
+ return iResponseCode;
+ }
+
+
+MSenMessageContext& CSenHostletResponse::MessageContextL(MSenProperties* apProperties)
+ {
+ if( !ipMessageContext )
+ {
+ if( apProperties )
+ ipMessageContext = CSenMessageContext::NewL(SenContext::EOutgoing, apProperties);
+ else
+ {
+ CSenXmlProperties* p = CSenXmlProperties::NewL();
+ CleanupStack::PushL(p);
+ ipMessageContext = CSenMessageContext::NewL(SenContext::EOutgoing, p);
+ CleanupStack::Pop(p);
+ }
+ }
+ return *ipMessageContext;
+ }
+
+
+// END OF FILE
+
+
+