omadrm/drmengine/roap/src/RoapTrigger.cpp
changeset 0 95b198f216e5
equal deleted inserted replaced
-1:000000000000 0:95b198f216e5
       
     1 /*
       
     2 * Copyright (c) 2002-2004 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  ?Description
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 
       
    20 // INCLUDE FILES
       
    21 
       
    22 #include "RoapTrigger.h"
       
    23 
       
    24 using namespace Roap;
       
    25 
       
    26 // ================= CONSTANTS =======================
       
    27 _LIT8( KTriggerHeader, "<roap-trigger:roapTrigger>" );
       
    28 _LIT8(KRegistrationStart, "<registrationRequest>");
       
    29 _LIT8(KRegistrationEnd, "</registrationRequest>");
       
    30 _LIT8(KRoAcquisitionStart, "<roAcquisition>");
       
    31 _LIT8(KRoAcquisitionEnd, "</roAcquisition>");
       
    32 _LIT8(KJoinDomianStart, "<joinDomain>");
       
    33 _LIT8(KJoinDomianEnd, "</joinDomain>");
       
    34 _LIT8(KLeaveDomianStart, "<leaveDomain>");
       
    35 _LIT8(KLeaveDomianEnd, "</leaveDomain>");
       
    36 #ifdef RD_DRM_METERING
       
    37 _LIT8(KExtendedTriggerStart, "<extendedTrigger ");
       
    38 _LIT8(KIdStart, "id=\"");
       
    39 _LIT8(KIdEnd, "\" " );
       
    40 _LIT8(KMeteringType, "type=\"meteringReport\">");
       
    41 _LIT8(KExtendedTriggerEnd, "</extendedTrigger>");
       
    42 #endif
       
    43 _LIT8(KRiIdStart, "<riID><keyIdentifier xsi:type=\"roap:X509SPKIHash\"><hash>");
       
    44 _LIT8(KRiIdEnd, "</hash></keyIdentifier></riID>");
       
    45 _LIT8(KRiAliasStart, "<riAlias>");
       
    46 _LIT8(KRiAliasEnd, "</riAlias>");
       
    47 _LIT8(KRoapUrlStart, "<roapURL>");
       
    48 _LIT8(KRoapUrlEnd, "</roapURL>");
       
    49 _LIT8(KDomainIdStart, "<domainID>");
       
    50 _LIT8(KDomainIdEnd, "</domainID>");
       
    51 _LIT8(KDomainAliasStart, "<domainAlias>");
       
    52 _LIT8(KDomainAliasEnd, "</domainAlias>");
       
    53 _LIT8(KRoIdStart, "<roID>");
       
    54 _LIT8(KRoIdEnd, "</roID>");
       
    55 _LIT8(KContentIdStart, "<contentID>");
       
    56 _LIT8(KContentIdEnd, "</contentID>");  
       
    57 _LIT8( KTriggerEnd,"</roap-trigger:roapTrigger>");
       
    58 
       
    59 
       
    60 // FORWARD DECLARATIONS
       
    61 
       
    62 // ================= MEMBER FUNCTIONS =======================
       
    63 
       
    64 // ---------------------------------------------------------
       
    65 // CRoapTrigger::NewL()
       
    66 // ---------------------------------------------------------
       
    67 //
       
    68 EXPORT_C CRoapTrigger* CRoapTrigger::NewL()
       
    69     {
       
    70     CRoapTrigger* data = new (ELeave) CRoapTrigger();
       
    71     CleanupStack::PushL( data );
       
    72     data->ConstructL();
       
    73     CleanupStack::Pop( data );
       
    74     return data;
       
    75     }
       
    76     
       
    77 // ---------------------------------------------------------
       
    78 // CRoapTrigger::NewL()
       
    79 // ---------------------------------------------------------
       
    80 //
       
    81 EXPORT_C CRoapTrigger* CRoapTrigger::NewL( const TTriggerType& aTriggerType,
       
    82                                            const TDesC8& aRiId,
       
    83                                            const TDesC8& aDomainId,
       
    84                                            const TDesC8& aRoapUrl,
       
    85                                            const RPointerArray<HBufC8>& aRoIdList,
       
    86                                            const RPointerArray<HBufC8>& aContentIdList )
       
    87     {
       
    88     CRoapTrigger* data = new (ELeave) CRoapTrigger();
       
    89     CleanupStack::PushL( data );
       
    90     data->ConstructL( aTriggerType, aRiId, aDomainId, aRoapUrl, aRoIdList, aContentIdList );
       
    91     CleanupStack::Pop( data );
       
    92     return data;
       
    93     }
       
    94 
       
    95 // ---------------------------------------------------------
       
    96 // CRoapTrigger::~CRoapTrigger()
       
    97 // ---------------------------------------------------------
       
    98 //
       
    99 EXPORT_C CRoapTrigger::~CRoapTrigger()
       
   100     {
       
   101     delete iId;
       
   102     delete iDomainId;
       
   103     delete iRoapUrl;
       
   104     delete iSignature;
       
   105     delete iEncKey;
       
   106     delete iNonce;
       
   107     delete iDigestValue;
       
   108     delete iRiAlias;
       
   109     delete iDomainAlias;
       
   110     iRoIdList.ResetAndDestroy();
       
   111     iContentIdList.ResetAndDestroy();
       
   112     }
       
   113 
       
   114 // ---------------------------------------------------------
       
   115 // CRoapTrigger::CRoapTrigger()
       
   116 // ---------------------------------------------------------
       
   117 //
       
   118 CRoapTrigger::CRoapTrigger():
       
   119     iId(NULL),
       
   120     iDomainId(NULL),
       
   121     iRoapUrl(NULL),
       
   122     iSignature(NULL),
       
   123     iEncKey(NULL),
       
   124     iNonce(NULL),
       
   125     iDigestValue(NULL),
       
   126     iRiAlias(NULL)
       
   127     {
       
   128     }
       
   129 
       
   130 // ---------------------------------------------------------
       
   131 // CRoapTrigger::ConstructL()
       
   132 // ---------------------------------------------------------
       
   133 //
       
   134 void CRoapTrigger::ConstructL()
       
   135     {  
       
   136     }
       
   137     
       
   138 // ---------------------------------------------------------
       
   139 // CRoapTrigger::ConstructL()
       
   140 // ---------------------------------------------------------
       
   141 //
       
   142 void CRoapTrigger::ConstructL( const TTriggerType& aTriggerType,
       
   143                                const TDesC8& aRiId,
       
   144                                const TDesC8& aDomainId,
       
   145                                const TDesC8& aRoapUrl,
       
   146                                const RPointerArray<HBufC8>& aRoIdList,
       
   147                                const RPointerArray<HBufC8>& aContentIdList )
       
   148     {
       
   149     HBufC8* temp = NULL;
       
   150     
       
   151     iTriggerType = aTriggerType;
       
   152     iRiId.Copy( aRiId );
       
   153     iDomainId = aDomainId.AllocL();
       
   154     iRoapUrl = aRoapUrl.AllocL();
       
   155     
       
   156     for( TInt i = 0; i < aRoIdList.Count(); i++ )
       
   157         {
       
   158         temp = aRoIdList[i]->AllocLC();
       
   159         iRoIdList.AppendL( temp );
       
   160         CleanupStack::Pop(); //temp
       
   161         }
       
   162         
       
   163     for( TInt i = 0; i < aContentIdList.Count(); i++ )
       
   164         {
       
   165         temp = aContentIdList[i]->AllocLC();
       
   166         iContentIdList.AppendL( temp );
       
   167         CleanupStack::Pop(); //temp
       
   168         }    
       
   169     }
       
   170     
       
   171 // -----------------------------------------------------------------------------
       
   172 // CRoapTrigger::MessageAsXmlL
       
   173 // -----------------------------------------------------------------------------
       
   174 //
       
   175 EXPORT_C HBufC8* CRoapTrigger::MessageAsXmlL(void)
       
   176     {
       
   177     HBufC8* r = NULL;
       
   178     CBufFlat* b = NULL;
       
   179     TInt i;
       
   180 
       
   181     b = CBufFlat::NewL(128);
       
   182     CleanupStack::PushL(b);
       
   183     BufAppendL(b, KTriggerHeader);
       
   184     
       
   185     switch ( iTriggerType )
       
   186         {
       
   187         case ERegistrationTrigger:
       
   188             BufAppendL(b, KRegistrationStart);
       
   189             break;
       
   190         case ERoAcquisitionTrigger:
       
   191             BufAppendL(b, KRoAcquisitionStart);
       
   192             break;
       
   193         case EJoinDomainTrigger:
       
   194             BufAppendL(b, KJoinDomianStart);
       
   195             break;
       
   196         case ELeaveDomainTrigger:
       
   197             BufAppendL(b, KLeaveDomianStart);
       
   198             break;
       
   199 #ifdef RD_DRM_METERING            
       
   200         case EExtendedTrigger:
       
   201             BufAppendL(b, KExtendedTriggerStart);
       
   202             BufAppendL(b, KIdStart);
       
   203             BufAppendL(b, *iId );
       
   204             BufAppendL(b, KIdEnd);
       
   205             BufAppendL(b, KMeteringType );
       
   206             break;
       
   207 #endif        
       
   208         }
       
   209         
       
   210     if (iRiId.Length() > 0)
       
   211         {
       
   212         BufAppendL(b, KRiIdStart);
       
   213         BufAppendBase64L(b, iRiId);
       
   214         BufAppendL(b, KRiIdEnd);
       
   215         }
       
   216         
       
   217     if (iRiAlias)
       
   218         {
       
   219         BufAppendL(b, KRiAliasStart);
       
   220         BufAppendBase64L(b, *iRiAlias);
       
   221         BufAppendL(b, KRiAliasEnd);
       
   222         }
       
   223         
       
   224     if (iDomainId)
       
   225         {
       
   226         BufAppendL(b, KDomainIdStart);
       
   227         BufAppendL(b, *iDomainId);
       
   228         BufAppendL(b, KDomainIdEnd);
       
   229         }
       
   230         
       
   231      if (iDomainAlias)
       
   232         {
       
   233         BufAppendL(b, KDomainAliasStart);
       
   234         BufAppendBase64L(b, *iDomainAlias);
       
   235         BufAppendL(b, KDomainAliasEnd);
       
   236         }
       
   237         
       
   238      if (iRoapUrl)
       
   239         {
       
   240         BufAppendL(b, KRoapUrlStart);
       
   241         BufAppendL(b, *iRoapUrl);
       
   242         BufAppendL(b, KRoapUrlEnd);
       
   243         }
       
   244         
       
   245     for (i = 0; i < iRoIdList.Count(); i++)
       
   246         {
       
   247         BufAppendL(b, KRoIdStart);
       
   248         BufAppendL(b, *iRoIdList[i]);
       
   249         BufAppendL(b, KRoIdEnd);
       
   250         }
       
   251         
       
   252     for (i = 0; i < iContentIdList.Count(); i++)
       
   253         {
       
   254         BufAppendL(b, KContentIdStart);
       
   255         BufAppendL(b, *iContentIdList[i]);
       
   256         BufAppendL(b, KContentIdEnd);
       
   257         }
       
   258          
       
   259     switch ( iTriggerType )
       
   260         {
       
   261         case ERegistrationTrigger:
       
   262             BufAppendL(b, KRegistrationEnd);
       
   263             break;
       
   264         case ERoAcquisitionTrigger:
       
   265             BufAppendL(b, KRoAcquisitionEnd);
       
   266             break;
       
   267         case EJoinDomainTrigger:
       
   268             BufAppendL(b, KJoinDomianEnd);
       
   269             break;
       
   270         case ELeaveDomainTrigger:
       
   271             BufAppendL(b, KLeaveDomianEnd);
       
   272             break;
       
   273 #ifdef RD_DRM_METERING            
       
   274         case EExtendedTrigger:
       
   275             BufAppendL(b, KExtendedTriggerEnd);
       
   276             break;
       
   277 #endif            
       
   278         }
       
   279 
       
   280     BufAppendL(b, KTriggerEnd);
       
   281 
       
   282     r = b->Ptr(0).AllocL();
       
   283     CleanupStack::PopAndDestroy(b);
       
   284     return r;
       
   285     }
       
   286     
       
   287 // ---------------------------------------------------------
       
   288 // CRoapTrigger::ValidTrigger()
       
   289 // ---------------------------------------------------------
       
   290 //    
       
   291 EXPORT_C TBool CRoapTrigger::ValidTrigger()
       
   292     {
       
   293     if ( iTriggerType == EJoinDomainTrigger ||
       
   294          iTriggerType == ELeaveDomainTrigger )
       
   295         {
       
   296         if ( !iDomainId )
       
   297             {
       
   298             return EFalse;
       
   299             }
       
   300         }
       
   301     if ( iRiId.Length() > 0 && iRoapUrl )
       
   302         {
       
   303         return ETrue;
       
   304         }
       
   305     return EFalse;   
       
   306     }
       
   307