linklayercontrol/tundriveragt/src/tundriveragent.cpp
branchRCL_3
changeset 63 425d8f4f7fa5
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/linklayercontrol/tundriveragt/src/tundriveragent.cpp	Wed Sep 15 00:18:51 2010 +0300
@@ -0,0 +1,321 @@
+/**
+*   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:
+*   Source file for tundriver agent.
+* 
+*
+*/
+
+/**
+ @file tundriveragent.cpp
+ @internalTechnology
+*/
+
+#include "tundriveragent.h"
+extern "C" EXPORT_C CNifAgentFactory* NewAgentFactoryL()
+/**
+Agent Factory
+First ordinal export
+
+@internalComponent
+@return an object to class CTunAgentFactory,which Perform Agent initialisation.
+*/
+	{	
+	return new(ELeave) CTunDriverAgentFactory;
+	}
+
+void CTunDriverAgentFactory::InstallL() 
+/**
+Performs a new Agent initialisation
+*/
+	{}
+ 
+CNifAgentBase* CTunDriverAgentFactory::NewAgentL(const TDesC& /*aName*/)
+/**
+Creates a new TunDriverAgent to TunDriver
+
+@param aName , name of the TunDriverAgent
+@return a new instance of class TunDriverAgent
+*/
+	{
+	return CTunDriverAgent::NewL();
+	}
+
+TInt CTunDriverAgentFactory::Info(TNifAgentInfo& aInfo, TInt /*aIndex*/) const
+/**
+Retrieves information about the Agent
+
+@param aInfo,a reference of class TNifAgentInfo which contains information about TunDriverAgent
+@return KErrNone if information retrieved successfully.
+*/
+	{
+	aInfo.iName = KTunDriverAgentName;
+	aInfo.iVersion = TVersion(KMajorVersionNumber,KMinorVersionNumber,KBuildVersionNumber);
+	return KErrNone;
+	}
+
+CTunDriverAgent::CTunDriverAgent() :	iServiceStartedCallback(CActive::EPriorityStandard),
+							iConnectCompleteCallback(CActive::EPriorityStandard), 
+							iDisconnectCallback(CActive::EPriorityStandard)
+/**
+Default Constructor
+*/
+	{
+	TCallBack serviceStartedCallback(ServiceStartedCb, this);
+	iServiceStartedCallback.Set(serviceStartedCallback);
+	
+	TCallBack connectionCompleteCallback(ConnectCompleteCb, this);
+	iConnectCompleteCallback.Set(connectionCompleteCallback);
+
+	TCallBack disconnectionCompleteCallback(DisconnectCompleteCb, this);
+	iDisconnectCallback.Set(disconnectionCompleteCallback);
+	}
+ 
+CTunDriverAgent::~CTunDriverAgent()
+/**
+Destructor
+*/
+	{
+	iServiceStartedCallback.Cancel();
+	iConnectCompleteCallback.Cancel();
+	iDisconnectCallback.Cancel();
+	}
+
+
+CTunDriverAgent* CTunDriverAgent::NewL()
+/**
+Static NewL function constructing an object of class CTunDriverAgent
+
+@return self,pointer to class TunDriverAgent,that owns a CAsyncCallback used to 
+control the asynchronous ServiceStarted() and DisconnectComplete() call from the Agent to TunDriver. 
+*/
+	{
+	CTunDriverAgent* self = new (ELeave) CTunDriverAgent();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop();
+	return self;
+	}
+
+void CTunDriverAgent::ConstructL()
+/**
+2nd Phase Constructor
+Calls CAgentBase::ConstructL()
+construct the database and dialog processor
+*/
+	{
+	CAgentBase::ConstructL();
+	iCancelled = EFalse;
+	iAgentProgress = ETunDriverAgtIdle;
+	}
+
+void CTunDriverAgent::Info(TNifAgentInfo& aInfo) const
+/**
+Information about this Agent
+
+@param aInfo on return contains information about the agent
+*/
+	{
+	aInfo.iName = KTunDriverAgentName;
+	aInfo.iName.AppendFormat(_L("-AgentFactory[0x%08x]"), this);
+	aInfo.iVersion = TVersion(KMajorVersionNumber,KMinorVersionNumber,KBuildVersionNumber);
+	}
+
+void CTunDriverAgent::Connect(TAgentConnectType aType)
+/**
+Connects this TunDriverAgent to TunDriver
+
+@internalComponent  
+@param aType, a variable of enum TAgentConnectType describing connection types.
+*/
+	{
+	if (EAgentReconnect == aType)
+		{
+		iConnectCompleteCallback.CallBack();
+		}
+	else
+		{
+		iCancelled = EFalse;
+		iServiceStartedCallback.CallBack();		
+		}
+	}
+
+void CTunDriverAgent::Connect(TAgentConnectType aType, CStoreableOverrideSettings* /*aOverrideSettings*/)
+/**
+Connects this TunDriverAgent to TunDriver with store and retrieve commDB override sets to and from both
+streams and buffers.
+
+@param aType,a variable of enum TAgentConnectType describing connection types.
+@param aOverrideSettings, a pointer to class CStoreableOverrideSettings which store CommDB overrides.
+*/
+	{
+	Connect(aType);
+	}
+
+void CTunDriverAgent::CancelConnect()
+/**
+Cancels Connection of the TunDriverAgent to TunDriver 
+*/
+	{
+	iServiceStartedCallback.Cancel();
+	iConnectCompleteCallback.Cancel();
+	iConnected = EFalse;
+	iCancelled = ETrue;
+	}
+
+void CTunDriverAgent::Disconnect(TInt aReason)
+/**
+Disconnects from the TunDriverAgent to TunDriver with reason 
+
+@param aReason, reason for disconnection to the agent.
+*/
+	{	   
+	iLastErrorCode = aReason;
+	iDisconnectCallback.CallBack();
+	}
+
+void CTunDriverAgent::ServiceStarted(TInt /*aError*/)
+/**
+ConnectionComplete from TunDriverAgent to TunDriver
+This function is calling CallBack() function if connect is not cancelled
+
+@param aError, error number for which service needs to be started.
+*/
+	{
+	iAgentProgress = ETunDriverAgtConnecting;
+	iNotify->AgentProgress(iAgentProgress, KErrNone);
+	iNotify->ServiceStarted();
+	
+	/* if the connect has been cancelled during ServiceStarted() then we need to avoid 
+	 * calling ConnectComplete() - done in this next callback - otherwise we get a panic */
+	if (!iCancelled)
+		iConnectCompleteCallback.CallBack();
+	}
+
+void CTunDriverAgent::ConnectionComplete(TInt aError)
+/**
+Second phase of completing connection of TunDriveragent to TunDriver
+
+@param aError,error number for which connection is complete.
+*/
+    {
+    if(aError==KErrNone)
+	    {
+        iAgentProgress = ETunDriverAgtConnected;
+        iNotify->AgentProgress(ETunDriverAgtConnected, aError);
+        iNotify->ConnectComplete(aError);
+        iConnected = ETrue;
+        return;
+	    }
+	iNotify->AgentProgress(iAgentProgress,aError);
+	iNotify->ConnectComplete(aError);
+	iConnected = EFalse;
+    }
+
+void CTunDriverAgent::DisconnectionComplete()
+/**
+Completes the disconnection of TunDriveragent from TunDriver
+*/
+	{
+	
+	if ( iDisconnecting )
+	        {
+            iNotify->AgentProgress(iAgentProgress, KErrNone);
+	        }
+	    else
+	        {
+            iAgentProgress = ETunDriverAgtDisconnected;
+            iDisconnecting = ETrue;
+	        iNotify->AgentProgress(iAgentProgress, KErrNone);
+	        iNotify->DisconnectComplete();
+	        iConnected = EFalse;
+	        }
+	}
+
+TInt CTunDriverAgent::GetExcessData(TDes8& /*aBuffer*/)
+/**
+Gets excessData from TunDriveragent to TunDriver
+
+@param aBuffer, variable containing the name of TunDriveragent
+@return KErrNotSupported,error code if it does not get excess data from TunDriveragent.
+*/
+	{
+	return KErrNotSupported;
+	}
+
+
+TInt CTunDriverAgent::Notification(TNifToAgentEventType /*aEvent*/, TAny* /*aInfo*/)
+ /*
+Establishes the Notification types from Nif to Agent for the TunDriveragent
+
+@param aEvent,a variable of enum TNifToAgentEventType, which contains Notification types from TunDriver to TunDriverAgent
+@param aInfo, information about the agent
+@return KErrNotSupported,error code if the notification type does not exist.
+*/
+	{
+	return KErrNone;		
+	}
+
+void CTunDriverAgent::GetLastError(TInt& aError)
+/**
+Gets the LastError
+*/
+	{
+	aError = iLastErrorCode;
+	}
+
+
+
+TInt CTunDriverAgent::IncomingConnectionReceived()
+/**
+IncomingConnectionReceived
+
+@return KErrNotSupported, error code if incoming connection is not received.
+*/
+	{
+	return KErrNotSupported;
+	}
+
+TInt CTunDriverAgent::ServiceStartedCb(TAny* aThisPtr)
+/**
+ * Connection Callback static function 
+ *
+ */
+	{
+	CTunDriverAgent* self = (CTunDriverAgent*)aThisPtr;
+	self->ServiceStarted(KErrNone);
+	return KErrNone;
+	}
+
+TInt CTunDriverAgent::ConnectCompleteCb(TAny* aThisPtr)
+/**
+ * Second callback used during connection creation
+ *
+ */
+    {
+	CTunDriverAgent* self = (CTunDriverAgent*) aThisPtr;
+	self->ConnectionComplete(KErrNone);
+	return KErrNone;
+    }
+
+TInt CTunDriverAgent::DisconnectCompleteCb(TAny* aThisPtr)
+/**
+ * Disconnection callback static function
+ *
+ */
+    {
+	CTunDriverAgent* self = (CTunDriverAgent*) aThisPtr;
+	self->DisconnectionComplete();
+	return KErrNone;
+    }