webservices/wsconnectionagent/src/senconnagentsession.cpp
changeset 0 62f9d29f7211
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/webservices/wsconnectionagent/src/senconnagentsession.cpp	Thu Jan 07 16:19:19 2010 +0200
@@ -0,0 +1,298 @@
+/*
+* Copyright (c) 2009 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:         
+*
+*/
+
+
+
+
+#ifdef __ENABLE_ALR__
+#include <comms-infras/cs_mobility_apiext.h>
+#endif //__ENABLE_ALR__
+
+
+#include "senconnagentsession.h"
+#include "senconnagentserver.h"
+#include "senservicemanagerdefines.h"
+#include "MSenServiceConsumer.h"
+
+#include "MSenAuthenticationProvider.h"
+#include "SenIdentityProvider.h"
+#include "msenservicemanager.h"
+
+#include "msencobrandinginterface.h"
+#include "senchunk.h"
+#include "senxmldebug.h"
+
+CSenConnAgentSession::~CSenConnAgentSession()
+    {
+    
+    }
+
+void CSenConnAgentSession::ServiceL(const RMessage2& aMessage)
+    {
+    switch (aMessage.Function())
+        {
+        case ESenCliServInitialize:
+            {
+            iObserver = static_cast<MSenFilesObserver*>(
+					const_cast<TAny*>(aMessage.Ptr0()));
+            aMessage.Complete(KErrNone);
+            ((CActiveSchedulerWait*)aMessage.Ptr1())->AsyncStop();
+            }
+            break;
+        case ESenCliServTransferProgress:
+            {
+            TTransferProgress transfer;
+            TPckg<TTransferProgress> transferPckg(transfer);
+            aMessage.ReadL(0, transferPckg);
+            HBufC8* buf = HBufC8::NewLC(aMessage.GetDesLengthL(1));
+            TPtr8 bufPtr = buf->Des();
+            aMessage.ReadL(1, bufPtr);
+            aMessage.Complete(KErrNone);
+            if (transfer.iSoap)
+                {
+                iObserver->TransferProgress(transfer.iTxnId,
+                        transfer.iIncoming, *buf, KNullDesC8, 0);
+                }
+            else
+                {
+                iObserver->TransferProgress(transfer.iTxnId,
+                        transfer.iIncoming, KNullDesC8, *buf, transfer.iProgress);
+                }
+            CleanupStack::PopAndDestroy(buf);
+          }
+            break;
+        case ESenCliServAuthInitialize:
+            {
+	        iAuthObserver = static_cast<MSenAuthenticationProvider*>(
+					const_cast<TAny*>(aMessage.Ptr0()));
+	        ((CActiveSchedulerWait*)aMessage.Ptr1())->AsyncStop();
+	        aMessage.Complete(KErrNone);
+            }
+	        break;
+        case ESenCliServCoBrandingInitialize:
+            {
+	        ipCoBrandingObserver = static_cast<MSenCoBrandingObserver*>(
+					const_cast<TAny*>(aMessage.Ptr0()));
+	        ((CActiveSchedulerWait*)aMessage.Ptr1())->AsyncStop();
+	        aMessage.Complete(KErrNone);
+            }
+            break;
+	    case ESenCliServReAuthNeeded:
+	        {
+	    	TInt retVal(KErrNone);
+	    	TRAPD(error, retVal = ReauthenticationNeededL(aMessage));
+	    	if(error)
+	    		{
+	    		retVal = error;
+	    		}
+	    	aMessage.Complete(retVal);
+	    	CActiveSchedulerWait* wait = static_cast<CActiveSchedulerWait*>(
+					const_cast<TAny*>(aMessage.Ptr1()));
+	    	if(wait && wait->IsStarted())
+	    		{
+	    		wait->AsyncStop();
+	    		}
+	    		}
+        	break;
+        case ESenCliServGoNoGo:
+            {
+	    	TInt retValue(KErrNone);
+	    	TRAPD(CBerror, retValue = CoBrandingGoNoGoL(aMessage));
+	    	if(CBerror)
+	    		{
+	    		retValue = CBerror;
+	    		}
+	    	aMessage.Complete(retValue);
+            }
+        	break;
+
+#ifdef __ENABLE_ALR__
+        case ESenCliServMobilityInitialize:
+            {
+            iMobiltyObserver = static_cast<MMobilityProtocolResp*>(
+					const_cast<TAny*>(aMessage.Ptr0()));
+            aMessage.Complete(KErrNone);
+            ((CActiveSchedulerWait*)aMessage.Ptr1())->AsyncStop();                
+            }
+            break;
+        case ESenCliServPrefferedCarrierAvailable:
+            {
+            TInt oldap = aMessage.Int0();
+            TInt newap= aMessage.Int1();
+            
+            TAccessPointInfo oldAPInfo ;
+            oldAPInfo.SetAccessPoint( oldap );
+            TAccessPointInfo newAPInfo ;
+            newAPInfo.SetAccessPoint( newap );
+
+            HBufC8* upgradeBuf = HBufC8::NewLC(10);
+            TPtr8 upgradeBuffer = upgradeBuf->Des();
+            aMessage.ReadL(2, upgradeBuffer); 
+            TBool isUpgrade = (TBool)(*upgradeBuffer.Ptr()) ;
+            CleanupStack::PopAndDestroy(upgradeBuf); 
+            
+            HBufC8* seemlessBuf = HBufC8::NewLC(10);
+            TPtr8 seemlessBuffer = seemlessBuf->Des();
+            aMessage.ReadL(3, seemlessBuffer); 
+            TBool isSeamless = (TBool)(*seemlessBuffer.Ptr()) ;
+            CleanupStack::PopAndDestroy(seemlessBuf); 
+            
+            aMessage.Complete(KErrNone);
+            // check for mobility observer and forward the call to the observer (application)
+            if(iMobiltyObserver)
+                {
+                iMobiltyObserver->PreferredCarrierAvailable(oldAPInfo, newAPInfo, isUpgrade, isSeamless) ;
+                }
+            }
+            break;
+        case ESenCliServNewCarrierActive:
+            {
+            TInt newap = aMessage.Int0();
+            TAccessPointInfo newAPInfo ;
+            newAPInfo.SetAccessPoint( newap );
+            HBufC8* inBuf = HBufC8::NewLC(10);
+            TPtr8 inBuffer = inBuf->Des();
+            aMessage.ReadL(1, inBuffer); 
+            TBool isSeamless = (TBool)(*inBuffer.Ptr()) ;
+            CleanupStack::PopAndDestroy(inBuf); 
+            aMessage.Complete(KErrNone);
+            // check for mobility observer and forward the call to the observer (application)
+            if(iMobiltyObserver)
+                {
+                iMobiltyObserver->NewCarrierActive(newAPInfo, isSeamless) ;
+                }
+            }
+            break;
+        case ESenCliServMobilityError:
+            {
+        	TInt mobilityError = aMessage.Int0();
+            aMessage.Complete(KErrNone);
+            // check for mobility observer and forward the call to the observer (application)
+            if(iMobiltyObserver)
+                {
+                iMobiltyObserver->Error(mobilityError);
+                }
+            }
+            break;
+#endif //__ENABLE_ALR__
+        default:
+            {
+            aMessage.Complete(KErrNotSupported);
+            }
+            break;
+        }
+    }
+
+void CSenConnAgentSession::Disconnect(const RMessage2& aMessage)
+    {
+    CSession2::Disconnect(aMessage);
+    CSenConnAgentServer* server = reinterpret_cast<CSenConnAgentServer*>
+            (Dll::Tls());
+    ASSERT(server);
+    server->DestroyIfInactive();
+    }
+TInt CSenConnAgentSession::CoBrandingGoNoGoL(const RMessage2& aMessage)
+    {
+    TBool* goNoGo = static_cast<TBool*>(
+					const_cast<TAny*>(aMessage.Ptr0()));    
+
+	HBufC8* buf = HBufC8::NewLC(aMessage.GetDesLengthL(1));
+	TPtr8 bufPtr = buf->Des();
+	aMessage.ReadL(1, bufPtr);
+    
+    RBuf8* selectedbrandID = static_cast<RBuf8*>(
+					const_cast<TAny*>(aMessage.Ptr2()));
+
+    if (ipCoBrandingObserver)
+        {
+        *goNoGo = ipCoBrandingObserver->OnGetBrandIdL(*buf,*selectedbrandID);  
+				CleanupStack::PopAndDestroy(buf);        
+        return KErrNone;
+        }
+        
+		CleanupStack::PopAndDestroy(buf);        
+    return KErrGeneral;
+    }
+TInt CSenConnAgentSession::ReauthenticationNeededL(const RMessage2& aMessage)
+	{
+	TInt retVal = KErrNone;
+	TBool providerCreated = EFalse;
+	
+	if(iAuthObserver)
+		{
+		CSenChunk* pSenChunk = CSenChunk::NewLC(KNullDesC());
+		retVal = pSenChunk->OpenChunkFromRMsgL(aMessage,0);
+		
+		if(retVal == KErrNone)
+			{
+	    	CSenIdentityProvider* pIdP = 
+	    		(CSenIdentityProvider*)iAuthObserver->IdentityProviderL();
+	    	
+	    	if(!pIdP)
+	    		{
+	    		TPtrC8 identityProvider;
+	    		retVal = pSenChunk->DescFromChunk(identityProvider);
+	    		
+	    		if(retVal == KErrNone)
+	    			{
+			    	pIdP = CSenIdentityProvider::NewLC(KNullDesC8());
+			    	providerCreated = ETrue;
+			    	CSenXmlReader* pXmlReader = CSenXmlReader::NewLC(KXmlParserMimeType);
+			    	pXmlReader->SetContentHandler( *pIdP );
+			    	pIdP->SetReader(*pXmlReader);
+			    	
+			    	pIdP->ParseL( identityProvider );
+			    	CleanupStack::PopAndDestroy(pXmlReader);
+			    		
+			    	TPtrC8 userName = iAuthObserver->UsernameL();
+			        TPtrC8 password = iAuthObserver->PasswordL();
+			        if(pIdP && userName != KNullDesC8 && password != KNullDesC8 )
+			        	{
+				        retVal = pIdP->SetUserInfoL( userName ,
+											   		 userName ,
+											   		 password );
+			        	}
+	    			}
+	    		}
+	    	
+	    	if(pIdP)
+	    		{
+	    		// Identity provider data retrieved from callback, return it
+	    		HBufC8* desIdP = pIdP->AsXmlL();
+	    		CleanupStack::PushL(desIdP);
+	    		pSenChunk->DescToChunk(*desIdP);
+	    		CleanupStack::PopAndDestroy(desIdP);
+	    		}
+	    	else
+	    		{
+	    		// Identity provider was not passed
+	    		retVal = KErrNotFound;
+	    		}
+	    	
+	    	if(providerCreated)
+	    		{
+	    		CleanupStack::PopAndDestroy(pIdP);
+	    		}
+			}
+		CleanupStack::PopAndDestroy(pSenChunk);
+		}
+	else
+		{
+		retVal = KErrNotReady;
+		}
+	return retVal;
+	}