dcmofw/dcmoserver/src/dcmosession.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 19 Aug 2010 10:44:50 +0300
branchRCL_3
changeset 24 13d7c31c74e0
parent 0 b497e44ab2fc
child 25 b183ec05bd8c
permissions -rw-r--r--
Revision: 201031 Kit: 201033

/*
* Copyright (c) 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:  DCMO Session implementation
*
*/

#include <e32svr.h>

#include "dcmosession.h"
#include "dcmoclientserver.h"
#include "dcmodebug.h"
#include "lawmodebug.h"

// ----------------------------------------------------------------------------------------
// CDCMOSession::CDCMOSession
// ----------------------------------------------------------------------------------------
CDCMOSession::CDCMOSession()
	{
		RDEBUG("CDCMOSession::CDCMOSession");
	}

// ----------------------------------------------------------------------------------------
// CDCMOSession::Server
// ----------------------------------------------------------------------------------------
CDCMOServer& CDCMOSession::Server()
	{
		RDEBUG("CDCMOSession::Server");	
		return *static_cast<CDCMOServer*>(const_cast<CServer2*>(CSession2::Server()));
	}

// ----------------------------------------------------------------------------------------
// CDCMOSession::~CDCMOSession
// ----------------------------------------------------------------------------------------
CDCMOSession::~CDCMOSession()
	{
		RDEBUG("CDCMOSession::~CDCMOSession");
		Server().DropSession();
	}

// ----------------------------------------------------------------------------------------
// CDCMOSession::ServiceL
// ----------------------------------------------------------------------------------------
void CDCMOSession::ServiceL(const RMessage2& aMessage)
    {
			RDEBUG("CDCMOSession::ServiceL");
    	TRAPD(err,DispatchMessageL(aMessage));
    	if(err)    		
    		RDEBUG_2("CDCMOSession::ServiceL - err %d", err );      	
			aMessage.Complete(err);
    }

// ----------------------------------------------------------------------------------------
// CDCMOSession::DispatchMessageL
// ----------------------------------------------------------------------------------------
void CDCMOSession::DispatchMessageL(const RMessage2& aMessage)
	{
	RDEBUG_2("CDCMOSession::DispatchMessageL; %d", aMessage.Function() );
  TInt value; 
  TDCMOStatus statusValue;
  TLawMoStatus lstatusValue;
  TDCMONode nodeValue;
  TPckg<TDCMOStatus> status(statusValue);
  TPckg<TLawMoStatus> lstatus(lstatusValue);
  TPckg<TDCMONode> node(nodeValue);
  TPckg<TInt> intvalue(value);
  
  HBufC*     category  = HBufC::NewLC(KDCMOMaxStringSize);
  TPtr       categoryptr  = category->Des(); 
  aMessage.Read (0, categoryptr);           
  aMessage.Read (1, node);          		
	switch(aMessage.Function())
	    {
			case EDcmoGetAttrInt:
					{	                 
            		statusValue = Server().GetIntAttributeL(categoryptr, nodeValue, value);            
            		aMessage.Write (2, intvalue);
            		aMessage.Write (3, status);   
            		RDEBUG_2("CDCMOSession::DispatchMessageL - EDcmoGetAttrInt status %d", statusValue );            		        
					}
					break;
			case EDcmoGetAttrStr:
					{ 	
            		HBufC*     buf  = HBufC::NewLC(KDCMOMaxStringSize);
            		TPtr       bufptr  = buf->Des();         
            		statusValue = Server().GetStrAttributeL(categoryptr, nodeValue, bufptr);
            		aMessage.Write (2, bufptr);            		
            		aMessage.Write (3, status);               		
            		CleanupStack::PopAndDestroy(); //buf
            		RDEBUG_2("CDCMOSession::DispatchMessageL - EDcmoGetAttrStr status %d", statusValue );            		
					}
					break;
			case EDcmoSetAttrInt:
					{     
								if ( KStarterUid == aMessage.SecureId()) 
								{
									RDEBUG("CDCMOSession:: DispatchMessageL client is starter");
									Server().SetStarter( ETrue );
								}       
            		else if ( !aMessage.HasCapability( ECapabilityDiskAdmin ) )
        				{
        					statusValue = EDcmoAccessDenied;
        					aMessage.Write (3, status); 
        					CleanupStack::PopAndDestroy(category); //category
        					return;        
        				}          
            		aMessage.Read (2, intvalue);            
           			statusValue = Server().SetIntAttributeL(categoryptr, nodeValue, value);           			           		
            		aMessage.Write (3, status);   
            		RDEBUG_2("CDCMOSession::DispatchMessageL - EDcmoSetAttrInt status %d", statusValue );
					}
					break;
			
			case EDcmoSetAttrStr:
					{	
           			if ( KStarterUid == aMessage.SecureId() ) 
								{
									RDEBUG("CDCMOSession:: DispatchMessageL client is starter");
									Server().SetStarter( ETrue );
								}       
            		else if ( !aMessage.HasCapability( ECapabilityDiskAdmin ) )
        				{
        					statusValue = EDcmoAccessDenied;
        					aMessage.Write (3, status); 
        					CleanupStack::PopAndDestroy( ); //category
        					return;        
        				}
            		HBufC*     buf  = HBufC::NewLC(KDCMOMaxStringSize);
            		TPtr       bufptr  = buf->Des(); 
            		aMessage.Read (2, bufptr);            
            		statusValue = Server().SetStrAttributeL(categoryptr, nodeValue, bufptr); 
            		aMessage.Write (3, status);             		
            		CleanupStack::PopAndDestroy(); // buf
            		RDEBUG_2("CDCMOSession::DispatchMessageL - EDcmoSetAttrStr status %d", statusValue );
					}		
					break;	
	    case EDcmoSearchAdapter:
				{   
						HBufC*     buf  = HBufC::NewLC(KDCMOMaxStringSize);
            TPtr       bufptr  = buf->Des();
						Server().SearchAdaptersL(categoryptr, bufptr); 
						aMessage.Write (1, bufptr);
						CleanupStack::PopAndDestroy(); //buf
						RDEBUG("CDCMOSession::DispatchMessageL - EDcmoSearchAdapter status " );
	    	}
	    	break;	
	    case EWipe:
	        {
            //HBufC*     item  = HBufC::NewLC(KDCMOMaxStringSize);
            //TPtr       itemPtr  = category->Des(); 
            //aMessage.Read (0, itemPtr); 
	        //aMessage.Complete(KErrNone);
	        //RDEBUG("CDCMOSession::EWipe force complete the request");
	        lstatusValue = Server().WipeItem(); 
            aMessage.Write (0, lstatus);
            //CleanupStack::PopAndDestroy();
            RLDEBUG_2("CDCMOSession::DispatchMessageL EWipe %d", lstatusValue );
	        }
	        break;
	        
	    case EWipeAll:
	        {
	        //TInt aForce(1);
	        lstatusValue = Server().WipeAllItem(); 
	        aMessage.Write (0, lstatus);
            RLDEBUG_2("CDCMOSession::DispatchMessageL EWipeAll %d", lstatusValue );
	        }
	        break;
	        
	    case EListItemName_Get:
	        {
	        HBufC*     buf1  = HBufC::NewLC(KDCMOMaxStringSize);
	        TPtr       bufPtr1  = buf1->Des();
	        HBufC*     item  = HBufC::NewLC(KDCMOMaxStringSize);
	        TPtr       itemPtr  = item->Des(); 
	        aMessage.Read (0, itemPtr); 
	        lstatusValue = Server().GetListItemL(itemPtr, bufPtr1); 
	        aMessage.Write (1, bufPtr1);
	        aMessage.Write (2, lstatus);
	        CleanupStack::PopAndDestroy(2);
	        RLDEBUG_2("CDCMOSession::DispatchMessageL EListItemName_Get %d", lstatusValue );
	        }
	        break;
	        
	    case EToBeWiped_Get:
	        {
	        HBufC*     item  = HBufC::NewLC(KDCMOMaxStringSize);
            TPtr       itemPtr  = item->Des();
            HBufC*     buf1  = HBufC::NewLC(KDCMOMaxStringSize);
            TPtr       bufPtr1  = buf1->Des();
            aMessage.Read (0, itemPtr);
            lstatusValue = Server().GetToBeWipedL(itemPtr, bufPtr1);
            aMessage.Write (1, bufPtr1);
            aMessage.Write (2, lstatus);
            CleanupStack::PopAndDestroy(2);
            RLDEBUG_2("CDCMOSession::DispatchMessageL EToBeWiped_Get %d", lstatusValue );
	        }
	        break;
	            
	      case EToBeWiped_Set:
            {
            //TLex lex;
            //TInt val;
            //TBuf<255> wipeValue;
            HBufC*     item  = HBufC::NewLC(KDCMOMaxStringSize);
            TPtr       itemPtr  = item->Des();
            aMessage.Read (0, itemPtr);
            TInt val = aMessage.Int1();
            //aMessage.Read (1, wipeValue); 
            RLDEBUG_2("Tobewiped category %s",itemPtr.PtrZ());
            //lex.Assign( wipeValue );
            //TInt err = lex.Val( val );
            RLDEBUG_2("Tobewiped value,int %d", val );
            //if(err==KErrNone)
            //    {
            //    RLDEBUG("SetToBeWiped call" );
                lstatusValue = Server().SetToBeWipedL(itemPtr, val);
            //    }
            //else
            //    {
            //    RLDEBUG("SetToBeWiped not" );
            //    lstatusValue = ELawMoFail;
            //    }
            aMessage.Write (2, lstatus);
            CleanupStack::PopAndDestroy();  
            RLDEBUG_2("CDCMOSession::DispatchMessageL EToBeWiped_Set %d", lstatusValue );
            }
            break;
	    default :
	    		RDEBUG("CDCMOSession::DispatchMessageL- Case Not Found" );
	    }	  

		CleanupStack::PopAndDestroy(); //category  
  	RDEBUG("CDCMOSession::DispatchMessageL end" );
}
// ----------------------------------------------------------------------------------------
// CDCMOSession::ServiceError
// Handle an error from CHelloWorldSession::ServiceL()
// ----------------------------------------------------------------------------------------
void CDCMOSession::ServiceError(const RMessage2& aMessage,TInt aError)
	{
		RDEBUG_2("CDCMOSession::ServiceError %d", aError);
		CSession2::ServiceError(aMessage,aError);
	}

// ----------------------------------------------------------------------------------------
// End of file