--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/networkprotocols/dnsproxy/dnsproxyserver/src/dnsproxysession.cpp Tue Jan 26 15:23:49 2010 +0200
@@ -0,0 +1,274 @@
+// Copyright (c) 2008-2009 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:
+// dnsproxyserver.cpp
+// Source file for the DNS Proxy server side implementation.
+// DNS Proxy client session handler code.
+//
+
+
+
+/**
+ @file
+ @internalComponent
+*/
+
+#include "dnsproxysession.h"
+#include "dnsproxyclientconfigparams.h"
+#include "dnsproxylog.h"
+#include <e32debug.h>
+
+CDnsProxyServerSession* CDnsProxyServerSession::NewL()
+/**
+ * Factory method for CDnsProxyServerSession.
+ *
+ * @internalTechnology
+ **/
+ {
+ __LOG("\n CDnsProxyServerSession::NewL Entry\n");
+ CDnsProxyServerSession* self = new (ELeave)CDnsProxyServerSession;
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ __LOG("\n CDnsProxyServerSession::NewL Exit\n");
+ return self;
+ }
+
+ void CDnsProxyServerSession::ConstructL()
+ /**
+ * 2nd phase c'tor for CDnsProxyServerSession.
+ *
+ * @internalTechnology
+ **/
+ {
+ __LOG("\n CDnsProxyServerSession::ConstructL Entry\n");
+ iProxyEngine = CDnsProxyEngine::GetInstanceL();
+ __LOG("\n CDnsProxyServerSession::ConstructL Exit\n");
+
+ }
+
+CDnsProxyServerSession::CDnsProxyServerSession(): iProxyEngine(NULL), iIsEngineStarted(EFalse)
+/**
+ * Standard constructor for CDnsProxyServerSession.
+ *
+ * @internalTechnology
+ **/
+ {
+ }
+
+CDnsProxyServerSession::~CDnsProxyServerSession()
+/**
+ * Standard destructor for CDnsProxyServerSession.
+ *
+ * @internalTechnology
+ **/
+ {
+ __LOG("\n CDnsProxyServerSession::~CDnsProxyServerSession Entry\n");
+ const CDnsProxyServer* server = static_cast<const CDnsProxyServer*>(Server());
+
+ //this condition is added to avoid panic when there is no memory
+ if(NULL != server)
+ {
+ server->DecreaseSessionCount(*this);
+ }
+ __LOG("\n CDnsProxyServerSession::~CDnsProxyServerSession Exit\n");
+ }
+
+void CDnsProxyServerSession::ServiceL(const RMessage2& aMessage)
+/**
+ * ServiceL method implemented by derived class
+ *
+ * @param - aMessage - command send by the client
+ * @return - None
+ *
+ * @internalTechnology
+ **/
+ {
+ TRAPD(err,DoServiceL(aMessage));
+ if (err != KErrNone)
+ {
+ if (!iMessage.IsNull())
+ iMessage.Complete(err);
+ }
+ }
+
+void CDnsProxyServerSession::DoServiceL(const RMessage2& aMessage)
+/**
+ * This is command handler function which handles and services client requests.
+ *
+ * @param aMessage - command send by the client
+ * @return - None
+ *
+ * @internalTechnology
+ **/
+ {
+ TInt err;
+ switch (aMessage.Function())
+ {
+ // Handle start command
+ case EProxyConfigure:
+ iMessage = aMessage;
+ __LOG("***CDnsProxyServerSession: StartDnsEngine - Start****")
+ err = StartDnsEngine(iMessage);
+ __LOG("***CDnsProxyServerSession: StartDnsEngine - End****")
+ if(err!=KErrNone)
+ iMessage.Complete(err);
+ else
+ iMessage.Complete(KErrNone);
+ break;
+
+ // Add DB command
+ case EProxyAddDb:
+ iMessage = aMessage;
+ __LOG("***CDnsProxyServerSession: UpdateDatabaseL - Start****")
+ err = UpdateDatabaseL(iMessage);
+ __LOG("***CDnsProxyServerSession: UpdateDatabaseL - End****")
+ if(err!=KErrNone)
+ iMessage.Complete(err);
+ else
+ iMessage.Complete(KErrNone);
+ break;
+
+ // Remove DB command
+ case EProxyRemoveDb:
+ iMessage = aMessage;
+ __LOG("***CDnsProxyServerSession: RemoveDbEntry - Start****")
+ err = RemoveDbEntry(iMessage);
+ __LOG("***CDnsProxyServerSession: RemoveDbEntry - End****")
+
+ if(err!=KErrNone)
+ iMessage.Complete(err);
+ else
+ iMessage.Complete(KErrNone);
+ break;
+
+ // Handle Update domain name
+ case EProxyUpdateDomainName:
+ iMessage = aMessage;
+ __LOG("***CDnsProxyServerSession: UpdateDomainName - Start****")
+ err = UpdateDomainName(iMessage);
+ __LOG("***CDnsProxyServerSession: UpdateDomainName - End****")
+ if(err!=KErrNone)
+ iMessage.Complete(err);
+ else
+ iMessage.Complete(KErrNone);
+ break;
+
+ case EProxyConfigureUplink:
+ iMessage = aMessage;
+ __LOG("***CDnsProxyServerSession: UpdateUplinkConfig - Start****")
+ err = UpdateUplinkConfig(iMessage);
+ __LOG("***CDnsProxyServerSession: UpdateUplinkConfig - End****")
+ if(err!=KErrNone)
+ iMessage.Complete(err);
+ else
+ iMessage.Complete(KErrNone);
+ break;
+ // This should never happen.
+ default:
+ iMessage = aMessage;
+ iMessage.Complete(KErrNotSupported);
+ break;
+ }
+ }
+
+TInt CDnsProxyServerSession::StartDnsEngine(const RMessage2& aMessage)
+/**
+ * This method starts the DNS proxy engine, creates an engine instance
+ * and start DNS proxy server.
+ * @param aMessage - command send by the client
+ * @return - None
+ *
+ * @internalTechnology
+ **/
+ {
+ __LOG("\n CDnsProxyServerSession::StartDNSEngine \n");
+ iIsEngineStarted = ETrue;
+ __LOG1("\niProxyEngine adress = %d \n",iProxyEngine);
+ return iProxyEngine->Start(aMessage);
+ }
+
+void CDnsProxyServerSession::StopDNSEngine()
+/**
+ * This method stops and cleans up DNS proxy.
+ * @param aMessage - command send by the client
+ * @return - None
+ *
+ * @internalTechnology
+ **/
+ {
+ if((iProxyEngine)&& (iIsEngineStarted))
+ {
+ iProxyEngine->Stop();
+ }
+ iIsEngineStarted = EFalse;
+ delete iProxyEngine;
+ }
+
+TInt CDnsProxyServerSession::UpdateDatabaseL(const RMessage2& aMessage)
+/**
+ * This method is used for DNS Proxy database implementation from ECOM plugin
+ * @param aMessage - command send by the client
+ * @return - None
+ *
+ * @internalTechnology
+ **/
+ {
+ __LOG("\n CDnsProxyServerSession::UpdateDatabaseL \n");
+ __LOG1("\n iProxyEngine %d \n", iProxyEngine);
+ return iProxyEngine->AddDbEntryL(aMessage);
+ }
+TInt CDnsProxyServerSession::RemoveDbEntry(const RMessage2& aMessage)
+/**
+ * This method is used for DNS Proxy database implementation from ECOM plugin
+ * @param aMessage - command send by the client
+ * @return - None
+ *
+ * @internalTechnology
+ **/
+ {
+ __LOG("\n CDnsProxyServerSession::RemoveDbEntry \n");
+ return iProxyEngine->RemoveDbEntry(aMessage);
+ }
+
+TInt CDnsProxyServerSession::UpdateDomainName(const RMessage2& aMessage)
+/**
+ * This method is used for DNS Proxy database implementation from ECOM plugin
+ * @param aMessage - command send by the client
+ * @return - None
+ *
+ * @internalTechnology
+ **/
+ {
+ __LOG("\n CDnsProxyServerSession::UpdateDomainName \n");
+ return iProxyEngine->UpdateDomainInfo(aMessage);
+ }
+TInt CDnsProxyServerSession::UpdateUplinkConfig(const RMessage2& aMessage)
+/**
+ * This method is used to set uplink information
+ * @param aMessage - command send by the client
+ * @return - None
+ *
+ * @internalTechnology
+ **/
+ {
+ __LOG("\n CDnsProxyServerSession::UpdateUplinkConfig \n");
+ //if engine is not created,return KErrNotReady.
+ TInt err;
+ if(!iProxyEngine)
+ err = KErrNotReady;
+ else
+ err = iProxyEngine->SetUplinkConnectionInfo(aMessage);
+ return err;
+ }
+