imservices/ossprotocoladaptation/src/cossprotocolconnection.cpp
changeset 0 e6b17d312c8b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imservices/ossprotocoladaptation/src/cossprotocolconnection.cpp	Thu Dec 17 08:54:49 2009 +0200
@@ -0,0 +1,415 @@
+/*
+* Copyright (c) 2007-2008 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:  oss protocol plugin connection
+*
+*/
+
+#include "cossprotocolconnection.h"
+
+#include <badesca.h>
+#include <ximpcontextclientinfo.h>
+#include <ximpprotocolconnectionhost.h>
+#include <ximpprotocolconnection.h>
+#include <protocolpresencefeatures.h>
+#include <ximpbase.h>
+#include <ximpidentity.h>
+#include <presenceinfo.h>
+#include <ximpprotocolconnectionhost.h>
+#include <ximpserviceinfo.h>
+#include <ximpfeatureinfo.h>
+
+#include "cossprotocolconnectionmanager.h"
+#include "cossprotocolpresencefeatures.h"
+#include "cossprotocolimfeatures.h"
+#include "ossprotocolpluginlogger.h"
+#include "cossprotocolloginrequest.h"
+#include "mossprotocolconnectionmanager.h"
+
+#include <protocolsearchfeature.h>
+#include "cossprotocolsearchfeatures.h"
+#include "cossprotocollogoutrequest.h"
+#include <ximperrors.hrh>
+
+// ======== COSSProtocolConnection - MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// COSSProtocolConnection::COSSProtocolConnection()
+// ---------------------------------------------------------------------------
+//
+COSSProtocolConnection::COSSProtocolConnection()
+	{
+	LOGGER ( TXT ( "COSSProtocolConnection::COSSProtocolConnection() Start-End" ) );
+	}
+
+// ---------------------------------------------------------------------------
+// COSSProtocolConnection::ConstructL()
+// ---------------------------------------------------------------------------
+//
+void COSSProtocolConnection::ConstructL (
+    const MXIMPServiceInfo&  aServiceInfo ,
+    const MXIMPContextClientInfo& aClientCtxInfo )
+	{
+	LOGGER ( TXT ( "COSSProtocolConnection::ConstructL() Start" ) );
+
+	PLUGIN_UNUSED_PARAM ( aClientCtxInfo );
+	iConnMan = COSSProtocolConnectionManager::NewL();
+
+	iConnMan->SetConnectionParamsL ( aServiceInfo.UserId(),
+	                                 aServiceInfo.Password(),
+	                                 aServiceInfo.IapId() );
+	iPresFeatures = COSSProtocolPresenceFeatures::NewL ( *iConnMan );
+	iImFeatures = COSSProtocolImFeatures::NewL ( *iConnMan );
+	iSearchFeatures= COSSProtocolSearchFeature::NewL ( *iConnMan );
+	LOGGER ( TXT ( "COSSProtocolConnection::ConstructL() End" ) );
+	}
+
+
+// ---------------------------------------------------------------------------
+// COSSProtocolConnection::NewL()
+// ---------------------------------------------------------------------------
+//
+COSSProtocolConnection* COSSProtocolConnection::NewL (
+    const MXIMPServiceInfo& aServiceInfo,
+    const MXIMPContextClientInfo& aClientCtxInfo )
+	{
+	LOGGER ( TXT ( "COSSProtocolConnection::NewL() Start" ) );
+
+	COSSProtocolConnection* self = new ( ELeave ) COSSProtocolConnection;
+	CleanupStack::PushL ( self );
+	self->ConstructL ( aServiceInfo, aClientCtxInfo );
+	CleanupStack::Pop ( self );
+
+	LOGGER ( TXT ( "COSSProtocolConnection::NewL() End" ) );
+	return self;
+	}
+
+
+// ---------------------------------------------------------------------------
+// COSSProtocolConnection::~COSSProtocolConnection()
+// ---------------------------------------------------------------------------
+//
+COSSProtocolConnection::~COSSProtocolConnection()
+	{
+	LOGGER ( TXT ( "COSSProtocolConnection::~COSSProtocolConnection() Start" ) );
+
+    delete iSearchFeatures;
+	delete iConnMan;
+	delete iPresFeatures;
+	delete iImFeatures;
+	LOGGER ( TXT ( "COSSProtocolConnection::~COSSProtocolConnection() End" ) );
+	}
+
+
+// ---------------------------------------------------------------------------
+// COSSProtocolConnection::GetInterface()
+// ---------------------------------------------------------------------------
+//
+TAny* COSSProtocolConnection::GetInterface ( TInt32 aInterfaceId,
+        TIfGetOps aOptions )
+	{
+	LOGGER ( TXT ( "COSSProtocolConnection::GetInterface() Start" ) );
+
+	if ( aInterfaceId == MXIMPProtocolConnection::KInterfaceId )
+		{
+		MXIMPProtocolConnection* self = this;
+		return self;
+		}
+
+	if ( aOptions == MXIMPBase::EPanicIfUnknown )
+
+		{
+		User::Panic ( KOSSProtocolConnection, KErrExtensionNotSupported );
+		}
+
+	LOGGER ( TXT ( "COSSProtocolConnection::GetInterface() End" ) );
+
+	return NULL;
+	}
+
+
+// ---------------------------------------------------------------------------
+// COSSProtocolConnection::GetInterface() const
+// ---------------------------------------------------------------------------
+//
+const TAny* COSSProtocolConnection::GetInterface ( TInt32 aInterfaceId,
+        TIfGetOps aOptions ) const
+	{
+	LOGGER ( TXT ( "COSSProtocolConnection::GetInterface() const Start" ) );
+
+	if ( aInterfaceId == MXIMPProtocolConnection::KInterfaceId )
+		{
+		const MXIMPProtocolConnection* self = this;
+		return self;
+		}
+
+	if ( aOptions == MXIMPBase::EPanicIfUnknown )
+		{
+		User::Panic ( KOSSProtocolConnection, KErrExtensionNotSupported );
+		}
+
+	LOGGER ( TXT ( "COSSProtocolConnection::GetInterface() const End" ) );
+
+	return NULL;
+	}
+
+
+// ---------------------------------------------------------------------------
+// COSSProtocolConnection::GetInterfaceId() const
+// ---------------------------------------------------------------------------
+//
+TInt32 COSSProtocolConnection::GetInterfaceId() const
+	{
+	LOGGER ( TXT ( "COSSProtocolConnection::GetInterfaceId() Start-End" ) );
+	return MXIMPProtocolConnection::KInterfaceId;
+	}
+
+
+// ---------------------------------------------------------------------------
+// COSSProtocolConnection::PrimeHost()
+// ---------------------------------------------------------------------------
+//
+void COSSProtocolConnection::PrimeHost ( MXIMPProtocolConnectionHost& aHost )
+	{
+	LOGGER ( TXT ( "COSSProtocolConnection::PrimeHost() Start" ) );
+
+	iConnMan->SetHost ( aHost );
+
+	LOGGER ( TXT ( "COSSProtocolConnection::PrimeHost() Start" ) );
+	}
+
+
+// ---------------------------------------------------------------------------
+// COSSProtocolConnection::OpenSessionL()
+// ---------------------------------------------------------------------------
+//
+void COSSProtocolConnection::OpenSessionL (
+    const MXIMPContextClientInfo& /*aClientCtxInfo*/,
+    TXIMPRequestId aOpId )
+	{
+	if( iConntectionCreated )
+		{
+		iConntectionCreated++;
+		iConnMan->HandleToHost().HandleRequestCompleted(aOpId,KErrNone);
+		}
+	else
+		{
+		LOGGER(TXT("COSSProtocolConnection::OpenSessionL \n"));
+		COSSProtocolLoginRequest* req = 
+		COSSProtocolLoginRequest::NewLC( *iConnMan, aOpId );
+
+		req->IssueLoginRequestL();
+		CleanupStack::Pop( req );	
+		iConntectionCreated++;	
+		}
+
+	LOGGER ( TXT ( "COSSProtocolConnection::OpenSessionL() End" ) );
+	}
+
+// ---------------------------------------------------------------------------
+// COSSProtocolConnection::OpenSessionL()
+// ---------------------------------------------------------------------------
+//
+void COSSProtocolConnection::OpenSessionL ( const TInt& aServiceId,
+        TXIMPRequestId aReqId )
+	{
+	LOGGER ( TXT ( "COSSProtocolConnection::OpenSessionLsettingsid \n" ) );
+	if( iConntectionCreated )
+		{
+		iConntectionCreated++;
+		iConnMan->HandleToHost().HandleRequestCompleted(aReqId,KErrNone);
+		}
+	else
+		{
+		TInt error = iConnMan->SetConnectionParamsL ( aServiceId );
+		LOGGER ( TXT ( "COSSProtocolConnection::OpenSessionL settings id is %d" ), aServiceId );
+
+		if( error == KErrNotFound )
+			{
+			iConnMan->HandleToHost().HandleRequestCompleted(aReqId,KXIMPErrServiceGeneralError);
+			}
+		else
+			{
+			COSSProtocolLoginRequest* req =
+			COSSProtocolLoginRequest::NewLC ( *iConnMan, aReqId );	
+			req->IssueLoginRequestL();
+			CleanupStack::Pop ( req );
+			iConntectionCreated++;	
+			}
+		}
+
+	LOGGER ( TXT ( "COSSProtocolConnection::OpenSessionLsettingsid() End" ) );
+	}
+
+// ---------------------------------------------------------------------------
+// COSSProtocolConnection::OpenSessionL()
+// ---------------------------------------------------------------------------
+//
+
+void COSSProtocolConnection::OpenSessionL (
+    const MXIMPContextClientInfo& /*aContextClient*/,
+    const TInt& /*aSettingsId*/,
+    TXIMPRequestId /*aReqId*/ )
+	{
+
+	}
+
+// ---------------------------------------------------------------------------
+// COSSProtocolConnection::CloseSession()
+// ---------------------------------------------------------------------------
+//
+void COSSProtocolConnection::CloseSession (
+    const MXIMPContextClientInfo& /*aClientCtxInfo*/,
+    TXIMPRequestId aOpId )
+	{
+	LOGGER ( TXT ( "COSSProtocolConnection::CloseSession() Start" ) );
+    iConntectionCreated--;
+    
+    // if server already disconnected no need to issue logout request
+    TBool serverdisconnect = iConnMan->IsServerDisconnect();
+    
+    if(!iConntectionCreated && !serverdisconnect ) 
+		{
+		iRequestId = aOpId;
+        TRAPD(error,LogoutRequestL(aOpId));
+        	if( KErrNone != error )
+        	{
+			iConnMan->HandleToHost().HandleRequestCompleted(aOpId,error);
+			
+        	}
+		}
+	else
+		{
+		iConnMan->HandleToHost().HandleRequestCompleted(aOpId,KErrNone);
+		}
+	LOGGER ( TXT ( "COSSProtocolConnection::CloseSession() End" ) );
+	}
+
+
+// ---------------------------------------------------------------------------
+// COSSProtocolConnection::ReOpenSessionsL()
+// ---------------------------------------------------------------------------
+//
+void COSSProtocolConnection::ReOpenSessionsL ( TXIMPRequestId /*aOpId*/ )
+	{
+	LOGGER ( TXT ( "COSSProtocolConnection::ReOpenSessionsL() Start" ) );
+
+	LOGGER ( TXT ( "COSSProtocolConnection::ReOpenSessionsL() End" ) );
+	}
+
+
+// ---------------------------------------------------------------------------
+// COSSProtocolConnection::GetSupportedFeaturesL()
+// ---------------------------------------------------------------------------
+//
+void COSSProtocolConnection::GetSupportedFeaturesL ( CDesC8Array& aFeatures ) const
+	{
+	LOGGER ( TXT ( "COSSProtocolConnection::GetSupportedFeaturesL() Start End" ) );
+	// first empty the whole array
+	aFeatures.Reset();
+	// then add our features there
+	// currently we are not doing any negotiation from the server for the supported features.
+	// based on our implimentation we are hardcoding these values.
+	// actual implimentatiion requires client server negotiation to tackle supported features.
+	
+	using namespace NXIMPFeature::Presence;
+	aFeatures.AppendL( KPublish );
+	aFeatures.AppendL( KFetch );
+	aFeatures.AppendL( KSubscribe );    
+	aFeatures.AppendL( KUnsubscribe );    
+	aFeatures.AppendL( KAddContact  );
+	aFeatures.AppendL( KDeleteContact  );	
+	aFeatures.AppendL( KAvatar  );
+	
+	using namespace NXIMPFeature::InstantMessage;
+	aFeatures.AppendL( KInstantMessage );
+	
+	using namespace NXIMPFeature::Search;
+	aFeatures.AppendL( KSearch );
+
+	LOGGER ( TXT ( "COSSProtocolConnection::GetSupportedFeaturesL" ) );
+	}
+
+// ---------------------------------------------------------------------------
+// COSSProtocolConnection::ProtocolPresenceFeatures()
+// ---------------------------------------------------------------------------
+//
+MProtocolPresenceFeatures& COSSProtocolConnection::ProtocolPresenceFeatures()
+	{
+	LOGGER ( TXT ( "COSSProtocolConnection::ProtocolPresenceFeatures() Start " ) );
+	return *iPresFeatures;
+	}
+// ---------------------------------------------------------------------------
+// COSSProtocolConnection::ProtocolImFeatures()
+// ---------------------------------------------------------------------------
+//
+/*
+CProtocolImFeatures* COSSProtocolConnection::ProtocolImFeatures()
+	{
+	LOGGER ( TXT ( "COSSProtocolConnection::ProtocolImFeatures() Start " ) );
+	return iImFeatures;
+	}*/
+
+// ---------------------------------------------------------------------------
+// COSSProtocolConnection::ReleaseConnectionL()
+// ---------------------------------------------------------------------------
+//
+
+void COSSProtocolConnection::ReleaseConnectionL()
+	{
+	LOGGER ( TXT ( "COSSProtocolConnection::ReleaseConnectionL() Start " ) );
+	if( iConnMan )
+		{
+		iConnMan->ReleaseConnectionL();
+		}
+
+	LOGGER ( TXT ( "COSSProtocolConnection::ReleaseConnectionL() End" ) );
+	}
+// ---------------------------------------------------------------------------
+// COSSProtocolConnection::LogoutRequestL()
+// ---------------------------------------------------------------------------
+//
+void COSSProtocolConnection::LogoutRequestL(TXIMPRequestId aOpId)
+	{
+		COSSProtocolLogoutRequest* req = COSSProtocolLogoutRequest::NewLC ( *iConnMan, aOpId );
+
+		req->IssueLogoutRequestL();
+
+		CleanupStack::Pop ( req );
+	
+	
+	}
+// ---------------------------------------------------------------------------
+// COSSProtocolConnection::GetProtocolInterface
+// ---------------------------------------------------------------------------
+//	
+	
+TAny* COSSProtocolConnection::GetProtocolInterface(TInt aInterfaceId)
+	{
+	LOGGER ( TXT ( "COSSProtocolConnection::ProtocolImFeatures() Start " ) );
+	
+	//return iImFeatures->GetInterface(aInterfaceId, MXIMPBase::EPanicIfUnknown );
+	
+	if(aInterfaceId == CProtocolImFeatures::KInterfaceId)
+		{
+		return iImFeatures->GetInterface(aInterfaceId, MXIMPBase::EPanicIfUnknown ); 
+		}
+		
+    else if(aInterfaceId == MProtocolSearchFeature::KInterfaceId)
+		{
+		return  iSearchFeatures->GetInterface(aInterfaceId, MXIMPBase::EPanicIfUnknown ) ;
+		}		
+	
+    return NULL;
+	}
+