networkprotocols/dnsproxy/dnsproxyserver/src/dnsproxysession.cpp
changeset 0 af10295192d8
equal deleted inserted replaced
-1:000000000000 0:af10295192d8
       
     1 // Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 // dnsproxyserver.cpp
       
    15 // Source file for the DNS Proxy server side implementation.
       
    16 // DNS Proxy client session handler code.
       
    17 //
       
    18 
       
    19 
       
    20 
       
    21 /**
       
    22  @file
       
    23  @internalComponent
       
    24 */
       
    25 
       
    26 #include "dnsproxysession.h"
       
    27 #include "dnsproxyclientconfigparams.h"
       
    28 #include "dnsproxylog.h"
       
    29 #include <e32debug.h>
       
    30 
       
    31 CDnsProxyServerSession* CDnsProxyServerSession::NewL()
       
    32 /**
       
    33  * Factory method for CDnsProxyServerSession.
       
    34  *
       
    35  * @internalTechnology
       
    36  **/
       
    37     {
       
    38     __LOG("\n CDnsProxyServerSession::NewL Entry\n");
       
    39     CDnsProxyServerSession* self = new (ELeave)CDnsProxyServerSession;
       
    40     CleanupStack::PushL(self);
       
    41     self->ConstructL();
       
    42     CleanupStack::Pop(self);
       
    43     __LOG("\n CDnsProxyServerSession::NewL Exit\n");
       
    44     return self;
       
    45     }
       
    46 
       
    47  void CDnsProxyServerSession::ConstructL()
       
    48  /**
       
    49   * 2nd phase c'tor for CDnsProxyServerSession.
       
    50   *
       
    51   * @internalTechnology
       
    52   **/
       
    53     {
       
    54     __LOG("\n CDnsProxyServerSession::ConstructL Entry\n");
       
    55     iProxyEngine = CDnsProxyEngine::GetInstanceL();
       
    56     __LOG("\n CDnsProxyServerSession::ConstructL Exit\n");
       
    57 
       
    58     }
       
    59 
       
    60 CDnsProxyServerSession::CDnsProxyServerSession(): iProxyEngine(NULL), iIsEngineStarted(EFalse)
       
    61 /**
       
    62  * Standard constructor for CDnsProxyServerSession.
       
    63  *
       
    64  * @internalTechnology
       
    65  **/
       
    66     {
       
    67     }
       
    68 
       
    69 CDnsProxyServerSession::~CDnsProxyServerSession()
       
    70 /**
       
    71  * Standard destructor for CDnsProxyServerSession.
       
    72  *
       
    73  * @internalTechnology
       
    74  **/
       
    75     {
       
    76     __LOG("\n CDnsProxyServerSession::~CDnsProxyServerSession Entry\n");
       
    77     const CDnsProxyServer* server = static_cast<const CDnsProxyServer*>(Server());
       
    78 
       
    79 	//this condition is added to avoid panic when there is no memory
       
    80     if(NULL != server)
       
    81 		{
       
    82 		server->DecreaseSessionCount(*this);
       
    83 		}
       
    84     __LOG("\n CDnsProxyServerSession::~CDnsProxyServerSession Exit\n");
       
    85     }
       
    86 
       
    87 void CDnsProxyServerSession::ServiceL(const RMessage2& aMessage)
       
    88 /**
       
    89  * ServiceL method implemented by derived class
       
    90  *
       
    91  * @param - aMessage - command send by the client
       
    92  * @return - None
       
    93  *
       
    94  * @internalTechnology
       
    95  **/
       
    96 	{
       
    97 	TRAPD(err,DoServiceL(aMessage));
       
    98 	if (err != KErrNone)
       
    99 		{
       
   100 		if (!iMessage.IsNull())
       
   101 			iMessage.Complete(err);
       
   102 		}
       
   103 	}
       
   104 
       
   105 void CDnsProxyServerSession::DoServiceL(const RMessage2& aMessage)
       
   106 /**
       
   107  * This is command handler function which handles and services client requests.
       
   108  *
       
   109  * @param aMessage - command send by the client
       
   110  * @return - None
       
   111  *
       
   112  * @internalTechnology
       
   113  **/
       
   114     {
       
   115     TInt err;
       
   116     switch (aMessage.Function())
       
   117         {
       
   118         // Handle start command
       
   119         case EProxyConfigure:
       
   120         	iMessage = aMessage;
       
   121         	__LOG("***CDnsProxyServerSession: StartDnsEngine - Start****")
       
   122            err = StartDnsEngine(iMessage);
       
   123         	__LOG("***CDnsProxyServerSession: StartDnsEngine - End****")
       
   124             if(err!=KErrNone)
       
   125             	iMessage.Complete(err);
       
   126             else
       
   127             	iMessage.Complete(KErrNone);
       
   128             break;
       
   129 
       
   130        // Add DB command
       
   131         case EProxyAddDb:
       
   132         	iMessage = aMessage;
       
   133         	__LOG("***CDnsProxyServerSession: UpdateDatabaseL - Start****")
       
   134             err = UpdateDatabaseL(iMessage);
       
   135 	        __LOG("***CDnsProxyServerSession: UpdateDatabaseL - End****")
       
   136             if(err!=KErrNone)
       
   137             	iMessage.Complete(err);
       
   138             else
       
   139             	iMessage.Complete(KErrNone);
       
   140             break;
       
   141 
       
   142         // Remove DB command
       
   143         case EProxyRemoveDb:
       
   144         	iMessage = aMessage;
       
   145         	__LOG("***CDnsProxyServerSession: RemoveDbEntry - Start****")
       
   146             err = RemoveDbEntry(iMessage);
       
   147         	__LOG("***CDnsProxyServerSession: RemoveDbEntry - End****")
       
   148 
       
   149             if(err!=KErrNone)
       
   150             	iMessage.Complete(err);
       
   151             else
       
   152             	iMessage.Complete(KErrNone);
       
   153             break;
       
   154 
       
   155         // Handle Update domain name
       
   156         case EProxyUpdateDomainName:
       
   157             iMessage = aMessage;
       
   158         	__LOG("***CDnsProxyServerSession: UpdateDomainName - Start****")
       
   159             err = UpdateDomainName(iMessage);
       
   160         	__LOG("***CDnsProxyServerSession: UpdateDomainName - End****")
       
   161             if(err!=KErrNone)
       
   162             	iMessage.Complete(err);
       
   163             else
       
   164             	iMessage.Complete(KErrNone);
       
   165             break;
       
   166 
       
   167         case EProxyConfigureUplink:
       
   168         	iMessage = aMessage;
       
   169         	__LOG("***CDnsProxyServerSession: UpdateUplinkConfig - Start****")
       
   170             err = UpdateUplinkConfig(iMessage);
       
   171         	__LOG("***CDnsProxyServerSession: UpdateUplinkConfig - End****")
       
   172             if(err!=KErrNone)
       
   173             	iMessage.Complete(err);
       
   174             else
       
   175             	iMessage.Complete(KErrNone);
       
   176             break;
       
   177 	        // This should never happen.
       
   178         default:
       
   179         	iMessage = aMessage;
       
   180             iMessage.Complete(KErrNotSupported);
       
   181             break;
       
   182         }
       
   183     }
       
   184 
       
   185 TInt CDnsProxyServerSession::StartDnsEngine(const RMessage2& aMessage)
       
   186 /**
       
   187  * This method starts the DNS proxy engine, creates an engine instance
       
   188  * and start DNS proxy server.
       
   189  * @param aMessage - command send by the client
       
   190  * @return - None
       
   191  *
       
   192  * @internalTechnology
       
   193  **/
       
   194     {
       
   195      __LOG("\n CDnsProxyServerSession::StartDNSEngine \n");
       
   196      iIsEngineStarted = ETrue;
       
   197      __LOG1("\niProxyEngine adress = %d \n",iProxyEngine);
       
   198      return iProxyEngine->Start(aMessage);
       
   199     }
       
   200 
       
   201 void CDnsProxyServerSession::StopDNSEngine()
       
   202 /**
       
   203  * This method stops and cleans up DNS proxy.
       
   204  * @param aMessage - command send by the client
       
   205  * @return - None
       
   206  *
       
   207  * @internalTechnology
       
   208  **/
       
   209     {
       
   210 	if((iProxyEngine)&& (iIsEngineStarted))
       
   211         {
       
   212         iProxyEngine->Stop();
       
   213         }
       
   214      iIsEngineStarted = EFalse;
       
   215      delete iProxyEngine;
       
   216     }
       
   217 
       
   218 TInt CDnsProxyServerSession::UpdateDatabaseL(const RMessage2& aMessage)
       
   219 /**
       
   220  * This method is used for DNS Proxy database implementation from ECOM plugin
       
   221  * @param aMessage - command send by the client
       
   222  * @return - None
       
   223  *
       
   224  * @internalTechnology
       
   225  **/
       
   226     {
       
   227     __LOG("\n CDnsProxyServerSession::UpdateDatabaseL \n");
       
   228     __LOG1("\n iProxyEngine %d \n", iProxyEngine);
       
   229     return iProxyEngine->AddDbEntryL(aMessage);
       
   230     }
       
   231 TInt CDnsProxyServerSession::RemoveDbEntry(const RMessage2& aMessage)
       
   232 /**
       
   233  * This method is used for DNS Proxy database implementation from ECOM plugin
       
   234  * @param aMessage - command send by the client
       
   235  * @return - None
       
   236  *
       
   237  * @internalTechnology
       
   238  **/
       
   239     {
       
   240     __LOG("\n CDnsProxyServerSession::RemoveDbEntry \n");
       
   241     return iProxyEngine->RemoveDbEntry(aMessage);
       
   242     }
       
   243 
       
   244 TInt CDnsProxyServerSession::UpdateDomainName(const RMessage2& aMessage)
       
   245 /**
       
   246  * This method is used for DNS Proxy database implementation from ECOM plugin
       
   247  * @param aMessage - command send by the client
       
   248  * @return - None
       
   249  *
       
   250  * @internalTechnology
       
   251  **/
       
   252     {
       
   253     __LOG("\n CDnsProxyServerSession::UpdateDomainName \n");
       
   254     return iProxyEngine->UpdateDomainInfo(aMessage);
       
   255     }
       
   256 TInt CDnsProxyServerSession::UpdateUplinkConfig(const RMessage2& aMessage)
       
   257 /**
       
   258  * This method is used to set uplink information
       
   259  * @param aMessage - command send by the client
       
   260  * @return - None
       
   261  *
       
   262  * @internalTechnology
       
   263  **/
       
   264     {
       
   265     __LOG("\n CDnsProxyServerSession::UpdateUplinkConfig \n");
       
   266     //if engine is not created,return KErrNotReady.
       
   267     TInt err;
       
   268     if(!iProxyEngine)
       
   269     	err = KErrNotReady;
       
   270     else
       
   271         err = iProxyEngine->SetUplinkConnectionInfo(aMessage);
       
   272     return err;
       
   273     }
       
   274