diff -r 675a964f4eb5 -r 35751d3474b7 contentmgmt/contentaccessfwfordrm/source/caf/agentinfo.cpp --- a/contentmgmt/contentaccessfwfordrm/source/caf/agentinfo.cpp Tue Jul 21 01:04:32 2009 +0100 +++ b/contentmgmt/contentaccessfwfordrm/source/caf/agentinfo.cpp Thu Sep 10 14:01:51 2009 +0300 @@ -1,250 +1,250 @@ -/* -* Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the License "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 -#include "agentinfo.h" -#include "agent.h" -#include "agentfactory.h" -#include "agentinterface.h" - -using namespace ContentAccess; - -// Default buffer size of zero -const TInt KCafApparcBufferSize = 0; - -CAgentInfo* CAgentInfo::NewLC(const CImplementationInformation& aImplInfo) - { - CAgentInfo* self = new (ELeave) CAgentInfo; - CleanupStack::PushL(self); - self->ConstructL(aImplInfo); - return self; - } - -CAgentInfo::CAgentInfo() - { - } - -CAgentInfo::~CAgentInfo() - { - iSupplierMimeTypes.ResetAndDestroy(); - iSupplierMimeTypes.Close(); - iConsumerMimeTypes.ResetAndDestroy(); - iConsumerMimeTypes.Close(); - - // Delete the agent manager and agent factory, this may unload the agent DLL - delete iAgentManager; - delete iAgentFactory; - } - - -void CAgentInfo::ConstructL(const CImplementationInformation& aImplInfo) - { - // Set up the agent member with the name and Uid of the agent - iAgent.SetValue(aImplInfo.DisplayName(), aImplInfo.ImplementationUid()); - - // get the name of the agents private directory - TInt length = aImplInfo.OpaqueData().Length(); - if(length > KMaxSIDLength) - { - User::Leave(KErrCorrupt); - } - else - { - iPrivateDirectoryName.Copy(aImplInfo.OpaqueData().Left(KMaxSIDLength)); - } - - // Extract from the data field from the info. - // The data field should be of the form: - // "|,,....,:," - // bufferlength is the desired length of the buffer passed from apparc to DoRecognize - TPtrC8 data(aImplInfo.DataType()); - TPtrC8 supplier(KNullDesC8()); - TPtrC8 consumer(KNullDesC8()); - - // Search for the "|" field to delimit buffersize and supplier mime types - TInt index = data.LocateF('|'); - if(index < 0) - { - // No default buffersize, ie. corrupt - User::Leave(KErrCorrupt); - } - else - { - TPtrC8 buffersize(data.Left(index)); - TLex8 bufferLex(buffersize); - bufferLex.Val(iPreferredBufferSize); - - // Make sure a buffer size was actually specified before the | character - if(iPreferredBufferSize == 0) - { - iPreferredBufferSize = KCafApparcBufferSize; - } - - // Make sure '|' is not the last character - if (index + 1 < data.Length()) - { - data.Set(aImplInfo.DataType().Mid(index + 1)); - } - else - { - User::Leave(KErrCorrupt); - } - } - - - // Search for the ":" field to delimit supplier and consumer - index = data.LocateF(':'); - - // If the colon was present, then set the pointers appropriately - if (index >= 0) - { - // Set supplier pointer - supplier.Set(data.Left(index)); - - // Check that ':' is not the last character before setting consumer pointer - if (index + 1 < data.Length()) - { - consumer.Set(data.Mid(index + 1)); - } - } - else - { - User::Leave(KErrCorrupt); - } - - // Now parse the supplier mime types - ParseMimeTypesL(supplier, iSupplierMimeTypes); - - // Do the same for the consumer mime types - ParseMimeTypesL(consumer, iConsumerMimeTypes); - } - -CAgentFactory& CAgentInfo::AgentFactoryL() - { - // Create the agent factory if it hasn't been done already - if (!iAgentFactory) - { - iAgentFactory = CAgentFactory::NewL(iAgent.ImplementationUid()); - } - return *iAgentFactory; - } - -CAgentManager& CAgentInfo::AgentManagerL() - { - // Create the agent manager - if (!iAgentManager) - { - iAgentManager = AgentFactoryL().CreateManagerL(); - } - return *iAgentManager; - } - -TBool CAgentInfo::IsSupportedSupplier(const TDesC8& aSupplierMime) const - { - for (TInt i = 0; i < iSupplierMimeTypes.Count(); ++i) - { - if (aSupplierMime == *iSupplierMimeTypes[i]) - { - return ETrue; - } - } - return EFalse; - } - -TBool CAgentInfo::IsSupportedConsumer(const TDesC8& aConsumerMime) const - { - - for (TInt i = 0; i < iConsumerMimeTypes.Count(); ++i) - { - if (aConsumerMime == *iConsumerMimeTypes[i]) - { - return ETrue; - } - } - return EFalse; - } - -const RPointerArray& CAgentInfo::SupplierMimeTypes() const - { - return iSupplierMimeTypes; - } - -const RPointerArray& CAgentInfo::ConsumerMimeTypes() const - { - return iConsumerMimeTypes; - } - -void CAgentInfo::AddToArrayL(const TDesC8& aElement, - RPointerArray& aArray) - { - // Don't bother adding empty elements - if (aElement.Length()) - { - HBufC8* newElem = aElement.AllocLC(); - TPtr8 lowerCasePtr = newElem->Des(); - lowerCasePtr.LowerCase(); - User::LeaveIfError(aArray.Append(newElem)); - CleanupStack::Pop(newElem); - } - } - -void CAgentInfo::ParseMimeTypesL(const TDesC8& aBuf, - RPointerArray& aMimeTypes) - { - TPtrC8 ptr(aBuf); - TInt pos = 0; - while ((pos = ptr.LocateF(',')) >= 0) - { - // Take into account possibility of ,, - if (pos > 0) - { - AddToArrayL(ptr.Left(pos), aMimeTypes); - } - - // Now, move the pointer to the position after the ','. BUT if the - // ',' is the last position, then we are done, so return (a bit - // dirty, but makes things easier - if (pos + 1 < ptr.Length()) - { - ptr.Set(ptr.Mid(pos + 1)); - } - else - { - // The ',' is the last character, so quit - return; - } - } - - // Now extract the last mime type. - AddToArrayL(ptr, aMimeTypes); - } - -TInt CAgentInfo::PreferredBufferSize() const - { - return iPreferredBufferSize; - } - -const TDesC& CAgentInfo::PrivateDirectoryName() const - { - return iPrivateDirectoryName; - } - -TAgent& CAgentInfo::Agent() - { - return iAgent; - } +/* +* Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "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 +#include "agentinfo.h" +#include +#include +#include + +using namespace ContentAccess; + +// Default buffer size of zero +const TInt KCafApparcBufferSize = 0; + +CAgentInfo* CAgentInfo::NewLC(const CImplementationInformation& aImplInfo) + { + CAgentInfo* self = new (ELeave) CAgentInfo; + CleanupStack::PushL(self); + self->ConstructL(aImplInfo); + return self; + } + +CAgentInfo::CAgentInfo() + { + } + +CAgentInfo::~CAgentInfo() + { + iSupplierMimeTypes.ResetAndDestroy(); + iSupplierMimeTypes.Close(); + iConsumerMimeTypes.ResetAndDestroy(); + iConsumerMimeTypes.Close(); + + // Delete the agent manager and agent factory, this may unload the agent DLL + delete iAgentManager; + delete iAgentFactory; + } + + +void CAgentInfo::ConstructL(const CImplementationInformation& aImplInfo) + { + // Set up the agent member with the name and Uid of the agent + iAgent.SetValue(aImplInfo.DisplayName(), aImplInfo.ImplementationUid()); + + // get the name of the agents private directory + TInt length = aImplInfo.OpaqueData().Length(); + if(length > KMaxSIDLength) + { + User::Leave(KErrCorrupt); + } + else + { + iPrivateDirectoryName.Copy(aImplInfo.OpaqueData().Left(KMaxSIDLength)); + } + + // Extract from the data field from the info. + // The data field should be of the form: + // "|,,....,:," + // bufferlength is the desired length of the buffer passed from apparc to DoRecognize + TPtrC8 data(aImplInfo.DataType()); + TPtrC8 supplier(KNullDesC8()); + TPtrC8 consumer(KNullDesC8()); + + // Search for the "|" field to delimit buffersize and supplier mime types + TInt index = data.LocateF('|'); + if(index < 0) + { + // No default buffersize, ie. corrupt + User::Leave(KErrCorrupt); + } + else + { + TPtrC8 buffersize(data.Left(index)); + TLex8 bufferLex(buffersize); + bufferLex.Val(iPreferredBufferSize); + + // Make sure a buffer size was actually specified before the | character + if(iPreferredBufferSize == 0) + { + iPreferredBufferSize = KCafApparcBufferSize; + } + + // Make sure '|' is not the last character + if (index + 1 < data.Length()) + { + data.Set(aImplInfo.DataType().Mid(index + 1)); + } + else + { + User::Leave(KErrCorrupt); + } + } + + + // Search for the ":" field to delimit supplier and consumer + index = data.LocateF(':'); + + // If the colon was present, then set the pointers appropriately + if (index >= 0) + { + // Set supplier pointer + supplier.Set(data.Left(index)); + + // Check that ':' is not the last character before setting consumer pointer + if (index + 1 < data.Length()) + { + consumer.Set(data.Mid(index + 1)); + } + } + else + { + User::Leave(KErrCorrupt); + } + + // Now parse the supplier mime types + ParseMimeTypesL(supplier, iSupplierMimeTypes); + + // Do the same for the consumer mime types + ParseMimeTypesL(consumer, iConsumerMimeTypes); + } + +CAgentFactory& CAgentInfo::AgentFactoryL() + { + // Create the agent factory if it hasn't been done already + if (!iAgentFactory) + { + iAgentFactory = CAgentFactory::NewL(iAgent.ImplementationUid()); + } + return *iAgentFactory; + } + +CAgentManager& CAgentInfo::AgentManagerL() + { + // Create the agent manager + if (!iAgentManager) + { + iAgentManager = AgentFactoryL().CreateManagerL(); + } + return *iAgentManager; + } + +TBool CAgentInfo::IsSupportedSupplier(const TDesC8& aSupplierMime) const + { + for (TInt i = 0; i < iSupplierMimeTypes.Count(); ++i) + { + if (aSupplierMime == *iSupplierMimeTypes[i]) + { + return ETrue; + } + } + return EFalse; + } + +TBool CAgentInfo::IsSupportedConsumer(const TDesC8& aConsumerMime) const + { + + for (TInt i = 0; i < iConsumerMimeTypes.Count(); ++i) + { + if (aConsumerMime == *iConsumerMimeTypes[i]) + { + return ETrue; + } + } + return EFalse; + } + +const RPointerArray& CAgentInfo::SupplierMimeTypes() const + { + return iSupplierMimeTypes; + } + +const RPointerArray& CAgentInfo::ConsumerMimeTypes() const + { + return iConsumerMimeTypes; + } + +void CAgentInfo::AddToArrayL(const TDesC8& aElement, + RPointerArray& aArray) + { + // Don't bother adding empty elements + if (aElement.Length()) + { + HBufC8* newElem = aElement.AllocLC(); + TPtr8 lowerCasePtr = newElem->Des(); + lowerCasePtr.LowerCase(); + User::LeaveIfError(aArray.Append(newElem)); + CleanupStack::Pop(newElem); + } + } + +void CAgentInfo::ParseMimeTypesL(const TDesC8& aBuf, + RPointerArray& aMimeTypes) + { + TPtrC8 ptr(aBuf); + TInt pos = 0; + while ((pos = ptr.LocateF(',')) >= 0) + { + // Take into account possibility of ,, + if (pos > 0) + { + AddToArrayL(ptr.Left(pos), aMimeTypes); + } + + // Now, move the pointer to the position after the ','. BUT if the + // ',' is the last position, then we are done, so return (a bit + // dirty, but makes things easier + if (pos + 1 < ptr.Length()) + { + ptr.Set(ptr.Mid(pos + 1)); + } + else + { + // The ',' is the last character, so quit + return; + } + } + + // Now extract the last mime type. + AddToArrayL(ptr, aMimeTypes); + } + +TInt CAgentInfo::PreferredBufferSize() const + { + return iPreferredBufferSize; + } + +const TDesC& CAgentInfo::PrivateDirectoryName() const + { + return iPrivateDirectoryName; + } + +TAgent& CAgentInfo::Agent() + { + return iAgent; + }