locationmgmt/locmonitor/lbslocmonitorserver/src/clbsconversionpositionersubsession.cpp
changeset 40 18280709ae43
child 45 15a2125aa2f3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/locationmgmt/locmonitor/lbslocmonitorserver/src/clbsconversionpositionersubsession.cpp	Fri Jun 11 15:06:31 2010 +0300
@@ -0,0 +1,201 @@
+/*
+* 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:
+*
+*/
+
+#include "clbsconversionpositionersubsession.h"
+#include "lbslocmonitorserverdata.h"
+#include "clbslocmonitorutils.h"
+#include "clbslocmonitorserver.h"
+#include "lbsdevloggermacros.h"
+#include "clbslocmonitorconversionhandler.h"
+#include "lbslocmonitorclientconsts.h"
+
+//----------------------------------------------------------------------------
+// CLbsConversionPositionerSubsession::NewL
+//
+//-----------------------------------------------------------------------------
+CLbsConversionPositionerSubsession* CLbsConversionPositionerSubsession::NewL()
+    {
+    LBSLOG(ELogP1,"CLbsConversionPositionerSubsession::NewL()");
+    CLbsConversionPositionerSubsession* self = new (ELeave) CLbsConversionPositionerSubsession;
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CLbsConversionPositionerSubsession::~CLbsConversionPositionerSubsession
+//------------------------------------------------------------------------------
+CLbsConversionPositionerSubsession::CLbsConversionPositionerSubsession()
+    {
+    LBSLOG(ELogP1,"CLbsConversionPositionerSubsession::CLbsConversionPositionerSubsession()");
+    }
+
+// -----------------------------------------------------------------------------
+// CLbsConversionPositionerSubsession::ConstructL
+//------------------------------------------------------------------------------
+void CLbsConversionPositionerSubsession::ConstructL()
+    {
+    LBSLOG(ELogP1,"CLbsConversionPositionerSubsession::ConstructL()");
+    // Nothing to do
+    }
+//----------------------------------------------------------------------------
+// CLbsConversionPositionerSubsession::~CLbsConversionPositionerSubsession
+//
+//-----------------------------------------------------------------------------
+CLbsConversionPositionerSubsession::~CLbsConversionPositionerSubsession()
+    {
+    LBSLOG(ELogP1,"->CLbsConversionPositionerSubsession::~CLbsConversionPositionerSubsession");     
+
+    // Tell the DB reader that this subsession is being deleted
+    // so that if there are any outanding requests from this session
+    // they are terminated with KErrServerTerminated.
+    iLocMonitorServer->ReadRequestHandler().ClientTerminated(iSubsessionId);
+
+    LBSLOG(ELogP1,"<-CLbsConversionPositionerSubsession::~CLbsConversionPositionerSubsession");
+    }
+
+//----------------------------------------------------------------------------
+// CLbsConversionPositionerSubsession::DispatchL
+//
+//-----------------------------------------------------------------------------
+void CLbsConversionPositionerSubsession::DispatchL(const RMessage2& aMessage)
+    {
+    LBSLOG(ELogP1,"CLbsConversionPositionerSubsession::DispatchL()");
+    switch(aMessage.Function())
+        {
+        case EConvertSingleLocationInfoBufferSize:
+        case EConvertMultipleLocationInfoBufferSize:
+            {
+            // Extract client preferences
+            TLbsClientPrefs clientPrefs; 
+            TPckg<TLbsClientPrefs> clientPrefsPckg(clientPrefs);
+            aMessage.ReadL(KParamClientPrefs,clientPrefsPckg);
+            
+            // If client has not specified any conversion plugin id, read the default 
+            // plugin from cenrep and load it.
+            TUid conversionPluginId;
+            if(clientPrefs.iConverterModuleId.iUid == KNullUidValue)
+                {
+                TInt error = iLocMonitorServer->PluginResolver()->DefaultConverterUid(
+                                                                  conversionPluginId);
+                if(error != KErrNone)
+                    {
+                    aMessage.Complete(error);
+                    return;
+                    }
+                }
+            else
+                {
+                conversionPluginId = clientPrefs.iConverterModuleId;
+                }
+            
+            CLbsLocMonitorConversionHandler* conversionHandler = 
+                                    iLocMonitorServer->ConversionHandlerL(conversionPluginId);
+            conversionHandler->GetConvertLocationInfoSizeL(aMessage);
+            break;
+            }
+            
+        case EGetSingleLocationInfo:
+        case EGetMultipleLocationInfo:
+            {
+            CLbsLocMonitorConversionHandler* conversionHandler = 
+                                                 iLocMonitorServer->ConversionHandler(aMessage);
+            
+            conversionHandler->GetConvertedLocationInfoL(aMessage);
+            break;
+            }
+            
+            
+            
+        case ECancelConvertLocationInfo:
+            {
+            CLbsLocMonitorConversionHandler* conversionHandler = 
+                                                 iLocMonitorServer->ConversionHandler(aMessage);
+            
+            // If there is no outstanding request from the subsession which requested cancel operation,
+            // complete the request.
+            if(conversionHandler)
+                {
+                conversionHandler->CancelLocationInfoConversionL(aMessage);
+                }
+            else
+                {
+                aMessage.Complete(KErrNone);
+                }
+            break;
+            }
+        default:
+            __ASSERT_DEBUG(EFalse, User::Invariant());
+            break;
+        }
+    }
+
+
+//----------------------------------------------------------------------------
+// CLbsConversionPositionerSubsession::DispatchError
+//
+//-----------------------------------------------------------------------------
+void CLbsConversionPositionerSubsession::DispatchError(const RMessage2& aMessage, 
+                                                        TInt aError)
+    {
+    LBSLOG(ELogP1,"CLbsConversionPositionerSubsession::DispatchError()");
+    // errors from DispatchL end up in here
+    aMessage.Complete(aError);
+    }
+
+
+//----------------------------------------------------------------------------
+// CLbsConversionPositionerSubsession::DispatchError
+//
+//-----------------------------------------------------------------------------
+void CLbsConversionPositionerSubsession::CreateSubSessionL(const RMessage2& aMessage, 
+                                                      const CSecureServerBase* aServer)
+    {
+    LBSLOG(ELogP1,"CLbsAreaPositionerSubsession::CreateSubSessionL()");
+    CSecureServerBase* server = const_cast<CSecureServerBase*> (aServer);
+    iLocMonitorServer = reinterpret_cast<CLbsLocMonitorServer*>(server);
+    iSubsessionId.iSessionPtr = static_cast<CLbsLocMonitorSession*>(aMessage.Session());
+    
+    TInt subsessionId;
+    TPckg<TInt> subsessionIdBuf(subsessionId);
+    User::LeaveIfError(aMessage.Read(3, subsessionIdBuf));
+    
+    iSubsessionId.iSubsessionId = subsessionId;
+    }
+
+//----------------------------------------------------------------------------
+// CLbsConversionPositionerSubsession::CloseSubSession
+//
+//-----------------------------------------------------------------------------
+void CLbsConversionPositionerSubsession::CloseSubSession()
+    {
+    LBSLOG(ELogP1,"CLbsConversionPositionerSubsession::CloseSubSession()");
+    // Release anything allocated in CreateSubSessionL.
+    // In this case  there is nothing to do.
+    }
+
+//----------------------------------------------------------------------------
+// CLbsConversionPositionerSubsession::VirtualRelease
+//
+//-----------------------------------------------------------------------------
+void CLbsConversionPositionerSubsession::VirtualRelease()
+    {
+    LBSLOG(ELogP1,"CLbsConversionPositionerSubsession::VirtualRelease()");
+    delete this;
+    }