commondrm/drmutility/src/drmutilityconnection.cpp
branchRCL_3
changeset 72 1481bf457703
parent 71 1221b68b8a5f
child 73 6661d8259859
child 77 00671737faf2
--- a/commondrm/drmutility/src/drmutilityconnection.cpp	Tue Aug 31 15:29:38 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,562 +0,0 @@
-/*
- * Copyright (c) 2010 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:  Connection manager for DRM
- *
- */
-
-// INCLUDE FILES
-#include <es_sock.h>
-#include <cmconnectionmethod.h>
-#include <cmdestination.h>
-#include <cmconnectionmethoddef.h>
-#include <cmmanager.h>
-#include <extendedconnpref.h>
-#include <cmapplicationsettingsui.h> // CCmApplicationSettingsUi
-#include <es_enum.h>
-#include <cdbcols.h> // IAP, COMMDB_ID
-#include "drmutilityconnection.h"
-#include "OstTraceDefinitions.h"
-#ifdef OST_TRACE_COMPILER_IN_USE
-#include "drmutilityconnectionTraces.h"
-#endif
-
-// ================= MEMBER FUNCTIONS =======================
-
-
-// -----------------------------------------------------------------------------
-// HasDefaultConnectionL
-// Finds default IAP id
-// @return Etrue: valid AP found
-//         EFalse: valid AP not found
-// @leave system wide error codes
-// -----------------------------------------------------------------------------
-//
-TBool DRM::CDrmUtilityConnection::HasDefaultConnectionL()
-    {
-    TBool hasDefault(EFalse);
-    TCmDefConnValue defConn;
-    RCmManager cmManager;
-    cmManager.OpenLC();
-    cmManager.ReadDefConnL(defConn);
-    if (defConn.iType == ECmDefConnConnectionMethod)
-        {
-        cmManager.GetConnectionMethodInfoIntL(defConn.iId,
-                CMManager::ECmIapId);
-        hasDefault = ETrue;
-        }
-    else if (defConn.iType == ECmDefConnDestination)
-        {
-        RCmDestination dest(cmManager.DestinationL(defConn.iId));
-        CleanupClosePushL(dest);
-
-        if (dest.ConnectionMethodCount() <= 0)
-            {
-            User::Leave(KErrNotFound);
-            }
-
-        RCmConnectionMethod cMeth(dest.ConnectionMethodL(0));
-        CleanupClosePushL(cMeth);
-
-        cMeth.GetIntAttributeL(CMManager::ECmIapId);
-        CleanupStack::PopAndDestroy(&cMeth);
-        CleanupStack::PopAndDestroy(&dest);
-        hasDefault = ETrue;
-        }
-    CleanupStack::PopAndDestroy(&cmManager);
-    return hasDefault;
-    }
-
-// -----------------------------------------------------------------------------
-// CDrmUtilityConnection::HasAccessPointsL
-// -----------------------------------------------------------------------------
-//
-TBool DRM::CDrmUtilityConnection::HasAccessPointsL()
-    {
-    TInt apCount(0);
-    RCmManager cmManager;
-    CleanupClosePushL(cmManager);
-    cmManager.OpenL();
-    RArray<TUint32> aps;
-    CleanupClosePushL(aps);
-    cmManager.ConnectionMethodL(aps, EFalse, EFalse, ETrue);
-    apCount = aps.Count();
-    CleanupStack::PopAndDestroy(2, &cmManager); //aps, cmManager
-    return apCount > 0;
-    }
-
-// ---------------------------------------------------------------------------
-// DRM::CDrmUtilityConnection::NewLC
-// ---------------------------------------------------------------------------
-//
-DRM::CDrmUtilityConnection* DRM::CDrmUtilityConnection::NewLC(
-        const TBool aAllowQueries)
-    {
-    CDrmUtilityConnection* conn = new (ELeave) CDrmUtilityConnection(
-            aAllowQueries);
-    CleanupStack::PushL(conn);
-    conn->ConstructL();
-    return conn;
-    }
-// ---------------------------------------------------------------------------
-// DRM::CDrmUtilityConnection::NewL
-// ---------------------------------------------------------------------------
-//
-DRM::CDrmUtilityConnection* DRM::CDrmUtilityConnection::NewL(
-        const TBool aAllowQueries)
-    {
-    CDrmUtilityConnection* conn = CDrmUtilityConnection::NewLC(aAllowQueries);
-    CleanupStack::Pop(conn);
-    return conn;
-    }
-
-// ---------------------------------------------------------------------------
-// DRM::CDrmUtilityConnection::~CDrmUtilityConnection
-// ---------------------------------------------------------------------------
-//
-DRM::CDrmUtilityConnection::~CDrmUtilityConnection()
-    {
-    Cancel();
-    iConnection.Close();
-    iSocketServ.Close();
-    }
-
-// ---------------------------------------------------------------------------
-// DRM::CDrmUtilityConnection::ConnectL
-// ---------------------------------------------------------------------------
-//
-void DRM::CDrmUtilityConnection::ConnectL(TRequestStatus* aStatus)
-    {
-    TInt error(KErrGeneral);
-    iStatus = KRequestPending;
-
-    if (iState == EInit)
-        {
-
-        // Make this part atomic by pushing closes on the stack.
-        error = iSocketServ.Connect();
-        if (!error)
-            {
-            error = iConnection.Open(iSocketServ);
-            }
-        }
-
-    if (iState == EConnected)
-        {
-        error=iConnection.Stop();
-        //error=iConnection.Stop(RConnection::EStopAuthoritative); //just in case still does not work
-        // if autoriative stop does not work then must do something following follow
-        // TNifProgressBuf iJalla;
-        // loop iConnection.ProgressNotification(iJalla,iStatus,KConnProgressDefault); SetActive
-        // at RunL if (iJalla.iStage < KConnectionDown)
-        // reactiveteWaitClose();
-        //iConnection.ProgressNotification(iJalla,iStatus,(KConnectionDown); (should loop till state KConnectionDown seen)
-        iConnection.Close();
-        iState = EInit;
-        error = KErrNone;
-        error = iConnection.Open(iSocketServ);
-        }
-
-    iParentStatus = aStatus;
-    *iParentStatus = KRequestPending;
-
-    CompleteSelf(error);
-    }
-
-// ---------------------------------------------------------------------------
-// DRM::CDrmUtilityConnection::HasMoreConnectionAttempts
-// ---------------------------------------------------------------------------
-//
-TBool DRM::CDrmUtilityConnection::HasMoreConnectionAttempts()
-    {
-    TBool ret(EFalse);
-    switch (iType)
-        {
-        case EUsingPurposeInternet:
-            if (iAllowQueries)
-                {
-                ret = ETrue;
-                }
-            else
-                {
-                ret = EFalse;
-                }
-            break;
-        case EUsingQuery:
-        case EFail:
-            ret = EFalse;
-            break;
-        default:
-            ret = ETrue;
-        }
-    return ret;
-    }
-
-// ---------------------------------------------------------------------------
-// DRM::CDrmUtilityConnection::IsConnected
-// ---------------------------------------------------------------------------
-//
-TBool DRM::CDrmUtilityConnection::IsConnected(TUint32& aIap)
-    {
-    TBool ret(EFalse);
-    
-    if (iState == EConnected)
-        {
-        aIap = iIapId;
-        ret = ETrue;
-        }
-    return ret;
-    }
-
-// ---------------------------------------------------------------------------
-// DRM::CDrmUtilityConnection::Close
-// ---------------------------------------------------------------------------
-//
-void DRM::CDrmUtilityConnection::Close()
-    {
-    //LOGLIT( "CDrmUtilityConnection::Close" )
-
-    Cancel();
-    iConnection.Close();
-    iSocketServ.Close();
-    iState = EInit;
-    }
-
-// ---------------------------------------------------------------------------
-// DRM::CDrmUtilityConnection:CDrmUtilityConnection:
-// ---------------------------------------------------------------------------
-//
-DRM::CDrmUtilityConnection::CDrmUtilityConnection(const TBool aAllowQueries) :
-    CActive(CActive::EPriorityStandard), iState(EInit),
-            iType(EAttachExisting), iAllowQueries(aAllowQueries)
-    {
-    CActiveScheduler::Add(this);
-    }
-
-// ---------------------------------------------------------------------------
-// DRM::CDrmUtilityConnection::ConstructL
-// ---------------------------------------------------------------------------
-//
-void DRM::CDrmUtilityConnection::ConstructL()
-    {
-    }
-
-// ---------------------------------------------------------------------------
-// DRM::CDrmUtilityConnection::DoCancel
-// ---------------------------------------------------------------------------
-//
-void DRM::CDrmUtilityConnection::DoCancel()
-    {
-    iConnection.Close();
-    iSocketServ.Close();
-    CompleteParent(KErrCancel);
-    }
-
-// ---------------------------------------------------------------------------
-// DRM::CDrmUtilityConnection::RunL
-// ---------------------------------------------------------------------------
-//
-void DRM::CDrmUtilityConnection::RunL()
-    {
-    TInt error(iStatus.Int());
-    if (iState == EInit)
-        {
-        User::LeaveIfError(error); // Handle errors in RunError().
-        if (iType == EAttachExisting)
-            {
-            AttachExistingConnectionL();
-            }
-        else
-            {
-            iState = EConnecting;
-            error = KErrNotFound;
-            CompleteSelf(error);
-            }
-        }
-    else if (iState == EConnecting)
-        {
-        if (!error)
-            {
-            iState = EConnected;
-            CompleteSelf(error);
-            }
-        else if (error != KErrNotFound)
-            {
-            User::LeaveIfError(error);
-            }
-        else
-            {
-            switch (iType)
-                {
-                case EAttachExisting:
-                    iType = EUsingDefault;
-                    ConnectUsingDefaultL();
-                    break;
-                case EUsingDefault:
-                    iType = EUsingPurposeOperator;
-                    ConnectUsingSnapPurposeL(CMManager::ESnapPurposeOperator);
-                    break;
-                case EUsingPurposeOperator:
-                    iType = EUsingPurposeInternet;
-                    ConnectUsingSnapPurposeL(CMManager::ESnapPurposeInternet);
-                    break;
-                case EUsingPurposeInternet:
-                    iType = EUsingQuery;
-                    if (iAllowQueries)
-                        {
-                        ConnectUsingQueryL();
-                        break;
-                        }
-                case EUsingQuery:
-                    iType = EFail;
-                case EFail:
-                default:
-                    User::Leave(KErrCouldNotConnect);
-                    break;
-                }
-            }
-        }
-    else if (iState == EConnected)
-        {
-        UpdateIapIdL();
-        CompleteParent(iStatus.Int());
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// DRM::CDrmUtilityConnection::RunError
-// ---------------------------------------------------------------------------
-//
-TInt DRM::CDrmUtilityConnection::RunError(TInt aError)
-    {
-    //LOGLIT( "CDrmUtilityConnection::RunError" )
-
-    iConnection.Close();
-    iSocketServ.Close();
-
-    CompleteParent(aError);
-    iState = EInit;
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// DRM::CDrmUtilityConnection::AttachExistingConnectionL
-// ---------------------------------------------------------------------------
-//
-void DRM::CDrmUtilityConnection::AttachExistingConnectionL()
-    {
-    TConnectionInfoBuf connInfo;
-    TUint count(0);
-    TInt error(KErrNotFound);
-    iStatus = KRequestPending;
-
-    User::LeaveIfError(iConnection.EnumerateConnections(count));
-    if (count)
-        {
-        // Select AP with largest index. (Latest created)
-        User::LeaveIfError(iConnection.GetConnectionInfo(count, connInfo));
-        User::LeaveIfError(iConnection.Attach(connInfo,
-                RConnection::EAttachTypeNormal));
-        iState = EConnected;
-        error = KErrNone;
-        }
-    else
-        {
-        iState = EConnecting;
-        }
-    CompleteSelf(error);
-    }
-
-// ---------------------------------------------------------------------------
-// DRM::CDrmUtilityConnection::ConnectUsingDefaultL
-// ---------------------------------------------------------------------------
-//
-void DRM::CDrmUtilityConnection::ConnectUsingDefaultL()
-    {
-    // Create overrides
-    TConnPrefList prefList;
-    TExtendedConnPref prefs;
-
-    if (!iAllowQueries)
-        {
-        prefs.SetNoteBehaviour(TExtendedConnPref::ENoteBehaviourConnSilent);
-        }
-    else
-        {
-        prefs.SetNoteBehaviour(TExtendedConnPref::ENoteBehaviourConnDisableQueries);
-        }
-        
-    //Fetch default connection
-    TBool hasDefault(ETrue);
-    TCmDefConnValue defConn;
-    RCmManager cmManager;
-    cmManager.OpenLC();
-    cmManager.ReadDefConnL(defConn);
-    if (defConn.iType == ECmDefConnConnectionMethod)
-        {
-        prefs.SetIapId(defConn.iId);
-        }
-    else if (defConn.iType == ECmDefConnDestination)
-        {
-        prefs.SetSnapId(defConn.iId);
-        }
-    else
-        {
-        hasDefault = EFalse;
-        }
-    // End of fetch default connection
-    CleanupStack::PopAndDestroy(&cmManager);
-    if (hasDefault)
-        {
-        prefList.AppendL(&prefs);
-
-        // Start an Outgoing Connection with overrides
-        iState = EConnecting;
-        iConnection.Start(prefList, iStatus);
-        SetActive();
-        }
-    else
-        {
-        // No default found --> next iteration needed
-        CompleteSelf(KErrNotFound);
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// DRM::CDrmUtilityConnection::ConnectUsingSnapOperatorL
-// ---------------------------------------------------------------------------
-//
-void DRM::CDrmUtilityConnection::ConnectUsingSnapPurposeL(
-        const TUint32 aPurpose)
-    {
-    // Create overrides
-    TConnPrefList prefList;
-    TExtendedConnPref prefs;
-    prefs.SetSnapPurpose(static_cast<CMManager::TSnapPurpose> (aPurpose));
-    if (aPurpose != CMManager::ESnapPurposeUnknown)
-        {
-        if (!iAllowQueries)
-            {
-            prefs.SetNoteBehaviour(
-                    TExtendedConnPref::ENoteBehaviourConnSilent);
-            }
-        else
-            {
-            prefs.SetNoteBehaviour(
-                    TExtendedConnPref::ENoteBehaviourConnDisableQueries);
-            }
-        }
-    else
-        {
-        prefs.SetConnSelectionDialog(ETrue);
-        prefs.SetNoteBehaviour(TExtendedConnPref::ENoteBehaviourDefault);
-        prefs.SetForcedRoaming(EFalse);
-        prefs.SetBearerSet(TExtendedConnPref::EExtendedConnBearerUnknown);
-        }
-    prefList.AppendL(&prefs);
-    iState = EConnecting;
-
-    // Start an Outgoing Connection with overrides
-    iConnection.Start(prefList, iStatus);
-    SetActive();
-    }
-
-// ---------------------------------------------------------------------------
-// DRM::CDrmUtilityConnection::ConnectUsingQueryL
-// ---------------------------------------------------------------------------
-//
-void DRM::CDrmUtilityConnection::ConnectUsingQueryL()
-    {
-    // Create overrides
-    TConnPrefList prefList;
-    TExtendedConnPref prefs;
-
-    CCmApplicationSettingsUi* ui(CCmApplicationSettingsUi::NewLC());
-    TCmSettingSelection selectedConn;
-
-    TBool selected(ui->RunApplicationSettingsL(selectedConn));
-    CleanupStack::PopAndDestroy(ui);
-    ui=NULL;
-    if (selected)
-        {
-        if (selectedConn.iResult == CMManager::EConnectionMethod)
-            {
-            prefs.SetIapId(selectedConn.iId);
-            }
-        else if (selectedConn.iResult == CMManager::EDestination)
-            {
-            prefs.SetSnapId(selectedConn.iId);
-            }
-        else if (selectedConn.iResult != CMManager::EDefaultConnection)
-            {
-            selected=EFalse;
-            }
-        }
-    if (selected)
-        {
-        if (selectedConn.iResult != CMManager::EDefaultConnection)
-            {
-            prefList.AppendL(&prefs);
-            // For ensuring possibly stale connections get disconnected first;
-            iConnection.Close();
-            iConnection.Open(iSocketServ);
-            
-            iConnection.Start(prefList, iStatus);
-            }
-        else
-            {
-            iConnection.Start(iStatus);
-            }
-        SetActive();
-        }
-    else
-        {
-        CompleteSelf(KErrCancel);
-        }
-    }
-// ---------------------------------------------------------------------------
-// DRM::CDrmUtilityConnection::CompleteSelf
-// ---------------------------------------------------------------------------
-//
-void DRM::CDrmUtilityConnection::CompleteSelf(TInt aError)
-    {
-    TRequestStatus* status(&iStatus);
-    User::RequestComplete(status, aError);
-    SetActive();
-    }
-
-// ---------------------------------------------------------------------------
-// DRM::CDrmUtilityConnection::CompleteParent
-// ---------------------------------------------------------------------------
-//
-void DRM::CDrmUtilityConnection::CompleteParent(TInt aError)
-    {
-    if (iParentStatus)
-        {
-        User::RequestComplete(iParentStatus, aError);
-        iParentStatus = NULL;
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// DRM::CDrmUtilityConnection::UpdateIapId
-// ---------------------------------------------------------------------------
-//
-void DRM::CDrmUtilityConnection::UpdateIapIdL()
-    {
-    TBuf<16> query;
-
-    query.Format(_L("%s\\%s"), IAP, COMMDB_ID);
-    User::LeaveIfError(iConnection.GetIntSetting(query, iIapId));
-    
-    }