connectionutilities/ConnectionDialogs/cconndlg/clientsrc/GenConAgentDialogServer.cpp
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:23:51 +0100
branchRCL_3
changeset 58 83ca720e2b9a
parent 57 05bc53fe583b
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201033 Kit: 201035

/*
* Copyright (c) 2002 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:  Implementation of Generic Connection Dialog Client
*
*/



// INCLUDE FILES
#include "GenConAgentDialogServer.h"
#include "ConnectionDialogsUidDefs.h"
#include "ActiveLogin.h"
#include "ConnectionDialogsLogger.h"

#include <agentdialog.h>


// ---------------------------------------------------------
// ThreadFunction
//
// Required by Symbian's def file, stub
// ---------------------------------------------------------
//
EXPORT_C TInt ThreadFunction(TAny* /*aArg*/)
    {
    return 0;
    }


// ---------------------------------------------------------
// StartDialogThread
//
// Attempt to start a thread for the socket server in the C32 process.
// ---------------------------------------------------------
//
EXPORT_C TInt StartDialogThread()
    {
    return KErrNone;
    }


// ---------------------------------------------------------
// RGenConAgentDialogServer
// ---------------------------------------------------------
//
EXPORT_C RGenConAgentDialogServer::RGenConAgentDialogServer()
: RSessionBase(),
  iNotifier( NULL ),
  iIAP( 0 ),
  iModemId( 0 ),
  iLocationId( 0 ),
  iConNames( TIspConnectionNames() ),
  iPrefs( TConnectionPrefs() ),
  iBool( EFalse ),
  iPctBuffer( 0 ),
  iPctResponse( TPctResponse() ),
  iAuthenticationPair( TAuthenticationPair() ),
  iNewIapPrefsBuffer( TNewIapConnectionPrefs() ),
  iNotUsed( 0 ),
  iAccessPoint( 0 )
    {
    }


// ---------------------------------------------------------
// ~RGenConAgentDialogServer
// ---------------------------------------------------------
//
EXPORT_C RGenConAgentDialogServer::~RGenConAgentDialogServer()
    {
    delete iNotifier;
    }


// ---------------------------------------------------------
// Connect
//
// Create a session to the extended notifier framework
// ---------------------------------------------------------
//
EXPORT_C TInt RGenConAgentDialogServer::Connect()
    {
    TInt error( KErrNone );
    if ( !iNotifier )
        {
        TRAP( error, iNotifier = new RDialogNotifier() );
        }
    if ( !error && iNotifier )
        {
        error = iNotifier->Connect();
        } 
    return error;
    }


// ---------------------------------------------------------
// Close
// ---------------------------------------------------------
//
EXPORT_C void RGenConAgentDialogServer::Close()
    {
    if ( iNotifier )
        {
        iNotifier->Close();
        }
    }


// ---------------------------------------------------------
// Version
// ---------------------------------------------------------
//
EXPORT_C TVersion RGenConAgentDialogServer::Version( void ) const
    {
    return( TVersion( KConnDlgMajorVersionNumber, KConnDlgMinorVersionNumber,
                      KConnDlgBuildVersionNumber ) );
    }


// ---------------------------------------------------------
// IapConnection
// ---------------------------------------------------------
//
EXPORT_C void RGenConAgentDialogServer::IapConnection( TUint32& aIAP, 
                    const TConnectionPrefs& aPrefs, TRequestStatus& aStatus)
    {
    CLOG_ENTERFN( "RGenConAgentDialogServer::IapConnection 1" );

    IapConnection( aIAP, aPrefs, KErrNone, aStatus );

    CLOG_LEAVEFN( "RGenConAgentDialogServer::IapConnection 1" );
    }


// ---------------------------------------------------------
// IapConnection
// ---------------------------------------------------------
//
EXPORT_C void RGenConAgentDialogServer::IapConnection( TUint32& aIAP, 
                    const TConnectionPrefs& aPrefs, TInt /*aLastError*/, 
                    TRequestStatus& aStatus)
    {
    CLOG_ENTERFN( "RGenConAgentDialogServer::IapConnection 2" );

    ::new( &iIAP ) TPckg<TUint32>( aIAP );
    iPrefs() = aPrefs;

    if ( iNotifier )
        {
        iNotifier->StartNotifierAndGetResponse( aStatus, KUidCConnDlgIap,
                                                iPrefs, iIAP );
        }

    CLOG_LEAVEFN( "RGenConAgentDialogServer::IapConnection 2" );
    }


// ---------------------------------------------------------
// WarnNewIapConnection
// ---------------------------------------------------------
//
EXPORT_C void RGenConAgentDialogServer::WarnNewIapConnection(
                                    const TConnectionPrefs& aPrefs,
                                    TInt aLastError, const TDesC& aNewIapName, 
                                    TBool& aResponse, TRequestStatus& aStatus)
    {
    CLOG_ENTERFN( "RGenConAgentDialogServer::WarnNewIapConnection" );

    ::new( &iBool ) TPckg<TBool>( aResponse );
    ::new( &iNewIapPrefsBuffer ) TPckgBuf<TNewIapConnectionPrefs>( 
                                                    TNewIapConnectionPrefs() );

    iNewIapPrefsBuffer().iPrefs = aPrefs;
    iNewIapPrefsBuffer().iLastError = aLastError;
    iNewIapPrefsBuffer().iName = aNewIapName;

    if ( iNotifier )
        {
        iNotifier->StartNotifierAndGetResponse( aStatus, KUidCConnDlgNewIap,
                                                iNewIapPrefsBuffer, iBool );
        }

    CLOG_LEAVEFN( "RGenConAgentDialogServer::WarnNewIapConnection" );
    }


// ---------------------------------------------------------
// Login
// ---------------------------------------------------------
//
EXPORT_C void RGenConAgentDialogServer::Login( TDes& aUsername, 
                                               TDes& aPassword, 
                                               TBool aIsReconnect, 
                                               TRequestStatus& aStatus )
    {
    CLOG_ENTERFN( "RGenConAgentDialogServer::Login" );

    Authenticate( aUsername, aPassword, aIsReconnect, aStatus );

    CLOG_LEAVEFN( "RGenConAgentDialogServer::Login" );
    }


// ---------------------------------------------------------
// Authenticate
// ---------------------------------------------------------
//
EXPORT_C void RGenConAgentDialogServer::Authenticate( TDes& aUsername,
                                                      TDes& aPassword, 
                                                      TBool /*aIsReconnect*/, 
                                                      TRequestStatus& aStatus )
    {
    CLOG_ENTERFN( "RGenConAgentDialogServer::Authenticate" );

    CActiveLogin* activeLogin = NULL;

    TRAPD( err, activeLogin = CActiveLogin::NewL( aUsername, aPassword ) );

    iNotUsed() = ( TUint32 )activeLogin;
    
    if ( err != KErrNone )
        {
        TRequestStatus* pS = &aStatus;
        User::RequestComplete( pS, err );
        }
    else
        {
        activeLogin->Observe( aStatus );

        TPckgBuf<TAuthenticationPairBuff>* authenticationPairBuff = 
                                                    activeLogin->GetBuffer();

        if ( iNotifier )
            {
            iNotifier->StartNotifierAndGetResponse( activeLogin->iStatus,
                                                    KUidCConnDlgAuthentication,
                                                    *authenticationPairBuff,
                                                    *authenticationPairBuff );
            }
        }

    CLOG_LEAVEFN( "RGenConAgentDialogServer::Authenticate" );
    }


// ---------------------------------------------------------
// Reconnect
// ---------------------------------------------------------
//
EXPORT_C void RGenConAgentDialogServer::Reconnect( TBool& aBool, 
                                                   TRequestStatus& aStatus )
    {
    // Reconnect dialog has not to be showed
    aBool = EFalse;
    TRequestStatus* pS = &aStatus;
    User::RequestComplete( pS, KErrNone );
    }


// ---------------------------------------------------------
// OpenPct
// ---------------------------------------------------------
//
EXPORT_C TInt RGenConAgentDialogServer::OpenPct()
    {
    return( KErrNotSupported );
    }


// ---------------------------------------------------------
// WritePct
// ---------------------------------------------------------
//
EXPORT_C TInt RGenConAgentDialogServer::WritePct( const TDesC& /*aData*/ )
    {
    return( KErrNone );
    }


// ---------------------------------------------------------
// ReadPct
// ---------------------------------------------------------
//
EXPORT_C void RGenConAgentDialogServer::ReadPct( TDes& /*aData*/, 
                                                 TRequestStatus& aStatus )
    {
    TRequestStatus* s = &aStatus;
    User::RequestComplete( s, KErrNotSupported );
    }


// ---------------------------------------------------------
// DestroyPctNotification
// ---------------------------------------------------------
//
EXPORT_C void RGenConAgentDialogServer::DestroyPctNotification( 
                                                TRequestStatus& /*aStatus*/ )
    {
    }


// ---------------------------------------------------------
// ClosePct
// ---------------------------------------------------------
//
EXPORT_C void RGenConAgentDialogServer::ClosePct()
    {
    }


// ---------------------------------------------------------
// QoSWarning
// ---------------------------------------------------------
//
EXPORT_C void RGenConAgentDialogServer::QoSWarning( TBool& aResponse, 
                                                    TRequestStatus& aStatus )
    {
    CLOG_ENTERFN( "RGenConAgentDialogServer::QoSWarning" );

    ::new( &iBool ) TPckg<TBool>( aResponse );
    if ( iNotifier )
        {
        iNotifier->StartNotifierAndGetResponse( aStatus, KUidCConnDlgQos,
                                                iBool, iBool );
        }

    CLOG_LEAVEFN( "RGenConAgentDialogServer::QoSWarning" );
    }


// ---------------------------------------------------------
// ModemAndLocationSelection
// ---------------------------------------------------------
//
EXPORT_C void RGenConAgentDialogServer::ModemAndLocationSelection( 
                                                    TUint32& aModemId, 
                                                    TUint32& aLocationId, 
                                                    TRequestStatus& aStatus)
    {
    ::new( &iModemId ) TPckg<TUint32>( aModemId );
    ::new( &iLocationId ) TPckg<TUint32>( aLocationId );

    TIspConnectionNames modemLoc;
    modemLoc.iModemName.Num( ( TInt )aModemId );
    modemLoc.iLocationName.Num( ( TInt )aLocationId );
    iConNames = modemLoc;

    if ( iNotifier )
        {
        iNotifier->StartNotifierAndGetResponse( aStatus, 
                                                KUidCConnDlgModemAndLocation,
                                                iConNames, iConNames);
        }
    }


// ---------------------------------------------------------
// ClosePct
// ---------------------------------------------------------
//
EXPORT_C void RGenConAgentDialogServer::CancelModemAndLocationSelection()
    {
    if ( iNotifier )
        {
        iNotifier->CancelNotifier( KUidCConnDlgModemAndLocation );
        }
    }


// ---------------------------------------------------------
// CancelIapConnection
// ---------------------------------------------------------
//
EXPORT_C void RGenConAgentDialogServer::CancelIapConnection()
    {
    CLOG_ENTERFN( "RGenConAgentDialogServer::CancelIapConnection" );

    if ( iNotifier )
        {
        iNotifier->CancelNotifier( KUidCConnDlgIap );
        }

    CLOG_LEAVEFN( "RGenConAgentDialogServer::CancelIapConnection" );
    }


// ---------------------------------------------------------
// CancelWarnNewIapConnection
// ---------------------------------------------------------
//
EXPORT_C void RGenConAgentDialogServer::CancelWarnNewIapConnection()
    {
    CLOG_ENTERFN( "RGenConAgentDialogServer::CancelWarnNewIapConnection" );

    if ( iNotifier )
        {
        iNotifier->CancelNotifier( KUidCConnDlgNewIap );
        }

    CLOG_LEAVEFN( "RGenConAgentDialogServer::CancelWarnNewIapConnection" );
    }


// ---------------------------------------------------------
// CancelLogin
// ---------------------------------------------------------
//
EXPORT_C void RGenConAgentDialogServer::CancelLogin()
    {
    CLOG_ENTERFN( "RGenConAgentDialogServer::CancelLogin" );

    CancelAuthenticate();

    CLOG_LEAVEFN( "RGenConAgentDialogServer::CancelLogin" );
    }


// ---------------------------------------------------------
// CancelAuthenticate
// ---------------------------------------------------------
//
EXPORT_C void RGenConAgentDialogServer::CancelAuthenticate()
    {
    CLOG_ENTERFN( "RGenConAgentDialogServer::CancelAuthenticate" );

    if ( iNotifier )
        {
        iNotifier->CancelNotifier( KUidCConnDlgAuthentication );
        }

    CActiveLogin* activeLogin = ( CActiveLogin* )iNotUsed();

    activeLogin->Cancel();
    delete activeLogin;

    CLOG_LEAVEFN( "RGenConAgentDialogServer::CancelAuthenticate" );
    }


// ---------------------------------------------------------
// CancelReconnect
// ---------------------------------------------------------
//
EXPORT_C void RGenConAgentDialogServer::CancelReconnect()
    {
    if ( iNotifier )
        {
        iNotifier->CancelNotifier( KUidCConnDlgReconnect );
        }
    }


// ---------------------------------------------------------
// CancelReadPct
// ---------------------------------------------------------
//
EXPORT_C void RGenConAgentDialogServer::CancelReadPct()
    {
    }


// ---------------------------------------------------------
// CancelDestroyPctNotification
// ---------------------------------------------------------
//
EXPORT_C void RGenConAgentDialogServer::CancelDestroyPctNotification()
    {
    }


// ---------------------------------------------------------
// CancelQoSWarning
// ---------------------------------------------------------
//
EXPORT_C void RGenConAgentDialogServer::CancelQoSWarning()
    {
    CLOG_ENTERFN( "RGenConAgentDialogServer::CancelQoSWarning" );

    if ( iNotifier )
        {
        iNotifier->CancelNotifier( KUidCConnDlgQos );
        }

    CLOG_LEAVEFN( "RGenConAgentDialogServer::CancelQoSWarning" );
    }


// ---------------------------------------------------------
// AccessPointConnection
// ---------------------------------------------------------
//
EXPORT_C void RGenConAgentDialogServer::AccessPointConnection( 
                                    TUint32& /*aAccessPoint*/, 
                                    TInt /*aAccessPointGroup*/, 
                                    TRequestStatus& /*aStatus*/ )
    {
    }


// ---------------------------------------------------------
// CancelAccessPointConnection
// ---------------------------------------------------------
//
EXPORT_C void RGenConAgentDialogServer::CancelAccessPointConnection()
    {
    CLOG_ENTERFN( "RGenConAgentDialogServer::CancelAccessPointConnection" );

    if ( iNotifier )
        {
        iNotifier->CancelNotifier( KUidCConnDlgSelectConn );
        }

    CLOG_LEAVEFN( "RGenConAgentDialogServer::CancelAccessPointConnection" );
    }


// ---------------------------------------------------------
// AccessPointConnection
// ---------------------------------------------------------
//
EXPORT_C void RGenConAgentDialogServer::AccessPointConnection(
                                                  TUint32& /*aAP*/, 
                                                  TUint32 aAPType, 
                                                  TUint32& aBearerAPInd, 
                                                  TUint32 aBearerAPType, 
                                                  TRequestStatus& aStatus )
    {
    CLOG_ENTERFN( "RGenConAgentDialogServer::AccessPointConnection" );

    ::new( &iIAP ) TPckg<TUint32>( aBearerAPInd );
    ::new( &iPrefs ) TPckgBuf<TConnectionPrefs>( TConnectionPrefs() );

    // Using the unused iRank to pass the ElementId
    iPrefs().iRank = aBearerAPInd;
    iPrefs().iBearerSet = aBearerAPType;
    
    // By setting aAPType to 1 application can define that
    // dialog is displayed even though there was a user connection.
    if ( aAPType == 1 )
        {
    	iPrefs().iDirection = ECommDbConnectionDirectionOutgoing;
        }
    else
        {
    	iPrefs().iDirection = ECommDbConnectionDirectionUnknown;
        }

    if ( iNotifier )
        {
        iNotifier->StartNotifierAndGetResponse( aStatus, 
                                                KUidCConnDlgSelectConn,
                                                iPrefs, iIAP );
        }

    CLOG_LEAVEFN( "RGenConAgentDialogServer::AccessPointConnection" );
    }


// ---------------------------------------------------------
// Connect
//
// Connect to the  server
// ---------------------------------------------------------
//
TInt RDialogNotifier::Connect()
    {
    TInt ret = RNotifier::Connect();
    return ret;
    }


// End of File