webservices/wsstar/wsstarplugin/src/wsstarhttpclient.cpp
changeset 0 62f9d29f7211
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/webservices/wsstar/wsstarplugin/src/wsstarhttpclient.cpp	Thu Jan 07 16:19:19 2010 +0200
@@ -0,0 +1,282 @@
+/*
+* Copyright (c) 2006-2006 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 "wsstarhttpclient.h"
+#include "SenHttpTransportProperties.h"
+#include "SenServiceConnection.h" // public error codes
+#include "sendebug.h"
+#include "senlogger.h"
+
+//---------------------------------------------------------------------------
+// Creates and returns a new instace of this class.
+//---------------------------------------------------------------------------
+//
+CWSStarHttpClient* CWSStarHttpClient::NewL(
+                                            CSIF& aSIF,
+                                            CSenWSDescription* aInitializer,
+                                            RFileLogger& aLogger)
+    {
+    CWSStarHttpClient* pNew = NewLC(aSIF, aInitializer, aLogger);
+    CleanupStack::Pop();
+    return pNew;
+    }
+
+//---------------------------------------------------------------------------
+// Creates and returns a new instace of this class and leaves the object on the cleanup stack
+//---------------------------------------------------------------------------
+//
+CWSStarHttpClient* CWSStarHttpClient::NewLC(
+                                                        CSIF& aSIF,
+                                                        CSenWSDescription* aInitializer,
+                                                        RFileLogger& aLogger)
+    {
+    CWSStarHttpClient* pNew =
+        new (ELeave) CWSStarHttpClient(
+                    aSIF,
+                    MSenServiceDescription::EWSStarPolicyClient,
+                    aInitializer,
+                    aLogger);
+
+    CleanupStack::PushL(pNew);
+    pNew->BaseConstructL();
+    return pNew;
+    }
+
+//---------------------------------------------------------------------------
+// Constructor
+//---------------------------------------------------------------------------
+//
+CWSStarHttpClient::CWSStarHttpClient( CSIF& aSIF,
+                                      TDescriptionClassType aType,
+                                      CSenWSDescription* aInitializer,
+                                      RFileLogger& aLogger )
+    : CSenInternalServiceConsumer(aType, aSIF),
+    iInitializer(aInitializer),
+    iLog(aLogger)
+    {
+    }
+
+void CWSStarHttpClient::BaseConstructL()
+    {
+    CSenInternalServiceConsumer::ConstructL();
+    iPolicySession = CWSStarServiceSession::NewL(Framework());
+    iPolicySession->AddConsumerL(*this);
+    iPolicySession->SetEndPointL(iInitializer->Endpoint());
+    iPolicySession->InitializeFromL(*iInitializer);
+    ipTransport = Framework().Manager().CreateL(*iPolicySession, NULL);        
+    TLSLOG_L(KSenCoreServiceManagerLogChannelBase  , KMinLogLevel,"CWSStarHttpClient::ConstructL");
+    }
+
+//---------------------------------------------------------------------------
+// Destructor
+//---------------------------------------------------------------------------
+//
+CWSStarHttpClient::~CWSStarHttpClient()
+    {
+    TLSLOG_L(KSenCoreServiceManagerLogChannelBase  , KMinLogLevel,"CWSStarHttpClient::~CWSStarHttpClient");
+    if( iPolicySession )
+	    {
+        TRAP_IGNORE( iPolicySession->RemoveConsumerL(*this); )
+    	}
+    delete ipTransport;
+    delete iPolicySession;
+    }
+
+
+//---------------------------------------------------------------------------
+// The most siginificant method of this class. 
+//---------------------------------------------------------------------------
+//
+TInt CWSStarHttpClient::GetHttpL( const TDesC8& aRequest,
+                                  HBufC8*& apResponse,
+                                  CSenWSDescription* apSD )
+    {
+    TLSLOG_L(KSenCoreServiceManagerLogChannelBase  , KMinLogLevel,"CWSStarHttpClient::GetHttpL");
+    TInt retVal(KErrNone);             // for returning error codes
+    if( !iInitializer )
+        {
+        return KErrSenInternal;
+        }
+    TPtrC8 endpoint(iInitializer->Endpoint());    
+
+    CSenHttpTransportProperties* pHttpProperties = CSenHttpTransportProperties::NewLC();
+    pHttpProperties->SetHttpMethodL(CSenHttpTransportProperties::ESenHttpGet);
+    _LIT8(KAcceptedHeader, "text/xml,text/plain");    
+    pHttpProperties->SetAcceptL(KAcceptedHeader);
+    TUint32 desiredIapId(0);
+   
+    if( apSD )
+        {
+        TInt getIapRetVal = apSD->IapId( desiredIapId );
+        if ( getIapRetVal == KErrNone )
+            {
+            pHttpProperties->SetIapIdL( desiredIapId );
+            }
+        }
+     //limit http timeout, 
+	pHttpProperties->SetMaxTimeToLiveL(WSStarSession::KMaxHttpTimeOut);
+	TLSLOG_FORMAT((KSenCoreServiceManagerLogChannelBase  , KNormalLogLevel, _L8("CWSStarHttpClient::GetHttpL - with IAP ID (%d):"), desiredIapId));    
+    HBufC8* pSerializedProperties  = pHttpProperties->AsUtf8L();
+    CleanupStack::PopAndDestroy(pHttpProperties);
+
+    CleanupStack::PushL(pSerializedProperties);
+    TLSLOG_ALL(KSenCoreServiceManagerLogChannelBase  , KNormalLogLevel,( pSerializedProperties->Des() ));
+    retVal = ipTransport->SubmitL(endpoint, aRequest, *pSerializedProperties, apResponse, *this);	
+    TLSLOG_FORMAT((KSenCoreServiceManagerLogChannelBase  , KNormalLogLevel, _L8("CWSStarHttpClient::GetHttpL - SubmitL returned: %d"), retVal));    
+
+    CleanupStack::PopAndDestroy( pSerializedProperties );
+
+#ifdef _SENDEBUG
+    if( apResponse )
+        {
+        TPtrC8 response = apResponse->Des();
+        TLSLOG_L(KSenCoreServiceManagerLogChannelBase  , KMaxLogLevel,"* * * * * * * * * * * * *");
+        TLSLOG_FORMAT((KSenCoreServiceManagerLogChannelBase  , KMaxLogLevel, _L8("CWSStarHttpClient::GetHttpL - response (%d bytes):"), response.Length()));    
+        TLSLOG_ALL(KSenCoreServiceManagerLogChannelBase  , KMaxLogLevel,( response ));
+        TLSLOG_L(KSenCoreServiceManagerLogChannelBase  , KMinLogLevel,"CSenCoreServiceManager::CreateL:");
+        }
+#endif // _SENDEBUG        
+
+    if( retVal != KErrNone )
+        {
+        delete apResponse; 
+        apResponse = NULL;
+        }
+    return retVal;
+    }
+
+//---------------------------------------------------------------------------
+// SetStatus
+//---------------------------------------------------------------------------
+//
+
+void CWSStarHttpClient::SetStatus(TInt /*aStatus */)
+    {
+    }
+
+//---------------------------------------------------------------------------
+// ServiceSession
+//---------------------------------------------------------------------------
+//
+CSenServiceSession* CWSStarHttpClient::ServiceSession()
+    {
+    return iPolicySession;
+    }
+
+//---------------------------------------------------------------------------
+// Obtain Transport using a factory from Core Manager
+//---------------------------------------------------------------------------
+//
+MSenTransport& CWSStarHttpClient::TransportL()
+    {
+    if(!ipTransport)
+        {
+        // Core is capable of working as transport factory, too.
+        // The returned transport instancies may or may not be
+        // ECOM plugins:
+        TLSLOG_L(KSenCoreServiceManagerLogChannelBase  , KMinLogLevel,"CWSStarHttpClient::Instantiating new transport");
+        ipTransport = Framework().Manager().CreateL(*iPolicySession, iPolicySession); 
+        }
+    return *ipTransport;
+    }
+void CWSStarHttpClient::SetClientSessionL(
+                                                CWSStarServiceSession* aSession)
+    {
+    TLSLOG_L(KSenCoreServiceManagerLogChannelBase  , KMinLogLevel,"CWSStarHttpClient::SetServiceSessionL");
+    // free memory
+    //delete iPolicySession;
+    iPolicySession = aSession;
+    if(iPolicySession)
+        {
+        iPolicySession->AddConsumerL(*this);
+        }
+    }
+
+//---------------------------------------------------------------------------
+// Getter for endpoint
+//---------------------------------------------------------------------------
+//
+TPtrC8 CWSStarHttpClient::Endpoint()
+    {
+    return iPolicySession->Endpoint();
+    }
+//---------------------------------------------------------------------------
+// Getter for contract
+//---------------------------------------------------------------------------
+//
+TPtrC8 CWSStarHttpClient::Contract()
+    {
+    return iPolicySession->Contract();
+    }
+
+//---------------------------------------------------------------------------
+// serialie to xml
+//---------------------------------------------------------------------------
+//
+void CWSStarHttpClient::WriteAsXMLToL(RWriteStream& aWriteStream)
+    {
+    iPolicySession->WriteAsXMLToL(aWriteStream);
+    }
+
+//---------------------------------------------------------------------------
+// 
+//---------------------------------------------------------------------------
+//
+void CWSStarHttpClient::SetVersion(const TDesC8* aVersion)
+    {
+    iVersion = aVersion;
+    }
+//---------------------------------------------------------------------------
+// 
+//---------------------------------------------------------------------------
+//    
+TBool CWSStarHttpClient::HasSuperClass( TDescriptionClassType aType )
+    {
+    if( aType == MSenServiceDescription::ESenInternalServiceConsumer ) // direct superclass!
+        {
+        // If asked type is the know *direct* father/mother, return true:
+        return ETrue; 
+        } 
+    else
+        {
+        // Otherwise, ask from superclass (chain, recursively)
+        return CSenInternalServiceConsumer::HasSuperClass( aType ); 
+        }
+    }
+void CWSStarHttpClient::SetDataTrafficDetails( TSenDataTrafficDetails& aDetails) 		
+	{
+		iHttpDetails = aDetails;
+	}
+void CWSStarHttpClient::DataTrafficDetails( TSenDataTrafficDetails& aDetails) 			
+	{
+		aDetails = iHttpDetails;
+	}
+
+// End of file
+
+