webservices/wshttpchanneltransportplugin/src/senhttpsyncrequester.cpp
changeset 0 62f9d29f7211
child 1 272b002df977
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/webservices/wshttpchanneltransportplugin/src/senhttpsyncrequester.cpp	Thu Jan 07 16:19:19 2010 +0200
@@ -0,0 +1,262 @@
+/*
+* 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 "senhttpsyncrequester.h"
+#include "senhttpchannel.h"
+#include "senlayeredhttptransportproperties.h"
+
+// =========================== MEMBER FUNCTIONS ===============================
+
+CSenHttpSyncRequester* CSenHttpSyncRequester::NewL(CSenHttpChannel* aHttpChannel)
+    {
+    CSenHttpSyncRequester* pNew = CSenHttpSyncRequester::NewLC(aHttpChannel, NULL);
+    CleanupStack::Pop();
+    return pNew;
+    }
+
+CSenHttpSyncRequester* CSenHttpSyncRequester::NewLC(CSenHttpChannel* aHttpChannel)
+    {
+    CSenHttpSyncRequester* pNew = CSenHttpSyncRequester::NewLC(aHttpChannel, NULL);
+    return pNew;
+    }
+
+
+CSenHttpSyncRequester* CSenHttpSyncRequester::NewL(CSenHttpChannel* aHttpChannel,
+                                                   MSenResponseObserver* aParent)
+    {
+    CSenHttpSyncRequester* pNew = CSenHttpSyncRequester::NewLC(aHttpChannel, aParent);
+    CleanupStack::Pop();
+    return pNew;
+    }
+
+CSenHttpSyncRequester* CSenHttpSyncRequester::NewLC(CSenHttpChannel* aHttpChannel,
+                                                    MSenResponseObserver* aParent)
+    {
+    CSenHttpSyncRequester* pNew =
+            new (ELeave) CSenHttpSyncRequester(aHttpChannel, aParent);
+    CleanupStack::PushL(pNew);
+    pNew->ConstructL();
+    return pNew;
+    }
+
+MSenProperties& CSenHttpSyncRequester::PropertiesL()
+    {
+    return iParentObserver->PropertiesL();
+    }
+
+CSenHttpSyncRequester::CSenHttpSyncRequester(CSenHttpChannel* aHttpChannel,
+                                             MSenResponseObserver* aParent)
+
+:   CTimer(EPriorityStandard),
+    iHttpChannel(aHttpChannel),
+    iStatusCode(KErrNone),
+    iParentObserver(aParent)
+    {
+    }
+
+void CSenHttpSyncRequester::ConstructL()
+    {
+    CTimer::ConstructL();
+    CActiveScheduler::Add(this);
+    isStopped = ETrue;
+    }
+
+CSenHttpSyncRequester::~CSenHttpSyncRequester()
+    {
+    delete iContentType;
+    delete iContent;
+    if (!isStopped)
+        {
+        iSchedulerWait.AsyncStop();
+        }
+    }
+void CSenHttpSyncRequester::DoCancel()
+    {
+    CTimer::DoCancel();
+    }
+void CSenHttpSyncRequester::RunL()
+    {
+    if (!isStopped)
+        {
+        iStatusCode = KErrTimedOut;
+        iSchedulerWait.AsyncStop();
+        }
+    isStopped = ETrue;
+    }
+TInt CSenHttpSyncRequester::RunError(TInt aError)
+    {
+    if (!isStopped)
+        {
+        iStatusCode = aError;
+        iSchedulerWait.AsyncStop();
+        }
+    isStopped = ETrue;
+    return aError;
+    }
+
+
+/*
+// GET
+TInt CSenHttpSyncRequester::SubmitL(const TDesC8& aRequestUri,
+                                             HBufC8*& aResponseContentType,
+                                             HBufC8*& aResponseContent,
+                                             TInt& aErrorCode)
+    {
+    iStatusCode = KErrNone;
+    TInt submitId = iHttpChannel->SendL(*this, aRequestUri);
+    iSchedulerWait.Start();
+    aResponseContentType = iContentType;
+    iContentType = NULL;
+    aResponseContent = iContent;
+    iContent = NULL;
+    aErrorCode = iStatusCode;
+    return submitId;
+    }
+*/
+
+// POST
+TInt CSenHttpSyncRequester::SubmitL(const TDesC8& aRequestUri,
+                                    CSenLayeredHttpTransportProperties& aProps,
+                                    const TDesC8& aRequestContent,
+                                    HBufC8*& aResponseContentType,
+                                    HBufC8*& aResponseContent,
+                                    TInt& aErrorCode)
+    {
+    if (!isStopped)
+        {
+        iHttpChannel->CancelAllTransactions();
+        iSchedulerWait.AsyncStop();
+        }
+    isStopped = ETrue;
+    iStatusCode = KErrNone;
+    this->Cancel();
+    TInt submitId = iHttpChannel->SendL(*this,
+                                        aRequestUri,
+                                        aRequestContent,
+                                        aProps);
+    
+    TInt timeOut(0);
+    if (aProps.MaxTimeToLiveL(timeOut) == KErrNone)
+        {
+        this->After(timeOut * 1000000);    
+        }
+    
+    isStopped = EFalse;
+    iSchedulerWait.Start();
+    this->Cancel();
+    aResponseContentType = iContentType;
+    iContentType = NULL;
+    aResponseContent = iContent;
+    iContent = NULL;
+    aErrorCode = iStatusCode;
+    return submitId;
+    }
+
+
+void CSenHttpSyncRequester::ResponseReceivedL( TInt /*aId*/, const TAny* aContentType, HBufC8* apContent, CSenHttpTransportProperties* /*aHttpProperties*/ )
+    {
+    iContent = apContent; // transfers ownership of content into _this_ class
+    iContentType = ((HBufC8*)aContentType)->AllocL();
+    if (!isStopped)
+        {
+        iSchedulerWait.AsyncStop();
+        }
+    isStopped = ETrue;
+    }
+
+void CSenHttpSyncRequester::ResponseErrorL( TInt aId, TInt aError, HBufC8* apErrorBody, CSenHttpTransportProperties* aHttpProperties  )
+    {
+    iStatusCode = aError;
+    iContentType = NULL;
+
+    if (iParentObserver)
+        {
+        //iContent = NULL;      To fix EPSK-76XFAN
+        iParentObserver->ResponseErrorL( aId, aError, apErrorBody,  aHttpProperties);
+        iContent = apErrorBody;  // To fix EPSK-76XFAN
+        }
+    else
+        {
+        iContent = apErrorBody;
+        }    
+        
+    if (!isStopped)
+        {
+        iSchedulerWait.AsyncStop();
+        }
+    isStopped = ETrue;
+    }
+
+// Propagate the http status code to remote service consumer
+void CSenHttpSyncRequester::StateChanged(TInt aRequestId, TInt aState)
+	{
+    if (iParentObserver)
+        {
+        iParentObserver->StateChanged(aRequestId, aState);
+        }	
+	}
+
+void CSenHttpSyncRequester::SetTrafficDetails(TSenDataTrafficDetails& aDetails) 
+	{
+    if (iParentObserver)
+        {
+        iParentObserver->SetTrafficDetails(aDetails);
+        }		
+	}
+
+
+//////////////////////////////////////////////////////////////////////////
+
+/*
+TInt CSenHttpSyncRequester::SubmitL(const TDesC8& aRequestUri,
+                                    const TDesC8* aRequestContentType,
+                                    MSenElement& aMessage, //SOAP envelope
+                                    HBufC8*& aResponseContentType,
+                                    HBufC8*& aResponseContent,
+                                    TInt& aErrorCode)
+    {
+    iStatusCode = KErrNone;
+
+
+    TInt submitId = iHttpChannel->SubmitL(*this,
+                                        aRequestUri,
+                                        aRequestContentType,
+                                        aMessage);
+    iSchedulerWait.Start();
+    aResponseContentType = iContentType;
+    iContentType = NULL;
+    aResponseContent = iContent;
+    iContent = NULL;
+    aErrorCode = iStatusCode;
+    return submitId;
+    }
+*/
+
+//  End of File
+
+