locationrequestmgmt/networkrequesthandler/src/lbsnetworkrequesthandler.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 02 Feb 2010 01:50:39 +0200
changeset 0 9cfd9a3ee49c
child 48 81c9bee26a45
child 52 29dbbeac905d
permissions -rw-r--r--
Revision: 201002 Kit: 201005

// Copyright (c) 2007-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:
//

/**
 @file
*/

#include <e32base.h>
#ifdef SYMBIAN_FEATURE_MANAGER
	#include <featdiscovery.h>
	#include <featureuids.h>
#endif
// LBS-specific
#include <lbs.h>
#include <lbs/lbsprivacycontroller.h>
#include <lbs/lbsx3p.h>


#include "lbsdevloggermacros.h"
#include "lbsrootapi.h"
#include "privacyandlocationrequesthandler.h"
#include "x3phandler.h"
#include "ngmessageswitch.h"
#include "lbsnetworkrequesthandler.h"
#include "lbsnrhserver.h"
#include "agpsinterfacehandler.h"

CLbsNetworkRequestHandler::CLbsNetworkRequestHandler(CNrhServer* aNrhServer)
:	iNrhServer(aNrhServer)
    {
    }
CLbsNetworkRequestHandler::~CLbsNetworkRequestHandler()
    {
#if defined(_DEBUG)
    if(iOomListener)
    	{
    	iOomListener->Cancel();
    	delete iOomListener;
    	}
#endif

   	iNrhServer->SetPrivacyServerObserver(NULL);

	delete iX3pHandler;
	delete iPrivLocHandler;
	delete iNgMessageSwitch;
	iNetRegStatus.Close();
	delete iAdmin;
    }
    
CLbsNetworkRequestHandler* CLbsNetworkRequestHandler::NewL(CNrhServer* aNrhServer)
    {
    CLbsNetworkRequestHandler* self = new(ELeave) CLbsNetworkRequestHandler(aNrhServer);
    CleanupStack::PushL(self);
    self->ConstructL();
    CleanupStack::Pop();
    return(self);
    }
    
void CLbsNetworkRequestHandler::ConstructL()
    {
	LBSLOG_BEGIN();
    // Create the LbsAdmin. 
    // It would be possible to do this every time a value
    // is needed, but that would give the potential for OOM
    // conditions, so do it once and pass the pointer to the
    // sub-components that need it.
    
    iAdmin = CLbsAdmin::NewL();
    
    // Connect to the internal network registration (roaming) status interface
    iNetRegStatus.OpenL();
    
    // Create the Network Gateway Message Switch
    iNgMessageSwitch = CNGMessageSwitch::NewL(*iAdmin);

    //Create the Privacy and Location Handler
    iPrivLocHandler = CPrivacyAndLocationHandler::NewL(*iNgMessageSwitch, 
    													*iAdmin,
    													iNetRegStatus);

    iNrhServer->SetPrivacyServerObserver(iPrivLocHandler->PrivacyHandler());
    
#ifdef SYMBIAN_FEATURE_MANAGER
	TBool locationManagementSupported = CFeatureDiscovery::IsFeatureSupportedL(NFeature::KLocationManagement);
#else
	TBool locationManagementSupported(ETrue);
#endif
	if(locationManagementSupported)
		{
		iX3pHandler = CX3pHandler::NewL(*iNgMessageSwitch, iPrivLocHandler->X3pStatusHandler(), *iAdmin);
		}

    // Let the server know about the X3P Handler
    iNrhServer->SetX3pServerObserver(iX3pHandler);
    
#if defined(_DEBUG)
	// For OOM testing. The listener will force an error on the next heap 
	// allocation when it is kicked by test code.
	iOomListener = CLbsOomListener::NewL();
	iOomListener->StartGettingRequests();
#endif 
    }

CLbsAdmin* CLbsNetworkRequestHandler::Admin() const
	{
	return iAdmin;
	}

RLbsNetworkRegistrationStatus& CLbsNetworkRequestHandler::NetworkRegistrationStatus()
	{
	return iNetRegStatus;
	}