omadrm/drmengine/server/src/DRMRightsServer.cpp
branchRCL_3
changeset 55 ad2863178d17
parent 18 8a03a285ab14
child 84 b09186059647
--- a/omadrm/drmengine/server/src/DRMRightsServer.cpp	Wed Jun 09 09:59:43 2010 +0300
+++ b/omadrm/drmengine/server/src/DRMRightsServer.cpp	Mon Jun 21 15:58:55 2010 +0300
@@ -294,6 +294,29 @@
 
 // ============================ MEMBER FUNCTIONS ===============================
 
+// CUsageUrl:
+
+//--------------------------------------------------------------------------
+// CUsageUrl::CUsageUrl
+// Storage class default constructor
+//--------------------------------------------------------------------------
+//
+CUsageUrl::CUsageUrl()
+    {
+    }
+
+//--------------------------------------------------------------------------
+// CUsageUrl::~CUsageUrl
+// Storage class destructor
+//--------------------------------------------------------------------------
+//
+CUsageUrl::~CUsageUrl()
+    {
+    delete iUrl;    
+    }
+
+// CDRMRightsServer:
+
 // -----------------------------------------------------------------------------
 // CDRMRightsServer::NewLC
 // Two-phased constructor.
@@ -354,6 +377,8 @@
         delete iNotifier; iNotifier = NULL;
         }
 
+    iActiveUrls.ResetAndDestroy();
+
     //An empty semaphore
     RSemaphore semaphore;
     }
@@ -599,13 +624,13 @@
 
 #ifndef RD_MULTIPLE_DRIVE
 
-    iDb = CDRMRightsDB::NewL( iFs, KRightsDir, key, *iIMEI );
+    iDb = CDRMRightsDB::NewL( iFs, KRightsDir, key, *iIMEI, const_cast<CDRMRightsServer*>(this) );
 
 #else //RD_MULTIPLE_DRIVE
 
     tempPath.Format( KRightsDir, (TUint)driveLetter );
 
-    iDb = CDRMRightsDB::NewL( iFs, tempPath, key, *iIMEI );
+    iDb = CDRMRightsDB::NewL( iFs, tempPath, key, *iIMEI, const_cast<CDRMRightsServer*>(this) );
 
 #endif
 
@@ -1337,6 +1362,85 @@
         }
     }
 
+
+
+// -----------------------------------------------------------------------------
+// CDRMRightsServer::IsAccessingUrl
+// Add ID to count constraint list
+// -----------------------------------------------------------------------------
+//
+TInt CDRMRightsServer::IsAccessingUrl( const TDesC8& aContentId )
+    {
+    for( TInt i = 0; i < iActiveUrls.Count(); i++ )
+        {
+        if( !iActiveUrls[i]->iUrl->Compare( aContentId ) ) 
+            {
+            return i;
+            }    
+        }
+    return KErrNotFound;        
+    }
+
+// -----------------------------------------------------------------------------
+// CDRMRightsServer::RemoveAccessingUrl
+// Add ID to count constraint list
+// -----------------------------------------------------------------------------
+//
+void CDRMRightsServer::RemoveAccessingUrl( const TDesC8& aContentId )
+    {
+    CUsageUrl* usage = NULL;    
+    TInt index = KErrNotFound;
+    
+    index = IsAccessingUrl( aContentId );
+    
+    if( index != KErrNotFound )
+        {
+        // If there are negative or 0 values in the list for some reason
+        // remove them    
+        if( iActiveUrls[index]->iRefCounter <= 1 )
+            {
+            usage = iActiveUrls[index];    
+            iActiveUrls.Remove( index );    
+            delete usage;
+            }
+        else
+            {
+            iActiveUrls[index]->iRefCounter--;
+            }           
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CDRMRightsServer::AddAccessingUrlL
+// Add ID to count constraint list
+// -----------------------------------------------------------------------------
+//
+void CDRMRightsServer::AddAccessingUrlL( const TDesC8& aContentId )
+    {
+    CUsageUrl* usage = NULL;
+    TInt index = KErrNotFound;
+    
+    index = IsAccessingUrl( aContentId );
+    
+    if( index == KErrNotFound )
+        {
+        usage = new ( ELeave ) CUsageUrl();
+        CleanupStack::PushL( usage );
+        usage->iUrl = aContentId.AllocL();
+        usage->iRefCounter = 1;
+        iActiveUrls.AppendL( usage );
+        CleanupStack::Pop( usage );
+        }
+    else
+        {
+        usage = iActiveUrls[index];
+        usage->iRefCounter++;    
+        }           
+    }
+
+
+
+
 // -----------------------------------------------------------------------------
 // CDRMRightsServer::StopWatchingL
 // Delete the watchers
@@ -1425,6 +1529,8 @@
     }
 #endif
 
+
+
 // ========================== OTHER EXPORTED FUNCTIONS =========================