omadrm/drmengine/roap/src/RoapTriggerParser.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 #include <e32base.h>
       
    22 #include "Base64.h"
       
    23 #include "RoapParser.h"
       
    24 #include "RoapTrigger.h"
       
    25 #include "RoapTriggerParser.h"
       
    26 
       
    27 using namespace Roap;
       
    28 
       
    29 // LOCAL CONSTANTS AND MACROS
       
    30 
       
    31 _LIT8(KId, "id");
       
    32 #ifdef RD_DRM_METERING  
       
    33 _LIT8(KType, "type");
       
    34 _LIT8(KMeteringReport, "meteringReport" );
       
    35 #endif
       
    36 
       
    37 // ============================ MEMBER FUNCTIONS ===============================
       
    38 
       
    39 // -----------------------------------------------------------------------------
       
    40 // TRoapTriggerParser::TRoapTriggerParser
       
    41 // C++ default constructor can NOT contain any code, that
       
    42 // might leave.
       
    43 // -----------------------------------------------------------------------------
       
    44 //
       
    45 TRoapTriggerParser::TRoapTriggerParser(
       
    46     CRoapTrigger* aResponse)
       
    47     {
       
    48     iResponse = aResponse;
       
    49     }
       
    50 
       
    51 // -----------------------------------------------------------------------------
       
    52 // TRoapTriggerRespParser::OnStartElementL
       
    53 // 
       
    54 // -----------------------------------------------------------------------------
       
    55 //
       
    56 void TRoapTriggerParser::OnStartElementL(
       
    57     CRoapParser& aParser,
       
    58     TInt aState,
       
    59     const RTagInfo& /*aElement*/,
       
    60     const RAttributeArray& aAttributes)
       
    61     {
       
    62     if (aState == ERegistrationRequestState ||
       
    63         aState == ERoAcquisitionState ||
       
    64         aState == EJoinDomainState ||
       
    65         aState == ELeaveDomainState
       
    66 #ifdef RD_DRM_METERING            
       
    67         || aState == EExtendedTriggerElementState 
       
    68 #endif  
       
    69         )
       
    70         {
       
    71         iResponse->iId =
       
    72             aParser.GetAttributeValueL(aAttributes, KId);
       
    73 
       
    74         }
       
    75     switch (aState)
       
    76         {
       
    77         case ERegistrationRequestState:
       
    78             iResponse->iTriggerType = ERegistrationTrigger;
       
    79             break;
       
    80         case ERoAcquisitionState:
       
    81             iResponse->iTriggerType = ERoAcquisitionTrigger;
       
    82             break;
       
    83         case EJoinDomainState:
       
    84             iResponse->iTriggerType = EJoinDomainTrigger;
       
    85             break;
       
    86         case ELeaveDomainState:
       
    87             iResponse->iTriggerType = ELeaveDomainTrigger;
       
    88             break;
       
    89 #ifdef RD_DRM_METERING                   
       
    90         case EExtendedTriggerElementState:
       
    91             HBufC8* type = aParser.GetAttributeValueL(aAttributes, KType);
       
    92             CleanupStack::PushL( type );
       
    93             if ( type->Compare( KMeteringReport ) == 0 )
       
    94                 {
       
    95                 iResponse->iTriggerType = EMeteringReportTrigger;                     
       
    96                 }
       
    97             else
       
    98                 { // We have an unsupported extendedTrigger
       
    99                 iResponse->iTriggerType = EExtendedTrigger;
       
   100                 }
       
   101             CleanupStack::PopAndDestroy( type ); // Not needed anymore since
       
   102             break;                               // triggerType is set
       
   103 #endif                 
       
   104         }
       
   105     }
       
   106 
       
   107 // -----------------------------------------------------------------------------
       
   108 // TRoapTriggerRespParser::OnEndElementL
       
   109 // 
       
   110 // -----------------------------------------------------------------------------
       
   111 //
       
   112 void TRoapTriggerParser::OnEndElementL(
       
   113     CRoapParser& aParser,
       
   114     TInt aState,
       
   115     const RTagInfo& /*aElement*/)
       
   116     {
       
   117     HBufC8* buffer = NULL;
       
   118 
       
   119     switch (aState)
       
   120         {
       
   121         case ERoapUrlState:
       
   122             if( aParser.iContent )
       
   123                 iResponse->iRoapUrl = aParser.iContent->AllocL();                    
       
   124             break;
       
   125         case EDomainIdState:
       
   126             if( aParser.iContent && !iResponse->iDomainId )
       
   127                 iResponse->iDomainId = aParser.iContent->AllocL();                    
       
   128             break;
       
   129         case ERiIdState:
       
   130             buffer = Base64DecodeL(*aParser.iContent);
       
   131             if ( buffer->Length() > SHA1_HASH )
       
   132                 {
       
   133                 delete buffer;
       
   134                 buffer = NULL;
       
   135                 User::Leave( KErrCorrupt );
       
   136                 }
       
   137             iResponse->iRiId.Copy(*buffer);
       
   138             delete buffer;
       
   139             break;
       
   140         case ERoIdState:
       
   141             if( aParser.iContent )
       
   142                 {
       
   143                 buffer = aParser.iContent->AllocLC();
       
   144                 iResponse->iRoIdList.AppendL( buffer );
       
   145                 CleanupStack::Pop();
       
   146                 }
       
   147             break;
       
   148         case EContentIdState:
       
   149             if( aParser.iContent )
       
   150                 {
       
   151                 buffer = aParser.iContent->AllocLC();
       
   152                 iResponse->iContentIdList.AppendL( buffer );
       
   153                 CleanupStack::Pop();
       
   154                 }                    
       
   155             break;
       
   156         case ESignatureValueState:
       
   157             iResponse->iSignature = Base64DecodeL(*aParser.iContent);
       
   158             break;
       
   159         case EEncKeyState:
       
   160             iResponse->iEncKey = Base64DecodeL(*aParser.iContent);
       
   161             break;
       
   162         case ENonceState:
       
   163             if( aParser.iContent )
       
   164                 iResponse->iNonce = aParser.iContent->AllocL();                   
       
   165             break;
       
   166         case EDigestValueState:
       
   167             if( aParser.iContent )
       
   168                 iResponse->iDigestValue = Base64DecodeL(*aParser.iContent);                   
       
   169             break;
       
   170         case ERiAliasState:
       
   171             if( aParser.iContent )
       
   172                    iResponse->iRiAlias = aParser.iContent->AllocL();
       
   173             break;
       
   174         case EDomainAliasState:
       
   175             if( aParser.iContent )
       
   176                    iResponse->iDomainAlias = aParser.iContent->AllocL();
       
   177             break;
       
   178         }
       
   179     }
       
   180 
       
   181 //  End of File