presencefwsimpleadpt/src/simplepluginsession.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 02 Feb 2010 01:05:17 +0200
changeset 0 c8caa15ef882
permissions -rw-r--r--
Revision: 201003 Kit: 201005

/*
* Copyright (c) 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:    SIMPLE Protocol implementation for Presence Framework
*
*/




#include <e32std.h>

#include <presenceinfo.h>

#include <ximpserviceinfo.h>
#include <ximpbase.h>
#include <ximpidentity.h>
#include <ximpprotocolconnectionhost.h>

#include <simplefactory.h>
#include <msimpleconnection.h>
#include <msimpleconnectionobserver.h>
#include <pressettingsapi.h>

#include "simplepluginsession.h"
#include "simpleplugindebugutils.h"
#include "msimplepluginconnectionobs.h"


// ======== MEMBER FUNCTIONS ========

// ---------------------------------------------------------------------------
// CSimplePluginSession::CSimplePluginSession()
// ---------------------------------------------------------------------------
//
CSimplePluginSession::CSimplePluginSession( MSimplePluginConnectionObs& aObs)
: // CActive( CActive::EPriorityStandard ) ,
  iObs(aObs), iType( MSimplePluginConnectionObs::ENoReq ), iConnected( EFalse )
    {
    }

// ---------------------------------------------------------------------------
// CSimplePluginSession::ConstructL()
// ---------------------------------------------------------------------------
//
void CSimplePluginSession::ConstructL(
    const MXIMPServiceInfo& aService )
    {
    // iIap is needed only
    iIap = aService.IapId();

    iConnection = TSimpleFactory::NewConnectionL( *this );
    }

// ---------------------------------------------------------------------------
// CSimplePluginSession::NewL()
// ---------------------------------------------------------------------------
//
CSimplePluginSession* CSimplePluginSession::NewL(
    const MXIMPServiceInfo& aServiceInfo,
    MSimplePluginConnectionObs& aObs )
    {
    CSimplePluginSession* self =  new( ELeave ) CSimplePluginSession( aObs );
    CleanupStack::PushL( self );
    self->ConstructL( aServiceInfo );
    CleanupStack::Pop( self );
    return self;
    }

// ---------------------------------------------------------------------------
// CSimplePluginSession::~CSimplePluginSession()
// ---------------------------------------------------------------------------
//
CSimplePluginSession::~CSimplePluginSession()
    {
    delete iUserId8;
    delete iDomain;
    if ( iConnection )
        {
        iConnection->Close();        
        }
    }

// ---------------------------------------------------------------------------
// CSimplePluginSession::SimpleConnection()
// ---------------------------------------------------------------------------
//
MSimpleConnection* CSimplePluginSession::SimpleConnection( )
    {
    return iConnection;
    }

// ---------------------------------------------------------------------------
// CSimplePluginSession::XdmSettingsId()
// ---------------------------------------------------------------------------
//
TInt CSimplePluginSession::XdmSettingsId( )
    {
    return iXdmSetting;
    }
    
// ---------------------------------------------------------------------------
// CSimplePluginSession::CurrentDomain()
// ---------------------------------------------------------------------------
//
TPtrC16 CSimplePluginSession::CurrentDomain( )
    {
    return iDomain ? iDomain->Des() : TPtrC16();
    }    

// ---------------------------------------------------------------------------
// CSimplePluginSession::OpenSessionL()
// Notice: MXIMPServiceInfo::IapId supported only
// ---------------------------------------------------------------------------
//
void CSimplePluginSession::OpenSessionL()
    {
    TPresSettingsSet mySet;

#ifdef _DEBUG

    PluginLogger::Log(_L("PluginSession: OpenSessionL") );
        
    RArray<TInt> setIds;
    CDesCArray* carr = PresSettingsApi::GetAllSetsNamesLC( setIds );
    TInt myCount = setIds.Count();
    for (TInt i=0; i<myCount; i++)
        {

        TBuf<500> buffer2; buffer2.Copy(carr->MdcaPoint(i));
        PluginLogger::Log(_L("PluginSession: ID:%d = %S"), setIds[i], &buffer2);
        }
    setIds.Reset();
    CleanupStack::PopAndDestroy( carr );
#endif

    iConnected = EFalse;

    User::LeaveIfError( PresSettingsApi::SettingsSetL( iIap, mySet ));
    iXdmSetting = mySet.iXDMSetting;
    
    iDomain = mySet.iDomainSyntax.AllocL();   

    // SIP register
    iOpId = iConnection->LoginL( iIap );
    iType = MSimplePluginConnectionObs::EOpenSess;       
    }
    
// ---------------------------------------------------------------------------
// CSimplePluginSession::OpenSessionL()
// Notice: Multiple connections support to be done.
// ---------------------------------------------------------------------------
//
void CSimplePluginSession::OpenSessionL( TInt aSettingsId )
    {
    iIap = aSettingsId;
    OpenSessionL();
    }

// ---------------------------------------------------------------------------
// CSimplePluginSession::ConnectionStatusL()
// ---------------------------------------------------------------------------
//
void CSimplePluginSession::ConnectionStatusL( MSimpleConnection::TSimpleState aState )
    {
#ifdef _DEBUG
    PluginLogger::Log(_L("PluginSession: ConnectionStatusL %d"), aState );
#endif
        
    if ( (aState == MSimpleConnection::EInactive || aState == MSimpleConnection::EUnavailable ) &&
         iConnected )
        {
#ifdef _DEBUG
        PluginLogger::Log(
            _L("PluginSession: ConnectionStatusL callback HandleConnectionTerminated") );
#endif  
        iConnected = EFalse;                    
        iObs.Host()->HandleConnectionTerminated( NULL );         
        }        
    }

// ---------------------------------------------------------------------------
// CSimplePluginSession::RequestCompleteL()
// ---------------------------------------------------------------------------
//
void CSimplePluginSession::RequestCompleteL( TInt /*aOpId*/, TInt aStatus )
    {
    MSimplePluginConnectionObs::TReqType current = iType;
    iType = MSimplePluginConnectionObs::ENoReq;
    if ( !aStatus )
        {
        iConnected = ETrue;
        }
    iObs.CompleteReq( current, aStatus );
    }

// ---------------------------------------------------------------------------
// CSimplePluginSession::CurrentSipPresentity()
// ---------------------------------------------------------------------------
//
TPtrC8 CSimplePluginSession::CurrentSipPresentity()
    {        
    // Get from Simple engine
    delete iUserId8;
    iUserId8 = NULL;
    TRAP_IGNORE( iUserId8 = iConnection->CurrentSIPIdentityL().AllocL() );
    return iUserId8 ? iUserId8->Des() : TPtrC8();
    }



// End of file