omadrm/drmengine/roap/src/RoapTrigger.cpp
changeset 0 95b198f216e5
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadrm/drmengine/roap/src/RoapTrigger.cpp	Thu Dec 17 08:52:27 2009 +0200
@@ -0,0 +1,307 @@
+/*
+* Copyright (c) 2002-2004 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:  ?Description
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "RoapTrigger.h"
+
+using namespace Roap;
+
+// ================= CONSTANTS =======================
+_LIT8( KTriggerHeader, "<roap-trigger:roapTrigger>" );
+_LIT8(KRegistrationStart, "<registrationRequest>");
+_LIT8(KRegistrationEnd, "</registrationRequest>");
+_LIT8(KRoAcquisitionStart, "<roAcquisition>");
+_LIT8(KRoAcquisitionEnd, "</roAcquisition>");
+_LIT8(KJoinDomianStart, "<joinDomain>");
+_LIT8(KJoinDomianEnd, "</joinDomain>");
+_LIT8(KLeaveDomianStart, "<leaveDomain>");
+_LIT8(KLeaveDomianEnd, "</leaveDomain>");
+#ifdef RD_DRM_METERING
+_LIT8(KExtendedTriggerStart, "<extendedTrigger ");
+_LIT8(KIdStart, "id=\"");
+_LIT8(KIdEnd, "\" " );
+_LIT8(KMeteringType, "type=\"meteringReport\">");
+_LIT8(KExtendedTriggerEnd, "</extendedTrigger>");
+#endif
+_LIT8(KRiIdStart, "<riID><keyIdentifier xsi:type=\"roap:X509SPKIHash\"><hash>");
+_LIT8(KRiIdEnd, "</hash></keyIdentifier></riID>");
+_LIT8(KRiAliasStart, "<riAlias>");
+_LIT8(KRiAliasEnd, "</riAlias>");
+_LIT8(KRoapUrlStart, "<roapURL>");
+_LIT8(KRoapUrlEnd, "</roapURL>");
+_LIT8(KDomainIdStart, "<domainID>");
+_LIT8(KDomainIdEnd, "</domainID>");
+_LIT8(KDomainAliasStart, "<domainAlias>");
+_LIT8(KDomainAliasEnd, "</domainAlias>");
+_LIT8(KRoIdStart, "<roID>");
+_LIT8(KRoIdEnd, "</roID>");
+_LIT8(KContentIdStart, "<contentID>");
+_LIT8(KContentIdEnd, "</contentID>");  
+_LIT8( KTriggerEnd,"</roap-trigger:roapTrigger>");
+
+
+// FORWARD DECLARATIONS
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CRoapTrigger::NewL()
+// ---------------------------------------------------------
+//
+EXPORT_C CRoapTrigger* CRoapTrigger::NewL()
+    {
+    CRoapTrigger* data = new (ELeave) CRoapTrigger();
+    CleanupStack::PushL( data );
+    data->ConstructL();
+    CleanupStack::Pop( data );
+    return data;
+    }
+    
+// ---------------------------------------------------------
+// CRoapTrigger::NewL()
+// ---------------------------------------------------------
+//
+EXPORT_C CRoapTrigger* CRoapTrigger::NewL( const TTriggerType& aTriggerType,
+                                           const TDesC8& aRiId,
+                                           const TDesC8& aDomainId,
+                                           const TDesC8& aRoapUrl,
+                                           const RPointerArray<HBufC8>& aRoIdList,
+                                           const RPointerArray<HBufC8>& aContentIdList )
+    {
+    CRoapTrigger* data = new (ELeave) CRoapTrigger();
+    CleanupStack::PushL( data );
+    data->ConstructL( aTriggerType, aRiId, aDomainId, aRoapUrl, aRoIdList, aContentIdList );
+    CleanupStack::Pop( data );
+    return data;
+    }
+
+// ---------------------------------------------------------
+// CRoapTrigger::~CRoapTrigger()
+// ---------------------------------------------------------
+//
+EXPORT_C CRoapTrigger::~CRoapTrigger()
+    {
+    delete iId;
+    delete iDomainId;
+    delete iRoapUrl;
+    delete iSignature;
+    delete iEncKey;
+    delete iNonce;
+    delete iDigestValue;
+    delete iRiAlias;
+    delete iDomainAlias;
+    iRoIdList.ResetAndDestroy();
+    iContentIdList.ResetAndDestroy();
+    }
+
+// ---------------------------------------------------------
+// CRoapTrigger::CRoapTrigger()
+// ---------------------------------------------------------
+//
+CRoapTrigger::CRoapTrigger():
+    iId(NULL),
+    iDomainId(NULL),
+    iRoapUrl(NULL),
+    iSignature(NULL),
+    iEncKey(NULL),
+    iNonce(NULL),
+    iDigestValue(NULL),
+    iRiAlias(NULL)
+    {
+    }
+
+// ---------------------------------------------------------
+// CRoapTrigger::ConstructL()
+// ---------------------------------------------------------
+//
+void CRoapTrigger::ConstructL()
+    {  
+    }
+    
+// ---------------------------------------------------------
+// CRoapTrigger::ConstructL()
+// ---------------------------------------------------------
+//
+void CRoapTrigger::ConstructL( const TTriggerType& aTriggerType,
+                               const TDesC8& aRiId,
+                               const TDesC8& aDomainId,
+                               const TDesC8& aRoapUrl,
+                               const RPointerArray<HBufC8>& aRoIdList,
+                               const RPointerArray<HBufC8>& aContentIdList )
+    {
+    HBufC8* temp = NULL;
+    
+    iTriggerType = aTriggerType;
+    iRiId.Copy( aRiId );
+    iDomainId = aDomainId.AllocL();
+    iRoapUrl = aRoapUrl.AllocL();
+    
+    for( TInt i = 0; i < aRoIdList.Count(); i++ )
+        {
+        temp = aRoIdList[i]->AllocLC();
+        iRoIdList.AppendL( temp );
+        CleanupStack::Pop(); //temp
+        }
+        
+    for( TInt i = 0; i < aContentIdList.Count(); i++ )
+        {
+        temp = aContentIdList[i]->AllocLC();
+        iContentIdList.AppendL( temp );
+        CleanupStack::Pop(); //temp
+        }    
+    }
+    
+// -----------------------------------------------------------------------------
+// CRoapTrigger::MessageAsXmlL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C HBufC8* CRoapTrigger::MessageAsXmlL(void)
+    {
+    HBufC8* r = NULL;
+    CBufFlat* b = NULL;
+    TInt i;
+
+    b = CBufFlat::NewL(128);
+    CleanupStack::PushL(b);
+    BufAppendL(b, KTriggerHeader);
+    
+    switch ( iTriggerType )
+        {
+        case ERegistrationTrigger:
+            BufAppendL(b, KRegistrationStart);
+            break;
+        case ERoAcquisitionTrigger:
+            BufAppendL(b, KRoAcquisitionStart);
+            break;
+        case EJoinDomainTrigger:
+            BufAppendL(b, KJoinDomianStart);
+            break;
+        case ELeaveDomainTrigger:
+            BufAppendL(b, KLeaveDomianStart);
+            break;
+#ifdef RD_DRM_METERING            
+        case EExtendedTrigger:
+            BufAppendL(b, KExtendedTriggerStart);
+            BufAppendL(b, KIdStart);
+            BufAppendL(b, *iId );
+            BufAppendL(b, KIdEnd);
+            BufAppendL(b, KMeteringType );
+            break;
+#endif        
+        }
+        
+    if (iRiId.Length() > 0)
+        {
+        BufAppendL(b, KRiIdStart);
+        BufAppendBase64L(b, iRiId);
+        BufAppendL(b, KRiIdEnd);
+        }
+        
+    if (iRiAlias)
+        {
+        BufAppendL(b, KRiAliasStart);
+        BufAppendBase64L(b, *iRiAlias);
+        BufAppendL(b, KRiAliasEnd);
+        }
+        
+    if (iDomainId)
+        {
+        BufAppendL(b, KDomainIdStart);
+        BufAppendL(b, *iDomainId);
+        BufAppendL(b, KDomainIdEnd);
+        }
+        
+     if (iDomainAlias)
+        {
+        BufAppendL(b, KDomainAliasStart);
+        BufAppendBase64L(b, *iDomainAlias);
+        BufAppendL(b, KDomainAliasEnd);
+        }
+        
+     if (iRoapUrl)
+        {
+        BufAppendL(b, KRoapUrlStart);
+        BufAppendL(b, *iRoapUrl);
+        BufAppendL(b, KRoapUrlEnd);
+        }
+        
+    for (i = 0; i < iRoIdList.Count(); i++)
+        {
+        BufAppendL(b, KRoIdStart);
+        BufAppendL(b, *iRoIdList[i]);
+        BufAppendL(b, KRoIdEnd);
+        }
+        
+    for (i = 0; i < iContentIdList.Count(); i++)
+        {
+        BufAppendL(b, KContentIdStart);
+        BufAppendL(b, *iContentIdList[i]);
+        BufAppendL(b, KContentIdEnd);
+        }
+         
+    switch ( iTriggerType )
+        {
+        case ERegistrationTrigger:
+            BufAppendL(b, KRegistrationEnd);
+            break;
+        case ERoAcquisitionTrigger:
+            BufAppendL(b, KRoAcquisitionEnd);
+            break;
+        case EJoinDomainTrigger:
+            BufAppendL(b, KJoinDomianEnd);
+            break;
+        case ELeaveDomainTrigger:
+            BufAppendL(b, KLeaveDomianEnd);
+            break;
+#ifdef RD_DRM_METERING            
+        case EExtendedTrigger:
+            BufAppendL(b, KExtendedTriggerEnd);
+            break;
+#endif            
+        }
+
+    BufAppendL(b, KTriggerEnd);
+
+    r = b->Ptr(0).AllocL();
+    CleanupStack::PopAndDestroy(b);
+    return r;
+    }
+    
+// ---------------------------------------------------------
+// CRoapTrigger::ValidTrigger()
+// ---------------------------------------------------------
+//    
+EXPORT_C TBool CRoapTrigger::ValidTrigger()
+    {
+    if ( iTriggerType == EJoinDomainTrigger ||
+         iTriggerType == ELeaveDomainTrigger )
+        {
+        if ( !iDomainId )
+            {
+            return EFalse;
+            }
+        }
+    if ( iRiId.Length() > 0 && iRoapUrl )
+        {
+        return ETrue;
+        }
+    return EFalse;   
+    }
+