bluetoothcommsprofiles/btpan/panhelpersvr/panhelpercli.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 19 Aug 2010 11:01:00 +0300
branchRCL_3
changeset 22 786b94c6f0a4
parent 0 29b1cd4cb562
permissions -rw-r--r--
Revision: 201031 Kit: 201033

// Copyright (c) 2004-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 <c32root.h>
#include "panhelper.h"
#include "panhelperdevicediscoverer.h"
#include "panhelperremotesdp.h"

using namespace PanHelper;

/**
@file
@internalTechnology
*/


//
// PAN device roles list
//

EXPORT_C TPanDeviceRolesList::TPanDeviceRolesList()
/**
Set the initially supported set of roles to none
*/
	{
	iSupportedRoles = KPanDeviceRolesListNone;
	}

EXPORT_C TBool TPanDeviceRolesList::SupportsU() const
/**
Does the device support the PAN-U role?
*/
	{
	return((iSupportedRoles & KPanDeviceRolesListPanU) ? ETrue : EFalse);
	}

EXPORT_C TBool TPanDeviceRolesList::SupportsGn() const
/**
Does the device support the PAN-GN role?
*/
	{
	return((iSupportedRoles & KPanDeviceRolesListPanGn) ? ETrue : EFalse);
	}

EXPORT_C TBool TPanDeviceRolesList::SupportsNap() const
/**
Does the device support the PAN-NAP role?
*/
	{
	return((iSupportedRoles & KPanDeviceRolesListPanNap) ? ETrue : EFalse);
	}
	
EXPORT_C void TPanDeviceRolesList::SetSupportsU()
/**
Indicate that the device supports PAN-U
*/
	{
	iSupportedRoles = iSupportedRoles | KPanDeviceRolesListPanU;
	}

EXPORT_C void TPanDeviceRolesList::SetSupportsU(TBool aSupportsU)
/**
Set whether the device supports PAN-U or not
@param aSupportsU Indicate whether the device support PAN-U role or not
*/
	{
	if(aSupportsU)
		{
		SetSupportsU();
		}
	else
		{
		iSupportedRoles = iSupportedRoles & ~KPanDeviceRolesListPanU;	
		}
	}
	
EXPORT_C void TPanDeviceRolesList::SetSupportsGn()
/**
Indicate that the remote device supports PAN-GN
*/
	{
	iSupportedRoles = iSupportedRoles | KPanDeviceRolesListPanGn;
	}

EXPORT_C void TPanDeviceRolesList::SetSupportsGn(TBool aSupportsGn)
/**
Indicate that the remote device supports PAN-GN
@param aSupportsGn Indicate whether the remote device support PAN-GN role or not
*/
	{
	if(aSupportsGn)
		{
		SetSupportsGn();
		}
	else
		{
		iSupportedRoles = iSupportedRoles & ~KPanDeviceRolesListPanGn;	
		}
	}

EXPORT_C void TPanDeviceRolesList::SetSupportsNap()
/**
Indicate that the remote device supports PAN-NAP
*/
	{
	iSupportedRoles = iSupportedRoles | KPanDeviceRolesListPanNap;
	}

EXPORT_C void TPanDeviceRolesList::SetSupportsNap(TBool aSupportsNap)
/**
Indicate that the remote device supports PAN-NAP
@param aSupportsNap Indicate whether the remote device support PAN-NAP role or not
*/
	{
	if(aSupportsNap)
		{
		SetSupportsNap();
		}
	else
		{
		iSupportedRoles = iSupportedRoles & ~KPanDeviceRolesListPanNap;	
		}
	}
	
EXPORT_C TBool TPanDeviceRolesList::IsSupported(TBluetoothPanRole aPanRole) const
/**
Checks whether the supplied role is supported
@param aPanRole The role to check
@return ETrue if the role is supported, else EFalse
*/
	{
	switch(aPanRole)
		{
		case EPanRoleU:
			return(SupportsU());
		case EPanRoleGn:
			return(SupportsGn());
		case EPanRoleNap:
			return(SupportsNap());
		default:
			return EFalse;
		}
	}


EXPORT_C TPanDeviceWorthTryingRolesList::TPanDeviceWorthTryingRolesList()
/**
Set the initial set of worth trying roles to all
*/
	{
	iWorthTryingRoles = KPanDeviceRolesListAll;
	}


EXPORT_C TBool TPanDeviceWorthTryingRolesList::IsWorthTryingU() const
/**
Is the PAN-U role worth trying?
*/
	{
	return((TBool)(iWorthTryingRoles & KPanDeviceRolesListPanU));
	}

EXPORT_C TBool TPanDeviceWorthTryingRolesList::IsWorthTryingGn() const
/**
Is the PAN-Gn role worth trying?
*/
	{
	return((TBool)(iWorthTryingRoles & KPanDeviceRolesListPanGn));
	}

EXPORT_C TBool TPanDeviceWorthTryingRolesList::IsWorthTryingNap() const
/**
Is the PAN-Nap role worth trying?
*/
	{
	return((TBool)(iWorthTryingRoles & KPanDeviceRolesListPanNap));
	}
	
EXPORT_C void TPanDeviceWorthTryingRolesList::SetWorthTrying(TBluetoothPanRole aPanRole, TBool aWorthTrying)
	{
	switch(aPanRole)
		{ 
		case EPanRoleU:
			SetWorthTryingU(aWorthTrying);
			break;
		case EPanRoleGn:
			SetWorthTryingGn(aWorthTrying);
			break;
		case EPanRoleNap:
			SetWorthTryingNap(aWorthTrying);
			break;
		}
	}

EXPORT_C void TPanDeviceWorthTryingRolesList::SetWorthTryingU()
/**
Set the PAN-U role to worth trying
*/
	{
	iWorthTryingRoles = iWorthTryingRoles | KPanDeviceRolesListPanU;
	}

EXPORT_C void TPanDeviceWorthTryingRolesList::SetWorthTryingU(TBool aWorthTryingU)
/**
Set whether we the PAN-U role is worth trying
@param aWorthTryingU Indicate whether the PAN-U role is worth trying with the remote device
*/
	{
	if(aWorthTryingU)
		{
		SetWorthTryingU();
		}
	else
		{
		iWorthTryingRoles = iWorthTryingRoles & ~KPanDeviceRolesListPanU;	
		}
	}
	
EXPORT_C void TPanDeviceWorthTryingRolesList::SetWorthTryingGn()
/**
Set the PAN-Gn role to worth trying
*/
	{
	iWorthTryingRoles = iWorthTryingRoles | KPanDeviceRolesListPanGn;
	}

EXPORT_C void TPanDeviceWorthTryingRolesList::SetWorthTryingGn(TBool aWorthTryingGn)
/**
Set whether the PAN-Gn role is worth trying
@param aWorthTryingGn Indicate whether or not the PAN-GN role is worth trying with the remote device
*/
	{
	if(aWorthTryingGn)
		{
		SetWorthTryingGn();
		}
	else
		{
		iWorthTryingRoles = iWorthTryingRoles & ~KPanDeviceRolesListPanGn;	
		}
	}

EXPORT_C void TPanDeviceWorthTryingRolesList::SetWorthTryingNap()
/**
Set the PAN-Nap role to worth trying
*/
	{
	iWorthTryingRoles = iWorthTryingRoles | KPanDeviceRolesListPanNap;
	}

EXPORT_C void TPanDeviceWorthTryingRolesList::SetWorthTryingNap(TBool aWorthTryingNap)
/**
Set whether the PAN-Nap role is worth trying
@param aWorthTryingNap Indicate whether or not the PAN-NAP role is worth trying with the remote device
*/
	{
	if(aWorthTryingNap)
		{
		SetWorthTryingNap();
		}
	else
		{
		iWorthTryingRoles = iWorthTryingRoles & ~KPanDeviceRolesListPanNap;	
		}
	}
	
EXPORT_C TBool TPanDeviceWorthTryingRolesList::IsWorthTryingARole(TBluetoothPanRole aPanRole) const
/**
Checks whether the supplied role is worth trying
@param aPanRole The role to check
@return ETrue if the role is worth trying, else ETrue (safer return for the use of this)
*/
	{
	TBool isWorthTryingRole = ETrue;

	switch(aPanRole)
		{
		case EPanRoleU:
			isWorthTryingRole = IsWorthTryingU();
			break;
		case EPanRoleGn:
			isWorthTryingRole = IsWorthTryingGn();
			break;
		case EPanRoleNap:
			isWorthTryingRole = IsWorthTryingNap();
			break;
		}
	return(isWorthTryingRole);
	}


EXPORT_C void TPanDeviceWorthTryingRolesList::ResetWorthTryingRoles()
/**
Clear all the worth trying flag so all roles are worth trying now
*/
	{
	iWorthTryingRoles = KPanDeviceRolesListAll;
	}
	
//
// Remote SDP querier
//

EXPORT_C TInt RPanRemoteSdpQuerier::Open()
/**
Open a handle to the PAN remote SDP query service
*/
	{
	TRAPD(err, iSdpQuerier = CPanHelperRemoteSdpQuerier::NewL());
	return err;
	}
	
EXPORT_C void RPanRemoteSdpQuerier::Close()
/**

*/
	{
	if(iSdpQuerier)
		{
		delete iSdpQuerier;
		iSdpQuerier = NULL;
		}
	}
	
EXPORT_C TInt RPanRemoteSdpQuerier::Query(const TBTDevAddr& aAddr, TDes8& aSupportedRemoteRoles, TRequestStatus& aStatus)
/**
Query the given remote device to find out what roles it supports
@param aAddr A descriptor-packaged Bluetooth device address of the device to query
@param aSupportedRemoteRoles A descriptor-packaged remote role class.  On return, contains the roles that the remote device is advertising in SDP
@param aStatus The TRequestStatus to be signalled on completion
*/
	{
	aStatus = KRequestPending;
	TRAPD(err, iSdpQuerier->QueryL(aAddr, aSupportedRemoteRoles, aStatus));
	return err;
	}
	
EXPORT_C void RPanRemoteSdpQuerier::CancelQuery()
/**
Cancel the SDP query of the remote device
*/
	{
	iSdpQuerier->CancelQuery();
	}
	
//
// Remote device discovery
//

EXPORT_C TInt RPanRemoteDeviceDiscoverer::Open()
/**

*/
	{
	TRAPD(rerr, iDeviceDiscoverer = CPanHelperDeviceDiscoverer::NewL());
	return rerr;
	}
	
EXPORT_C void RPanRemoteDeviceDiscoverer::Close()
/**

*/
	{
	if(iDeviceDiscoverer)
		{
		delete iDeviceDiscoverer;
		iDeviceDiscoverer = NULL;
		}
	}
		
EXPORT_C void RPanRemoteDeviceDiscoverer::FindDevice(TDesC& aDeviceAddrList, TDes8& aDeviceAddr, TRequestStatus& aStatus)
/**
Find a device from the supplied list of comma-seperated readable BT device addresses
@param aDeviceAddrList A comma-separated list of BT dev addrs in readable format
@param aDeviceAddr On return, contains a device address from the list that was found; if no devices
are found then the method completes with an error code
*/
	{
	aStatus = KRequestPending;
	iDeviceDiscoverer->FindDevice(aDeviceAddrList, aDeviceAddr, aStatus);
	}
	
EXPORT_C void RPanRemoteDeviceDiscoverer::CancelFindDevice()
/**

*/
	{
	iDeviceDiscoverer->CancelFindDevice();
	}