bluetoothmgmt/btmgr/BTManClient/BTDefCommPort.cpp
changeset 0 29b1cd4cb562
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetoothmgmt/btmgr/BTManClient/BTDefCommPort.cpp	Fri Jan 15 08:13:17 2010 +0200
@@ -0,0 +1,403 @@
+// Copyright (c) 1999-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:
+// Implements classes dealing with setting virtual serial ports
+// 
+//
+
+#include <btdefcommport.h>
+#include <bttypes.h>
+#include <e32base.h>
+#include <s32strm.h>
+#include "btmanclientserver.h"
+#include <bluetooth/logger.h>
+
+#ifdef __FLOG_ACTIVE
+_LIT8(KLogComponent, LOG_COMPONENT_BT_MANAGER_CLIENT);
+#endif
+
+
+/**
+Constructor
+@param aName The name of the virtual serial port
+@param aUUID the UUID to use on the remote device
+@param aBTCommPort The virtual serial port number
+@param aSecurityLevel The Bluetooth security desired for the connection
+@param aBDAddr The Bluetooth device address of the remote device
+@see Bluetooth Assigned numbers for UUIDs
+
+@publishedAll
+@released
+*/
+EXPORT_C TBTCommPortSettings::TBTCommPortSettings(const TDesC& aName, TUUID aUUID, 
+		TUint32 aBTCommPort, TUint8 aSecurityLevel, TBTDevAddr aBDAddr) :
+	iName(aName),
+	iUUID(aUUID),
+	iPort(aBTCommPort),
+	iSecurityLevel(aSecurityLevel),
+	iBDAddr(aBDAddr)
+	{
+	LOG_FUNC
+	}
+
+/**
+Default constructor
+@publishedAll
+@released
+*/
+EXPORT_C TBTCommPortSettings::TBTCommPortSettings() :
+	iUUID(),
+	iPort(0),
+	iSecurityLevel(0),
+	iBDAddr(TInt64(0))
+	{
+	LOG_FUNC
+	iName.Zero();
+	}
+
+/**
+Getter for the name of the virtual serial port
+@return name of virtual serial port
+@publishedAll
+@released
+*/
+EXPORT_C const TDesC& TBTCommPortSettings::Name() const
+	{
+	LOG_FUNC
+	return iName;
+	}
+
+/**
+Getter for the UUID of the virtual serial port
+@return UUID of virtual serial port
+@publishedAll
+@released
+*/
+EXPORT_C TUUID TBTCommPortSettings::UUID() const
+	{
+	LOG_FUNC
+	return iUUID;
+	}
+
+/**
+Getter for the port number of the virtual serial port
+@return port number of virtual serial port
+@publishedAll
+@released
+*/
+EXPORT_C TUint32 TBTCommPortSettings::Port() const
+	{
+	LOG_FUNC
+	return iPort;
+	}
+
+/**
+Setter for the name of the virtual serial port
+@param aName name of the virtual serial port
+@publishedAll
+@released
+*/
+EXPORT_C void TBTCommPortSettings::SetName(const TDesC& aName)
+	{
+	LOG_FUNC
+	iName = aName;
+	}
+
+
+/**
+Setter for the UUID of the virtual serial port
+@param aUUID UUID of the virtual serial port
+@publishedAll
+@released
+*/
+EXPORT_C void TBTCommPortSettings::SetUUID(TUUID aUUID)
+	{
+	LOG_FUNC
+	iUUID = aUUID;
+	}
+
+/**
+Getter for the remote device address of the virtual serial port
+@return remote device address of the virtual serial port
+@publishedAll
+@released
+*/
+EXPORT_C TBTDevAddr TBTCommPortSettings::BDAddr() const
+	{
+	LOG_FUNC
+	return iBDAddr;
+	}
+
+/**
+Setter for the remote device address of the virtual serial port
+@param aBDAddr remote device address of the virtual serial port
+@publishedAll
+@released
+*/
+EXPORT_C void TBTCommPortSettings::SetBTAddr(TBTDevAddr aBDAddr)
+	{
+	LOG_FUNC
+	iBDAddr = aBDAddr;
+	}
+
+/**
+Setter for the port number of the virtual serial port
+@param aBTCommPort port number of the virtual serial port
+@publishedAll
+@released
+*/
+EXPORT_C void TBTCommPortSettings::SetPort(TUint32 aBTCommPort)
+	{
+	LOG_FUNC
+	iPort=aBTCommPort;
+	}
+
+/**
+Setter to request authentication of the virtual serial connection when connection occurs
+@publishedAll
+@released
+*/
+EXPORT_C void TBTCommPortSettings::SetAuthentication()
+	{
+	LOG_FUNC
+	iSecurityLevel=KBTDefaultServiceSecurityAuthenticateOnly;
+	}
+
+/**
+Setter to request authentication and encryption of the virtual serial connection when connection occurs
+@publishedAll
+@released
+*/
+EXPORT_C void TBTCommPortSettings::SetAuthenticationAndEncryption() 
+	{
+	LOG_FUNC
+	iSecurityLevel=KBTDefaultServiceSecurityAuthenticateAndEncrypt;
+	}
+
+/** 
+Setter to clear any setting of security settings
+@publishedAll
+@released
+*/
+EXPORT_C void TBTCommPortSettings::SetNoSecurity() 
+	{
+	LOG_FUNC
+	iSecurityLevel=KBTDefaultServiceSecurityNone;
+	}
+
+/**
+Sets the security level for this default service.
+@param aLevel the security level:
+KBTDefaultServiceSecurityNone                   = 0;
+KBTDefaultServiceSecurityAuthenticateOnly       = 1;
+KBTDefaultServiceSecurityAuthenticateAndEncrypt = 2;
+
+@publishedAll
+@released
+*/
+EXPORT_C void TBTCommPortSettings::SetSecurityLevel(TUint8 aLevel)
+	{
+	LOG_FUNC
+	iSecurityLevel=aLevel;
+	}
+
+
+/**
+Getter for the security level of the virtual serial port
+@return the level
+@see  TBTCommPortSettings::SetSecurityLevel
+@publishedAll
+@released
+*/
+EXPORT_C TUint8 TBTCommPortSettings::SecurityLevel() const
+	{
+	LOG_FUNC
+	return iSecurityLevel;
+	}
+
+/**
+Getter to return whether any security level is set
+@return EFalse if no security has been set, otherwise ETrue
+@publishedAll
+@released
+*/
+EXPORT_C TBool TBTCommPortSettings::IsSecuritySet() const
+	{
+	LOG_FUNC
+	return (iSecurityLevel);
+	}
+
+
+/**
+Getter to return whether encryption has been set for the virtual serial port connection
+@return ETrue if encryption has been set, otherwise EFalse
+@publishedAll
+@released
+*/
+EXPORT_C TBool TBTCommPortSettings::IsEncryptionSet() const
+	{
+	LOG_FUNC
+	return (iSecurityLevel==KBTDefaultServiceSecurityAuthenticateAndEncrypt);
+	}
+
+/**
+Getter to return whether only authentication has been set for the virtual serial port connection
+@return ETrue if only authentication has been set, otherwise EFalse
+@publishedAll
+@released
+*/
+EXPORT_C TBool TBTCommPortSettings::IsAuthenticationOnlySet() const
+	{
+	LOG_FUNC
+	return (iSecurityLevel==KBTDefaultServiceSecurityAuthenticateOnly);
+	}
+
+/**
+Default constructor
+@publishedAll
+@released
+*/
+EXPORT_C RBTCommPortSettings::RBTCommPortSettings()
+: RBTManSubSession()
+	{
+	LOG_FUNC
+	}
+
+/**
+Open the virtual serial port subsession on the registry server
+@param aSession the session on the Registry server on which to open this subsession
+@return Systemwide error code
+@publishedAll
+@released
+*/
+EXPORT_C TInt RBTCommPortSettings::Open(RBTRegServ& aSession)
+	{
+	LOG_FUNC
+	return CreateSubSession(aSession.Session(), EBTManCreateCommPortSettingsSubSession, TIpcArgs(NULL));
+	}
+
+/**
+Get the virtual serial port settings
+@param aPortSettings reference to a TBTCommPortSettings used for both an 'input' and 'output'.  For the input the aPortSettings MUST have a serial
+port number.  This is used to retrieve the remaining details for that virtual serial port from the Registry.
+When the call completes the client's TBTCommPortSettings will have been fully set with all values.
+Note this is a synchronous call.
+@return Systemwide error code
+@publishedAll
+@released
+*/
+EXPORT_C TInt RBTCommPortSettings::Get(TBTCommPortSettings& aPortSettings)
+/**
+	Get the port settings for a given port
+	At present the lookup is based on the port number in aPortSettings
+
+	Synchronous
+
+	@param	aPortSettings Reference to TBTCommPortSettings for result, and uses the port number within it to search
+	@return	System-wide error
+**/
+	{
+	LOG_FUNC
+	if (SubSessionHandle())
+		{
+		TPckg<TBTCommPortSettings> pckg(aPortSettings);	// TPckg=>Server updates client variable
+		return SendReceive(EBTRegistryGetCommPortSettings, TIpcArgs(&pckg, NULL, NULL));	// synchronous
+		}
+	else
+		{
+		//Client has a bad handle therefore complete the call from here
+		return KErrBadHandle;
+		}
+	}
+
+/**
+Modify or add the virtual serial port settings
+@param aPortSettings reference to a const TBTCommPortSettings.  The aPortSettings MUST have a serial
+port number.  This is used by the Registry to find the current settings and update with the other settings in aSettings.
+If the Registry cannot find the port specified it will add the settings in a new record.
+@param aStatus reference to a TRequestStatus. Note this is an asynchronous call.
+@publishedAll
+@released
+*/
+EXPORT_C void RBTCommPortSettings::Modify(const TBTCommPortSettings& aSettings, TRequestStatus& aStatus)
+/**
+	Asynchronously update virtual serial port settings
+
+	@param aSettings	The new settings
+**/
+	{
+	LOG_FUNC
+	if (IsBusy())
+		{
+		LocalComplete(aStatus, KErrInUse);
+		}
+	else
+		{
+		if (SubSessionHandle())
+			{
+			iPortPckg = aSettings;
+			iClientServerMsg().iClientStatusToCancel = &aStatus;
+			SendReceive(EBTRegistryUpdateCommPortSettings, TIpcArgs(&iPortPckg, NULL, &iClientServerMsg), aStatus);
+			}
+		else
+			{
+			//Client has a bad handle therefore complete the call from here
+			LocalComplete(aStatus, KErrBadHandle);
+			}
+		}
+	}
+
+
+
+/**
+Delete virtual serial settings
+@param aSettings reference to a const TBTCommPortSettings.  aSettings MUST have a serial
+port number.  This is used by the Registry to find the current settings and delete them from the Registry.
+@param aStatus reference to a TRequestStatus. Note this is an asynchronous call.
+@publishedAll
+@released
+*/
+EXPORT_C void RBTCommPortSettings::Delete(const TBTCommPortSettings& aSettings, TRequestStatus& aStatus)
+	{
+	LOG_FUNC
+	if (IsBusy())
+		{
+		LocalComplete(aStatus, KErrInUse);
+		}
+	else
+		{
+		if (SubSessionHandle())
+			{
+			iPortPckg = aSettings;
+			iClientServerMsg().iClientStatusToCancel = &aStatus;
+			SendReceive(EBTRegistryDeleteCommPortSettings, TIpcArgs(&iPortPckg, NULL, &iClientServerMsg), aStatus);
+			}
+		else
+			{
+			//Client has a bad handle therefore complete the call from here
+			LocalComplete(aStatus, KErrBadHandle);
+			}
+		}
+	}
+
+
+/**
+Close the virtual serial port subsession on the Registry
+@publishedAll
+@released
+*/
+EXPORT_C void RBTCommPortSettings::Close()
+	{
+	LOG_FUNC
+	RSubSessionBase::CloseSubSession(EBTManCloseSubSession);
+	}