--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmsengine/applicationadapter/src/mmsapplicationadapter.cpp Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,433 @@
+/*
+* Copyright (c) 2005 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: mmsapplicationadapter implementation
+*
+*/
+
+
+
+
+// INCLUDE FILES
+#include "mmsapplicationadapter.h"
+#include "mmsheaders.h"
+#include "mmsmsventry.h" // for the TMmsMsvEntry
+#include "mmssettings.h"
+#include "mmsconninit.h"
+#include "mmsregisteredapplications.h"
+#include <msvids.h>
+
+// EXTERNAL DATA STRUCTURES
+
+// EXTERNAL FUNCTION PROTOTYPES
+
+
+// CONSTANTS
+
+
+// MACROS
+
+// LOCAL CONSTANTS AND MACROS
+
+
+// MODULE DATA STRUCTURES
+
+
+// LOCAL FUNCTION PROTOTYPES
+
+
+// FORWARD DECLARATIONS
+
+
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CMmsApplicationAdapter::NewL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CMmsApplicationAdapter* CMmsApplicationAdapter::NewL()
+ {
+ CMmsApplicationAdapter* self = new ( ELeave ) CMmsApplicationAdapter;
+
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CMmsApplicationAdapter::~CMmsApplicationAdapter
+// -----------------------------------------------------------------------------
+//
+// Destructor
+CMmsApplicationAdapter::~CMmsApplicationAdapter()
+ {
+ delete iMmsHeaders;
+ delete iMmsSettings;
+ delete iRegAppIds;
+ delete iClientEntry;
+ delete iSession;
+ }
+
+// -----------------------------------------------------------------------------
+// CMmsApplicationAdapter::RegisterL
+// -----------------------------------------------------------------------------
+//
+
+EXPORT_C TInt CMmsApplicationAdapter::RegisterL(
+ const TDesC& aApplicationId, TMsvId& aFolderId )
+ {
+ return RegisterWithNameL( aApplicationId, TPtrC(), aFolderId );
+ }
+
+// -----------------------------------------------------------------------------
+// CMmsApplicationAdapter::UnregisterL
+// -----------------------------------------------------------------------------
+//
+
+EXPORT_C TInt CMmsApplicationAdapter::UnregisterL(
+ const TDesC& aApplicationId )
+ {
+
+ TInt error = KErrNone;
+ if ( RegisteredL( aApplicationId ) )
+ {
+ error = iRegAppIds->UnregisterL( aApplicationId );
+ }
+
+ TMsvId applicationFolder = iMmsSettings->ApplicationFolder();
+ TMsvId folderId = iMmsSettings->FolderEntryL( *iSession, applicationFolder,
+ aApplicationId );
+
+ // Despite of the error, delete the folder anyway.
+ if ( folderId != KMsvNullIndexEntryId )
+ {
+ error = DeleteL( folderId );
+ }
+
+ return error;
+ }
+
+// -----------------------------------------------------------------------------
+// CMmsApplicationAdapter::RegisteredL
+// -----------------------------------------------------------------------------
+//
+
+EXPORT_C TBool CMmsApplicationAdapter::RegisteredL( const TDesC& aApplicationId )
+ {
+ iRegAppIds->LoadRegisteredApplicationsL();
+ return iRegAppIds->RegisteredL( aApplicationId );
+ }
+
+// -----------------------------------------------------------------------------
+// CMmsApplicationAdapter::FolderIdL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TMsvId CMmsApplicationAdapter::FolderIdL( const TDesC& aApplicationId )
+ {
+ // check if the appid is registered
+ TBool registered = RegisteredL( aApplicationId );
+
+ // check if folder for the appid exists
+ TMsvId applicationFolder = iMmsSettings->ApplicationFolder();
+ TMsvId folderId = iMmsSettings->FolderEntryL( *iSession, applicationFolder,
+ aApplicationId );
+
+ if ( registered )
+ {
+ if ( folderId != KMsvNullIndexEntryId )
+ {
+ return folderId;
+ }
+ else
+ {
+ User::LeaveIfError( iMmsSettings->CreateFolderEntryL( *iSession, applicationFolder,
+ aApplicationId, folderId) );
+ return folderId;
+ }
+ }
+ else // application id is not registered
+ {
+ if ( folderId != KMsvNullIndexEntryId )
+ {
+ User::LeaveIfError( DeleteL( folderId ) );
+ }
+ return KMsvNullIndexEntryId;
+ }
+
+ }
+
+// -----------------------------------------------------------------------------
+// CMmsApplicationAdapter::ApplicationIdL
+// -----------------------------------------------------------------------------
+//
+
+EXPORT_C TPtrC16 CMmsApplicationAdapter::ApplicationIdL(
+ TMsvId aMmId )
+ {
+ iClientEntry->SetEntryL( aMmId );
+ CMsvStore* store = iClientEntry->ReadStoreL();
+ CleanupStack::PushL( store );
+ iMmsHeaders->RestoreL( *store );
+
+ TPtrC16 applicId = iMmsHeaders->ApplicId();
+ CleanupStack::PopAndDestroy( store );
+ return applicId;
+ }
+
+// -----------------------------------------------------------------------------
+// CMmsApplicationAdapter::SetApplicationIdL
+// -----------------------------------------------------------------------------
+//
+
+EXPORT_C void CMmsApplicationAdapter::SetApplicationIdL(
+ TMsvId aMmId,
+ const TDesC& aApplicationId )
+ {
+ iClientEntry->SetEntryL( aMmId );
+
+ CMsvStore* store = iClientEntry->EditStoreL();
+ CleanupStack::PushL( store );
+ iMmsHeaders->RestoreL( *store );
+
+ iMmsHeaders->SetApplicIdL( aApplicationId );
+
+ // The headers changed, save them.
+ iMmsHeaders->StoreL( *store );
+ store->CommitL();
+ CleanupStack::PopAndDestroy( store );
+
+ }
+
+// -----------------------------------------------------------------------------
+// CMmsApplicationAdapter::ReplyToApplicationIdL
+// -----------------------------------------------------------------------------
+//
+
+EXPORT_C TPtrC16 CMmsApplicationAdapter::ReplyToApplicationIdL(
+ TMsvId aMmId )
+ {
+ iClientEntry->SetEntryL( aMmId );
+
+ CMsvStore* store = iClientEntry->ReadStoreL();
+ CleanupStack::PushL( store );
+ iMmsHeaders->RestoreL( *store );
+ TPtrC16 replyToApplicId = iMmsHeaders->ReplyApplicId();
+ CleanupStack::PopAndDestroy( store );
+
+ return replyToApplicId;
+ }
+
+// -----------------------------------------------------------------------------
+// CMmsApplicationAdapter::SetReplyToApplicationIdL
+// -----------------------------------------------------------------------------
+//
+
+EXPORT_C void CMmsApplicationAdapter::SetReplyToApplicationIdL(
+ TMsvId aMmId,
+ const TDesC& aApplicationId )
+ {
+ iClientEntry->SetEntryL( aMmId );
+
+ CMsvStore* store = iClientEntry->EditStoreL();
+ CleanupStack::PushL( store );
+ iMmsHeaders->RestoreL( *store );
+
+ iMmsHeaders->SetReplyApplicIdL( aApplicationId );
+
+ // The headers changed, save them.
+ iMmsHeaders->StoreL( *store );
+ store->CommitL();
+ CleanupStack::PopAndDestroy( store );
+
+ }
+
+// -----------------------------------------------------------------------------
+// CMmsApplicationAdapter::DeleteL
+// -----------------------------------------------------------------------------
+//
+
+EXPORT_C TInt CMmsApplicationAdapter::DeleteL(
+ TMsvId aMmId )
+ {
+ TInt error = KErrNone;
+ TRAP ( error,
+ {
+ iClientEntry->SetEntryL( aMmId );
+ TMsvEntry tEntry = iClientEntry->Entry();
+ iClientEntry->SetEntryL( tEntry.Parent() );
+ iClientEntry->DeleteL( aMmId );
+ } )
+
+ if ( error == KErrNotFound )
+ {
+ error = KErrNone;
+ }
+ return error;
+ }
+
+// -----------------------------------------------------------------------------
+// CMmsApplicationAdapter::MmscUrlL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CMmsApplicationAdapter::MmscUrlL( HBufC*& aServerUri )
+ {
+ TUint32 accessPointLink = 0;
+ TUint32 accessPoint = 0;
+ TBool proxyUsed = EFalse;
+ HBufC8* proxyAddress = NULL;
+
+ iMmsSettings->LoadSettingsL();
+
+ TInt accessPointCount = iMmsSettings->AccessPointCount();
+
+ if ( accessPointCount > 0 )
+ {
+ accessPointLink = iMmsSettings->AccessPoint( 0 );
+ }
+ else
+ {
+ return KErrNotFound;
+ }
+
+ CMmsConnectionInitiator::GetParametersL( accessPointLink, accessPoint,
+ aServerUri, proxyUsed, proxyAddress);
+
+ delete proxyAddress;
+ proxyAddress = NULL;
+
+ if ( accessPoint == 0 )
+ {
+ // something is gone wrong.
+ return KErrGeneral;
+ }
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const CDesCArray& CMmsApplicationAdapter::RegisteredApplicationList() const
+ {
+ // Leaves only if runs out of memory
+ TRAP_IGNORE( iRegAppIds->LoadRegisteredApplicationsL() );
+ // Return what we got.
+ // The list always exists, but may not be up to date if we run out of memory
+ return iRegAppIds->RegisteredApplicationList();
+ }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CMmsApplicationAdapter::RegisterWithNameL(
+ const TDesC& aApplicationId,
+ const TDesC& aUserFriendlyName,
+ TMsvId& aFolderId )
+ {
+ aFolderId = KMsvNullIndexEntryId;
+ TInt error = KErrNone;
+ iRegAppIds->LoadRegisteredApplicationsL();
+
+ // iRegAppIds checks if the application id is already registered.
+ // User friendly name can be added afterwards even if the id
+ // is already registered, so we let CMmsRegisteredApplications class
+ // do the checking.
+ // CMmsRegisteredApplications also checks if the length of the
+ // strings is too long to fit into registry.
+ error = iRegAppIds->RegisterL( aApplicationId, aUserFriendlyName );
+
+ if ( error == KErrNone || error == KErrAlreadyExists )
+ {
+ TMsvId applicationFolder = iMmsSettings->ApplicationFolder();
+ error = iMmsSettings->CreateFolderEntryL( *iSession, applicationFolder,
+ aApplicationId, aFolderId);
+ if ( error == KErrAlreadyExists )
+ {
+ error = KErrNone;
+ }
+ }
+
+ return error;
+ }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TPtrC CMmsApplicationAdapter::UserFriendlyName( const TDesC& aApplicationId )
+ {
+ // Leaves only if out of memory
+ TRAPD( error, iRegAppIds->LoadRegisteredApplicationsL() );
+ if ( error == KErrNone )
+ {
+ return iRegAppIds->UserFriendlyName( aApplicationId );
+ }
+ else
+ {
+ // if out of memory, no user friendly name
+ return TPtrC();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CMmsApplicationAdapter::HandleSessionEventL
+// -----------------------------------------------------------------------------
+//
+void CMmsApplicationAdapter::HandleSessionEventL( TMsvSessionEvent /* aEvent */, TAny* /*aArg1*/, TAny* /*aArg2*/, TAny* /*aArg3*/)
+ {
+
+ }
+
+// -----------------------------------------------------------------------------
+// CMmsApplicationAdapter::CMmsApplicationAdapter
+// -----------------------------------------------------------------------------
+//
+CMmsApplicationAdapter::CMmsApplicationAdapter()
+ {
+ }
+
+
+// -----------------------------------------------------------------------------
+// CMmsApplicationAdapter::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CMmsApplicationAdapter::ConstructL()
+ {
+
+ iSession = CMsvSession::OpenSyncL( *this );
+
+ iClientEntry = iSession->GetEntryL( KMsvRootIndexEntryId );
+
+ // First loading settings
+ iMmsSettings = CMmsSettings::NewL();
+ iMmsSettings->LoadSettingsL();
+
+ iRegAppIds = CMmsRegisteredApplications::NewL();
+
+ iMmsHeaders = CMmsHeaders::NewL( iMmsSettings->MmsVersion() );
+
+ }
+
+
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+
+// End of File