appfw/apparchitecture/apparc/APAID.CPP
changeset 0 2e3d3ce01487
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appfw/apparchitecture/apparc/APAID.CPP	Tue Feb 02 10:12:00 2010 +0200
@@ -0,0 +1,389 @@
+// Copyright (c) 1997-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:
+// apaid.cpp
+//
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#if !defined(__APAID_PARTNER_H__)
+#include "apaidpartner.h"
+#endif
+#endif //SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <apaid.h>
+#include <s32strm.h>
+#include "APASTD.H"
+
+const TInt KMaxOpaqueDataLength = 0x1000; // maximum length of opaque data that can be passed between client and apparc server via a TApaAppServiceInfo object - this can be increased in future if needed
+
+//
+// TApaAppIdentifier
+//
+
+/** Constructs an empty application identifier.
+
+The data is not initialised. */
+EXPORT_C TApaAppIdentifier::TApaAppIdentifier()
+	{}
+
+/** Constructs an application identifier from the specified application 
+DLL file name and extension, and the specified application UID.
+@param aAppUid The application specific UID.
+@param aDllName The filename and extension of the application DLL. */
+EXPORT_C TApaAppIdentifier::TApaAppIdentifier(TUid aAppUid,const TFileName& aDllName)
+	: iAppUid(aAppUid),
+	iFullName(aDllName)
+	{}
+
+/** Externalises the application identifier to a write stream.
+
+@param aStream The write stream. */
+EXPORT_C void TApaAppIdentifier::ExternalizeL(RWriteStream& aStream)const
+	{
+	aStream<< iAppUid;
+	aStream<< iFullName;
+	}
+
+/** Internalises the application identifier from a read stream.
+
+@param aStream The read stream. */
+EXPORT_C void TApaAppIdentifier::InternalizeL(RReadStream& aStream)
+	{
+	aStream>> iAppUid;
+	aStream>> iFullName;
+	}
+
+//
+// TApaAppInfo
+//
+
+/** Constructs an empty application information object.
+
+The full path name is empty, the captions are empty and the application specific 
+UID is set to the null UID. */
+EXPORT_C TApaAppInfo::TApaAppInfo()
+	: iUid(TUid()),
+	iFullName(KNullDesC),
+	iCaption(KNullDesC),
+	iShortCaption(KNullDesC)
+	{}
+
+/** Constructs an application information object from the specified full DLL path 
+name, UID and full length caption.
+
+@param aAppUid The application specific UID. 
+@param aDllName The full path name of the application DLL. 
+@param aCaption The application caption. */
+EXPORT_C TApaAppInfo::TApaAppInfo(TUid aAppUid,const TFileName& aDllName,const TApaAppCaption& aCaption)
+	: iUid(aAppUid),
+	iFullName(aDllName),
+	iCaption(aCaption),
+	iShortCaption(aCaption)
+	{}
+
+/** Constructs an application information object from the specified full DLL path 
+name, UID, caption and short caption.
+
+@param aAppUid The application specific UID. 
+@param aDllName The full path name of the application DLL. 
+@param aCaption The application caption. 
+@param aShortCaption The application short caption. */
+EXPORT_C TApaAppInfo::TApaAppInfo(TUid aAppUid,const TFileName& aDllName,const TApaAppCaption& aCaption,const TApaAppCaption& aShortCaption)
+	: iUid(aAppUid),
+	iFullName(aDllName),
+	iCaption(aCaption),
+	iShortCaption(aShortCaption)
+	{}
+
+/** Externalises the application information to a write stream.
+
+@param aStream The write stream. */
+EXPORT_C void TApaAppInfo::ExternalizeL(RWriteStream& aStream)const
+	{
+	aStream<< iUid;
+	aStream<< iFullName;
+	aStream<< iCaption;
+	aStream<< iShortCaption;
+	}
+
+/** Internalises the application information from a read stream.
+
+@param aStream The read stream. */
+EXPORT_C void TApaAppInfo::InternalizeL(RReadStream& aStream)
+	{
+	aStream>> iUid;
+	aStream>> iFullName;
+	aStream>> iCaption;
+	aStream>> iShortCaption;
+	}
+
+
+//
+// TApaAppViewInfo
+//
+
+/** Constructs an empty object.
+
+Specifically, it sets the view UID to KNullUid and empties the application 
+caption, i.e. sets it to KNullDesC. */
+EXPORT_C TApaAppViewInfo::TApaAppViewInfo()
+	: iUid(KNullUid),
+	iViewCaption(KNullDesC)
+	{}
+
+
+EXPORT_C TApaAppViewInfo::TApaAppViewInfo(TUid aAppUid,const TApaAppCaption& aViewCaption, TInt aScreenMode)
+	: iUid(aAppUid),
+	iViewCaption(aViewCaption),
+	iScreenMode(aScreenMode)
+	{}
+
+
+/** Externalises the application view information to a write stream.
+
+@param aStream The write stream. */
+EXPORT_C void TApaAppViewInfo::ExternalizeL(RWriteStream& aStream)const
+	{
+	aStream<< iUid;
+	aStream<< iViewCaption;
+	aStream.WriteInt32L(iScreenMode);
+	}
+
+
+/** Internalises the application view information from a read stream.
+
+@param aStream The read stream. */
+EXPORT_C void TApaAppViewInfo::InternalizeL(RReadStream& aStream)
+	{
+	aStream>> iUid;
+	aStream>> iViewCaption;
+	iScreenMode=aStream.ReadInt32L();
+	}
+
+
+//
+// class TApaAppCapability
+//
+
+EXPORT_C void TApaAppCapability::InternalizeL(RReadStream& aStream)
+	{
+	DoInternalizeL(aStream, iLaunchInBackground, iGroupName);
+	}
+	
+/** Internalises the application capabilities from a read stream.
+
+@param aStream The read stream.
+*/
+void TApaAppCapability::DoInternalizeL(RReadStream& aStream, TBool& aLaunchInBackground, TApaAppGroupName& aGroupName)
+	{
+	TInt version = aStream.ReadInt32L();
+	iEmbeddability = TEmbeddability(aStream.ReadInt32L());
+	iSupportsNewFile = aStream.ReadInt32L();
+	iAppIsHidden = aStream.ReadInt32L();
+
+	// initialise values of members which may not be in the stream
+	aLaunchInBackground = EFalse;
+	aGroupName.Zero();
+
+	if (version==1)
+		return;
+
+	// Calypso extension to allow apps to be launched in the background
+	aLaunchInBackground = aStream.ReadInt32L();
+	if (version==2)
+		return;
+
+	aStream >> aGroupName;
+	if (version == 3)
+		return;
+
+	iAttributes = aStream.ReadUint32L();
+	if (version == 4)
+		return;
+	
+	Panic(EDPanicInvalidVersionNumber);
+	}
+
+/** Externalises the application capabilities to a write stream.
+
+@param aStream The write stream. 
+*/
+EXPORT_C void TApaAppCapability::ExternalizeL(RWriteStream& aStream) const
+	{
+	aStream.WriteInt32L(EVersion);
+	aStream.WriteInt32L(iEmbeddability);
+	aStream.WriteInt32L(iSupportsNewFile);
+	aStream.WriteInt32L(iAppIsHidden);
+	aStream.WriteInt32L(iLaunchInBackground);
+	aStream << iGroupName;
+	aStream.WriteUint32L(iAttributes);
+	}
+			
+/** A utility function that can copy capability information from one descriptor 
+to another.
+
+@param aDest Target descriptor.
+@param aSource Source descriptor. 
+*/
+EXPORT_C void TApaAppCapability::CopyCapability(TDes8& aDest,const TDesC8& aSource)
+	{
+	TInt maxLen=aDest.MaxLength();
+	aDest.FillZ(maxLen); // zero fill in case aSource is shorter
+	aDest.Copy(aSource.Left(Min(aSource.Length(),maxLen)));
+	aDest.SetLength(maxLen);
+	}
+
+
+//
+// class TApaEmbeddabilityFilter
+//
+
+/** Constructs an empty embeddability filter. */
+EXPORT_C TApaEmbeddabilityFilter::TApaEmbeddabilityFilter()
+	: iEmbeddabilityFlags(0)
+	{
+	}
+
+/** Adds aEmbeddability to the filter.
+
+@param aEmbeddability TEmbeddability value to add to the filter. */
+EXPORT_C void TApaEmbeddabilityFilter::AddEmbeddability(TApaAppCapability::TEmbeddability aEmbeddability)
+	{
+	__ASSERT_ALWAYS(aEmbeddability >= 0 && static_cast<TUint>(aEmbeddability) < (sizeof(TUint)*8), Panic(EPanicEmbeddabilityOutOfRange));
+	iEmbeddabilityFlags |= (1 << aEmbeddability);
+	}
+
+/** Compares aEmbeddability with the filter.
+
+@param aEmbeddability TEmbeddability value to compare.
+@return True, if aEmbeddability is included in the filter; false, otherwise. */
+EXPORT_C TBool TApaEmbeddabilityFilter::MatchesEmbeddability(TApaAppCapability::TEmbeddability aEmbeddability) const
+	{
+	__ASSERT_ALWAYS(aEmbeddability >= 0 && static_cast<TUint>(aEmbeddability) < (sizeof(TUint)*8), Panic(EPanicEmbeddabilityOutOfRange));
+	TUint embeddabilityFlag = (1 << aEmbeddability);
+	return (embeddabilityFlag & iEmbeddabilityFlags);
+	}
+
+
+//
+// class TApaAppServiceInfo
+//
+
+EXPORT_C TApaAppServiceInfo::TApaAppServiceInfo()
+	: iUid(KNullUid),
+	  iDataTypes(0),
+	  iOpaqueData(NULL)
+	{
+	}
+
+EXPORT_C TApaAppServiceInfo::TApaAppServiceInfo(TUid aUid, 
+	CArrayFixFlat<TDataTypeWithPriority>* aDataTypes, HBufC8* aOpaqueData)
+	: iUid(aUid),
+	  iDataTypes(aDataTypes),
+	  iOpaqueData(aOpaqueData)
+	{
+	__ASSERT_DEBUG(iDataTypes, Panic(EPanicNullPointer));
+	__ASSERT_DEBUG(iOpaqueData, Panic(EPanicNullPointer));
+	}
+
+EXPORT_C void TApaAppServiceInfo::ExternalizeL(RWriteStream& aStream) const
+	{
+	__ASSERT_DEBUG(iDataTypes, Panic(EPanicNullPointer));
+	__ASSERT_DEBUG(iOpaqueData, Panic(EPanicNullPointer));
+	aStream << iUid;
+	aStream << *iDataTypes; //lint !e613 Possible use of null pointer - Asserted above
+	aStream << *iOpaqueData;//lint !e613 Possible use of null pointer - Asserted above
+	}
+
+EXPORT_C void TApaAppServiceInfo::InternalizeL(RReadStream& aStream)
+	{
+	aStream >> iUid;
+	iDataTypes = new(ELeave) CArrayFixFlat<TDataTypeWithPriority>(1);
+	aStream >> *iDataTypes;
+	iOpaqueData = HBufC8::NewL(aStream, KMaxOpaqueDataLength);
+	}
+
+EXPORT_C void TApaAppServiceInfo::Release()
+	{
+	if (iDataTypes)
+		{
+		iDataTypes->Reset();
+		delete iDataTypes;		
+		}
+	if (iOpaqueData)
+		{
+		delete iOpaqueData;
+		iOpaqueData = NULL;
+		}
+	}
+
+EXPORT_C CArrayFixFlat<TDataTypeWithPriority>& TApaAppServiceInfo::DataTypes()
+	{
+	__ASSERT_DEBUG(iDataTypes, Panic(EPanicNullPointer));
+	return *iDataTypes; //lint !e613 Possible use of null pointer - Asserted above
+	}
+
+/** Returns the service UID.
+
+Note that some APIs may store a UID other than a service UID
+in a TApaAppServiceInfo object. Such APIs clearly state what
+the UID represents.
+
+@return the service UID.
+*/
+EXPORT_C TUid TApaAppServiceInfo::Uid() const
+	{
+	return iUid;
+	}
+	
+EXPORT_C const CArrayFixFlat<TDataTypeWithPriority>& TApaAppServiceInfo::DataTypes() const
+	{
+	__ASSERT_DEBUG(iDataTypes, Panic(EPanicNullPointer));	
+	return *iDataTypes; //lint !e613 Possible use of null pointer - Asserted above
+	}
+
+/** Returns the service implementation's opaque data.
+
+For each service UID registered by an application, the associated
+opaque data indicates how the service is implemented by that application.
+
+The meaning of the opaque data is not known to the framework, it will vary
+according to the service.
+
+For some services the opaque data may be a name intended for user display,
+for others it may be structured data that the service's client-side code can interpret.
+
+@return the service implementation's opaque data.
+*/
+EXPORT_C const TDesC8& TApaAppServiceInfo::OpaqueData() const
+	{
+	if (iOpaqueData)
+		return *iOpaqueData;
+
+	return KNullDesC8;
+	}
+
+	
+//
+// class CApaAppServiceInfoArray
+//
+
+EXPORT_C CApaAppServiceInfoArray::CApaAppServiceInfoArray()
+	{
+	}
+	
+EXPORT_C void CApaAppServiceInfoArray::CApaAppServiceInfoArray_Reserved1()
+	{
+	}
+
+EXPORT_C void CApaAppServiceInfoArray::CApaAppServiceInfoArray_Reserved2()
+	{
+	}