--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/webservices/wsframework/src/sensyncrequester.cpp Thu Jan 07 16:19:19 2010 +0200
@@ -0,0 +1,245 @@
+/*
+* 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 "sensyncrequester.h"
+#include "msentransport.h"
+#include "msencoreservicemanager.h" // internal: Core\inc
+#include "senidentifier.h"
+#include "senguidgen.h" // internal: Utils\inc
+#include "MSenHostlet.h"
+#include "MSenProperties.h"
+
+EXPORT_C CSenSyncRequester* CSenSyncRequester::NewL(MSenTransport& aTransport,
+ MSenCoreServiceManager& aManager)
+ {
+ CSenSyncRequester* pNew = CSenSyncRequester::NewLC(aTransport, aManager);
+ CleanupStack::Pop();
+ return pNew;
+ }
+
+EXPORT_C CSenSyncRequester* CSenSyncRequester::NewLC(MSenTransport& aTransport,
+ MSenCoreServiceManager& aManager)
+ {
+ CSenSyncRequester* pNew = new (ELeave) CSenSyncRequester(aTransport, aManager);
+ CleanupStack::PushL(pNew);
+ pNew->BaseConstructL();
+ return pNew;
+ }
+
+EXPORT_C CSenSyncRequester::~CSenSyncRequester()
+ {
+ delete ipResponse;
+ delete ipResponseProperties;
+ delete ipConsumerId;
+ delete ipIdentifier;
+ }
+
+EXPORT_C CSenSyncRequester::CSenSyncRequester(MSenTransport& aTransport,
+ MSenCoreServiceManager& aManager)
+
+: iTransport(aTransport),
+ iServiceManager(aManager),
+ ipIdentifier(NULL),
+ ipConsumerId(NULL),
+ ipResponse(NULL),
+ ipResponseProperties(NULL),
+ iResponsePropertiesType(MSenProperties::ESenXmlProperties),
+ iStatusCode(KErrNone)
+ {
+ }
+
+EXPORT_C void CSenSyncRequester::BaseConstructL()
+ {
+ ipConsumerId = iServiceManager.RandomGuidL();
+ ipIdentifier = CSenIdentifier::NewL(SenIdentifier::ESession, *ipConsumerId);
+ }
+
+TInt CSenSyncRequester::SubmitL(const TDesC8& aEndpointUri,
+ const TDesC8& aMessage,
+ const TDesC8& aRequestTransportProperties,
+ HBufC8*& apResponseTo)
+ {
+ iStatusCode = KErrNone;
+ TInt txnId(KErrNone);
+ TInt retCode = iTransport.SendL(aEndpointUri,
+ aMessage,
+ aRequestTransportProperties,
+ *this,
+ *this,
+ txnId);
+
+ if(retCode==KErrNone)
+ {
+ // Wait here until a callback from transport is received:
+ iSchedulerWait.Start();
+
+ // Now read the response and return code from member variables,
+ // and assign them to the references passed by the SubmitL caller:
+
+ apResponseTo = ipResponse;
+ ipResponse = NULL;
+ //apResponseProperties = ipResponseProperties; // transport properties of the response.
+ //ipResponseProperties = NULL;
+
+ // On success, always return the transaction ID received from the transport:
+ return txnId;
+ }
+ else // error occurred
+ {
+ // SendL failed, return the error immediately:
+ return retCode;
+ }
+ }
+
+
+TInt CSenSyncRequester::SendToConsumerL(HBufC8* apMessage,
+ const TInt aTxnId,
+ MSenRemoteServiceConsumer& aConsumer,
+ MSenProperties* aResponseTransportProperties)
+ {
+ // SendToConsumerL method will be changed to provide reference to
+ // the transport properties which describe the RESPONSE, not request..
+ return aConsumer.HandleMessageL(apMessage, aTxnId, aResponseTransportProperties);
+ }
+
+TInt CSenSyncRequester::SendErrorToConsumerL(const TInt aErrorCode,
+ HBufC8* apError,
+ const TInt aTxnId,
+ MSenRemoteServiceConsumer& aConsumer,
+ MSenProperties* aResponseTransportProperties)
+ {
+ // SendErrorToConsumerL method will be changed to provide reference to
+ // the transport properties which describe the RESPONSE, not request..
+ return aConsumer.HandleErrorL(apError, aErrorCode, aTxnId, aResponseTransportProperties);
+ }
+
+// Note: this method is meant for those SESSION implementations, which
+// actually are capable of handling certain errors between transport
+// and session.
+TInt CSenSyncRequester::HandleErrorL(const TInt aErrorCode,
+ HBufC8* apError,
+ const TInt /*aTxnId*/,
+ MSenRemoteServiceConsumer& /*aConsumer*/,
+ MSenProperties* /*aResponseTransportProperties*/)
+ {
+ // NONE of the errors between transport and session are handled in this level:
+ delete apError;
+ return aErrorCode; // simply bounce the error back to the caller
+ }
+
+const TDesC8& CSenSyncRequester::Id() const
+ {
+ return *ipConsumerId;
+ }
+
+TInt CSenSyncRequester::SetSessionL(MSenRemoteServiceSession& /*aServiceSession*/)
+ {
+ return KErrNone;
+ }
+
+// From MSenRemoteServiceConsumer
+TInt CSenSyncRequester::HandleMessageL(HBufC8* apMessage,
+ const TInt aTxnId,
+ MSenProperties* aResponseTransportProperties)
+ {
+ iStatusCode = KErrNone;
+ ipResponse = apMessage;
+ if( aResponseTransportProperties )
+ {
+ iResponsePropertiesType = aResponseTransportProperties->PropertiesClassType();
+ ipResponseProperties = aResponseTransportProperties->AsUtf8L();
+ }
+ // Now stop the SYNC wait in the SubmitL, so that the main thread
+ // of the Serene Core Active Scheduler can continue it's execution
+ iSchedulerWait.AsyncStop();
+ return aTxnId;
+ }
+
+// From MSenServiceSession
+TInt CSenSyncRequester::HandleErrorL(HBufC8* apError,
+ const TInt aErrorCode,
+ const TInt aTxnId,
+ MSenProperties* aResponseTransportProperties)
+ {
+ iStatusCode = aErrorCode;
+ ipResponse = apError;
+ if( aResponseTransportProperties )
+ {
+ iResponsePropertiesType = aResponseTransportProperties->PropertiesClassType();
+ ipResponseProperties = aResponseTransportProperties->AsUtf8L();
+ }
+ // Now stop the SYNC wait in the SubmitL, so that the main thread
+ // of the Serene Core Active Scheduler can continue it's execution
+ iSchedulerWait.AsyncStop();
+ return aTxnId;
+ }
+
+void CSenSyncRequester::SetStatusL(const TInt /*aStatus*/)
+ {
+ // not implemented
+ }
+
+MSenTransport& CSenSyncRequester::TransportL()
+ {
+ return (MSenTransport&)iTransport;
+ }
+
+CSenIdentifier& CSenSyncRequester::Identifier() const
+ {
+ return *ipIdentifier;
+ }
+
+
+TInt CSenSyncRequester::ChunkByTxnIdL(TInt /* aTxnId */, CSenChunk*& /* aChunk */)
+ {
+ return KErrNotSupported;
+ }
+
+MSenRemoteHostlet* CSenSyncRequester::Hostlet() const
+ {
+ return NULL;
+ }
+
+TInt CSenSyncRequester::SendToHostletL(MSenRemoteHostlet& /* aReceiver */,
+ const TDesC8& /* aMessage */,
+ const TInt /* aTxnId */,
+ MSenRemoteServiceConsumer& /* aFrom */,
+ MSenProperties* /* aProperties */)
+ {
+ return KErrNotSupported;
+ }
+
+void CSenSyncRequester::FileProgress(TInt /*aTxnId*/, TBool /*aIncoming*/, TBool /*aIsSoap*/,
+ const TDesC8& /*aSoapOrCid*/, TInt /*aProgress*/)
+ {
+ }
+void CSenSyncRequester::SetDataTrafficDetails( TSenDataTrafficDetails& /*aDetails*/)
+ {
+ }
+// End of File
+