commondrm/drmencryptor/src/Performance.cpp
branchRCL_3
changeset 27 1481bf457703
equal deleted inserted replaced
26:1221b68b8a5f 27:1481bf457703
       
     1 /*
       
     2 * Copyright (c) 2002-2009 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 // INCLUDE FILES
       
    20 #include <caf/caf.h>
       
    21 #include <caf/cafplatform.h>
       
    22 #include <f32file.h>
       
    23 #include <s32strm.h>
       
    24 #include <s32file.h>
       
    25 #include <Oma1DcfCreator.h>
       
    26 #include <DRMMessageParser.h>
       
    27 #include <e32math.h>
       
    28 
       
    29 #ifdef RD_MULTIPLE_DRIVE
       
    30 #include <driveinfo.h>
       
    31 #endif
       
    32 
       
    33 #include "Base64.h"
       
    34 #include "Performance.h"
       
    35 #include "DRMEncryptor.hrh"
       
    36 
       
    37 _LIT(KLogDir, "DRM");
       
    38 _LIT(KLogName, "Performance.log");
       
    39 #include "flogger.h"
       
    40 #define LOG(string) \
       
    41     RFileLogger::Write(KLogDir, KLogName, \
       
    42         EFileLoggingModeAppend, string);
       
    43 #define LOG2(string, a) \
       
    44     RFileLogger::WriteFormat(KLogDir, KLogName, \
       
    45         EFileLoggingModeAppend, string, a);
       
    46 #define LOGHEX(buffer) \
       
    47     RFileLogger::HexDump(KLogDir, KLogName, \
       
    48         EFileLoggingModeAppend, _S(""), _S(""), \
       
    49         buffer.Ptr(), buffer.Length());
       
    50 
       
    51 _LIT8(KMidiContent,
       
    52 "TVRoZAAAAAYAAQAGAHhNVHJrAAAAGQD/WAQEAhgIAP9ZAgAAAP9RAwehIAD/LwBN\n\
       
    53 VHJrAAAKsgD/IQEAALkHaQCZLmQAM2QAI2QOIwAAMwAALgAuM2QOMwAuKGQAM2QO\n\
       
    54 MwAAKAAuM2QOMwAuI2QAM2QOMwAAIwAuI2QAM2QOMwAAIwAuKGQAM2QOMwAAKAAu\n\
       
    55 M2QOMwAuI2QAM2QOMwAAIwAuI2QAM2QOMwAAIwAuM2QAKGQOKAAAMwAuI2QAM2QO\n\
       
    56 MwAAIwAuI2QAM2QOMwAAIwAuI2QAM2QOMwAAIwAuM2QAKGQOKAAAMwAuMWQAM2QO\n\
       
    57 MwAAMQAuLmQAM2QAI2QOIwAAMwAALgAuM2QOMwAuKGQAM2QOMwAAKAAuM2QOMwAu\n\
       
    58 I2QAM2QOMwAAIwAuI2QAM2QOMwAAIwAuKGQAM2QOMwAAKAAuM2QOMwAuI2QAM2QO\n\
       
    59 MwAAIwAuI2QAM2QOMwAAIwAuMmQAM2QAKGQOKAAAMwAAMgAuMmQAI2QAM2QOMwAA\n\
       
    60 IwAAMgAuMGQAI2QAM2QOMwAAIwAAMAAuMGQAI2QAM2QOMwAAIwAAMAAuMmQAM2QA\n\
       
    61 KGQOKAAAMwAAMgAQMmQOMgAQMGQAM2QOMwAAMAAQLWQOLQAQMWQALmQAM2QAI2QO\n\
       
    62 IwAAMQAALgAAMwAuM2QOMwAuKGQAM2QOMwAAKAAuM2QOMwAuI2QAM2QOMwAAIwAu\n\
       
    63 I2QAM2QOMwAAIwAuKGQAM2QOMwAAKAAuM2QOMwAuI2QAM2QOMwAAIwAuI2QAM2QO\n\
       
    64 MwAAIwAuM2QAKGQOKAAAMwAuI2QAM2QOMwAAIwAuI2QAM2QOMwAAIwAuI2QAM2QO\n\
       
    65 MwAAIwAuM2QAKGQOKAAAMwAuMWQAM2QOMwAAMQAuLmQAM2QAI2QOIwAAMwAALgAu\n\
       
    66 M2QOMwAuKGQAM2QOMwAAKAAuM2QOMwAuI2QAM2QOMwAAIwAuI2QAM2QOMwAAIwAu\n\
       
    67 KGQAM2QOMwAAKAAuM2QOMwAuI2QAM2QOMwAAIwAuI2QAM2QOMwAAIwAuM2QAKGQO\n\
       
    68 KAAAMwAuI2QAM2QOMwAAIwAuI2QAM2QOMwAAIwAuI2QAM2QOMwAAIwAuM2QAKGQO\n\
       
    69 KAAAMwAuMWQAM2QOMwAAMQAuI2QAM2QOMwAAIwAuI2QAM2QOMwAAIwAuMmQAM2QA\n\
       
    70 KGQOKAAAMwAAMgAuMmQAI2QAM2QOMwAAIwAAMgAuMGQAI2QAM2QOMwAAIwAAMAAu\n\
       
    71 MGQAI2QAM2QOMwAAIwAAMAAuMmQAM2QAKGQOKAAAMwAAMgAQMmQOMgAQMGQAM2QO\n\
       
    72 MwAAMAAQLWQOLQAQMWQALmQAM2QAI2QOIwAAMQAALgAAMwAuM2QOMwAuKGQAM2QO\n\
       
    73 MwAAKAAuM2QOMwAuI2QAM2QOMwAAIwAuI2QAM2QOMwAAIwAuKGQAM2QOMwAAKAAu\n\
       
    74 M2QOMwAuI2QAM2QOMwAAIwAuI2QAM2QOMwAAIwAuM2QAKGQOKAAAMwAuI2QAM2QO\n\
       
    75 MwAAIwAuI2QAM2QOMwAAIwAuI2QAM2QOMwAAIwAuM2QAKGQOKAAAMwAuMWQAM2QO\n\
       
    76 MwAAMQAuLmQAM2QAI2QOIwAAMwAALgAuM2QOMwAuKGQAM2QOMwAAKAAuM2QOMwAu\n\
       
    77 I2QAM2QOMwAAIwAuI2QAM2QOMwAAIwAuKGQAM2QOMwAAKAAuM2QOMwAuMWQALmQA\n\
       
    78 M2QAI2QOIwAAMQAALgAAMwAuM2QOMwAuKGQAM2QOMwAAKAAuM2QOMwAuI2QAM2QO\n\
       
    79 MwAAIwAuI2QAM2QOMwAAIwAuKGQAM2QOMwAAKAAuM2QOMwAuI2QAM2QOMwAAIwAu\n\
       
    80 I2QAM2QOMwAAIwAuM2QAKGQOKAAAMwAuI2QAM2QOMwAAIwAuI2QAM2QOMwAAIwAu\n\
       
    81 I2QAM2QOMwAAIwAuM2QAKGQOKAAAMwAuMWQAM2QOMwAAMQAuLmQAM2QAI2QOIwAA\n\
       
    82 MwAALgAuM2QOMwAuKGQAM2QOMwAAKAAuM2QOMwAuI2QAM2QOMwAAIwAuI2QAM2QO\n\
       
    83 MwAAIwAuKGQAM2QOMwAAKAAuM2QOMwAuI2QAM2QOMwAAIwAuI2QAM2QOMwAAIwAu\n\
       
    84 M2QAKGQOKAAAMwAuI2QAM2QOMwAAIwAuI2QAM2QOMwAAIwAuI2QAM2QOMwAAIwAu\n\
       
    85 M2QAKGQOKAAAMwAuMWQAM2QOMwAAMQAuMWQALmQAM2QAI2QOIwAAMQAALgAAMwAu\n\
       
    86 M2QOMwAuKGQAM2QOMwAAKAAuM2QOMwAuI2QAM2QOMwAAIwAuI2QAM2QOMwAAIwAu\n\
       
    87 KGQAM2QOMwAAKAAuM2QOMwAuI2QAM2QOMwAAIwAuI2QAM2QOMwAAIwAuM2QAKGQO\n\
       
    88 KAAAMwAuI2QAM2QOMwAAIwAuI2QAM2QOMwAAIwAuI2QAM2QOMwAAIwAuM2QAKGQO\n\
       
    89 KAAAMwAuMWQAM2QOMwAAMQAuLmQAM2QAI2QOIwAAMwAALgAuM2QOMwAuKGQAM2QO\n\
       
    90 MwAAKAAuM2QOMwAuI2QAM2QOMwAAIwAuI2QAM2QOMwAAIwAuKGQAM2QOMwAAKAAu\n\
       
    91 M2QOMwAuI2QAM2QOMwAAIwAuI2QAM2QOMwAAIwAuMmQAM2QAKGQOKAAAMwAAMgAu\n\
       
    92 MmQAI2QAM2QOMwAAIwAAMgAuMGQAI2QAM2QOMwAAIwAAMAAuMGQAI2QAM2QOMwAA\n\
       
    93 IwAAMAAuMmQAM2QAKGQOKAAAMwAAMgAQMmQOMgAQMGQAM2QOMwAAMAAQLWQOLQAQ\n\
       
    94 MWQALmQAM2QAI2QOIwAAMQAALgAAMwAuM2QOMwAuKGQAM2QOMwAAKAAuM2QOMwAu\n\
       
    95 I2QAM2QOMwAAIwAuI2QAM2QOMwAAIwAuKGQAM2QOMwAAKAAuM2QOMwAuI2QAM2QO\n\
       
    96 MwAAIwAuI2QAM2QOMwAAIwAuM2QAKGQOKAAAMwAuI2QAM2QOMwAAIwAuI2QAM2QO\n\
       
    97 MwAAIwAuI2QAM2QOMwAAIwAuM2QAKGQOKAAAMwAuMWQAM2QOMwAAMQAuLmQAM2QA\n\
       
    98 I2QOIwAAMwAALgAuM2QOMwAuKGQAM2QOMwAAKAAuM2QOMwAuI2QAM2QOMwAAIwAu\n\
       
    99 I2QAM2QOMwAAIwAuKGQAM2QOMwAAKAAuM2QOMwAuI2QAM2QOMwAAIwAuI2QAM2QO\n\
       
   100 MwAAIwAuM2QAKGQOKAAAMwAuI2QAM2QOMwAAIwAuI2QAM2QOMwAAIwAuI2QAM2QO\n\
       
   101 MwAAIwAuM2QAKGQOKAAAMwAuMWQAM2QOMwAAMQAuI2QAM2QOMwAAIwAuI2QAM2QO\n\
       
   102 MwAAIwAuMmQAM2QAKGQOKAAAMwAAMgAuMmQAI2QAM2QOMwAAIwAAMgAuMGQAI2QA\n\
       
   103 M2QOMwAAIwAAMAAuMGQAI2QAM2QOMwAAIwAAMAAuMmQAM2QAKGQOKAAAMwAAMgAQ\n\
       
   104 MmQOMgAQMGQAM2QOMwAAMAAQLWQOLQAQMWQALmQAM2QAI2QOIwAAMQAALgAAMwAu\n\
       
   105 M2QOMwAuKGQAM2QOMwAAKAAuM2QOMwAuI2QAM2QOMwAAIwAuI2QAM2QOMwAAIwAu\n\
       
   106 KGQAM2QOMwAAKAAuM2QOMwAuI2QAM2QOMwAAIwAuI2QAM2QOMwAAIwAuM2QAKGQO\n\
       
   107 KAAAMwAuI2QAM2QOMwAAIwAuI2QAM2QOMwAAIwAuI2QAM2QOMwAAIwAuM2QAKGQO\n\
       
   108 KAAAMwAuMWQAM2QOMwAAMQAuLmQAM2QAI2QOIwAAMwAALgAuM2QOMwAuKGQAM2QO\n\
       
   109 MwAAKAAuM2QOMwAuI2QAM2QOMwAAIwAuI2QAM2QOMwAAIwAuKGQAM2QOMwAAKAAu\n\
       
   110 M2QOMwAA/y8ATVRyawAABTMA/yEBAADAIwCwB2kAkCRkHSQAHyRkDiQALiRkHSQA\n\
       
   111 HyRkDiQALiRkHSQAHyRkDiQALiRkHSQAHyRkDiQALiRkHSQAHyRkDiQALiRkHSQA\n\
       
   112 HyRkDiQALiRkHSQAHyRkDiQALiRkHSQAHyRkDiQALiRkHSQAHyRkDiQALiRkHSQA\n\
       
   113 HyRkDiQALiRkHSQAHyRkDiQALiRkHSQAHyRkDiQALiRkHSQAHyRkDiQALiRkHSQA\n\
       
   114 HyRkDiQALiRkHSQAHyRkDiQALiRkHSQAWyRkHSQAHyRkDiQALiRkHSQAHyRkDiQA\n\
       
   115 LiRkHSQAHyRkDiQALiRkHSQAHyRkDiQALiRkHSQAHyRkDiQALiRkHSQAHyRkDiQA\n\
       
   116 LiRkHSQAHyRkDiQALiRkHSQAHyRkDiQALiRkHSQAHyRkDiQALiRkHSQAHyRkDiQA\n\
       
   117 LiRkHSQAHyRkDiQALiRkHSQAHyRkDiQALiRkHSQAHyRkDiQALiRkHSQAHyRkDiQA\n\
       
   118 LiRkHSQAHyRkDiQALiRkHSQAWyRkHSQAHyRkDiQALiRkHSQAHyRkDiQALiRkHSQA\n\
       
   119 HyRkDiQALiRkHSQAWyRkHSQAHyRkDiQALiRkHSQAHyRkDiQALiRkHSQAHyRkDiQA\n\
       
   120 LiRkHSQAHyRkDiQALitkHSsAHytkDisALitkHSsAHytkDisALitkHSsAHytkDisA\n\
       
   121 LitkHSsAHytkDisALiRkHSQAHyRkDiQALiRkHSQAHyRkDiQALiRkHSQAHyRkDiQA\n\
       
   122 LiRkHSQAHyRkDiQALilkHSkAHylkDikALilkHSkAHylkDikALilkHSkAHylkDikA\n\
       
   123 LilkHSkAHylkDikALitkHSsAHytkDisALitkHSsAHytkDisALitkHSsAHytkDisA\n\
       
   124 LitkHSsAHyRkDiQALilkHSkAHylkDikALilkHSkAHylkDikALilkHSkAHylkDikA\n\
       
   125 LilkHSkAHy1kDi0ALitkHSsAHytkDisALitkHSsAHytkDisALitkHSsAHytkDisA\n\
       
   126 LitkHSsAHytkDisALilkHSkAHylkDikALilkHSkAHylkDikALilkHSkAHylkDikA\n\
       
   127 LilkHSkAHylkDikALitkHSsAHytkDisALitkHSsAHytkDisALitkHSsAHytkDisA\n\
       
   128 LitkHSsAHytkDisALiRkHSQAHyRkDiQALiRkHSQAHyRkDiQALiRkHSQAHyRkDiQA\n\
       
   129 LiRkHSQAHyRkDiQALiRkHSQAHyRkDiQALiRkHSQAHyRkDiQALiRkHSQAHyRkDiQA\n\
       
   130 LiRkHSQAHyRkDiQALiRkHSQAHyRkDiQALiRkHSQAHyRkDiQALiRkHSQAHyRkDiQA\n\
       
   131 LiRkHSQAHyRkDiQALiRkHSQAHyRkDiQALiRkHSQAHyRkDiQALiRkHSQAHyRkDiQA\n\
       
   132 LiRkHSQAHyRkDiQALiRkHSQAHyRkDiQALiRkHSQAHyRkDiQALiRkHSQAHyRkDiQA\n\
       
   133 LiRkHSQAHyRkDiQALiRkHSQAHyRkDiQALiRkHSQAHyRkDiQALiRkHSQAHyRkDiQA\n\
       
   134 LiRkHSQAWyRkHSQAHyRkDiQALiRkHSQAHyRkDiQALiRkHSQAHyRkDiQALiRkHSQA\n\
       
   135 WyRkHSQAHyRkDiQALiRkHSQAHyRkDiQALiRkHSQAHyRkDiQALiRkHSQAHyRkDiQA\n\
       
   136 LitkHSsAHytkDisALitkHSsAHytkDisALitkHSsAHytkDisALitkHSsAHytkDisA\n\
       
   137 LiRkHSQAHyRkDiQALiRkHSQAHyRkDiQALiRkHSQAHyRkDiQALiRkHSQAHyRkDiQA\n\
       
   138 AP8vAE1UcmsAAAEeAP8hAQAAwQGOCJFTZABUZA5UAABTAAFPZABRZA5RAABPAAFM\n\
       
   139 ZABNZA5NAABMAAFIZABKZA5KAABIAAFFZABHZA5HAABFAAFBZABDZA5DAABBAAE+\n\
       
   140 ZABAZA5AAAA+AAE8ZA48AJ0JU2QAVGQOVAAAUwABT2QAUWQOUQAATwABTGQATWQO\n\
       
   141 TQAATAABSGQASmQOSgAASAABRWQAR2QORwAARQABQWQAQ2QOQwAAQQABPmQAQGQO\n\
       
   142 QAAAPgABPGQOPAC7CVNkAFRkDlQAAFMAAU9kAFFkDlEAAE8AAUxkAE1kDk0AAEwA\n\
       
   143 AUhkAEpkDkoAAEgAAUVkAEdkDkcAAEUAAUFkAENkDkMAAEEAAT5kAEBkDkAAAD4A\n\
       
   144 ATxkDjwAAP8vAE1UcmsAAAQ9AP8hAQAAwh4AsgdkjwCSTGQANGQAMGR3MAAANAAA\n\
       
   145 TAABNGQAMGQdMAAANAAfLmQPRmQsRgAALgABSmQANGQAL2Q7LwAANAAASgABSmQA\n\
       
   146 NGQAL2Q7LwAANAAASgA9SGQATGQAMGQANGR3NAAASAAATAAAMACCLS5kOy4AAS9k\n\
       
   147 Oy8AAUxkADBkADRkdzQAADAAAEwAATRkADBkHTAAADQAH0hkAC5kOy4AAEgAAVFk\n\
       
   148 ADlkADVkOzUAADkAAFEAAVBkADlkADVkOzUAADkAAFAAAUxkHUwAAU1kHU0AAVRk\n\
       
   149 AExkADdkADRkdzQAADcAAEwAgyRUAAFMZAA0ZAAwZHcwAAA0AABMAAE0ZAAwZB0w\n\
       
   150 AAA0AB8uZA9GZCxGAAAuAAFKZAA0ZAAvZDsvAAA0AABKAAFKZAA0ZAAvZDsvAAA0\n\
       
   151 AABKAD1IZABMZAAwZAA0ZHc0AABIAABMAAAwAIMlR2QAQ2QAO2QAN2R3NwAARwAA\n\
       
   152 QwAAOwABQ2QAR2QAO2QAN2QdNwAAQwAARwAAOwAfSmQAPmQ7PgAASgABSGQAPGR3\n\
       
   153 PAAASAABT2QAN2QAO2Q7OwAANwAATwA9VGSDX1QAATlkADVkdzUAADkAPUhkO0gA\n\
       
   154 AUdkd0cAPUVkO0UAAUdkd0cAgXEwZHcwAAE5ZAA1ZHc1AAA5AD1IZDtIAAFKZHdK\n\
       
   155 AD1IZDtIAAFHZDtHAIMpOWQANWR3NQAAOQA9SGQ7SAABSmR3SgA9SGQ4NGQAN2QA\n\
       
   156 T2QATGQDSAA4TwAANAAANwAATAA9NGQAN2QAT2QATGQ7TAAANAAANwAATwA9MmQA\n\
       
   157 SmQ7SgAAMgABMGQASGQ7SAAAMAABL2QAR2Q7RwAALwABMGQASGQ7MACHQEgAAUxk\n\
       
   158 ADRkADBkdzAAADQAAEwAATRkADBkHTAAADQAHy5kD0ZkLEYAAC4AAUpkADRkAC9k\n\
       
   159 Oy8AADQAAEoAAUpkADRkAC9kOy8AADQAAEoAPUhkAExkADBkADRkdzQAAEgAAEwA\n\
       
   160 ADAAgi0uZDsuAAEvZDsvAAFMZAAwZAA0ZHc0AAAwAABMAAE0ZAAwZB0wAAA0AB9I\n\
       
   161 ZAAuZDsuAABIAAFRZAA5ZAA1ZDs1AAA5AABRAAFQZAA5ZAA1ZDs1AAA5AABQAAFM\n\
       
   162 ZB1MAAFNZB1NAAFUZABMZAA3ZAA0ZHc0AAA3AABMAIMkVAABTGQANGQAMGR3MAAA\n\
       
   163 NAAATAABNGQAMGQdMAAANAAfLmQPRmQsRgAALgABSmQANGQAL2Q7LwAANAAASgAB\n\
       
   164 SmQANGQAL2Q7LwAANAAASgA9SGQATGQAMGQANGR3NAAASAAATAAAMACDJUdkAENk\n\
       
   165 ADtkADdkdzcAAEcAAEMAADsAAUNkAEdkADtkADdkHTcAAEMAAEcAADsAH0pkAD5k\n\
       
   166 Oz4AAEoAAUhkADxkdzwAAEgAAU9kADdkADtkOzsAADcAAE8APVRkg19UAAD/LwBN\n\
       
   167 VHJrAAAAWAD/IQEAAMNQALMHeK0AkzVkg181AAE3ZINfNwABNWSDXzUAATdkg183\n\
       
   168 AAE1ZINfNQABN2SDXzcAATBkhz8wAAEwZJY/MAABN2SDXzcAATBkg18wAAD/LwA=\n");
       
   169 
       
   170 _LIT8(KContentHeader, "--boundary\r\nContent-type: audio/midi\r\nContent-Transfer-Encoding: base64\r\n\r\n");
       
   171 _LIT8(KCdStartEndHeader,
       
   172 "--boundary\r\n\
       
   173 Content-Type: application/vnd.oma.drm.rights+xml\r\n\
       
   174 Content-Transfer-Encoding: binary\r\n\
       
   175 \r\n\
       
   176 <o-ex:rights\
       
   177    xmlns:o-ex=\"http://odrl.net/1.1/ODRL-EX\"\
       
   178    xmlns:o-dd=\"http://odrl.net/1.1/ODRL-DD\"\
       
   179    xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#/\"\
       
   180 >\
       
   181 <o-ex:context><o-dd:version>1.0</o-dd:version></o-ex:context>\
       
   182 <o-ex:agreement><o-ex:asset><o-ex:context>\
       
   183 <o-dd:uid>cid:content0000@localhost</o-dd:uid>\
       
   184 </o-ex:context></o-ex:asset>\
       
   185 <o-ex:permission><o-dd:play><o-ex:constraint>\
       
   186 <o-dd:datetime>\
       
   187 <o-dd:end>2020-01-01T00:00:00</o-dd:end><o-dd:start>1980-01-01T00:00:00</o-dd:start>\
       
   188 </o-dd:datetime>\
       
   189 </o-ex:constraint></o-dd:play></o-ex:permission>\
       
   190 </o-ex:agreement></o-ex:rights>\r\n\
       
   191 \r\n");
       
   192 _LIT8(KCdCountHeader,
       
   193 "--boundary\r\n\
       
   194 Content-Type: application/vnd.oma.drm.rights+xml\r\n\
       
   195 Content-Transfer-Encoding: binary\r\n\
       
   196 \r\n\
       
   197 <o-ex:rights\
       
   198    xmlns:o-ex=\"http://odrl.net/1.1/ODRL-EX\"\
       
   199    xmlns:o-dd=\"http://odrl.net/1.1/ODRL-DD\"\
       
   200    xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#/\"\
       
   201 >\
       
   202 <o-ex:context><o-dd:version>1.0</o-dd:version></o-ex:context>\
       
   203 <o-ex:agreement><o-ex:asset><o-ex:context>\
       
   204 <o-dd:uid>cid:content0001@localhost</o-dd:uid>\
       
   205 </o-ex:context></o-ex:asset>\
       
   206 <o-ex:permission><o-dd:play><o-ex:constraint>\
       
   207 <o-dd:count>1000000</o-dd:count>\
       
   208 </o-ex:constraint></o-dd:play></o-ex:permission>\
       
   209 </o-ex:agreement></o-ex:rights>\r\n\
       
   210 \r\n");
       
   211 _LIT8(KFooter, "\r\n--boundary--\r\n");
       
   212 
       
   213 const TInt KFileNumber = 50;
       
   214 const TInt KOpenCount = 10;
       
   215 
       
   216 #ifdef __WINS__
       
   217 _LIT(KFilesDir, "c:\\data\\others\\DrmTest\\");
       
   218 #else
       
   219 #ifdef RD_MULTIPLE_DRIVE
       
   220 _LIT(KFilesDir, "%c:\\others\\DrmTest\\");
       
   221 #else
       
   222 _LIT(KFilesDir, "e:\\others\\DrmTest\\");
       
   223 #endif
       
   224 #endif
       
   225 _LIT(KFlFileNameBase, "-fl");
       
   226 _LIT(KPlainFileNameBase, "-plain.mid");
       
   227 _LIT(KCdStartEndFileNameBase, "-cd-se");
       
   228 _LIT(KCdCountFileNameBase, "-cd-count");
       
   229 _LIT(KFileSuffix, ".dcf");
       
   230 _LIT(KBigFilePlain, "bigfile.txt");
       
   231 _LIT(KBigFileEncrypted, "bigfile.dcf");
       
   232 
       
   233 enum ETestFileType
       
   234     {
       
   235     EFl,
       
   236     ECdStartEnd,
       
   237     ECdCount,
       
   238     EPlain
       
   239     };
       
   240 
       
   241 void SetupDirectoryL(const TDesC& aDir)
       
   242     {
       
   243     RFs fs;
       
   244     TFileName fileName;
       
   245     CFileMan* fm = NULL;
       
   246 
       
   247     LOG(_L("SetupDirectoryL"));
       
   248     User::LeaveIfError(fs.Connect());
       
   249     CleanupClosePushL(fs);
       
   250     fm = CFileMan::NewL(fs);
       
   251     CleanupStack::PushL(fm);
       
   252     fm->RmDir(aDir);
       
   253     fs.MkDirAll(aDir);
       
   254     CleanupStack::PopAndDestroy(2); // fm, fs
       
   255     }
       
   256 
       
   257 void CreateFileL(RFs& aFs, CDRMMessageParser* aParser, ETestFileType aType, TInt aNumber)
       
   258     {
       
   259     TFileName fileName;
       
   260     RFileWriteStream out;
       
   261     HBufC8* buffer = NULL;
       
   262 
       
   263     fileName.AppendNum(aNumber);
       
   264     switch (aType)
       
   265         {
       
   266         case EPlain:
       
   267             fileName.Append(KPlainFileNameBase);
       
   268             break;
       
   269         case EFl:
       
   270             fileName.Append(KFlFileNameBase);
       
   271             fileName.Append(KFileSuffix);
       
   272             break;
       
   273         case ECdStartEnd:
       
   274             fileName.Append(KCdStartEndFileNameBase);
       
   275             fileName.Append(KFileSuffix);
       
   276             break;
       
   277         case ECdCount:
       
   278             fileName.Append(KCdCountFileNameBase);
       
   279             fileName.Append(KFileSuffix);
       
   280             break;
       
   281         }
       
   282     out.Create(aFs, fileName, EFileWrite);
       
   283     CleanupClosePushL(out);
       
   284     if (aType != EPlain)
       
   285         {
       
   286         aParser->InitializeMessageParserL(out);
       
   287         switch (aType)
       
   288             {
       
   289             case ECdStartEnd:
       
   290                 aParser->ProcessMessageDataL(KCdStartEndHeader);
       
   291                 break;
       
   292             case ECdCount:
       
   293                 aParser->ProcessMessageDataL(KCdCountHeader);
       
   294                 break;
       
   295             }
       
   296         aParser->ProcessMessageDataL(KContentHeader);
       
   297         aParser->ProcessMessageDataL(KMidiContent);
       
   298         aParser->ProcessMessageDataL(KFooter);
       
   299         aParser->FinalizeMessageParserL();
       
   300         }
       
   301     else
       
   302         {
       
   303         buffer = Base64DecodeL(KMidiContent);
       
   304         CleanupStack::PushL(buffer);
       
   305         out.WriteL(*buffer);
       
   306         CleanupStack::PopAndDestroy(); // buffer
       
   307         }
       
   308     CleanupStack::PopAndDestroy(); // out
       
   309     }
       
   310 
       
   311 void GenerateFilesL(const TDesC& aDir, TInt aCount)
       
   312     {
       
   313     CDRMMessageParser* parser = NULL;
       
   314     TInt i;
       
   315     RFs fs;
       
   316 
       
   317     LOG(_L("GenerateFilesL"));
       
   318     User::LeaveIfError(fs.Connect());
       
   319     CleanupClosePushL(fs);
       
   320     fs.SetSessionPath(aDir);
       
   321     parser = CDRMMessageParser::NewL();
       
   322     CleanupStack::PushL(parser);
       
   323     for (i = 0; i < aCount; i++)
       
   324         {
       
   325         CreateFileL(fs, parser, EPlain, i);
       
   326         CreateFileL(fs, parser, EFl, i);
       
   327         CreateFileL(fs, parser, ECdStartEnd, i);
       
   328         CreateFileL(fs, parser, ECdCount, i);
       
   329         }
       
   330     CleanupStack::PopAndDestroy(2); // parser, fs
       
   331     }
       
   332 
       
   333 
       
   334 void GenerateBigFilesL(const TDesC& aDir)
       
   335     {
       
   336     RFs fs;
       
   337     RFileWriteStream out;
       
   338     COma1DcfCreator* creator = NULL;
       
   339     HBufC8* buffer = NULL;
       
   340     TPtr8 ptr(NULL, 0);
       
   341     TInt i;
       
   342 
       
   343     LOG(_L("GenerateBigFilesL"));
       
   344     User::LeaveIfError(fs.Connect());
       
   345     CleanupClosePushL(fs);
       
   346     fs.SetSessionPath(aDir);
       
   347     creator = COma1DcfCreator::NewL();
       
   348     CleanupStack::PushL(creator);
       
   349 
       
   350     buffer = HBufC8::NewMax(50 * 1024);
       
   351     CleanupStack::PushL(buffer);
       
   352     ptr.Set(buffer->Des());
       
   353     ptr.Fill('0');
       
   354 
       
   355     LOG(_L("Creating plain file"));
       
   356     fs.Delete(KBigFilePlain);
       
   357     out.Create(fs, KBigFilePlain, EFileWrite);
       
   358     CleanupClosePushL(out);
       
   359     for (i = 0; i < 40; i++)
       
   360         {
       
   361         out.WriteL(ptr);
       
   362         }
       
   363     CleanupStack::PopAndDestroy(); // out
       
   364 
       
   365     LOG(_L("Creating encrypted file"));
       
   366     fs.Delete(KBigFileEncrypted);
       
   367     out.Create(fs, KBigFileEncrypted, EFileWrite);
       
   368     CleanupClosePushL(out);
       
   369     creator->EncryptInitializeL(out, _L8("text/plain"), NULL);
       
   370     for (i = 0; i < 40; i++)
       
   371         {
       
   372         creator->EncryptUpdateL(ptr);
       
   373         }
       
   374     creator->EncryptFinalizeL();
       
   375     CleanupStack::PopAndDestroy(4); // out, creator, buffer, fs
       
   376     }
       
   377 
       
   378 
       
   379 void TestDecryptionSpeedL(const TDesC& aDir, TBool aRandom, TInt aType)
       
   380     {
       
   381     TInt i;
       
   382     TInt j;
       
   383     HBufC8* buffer = NULL;
       
   384     RFs fs;
       
   385     TPtr8 ptr(NULL, 0);
       
   386     CData* data = NULL;
       
   387     RFile file;
       
   388     TInt blockSize[5] = {64, 512, 1024, 2048, 4096};
       
   389     TFileName fileName;
       
   390     TInt pos = 0;
       
   391 
       
   392     LOG(_L("TestDecryptionSpeedL"));
       
   393     if (aRandom)
       
   394         {
       
   395         LOG(_L("Random Reading"));
       
   396         }
       
   397     else
       
   398         {
       
   399         LOG(_L("Sequential Reading"));
       
   400         }
       
   401     User::LeaveIfError(fs.Connect());
       
   402     CleanupClosePushL(fs);
       
   403     fs.SetSessionPath(aDir);
       
   404 
       
   405     buffer = HBufC8::NewL(4096);
       
   406     CleanupStack::PushL(buffer);
       
   407     ptr.Set(buffer->Des());
       
   408     for (j = 0; j < 5; j++)
       
   409         {
       
   410         LOG2(_L("Block size: %d"), blockSize[j]);
       
   411 
       
   412         switch (aType)
       
   413             {
       
   414             case 1: //Plain file with RFile
       
   415                 {
       
   416                 LOG(_L("Reading plain file (RFile)"));
       
   417                 User::LeaveIfError(file.Open(fs, KBigFilePlain, EFileRead));
       
   418                 CleanupClosePushL(file);
       
   419                 for (i = 0; i < 40 * 50 * 1024 / blockSize[j]; i++)
       
   420                     {
       
   421                     if (aRandom)
       
   422                         {
       
   423                         pos = Abs(Math::Random() % (40 * 50 * 1024 - 2 * blockSize[j]));
       
   424                         file.Seek(ESeekStart, pos);
       
   425                         }
       
   426                     file.Read(ptr, blockSize[j]);
       
   427                     }
       
   428                 CleanupStack::PopAndDestroy(); // file
       
   429                 LOG2(_L("Reading plain file (RFile) done (%d blocks)"), i);
       
   430                 }
       
   431                 break;
       
   432             case 2: //Plain file with CAF
       
   433                 {
       
   434                 LOG(_L("Reading plain file (CAF)"));
       
   435                 fileName.Copy(aDir);
       
   436                 fileName.Append(KBigFilePlain);
       
   437                 data = CData::NewL(TVirtualPathPtr(fileName, KDefaultContentObject),
       
   438                 EPeek, EContentShareReadOnly);
       
   439                 CleanupStack::PushL(data);
       
   440                 for (i = 0; i < 40 * 50 * 1024 / blockSize[j]; i++)
       
   441                     {
       
   442                     if (aRandom)
       
   443                         {
       
   444                         pos = Abs(Math::Random() % (40 * 50 * 1024 - 2 * blockSize[j]));
       
   445                         data->Seek(ESeekStart, pos);
       
   446                         }
       
   447                     data->Read(ptr, blockSize[j]);
       
   448                     }
       
   449                 CleanupStack::PopAndDestroy(); // data
       
   450                 LOG2(_L("Reading plain file (CAF) done (%d blocks)"), i);
       
   451                 }
       
   452                 break;
       
   453             case 3: //DRM Protected on server side
       
   454                 {
       
   455                 LOG(_L("Reading encrypted file (server decryption)"));
       
   456                 fileName.Copy(aDir);
       
   457                 fileName.Append(KBigFileEncrypted);
       
   458                 __UHEAP_MARK;
       
   459                 data = CData::NewL(TVirtualPathPtr(fileName, KDefaultContentObject),
       
   460                 EPeek, EContentShareReadOnly);
       
   461                 CleanupStack::PushL(data);
       
   462                 data->ExecuteIntent(EView); //!!!!!!!!!!!!!
       
   463                 for (i = 0; i < 40 * 50 * 1024 / blockSize[j]; i++)
       
   464                     {
       
   465                     if (aRandom)
       
   466                         {
       
   467                         pos = Abs(Math::Random() % (40 * 50 * 1024 - 2 * blockSize[j]));
       
   468                         data->Seek(ESeekStart, pos);
       
   469                         }
       
   470                     data->Read(ptr, blockSize[j]);
       
   471                     }
       
   472 
       
   473                 CleanupStack::PopAndDestroy(); // data
       
   474                 __UHEAP_MARKEND;
       
   475                 LOG2(_L("Reading encrypted file done (%d blocks)"), i);
       
   476 
       
   477                 // DRM protected on client side
       
   478                 LOG(_L("Reading encrypted file (client decryption)"));
       
   479                 fileName.Copy(aDir);
       
   480                 fileName.Append(KBigFileEncrypted);
       
   481                 __UHEAP_MARK;
       
   482                 data = CData::NewL(TVirtualPathPtr(fileName, KDefaultContentObject),
       
   483                     EPeek, EContentShareReadOnly);
       
   484                 CleanupStack::PushL(data);
       
   485                 data->ExecuteIntent(EView);
       
   486                 for (i = 0; i < 40 * 50 * 1024 / blockSize[j]; i++)
       
   487                     {
       
   488                     if (aRandom)
       
   489                         {
       
   490                         pos = Math::Random() % (40 * 50 * 1024 - blockSize[j]);
       
   491                         data->Seek(ESeekStart, pos);
       
   492                         }
       
   493                     data->Read(ptr, blockSize[j]);
       
   494                     }
       
   495                 CleanupStack::PopAndDestroy(); // data
       
   496                 __UHEAP_MARKEND;
       
   497                 LOG2(_L("Reading encrypted file done (%d blocks)"), i);
       
   498                 }
       
   499                 break;
       
   500             }
       
   501         }
       
   502     CleanupStack::PopAndDestroy(); // buffer
       
   503 
       
   504     CleanupStack::PopAndDestroy(); // fs
       
   505     }
       
   506 
       
   507 void TestFileOpeningSpeedL(const TDesC& aDir, TInt aType)
       
   508     {
       
   509     TFileName fileName;
       
   510     TInt j;
       
   511     TInt i;
       
   512     CData* data = NULL;
       
   513     RFs fs;
       
   514     RFile file;
       
   515 
       
   516     LOG2(_L("TestFileOpeningSpeedL (%d files)"), KFileNumber * KOpenCount);
       
   517 
       
   518     switch( aType)
       
   519         {
       
   520         case 1: // With RFile
       
   521             {
       
   522             LOG(_L("Opening plain files (with RFs::Connect)"));
       
   523             for (i = 0; i < KFileNumber; i++)
       
   524                 {
       
   525                 fileName.Copy(aDir);
       
   526                 fileName.AppendNum(i);
       
   527                 fileName.Append(KFlFileNameBase);
       
   528                 fileName.Append(KFileSuffix);
       
   529                 for (j = 0; j < KOpenCount; j++)
       
   530                     {
       
   531                     User::LeaveIfError(fs.Connect());
       
   532                     CleanupClosePushL(fs);
       
   533                     User::LeaveIfError(file.Open(fs, fileName, EFileRead));
       
   534                     file.Close();
       
   535                     CleanupStack::PopAndDestroy();
       
   536                     }
       
   537                 }
       
   538             LOG(_L("Opening plain files done"));
       
   539 
       
   540             LOG(_L("Opening plain files (without RFs::Connect)"));
       
   541             User::LeaveIfError(fs.Connect());
       
   542             CleanupClosePushL(fs);
       
   543             for (i = 0; i < KFileNumber; i++)
       
   544                 {
       
   545                 fileName.Copy(aDir);
       
   546                 fileName.AppendNum(i);
       
   547                 fileName.Append(KFlFileNameBase);
       
   548                 fileName.Append(KFileSuffix);
       
   549                 for (j = 0; j < KOpenCount; j++)
       
   550                     {
       
   551                     User::LeaveIfError(file.Open(fs, fileName, EFileRead));
       
   552                     file.Close();
       
   553                     }
       
   554                 }
       
   555             CleanupStack::PopAndDestroy();
       
   556             LOG(_L("Opening plain files done"));
       
   557             }
       
   558             break;
       
   559 
       
   560         case 2: //With CAF
       
   561             {
       
   562 
       
   563             LOG(_L("Opening plain files (CAF)"));
       
   564             for (i = 0; i < KFileNumber; i++)
       
   565                 {
       
   566                 fileName.Copy(aDir);
       
   567                 fileName.AppendNum(i);
       
   568                 fileName.Append(KPlainFileNameBase);
       
   569                 for (j = 0; j < KOpenCount; j++)
       
   570                     {
       
   571                     data = CData::NewL(TVirtualPathPtr(fileName, KDefaultContentObject),
       
   572                     EPlay, EContentShareReadOnly);
       
   573                     delete data;
       
   574                     }
       
   575                 }
       
   576 
       
   577 
       
   578             LOG(_L("Opening plain files done"));
       
   579 
       
   580             User::After(3000000);
       
   581 
       
   582             LOG(_L("Opening plain files CAF with Filehandle"));
       
   583 
       
   584             User::LeaveIfError(fs.Connect());
       
   585             CleanupClosePushL(fs);
       
   586             for (i = 0; i < KFileNumber; i++)
       
   587                 {
       
   588                 fileName.Copy(aDir);
       
   589                 fileName.AppendNum(i);
       
   590                 fileName.Append(KPlainFileNameBase);
       
   591                 for (j = 0; j < KOpenCount; j++)
       
   592                     {
       
   593                     User::LeaveIfError(file.Open(fs, fileName, EFileRead | EFileShareAny));
       
   594                     CleanupClosePushL(file);
       
   595                     data = CData::NewL(file, KDefaultContentObject, EPlay );
       
   596                     delete data;
       
   597                     CleanupStack::PopAndDestroy(); // file
       
   598                     }
       
   599                 }
       
   600             CleanupStack::PopAndDestroy();
       
   601 
       
   602 
       
   603             LOG(_L("Opening plain files (CAF with filehandle) done"));
       
   604             }
       
   605             break;
       
   606 
       
   607         case 3: //With DRM
       
   608             {
       
   609 
       
   610             LOG(_L("Opening FL files"));
       
   611             for (i = 0; i < KFileNumber; i++)
       
   612                 {
       
   613                 fileName.Copy(aDir);
       
   614                 fileName.AppendNum(i);
       
   615                 fileName.Append(KFlFileNameBase);
       
   616                 fileName.Append(KFileSuffix);
       
   617                 for (j = 0; j < KOpenCount; j++)
       
   618                     {
       
   619                     data = CData::NewL(TVirtualPathPtr(fileName, KDefaultContentObject),
       
   620                     EPlay, EContentShareReadOnly);
       
   621                     delete data;
       
   622                     }
       
   623                 }
       
   624             LOG(_L("Opening FL files done"));
       
   625 
       
   626             User::After(3000000);
       
   627 
       
   628             LOG(_L("Opening DRM FL files (CAF with filehandle)"));
       
   629 
       
   630             User::LeaveIfError(fs.Connect());
       
   631             CleanupClosePushL(fs);
       
   632             for (i = 0; i < KFileNumber; i++)
       
   633                 {
       
   634                 fileName.Copy(aDir);
       
   635                 fileName.AppendNum(i);
       
   636                 fileName.Append(KFlFileNameBase);
       
   637                 fileName.Append(KFileSuffix);
       
   638                 for (j = 0; j < KOpenCount; j++)
       
   639                     {
       
   640                     User::LeaveIfError(file.Open(fs, fileName, EFileRead | EFileShareAny));
       
   641                     CleanupClosePushL(file);
       
   642                     data = CData::NewL(file, KDefaultContentObject, EPlay );
       
   643                     delete data;
       
   644                     CleanupStack::PopAndDestroy();
       
   645                     }
       
   646                 }
       
   647             CleanupStack::PopAndDestroy();
       
   648 
       
   649             LOG(_L("Opening DRM FL files (CAF with filehandle) done"));
       
   650 
       
   651             User::After(3000000);
       
   652 
       
   653             LOG(_L("Opening CD (Start/End) files"));
       
   654             for (i = 0; i < KFileNumber; i++)
       
   655                 {
       
   656                 fileName.Copy(aDir);
       
   657                 fileName.AppendNum(i);
       
   658                 fileName.Append(KCdStartEndFileNameBase);
       
   659                 fileName.Append(KFileSuffix);
       
   660                 for (j = 0; j < KOpenCount; j++)
       
   661                     {
       
   662                     data = CData::NewL(TVirtualPathPtr(fileName, KDefaultContentObject),
       
   663                     EPlay, EContentShareReadOnly);
       
   664                     delete data;
       
   665                     }
       
   666                 }
       
   667             LOG(_L("Opening CD (Start/End) files done"));
       
   668 
       
   669             User::After(3000000);
       
   670 
       
   671             LOG(_L("Opening CD (Count) files"));
       
   672             for (i = 0; i < KFileNumber; i++)
       
   673                 {
       
   674                 fileName.Copy(aDir);
       
   675                 fileName.AppendNum(i);
       
   676                 fileName.Append(KCdCountFileNameBase);
       
   677                 fileName.Append(KFileSuffix);
       
   678                 for (j = 0; j < KOpenCount; j++)
       
   679                     {
       
   680                     data = CData::NewL(TVirtualPathPtr(fileName, KDefaultContentObject),
       
   681                     EPlay, EContentShareReadOnly);
       
   682                     delete data;
       
   683                     }
       
   684                 }
       
   685             LOG(_L("Opening CD (Count) files done"));
       
   686 
       
   687             }
       
   688             break;
       
   689         case 4:
       
   690             {
       
   691             LOG(_L("Opening CD (Count) files with Consumption"));
       
   692             for (i = 0; i < KFileNumber; i++)
       
   693                 {
       
   694                 fileName.Copy(aDir);
       
   695                 fileName.AppendNum(i);
       
   696                 fileName.Append(KCdCountFileNameBase);
       
   697                 fileName.Append(KFileSuffix);
       
   698                 for (j = 0; j < KOpenCount; j++)
       
   699                     {
       
   700                     data = CData::NewL(TVirtualPathPtr(fileName, KDefaultContentObject),
       
   701                     EPlay, EContentShareReadOnly);
       
   702                     data->ExecuteIntent(EPlay);
       
   703                     delete data;
       
   704                     }
       
   705                 }
       
   706             LOG(_L("Opening CD (Count) files with Consumption done"));
       
   707             }
       
   708             break;
       
   709         }
       
   710     }
       
   711 void TestDatabasePerformanceL()
       
   712     {
       
   713     LOG(_L("TestDatabasePerformanceL"));
       
   714     }
       
   715 
       
   716 void TestPerformanceL(TInt aCommand)
       
   717     {
       
   718     LOG(_L("TestPerformanceL"));
       
   719 
       
   720 #ifndef RD_MULTIPLE_DRIVE
       
   721 
       
   722     switch(aCommand)
       
   723     {
       
   724     case EDRM_API_SubMenuId_1:        // Generate files
       
   725         {
       
   726         SetupDirectoryL(KFilesDir);
       
   727         GenerateFilesL(KFilesDir, KFileNumber);
       
   728         GenerateBigFilesL(KFilesDir);
       
   729         break;
       
   730         }
       
   731     case EDRM_API_SubMenuId_1_1:        // RFile opening
       
   732         {
       
   733         TestFileOpeningSpeedL(KFilesDir, 1);
       
   734         break;
       
   735         }
       
   736     case EDRM_API_SubMenuId_1_2:        // RFile Sequential
       
   737         {
       
   738         TestDecryptionSpeedL(KFilesDir, EFalse, 1);
       
   739         break;
       
   740         }
       
   741     case EDRM_API_SubMenuId_1_3:        // RFile Random
       
   742         {
       
   743         TestDecryptionSpeedL(KFilesDir, ETrue, 1);
       
   744         break;
       
   745         }
       
   746     case EDRM_API_SubMenuId_2_1:        // CAF File Opening
       
   747         {
       
   748         TestFileOpeningSpeedL(KFilesDir, 2);
       
   749         break;
       
   750         }
       
   751     case EDRM_API_SubMenuId_2_2:        // CAF Sequential
       
   752         {
       
   753         TestDecryptionSpeedL(KFilesDir, EFalse, 2);
       
   754         break;
       
   755         }
       
   756     case EDRM_API_SubMenuId_2_3:        // CAF Random
       
   757         {
       
   758         TestDecryptionSpeedL(KFilesDir, ETrue, 2);
       
   759         break;
       
   760         }
       
   761     case EDRM_API_SubMenuId_3_1_1:        // DRM file opening
       
   762         {
       
   763         TestFileOpeningSpeedL(KFilesDir, 3);
       
   764         break;
       
   765         }
       
   766     case EDRM_API_SubMenuId_3_1_2:        // DRM file opening with consume
       
   767         {
       
   768         TestFileOpeningSpeedL(KFilesDir, 4);
       
   769         break;
       
   770         }
       
   771     case EDRM_API_SubMenuId_3_1_3:    // Sequential DRM
       
   772         {
       
   773         TestDecryptionSpeedL(KFilesDir, EFalse, 3);
       
   774         break;
       
   775         }
       
   776     case EDRM_API_SubMenuId_3_1_4:    // Random DRM
       
   777         {
       
   778         TestDecryptionSpeedL(KFilesDir, ETrue, 3);
       
   779         break;
       
   780         }
       
   781     }
       
   782 
       
   783 #else //RD_MULTIPLE_DRIVE
       
   784 
       
   785     RFs fs;
       
   786     TInt driveNumber( -1 );
       
   787     TChar driveLetter;
       
   788     DriveInfo::GetDefaultDrive( DriveInfo::EDefaultMassStorage, driveNumber );
       
   789 
       
   790     User::LeaveIfError( fs.Connect() );
       
   791     fs.DriveToChar( driveNumber, driveLetter );
       
   792     fs.Close();
       
   793 
       
   794     TFileName filesDir;
       
   795     filesDir.Format( KFilesDir, (TUint)driveLetter );
       
   796 
       
   797     switch(aCommand)
       
   798     {
       
   799     case EDRM_API_SubMenuId_1:        // Generate files
       
   800         {
       
   801         SetupDirectoryL(filesDir);
       
   802         GenerateFilesL(filesDir, KFileNumber);
       
   803         GenerateBigFilesL(filesDir);
       
   804         break;
       
   805         }
       
   806     case EDRM_API_SubMenuId_1_1:        // RFile opening
       
   807         {
       
   808         TestFileOpeningSpeedL(filesDir, 1);
       
   809         break;
       
   810         }
       
   811     case EDRM_API_SubMenuId_1_2:        // RFile Sequential
       
   812         {
       
   813         TestDecryptionSpeedL(filesDir, EFalse, 1);
       
   814         break;
       
   815         }
       
   816     case EDRM_API_SubMenuId_1_3:        // RFile Random
       
   817         {
       
   818         TestDecryptionSpeedL(filesDir, ETrue, 1);
       
   819         break;
       
   820         }
       
   821     case EDRM_API_SubMenuId_2_1:        // CAF File Opening
       
   822         {
       
   823         TestFileOpeningSpeedL(filesDir, 2);
       
   824         break;
       
   825         }
       
   826     case EDRM_API_SubMenuId_2_2:        // CAF Sequential
       
   827         {
       
   828         TestDecryptionSpeedL(filesDir, EFalse, 2);
       
   829         break;
       
   830         }
       
   831     case EDRM_API_SubMenuId_2_3:        // CAF Random
       
   832         {
       
   833         TestDecryptionSpeedL(filesDir, ETrue, 2);
       
   834         break;
       
   835         }
       
   836     case EDRM_API_SubMenuId_3_1_1:        // DRM file opening
       
   837         {
       
   838         TestFileOpeningSpeedL(filesDir, 3);
       
   839         break;
       
   840         }
       
   841     case EDRM_API_SubMenuId_3_1_2:        // DRM file opening with consume
       
   842         {
       
   843         TestFileOpeningSpeedL(filesDir, 4);
       
   844         break;
       
   845         }
       
   846     case EDRM_API_SubMenuId_3_1_3:    // Sequential DRM
       
   847         {
       
   848         TestDecryptionSpeedL(filesDir, EFalse, 3);
       
   849         break;
       
   850         }
       
   851     case EDRM_API_SubMenuId_3_1_4:    // Random DRM
       
   852         {
       
   853         TestDecryptionSpeedL(filesDir, ETrue, 3);
       
   854         break;
       
   855         }
       
   856     }
       
   857 
       
   858 #endif
       
   859 
       
   860     //TestDatabasePerformanceL();
       
   861     }