diff -r 000000000000 -r af10295192d8 networkprotocols/dnsproxy/dnsproxyserver/src/dnsproxyserver.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/networkprotocols/dnsproxy/dnsproxyserver/src/dnsproxyserver.cpp Tue Jan 26 15:23:49 2010 +0200 @@ -0,0 +1,168 @@ +// 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: +// Source file for the DNS Proxy server side implementation. +// DNS Proxy client session handler code. +// + + + +/** + @file + @internalComponent +*/ + +#include "dnsproxyserver.h" +#include "dnsproxysession.h" +#include "dnsproxyclientconfigparams.h" +//debug print +#include +#include "dnsproxylog.h" + +#ifdef SYMBIAN_NETWORKING_PLATSEC +#include "dnsproxypolicy.h" +#endif + + +#ifdef SYMBIAN_NETWORKING_PLATSEC +CDnsProxyServer::CDnsProxyServer(): CPolicyServer(EPriorityStandard,Policy,ESharableSessions), iCount(0) +#elif defined(EKA2) +CDnsProxyServer::CDnsProxyServer(): CServer2(EPriorityStandard), iCount(0) +#else +//On EKA1, session is open in one thread and used in another +CDnsProxyServer::CDnsProxyServer(): CServer2(EPriorityStandard, ESharableSessions), iCount(0) +#endif +/** + * The CDnsProxyServer::CDnsProxyServer method + * + * Constructor + * + * @internalComponent + */ + { + __LOG("CDnsProxyServer::CDnsProxyServer Entry/Exit") + } + +CDnsProxyServer::~CDnsProxyServer() + { + __LOG("CDnsProxyServer::~CDnsProxyServer Entry/Exit") + + } + +CDnsProxyServer* CDnsProxyServer::NewL() +/** + * Creates an instance of DNS Proxy server class + * @param - None + * @return - None + * + * @internalTechnology + **/ + { + __LOG("\n CDnsProxyServer::NewL Entry\n"); + CDnsProxyServer* self = new(ELeave) CDnsProxyServer; + self->Start(KServerName); + __LOG("\n CDnsProxyServer::NewL Exit\n"); + return self; + } + +CSession2* CDnsProxyServer::NewSessionL(const TVersion& /*aVersion*/,const RMessage2& /*aMessage*/) const +/** + * Starts server session object. + * @param aVersion + * @param aMessage + * @return - None + * + * @internalTechnology + **/ + { + __LOG("\n CDnsProxyServer::NewSessionL Entry \n"); + CDnsProxyServerSession* dnssession = CDnsProxyServerSession::NewL(); + if(dnssession) + { + const_cast(this)->iCount++; + } + return dnssession; + } + +/** + * Starts server session object. + * @param aVersion + * @param aMessage + * @return - None + * + * @internalTechnology + **/ +void CDnsProxyServer::DecreaseSessionCount(CDnsProxyServerSession& aSession)const + { + __LOG("\n CDnsProxyServer::DecreseSession Entry\n"); + const_cast(this)->iCount--; + __LOG1("\n CDnsProxyServer::DecreseSession session count = %d\n",iCount); + if(0 == iCount) + { + aSession.StopDNSEngine(); + __LOG("\n *** cout zero stoping scheduler ***\n"); + CActiveScheduler::Stop(); + } + __LOG("\n CDnsProxyServer::DecreseSession Exit\n"); + } + +static void RunTheServerL() +/** + * This method implements the CServer2 method and runs the server. + * @param - None + * @return - None + * + * @internalTechnology + **/ + { + __LOG("\n RunTheServerL \n"); + //create and install the active scheduler + CActiveScheduler* scheduler = new (ELeave) CActiveScheduler; + CleanupStack::PushL(scheduler); + CActiveScheduler::Install(scheduler); + + //create the dns proxy server + CDnsProxyServer *server = CDnsProxyServer::NewL(); + CleanupStack::PushL(server); + //naming the server thread after the server start. This helps to debug panics. + User::LeaveIfError(User::RenameThread(KServerExeName)); + RProcess::Rendezvous(KErrNone); + //enter the wait loop + CActiveScheduler::Start(); + __LOG("\n after start CActiveScheduler::Start \n"); + CleanupStack::PopAndDestroy(server); + CleanupStack::PopAndDestroy(scheduler); + __LOG("RunTheServerL Exit") + } + + +// Server process entry-point +TInt E32Main() +/** + * The main thread function, the Ordinal 1! + * @return - Standard Epoc error code on exit + */ + { + __UHEAP_MARK; // Heap checking + + CTrapCleanup* cleanup=CTrapCleanup::New(); + TInt r=KErrNoMemory; + if (cleanup) + { + TRAP(r,RunTheServerL()); + delete cleanup; + } + __UHEAP_MARKEND; + return r; + } +