mmsengine/applicationadapter/src/mmsapplicationadapter.cpp
changeset 0 72b543305e3a
--- /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