--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/dhcppositionprovider/src/dhcpconnectionengine.cpp Wed Sep 01 12:29:57 2010 +0100
@@ -0,0 +1,192 @@
+/*
+* Copyright (c) 2007 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: Browse and activate proper connection method.
+*
+*/
+
+
+#include <es_sock.h>
+#include <es_enum.h>
+#include "dhcppsylogging.h"
+#include "dhcppsy.hrh"
+#include "dhcpconnectionprogressnotifier.h"
+#include "dhcpconnectionstateobserver.h"
+#include "dhcpconnectionengine.h"
+
+// ---------------------------------------------------------------------------
+// CDhcpConnectionEngine::NewL
+// ---------------------------------------------------------------------------
+//
+CDhcpConnectionEngine* CDhcpConnectionEngine::NewL (RConnection& aConnection)
+ {
+ CDhcpConnectionEngine* self = new (ELeave) CDhcpConnectionEngine (aConnection);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+// Member methods
+// ---------------------------------------------------------------------------
+// CDhcpConnectionEngine::CDhcpConnectionEngine
+// ---------------------------------------------------------------------------
+//
+CDhcpConnectionEngine::CDhcpConnectionEngine (RConnection& aConnection) : CActive ( EPriorityStandard ),
+ iConnection (aConnection)
+ {
+ TRACESTRING( "CDhcpConnectionEngine::CDhcpConnectionEngine" );
+ CActiveScheduler::Add( this );
+ }
+
+// ---------------------------------------------------------------------------
+// CDhcpConnectionEngine::~CDhcpConnectionEngine
+// ---------------------------------------------------------------------------
+//
+CDhcpConnectionEngine::~CDhcpConnectionEngine()
+ {
+ TRACESTRING( "CDhcpConnectionEngine::~CDhcpConnectionEngine" );
+ Cancel();
+ delete iProgressNotifier;
+ }
+// ---------------------------------------------------------------------------
+// CDhcpConnectionEngine::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CDhcpConnectionEngine::ConstructL()
+ {
+ TRACESTRING( "CDhcpConnectionEngine::ContructL" );
+ iProgressNotifier = CDhcpConnectionProgressNotifier::NewL(iConnection, this);
+ }
+
+// ---------------------------------------------------------------------------
+// CDhcpConnectionEngine::DoCancel
+// ---------------------------------------------------------------------------
+//
+void CDhcpConnectionEngine::DoCancel()
+ {
+ TRACESTRING2 ( "CDhcpConnectionEngine::DoCancel, state %d", iStates);
+ // Is this really needed ? Most cases SVP will continue with same IAP connection so
+ // it's not good to drop a connection beforehand ...
+ iProgressNotifier->Cancel ();
+ iConnection.Close ();
+ TRACESTRING( "CDhcpConnectionEngine::DoCancel, end" );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CDhcpConnectionEngine::ActiveWlanConnection
+// ---------------------------------------------------------------------------
+//
+TBool CDhcpConnectionEngine::IsConnectedL (TUint32 aIAPId )
+ {
+ TUint connectionCount = 0;
+ TBool isConnected = EFalse;
+ if (iProgressNotifier->GetState () == EDhcpConnectStateConnected)
+ {
+ isConnected = ETrue;
+ return isConnected;
+ }
+
+ User::LeaveIfError( iConnection.EnumerateConnections(connectionCount));
+ TRACESTRING2 ("CDhcpConnectionEngine::IsConnectedL, connCount, %d", connectionCount )
+ // Loop shall start from second item, otherwise this will not work.
+ for ( TUint i = 1; i <= connectionCount; i++ )
+ {
+ TPckgBuf<TConnectionInfo> connInfo;
+ User::LeaveIfError( iConnection.GetConnectionInfo( i, connInfo ) );
+ if ( connInfo().iIapId == aIAPId )
+ {
+ User::LeaveIfError( iConnection.Attach(
+ connInfo, RConnection::EAttachTypeNormal ) );
+ isConnected = ETrue;
+ break;
+ }
+ }
+ return isConnected;
+ }
+
+// ---------------------------------------------------------------------------
+// CDhcpConnectionEngine::StateChangedL
+// ---------------------------------------------------------------------------
+//
+void CDhcpConnectionEngine::StateChangedL ()
+ {
+ switch(iProgressNotifier->GetState ())
+ {
+ case EDhcpConnectStateConnected:
+ {
+ if (iStates==EConnectionStartup)
+ {
+ TRequestStatus *status = iClientStatus;
+ User::RequestComplete ( status, KErrNone );
+ iStates = EIdle;
+ }
+ }
+ break;
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CDhcpConnectionEngine::ConnectL
+// ---------------------------------------------------------------------------
+//
+void CDhcpConnectionEngine::ConnectL (TUint aIAPConnectionId, TRequestStatus& aStatus)
+ {
+ TRACESTRING( "CDhcpConnectionEngine::ConnectL" );
+ aStatus = KRequestPending;
+ iClientStatus = &aStatus;
+ iIapProfileId = aIAPConnectionId;
+ iPreferences.SetIapId( iIapProfileId );
+ iPreferences.SetDialogPreference( ECommDbDialogPrefDoNotPrompt );
+ iConnection.Start( iPreferences, iStatus );
+ iStates = ETurnConnectionOn;
+ SetActive ();
+ }
+
+// ---------------------------------------------------------------------------
+// CDhcpConnectionEngine::RunL
+// ---------------------------------------------------------------------------
+//
+void CDhcpConnectionEngine::RunL()
+ {
+ TRACESTRING2( "CDhcpConnectionEngine::RunL, %d ", iStates);
+ TRACESTRING2( "CDhcpConnectionEngine::RunL, %d ", iStatus.Int() );
+ TInt retValue = iStatus.Int();
+ if(retValue!=KErrNone)
+ {
+ //
+ // Even we failed to connect specified wlan network, we should continue with
+ // location query progress until the DHCPInform message has been send to someone.
+ // This is reason for that we complete with KErrNone in here.
+ //
+ TRequestStatus *status = iClientStatus;
+ User::RequestComplete ( status, KErrNone );
+ iStates = EIdle;
+ }
+ else
+ {
+ switch (iStates)
+ {
+ case ETurnConnectionOn:
+ {
+ // Ok we just flag on until progress notification tells to us that
+ iStates = EConnectionStartup;
+ }
+ break;
+ }
+ }
+ }
+
+// End of file