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