# HG changeset patch # User Kiiskinen Klaus (Nokia-D-MSW/Tampere) # Date 1238406680 -10800 # Node ID 99ef825efecae3a16eec0501acdb1e96e433b20c Revision: 200911 Kit: 200912 diff -r 000000000000 -r 99ef825efeca group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/group/bld.inf Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,27 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + + + +#include "../serviceapifw_plat/group/bld.inf" +#include "../serviceapifw_pub/group/bld.inf" +#include "../rtsecuritymanager/group/bld.inf" +#include "../languageinterworkingfw/group/bld.inf" diff -r 000000000000 -r 99ef825efeca languageinterworkingfw/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/languageinterworkingfw/group/bld.inf Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,24 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + + +#include "../servicehandler/group/bld.inf" + diff -r 000000000000 -r 99ef825efeca languageinterworkingfw/servicehandler/EABI/liwServiceHandlerU.DEF --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/languageinterworkingfw/servicehandler/EABI/liwServiceHandlerU.DEF Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,227 @@ +EXPORTS + _Z4DumpRK11TLiwVariant @ 1 NONAME + _ZN11TLiwVariant3SetEPK10CLiwBuffer @ 2 NONAME + _ZN11TLiwVariant3SetEPK12CLiwIterable @ 3 NONAME + _ZN11TLiwVariant3SetEPK13MLiwInterface @ 4 NONAME + _ZN11TLiwVariant3SetEPK7CLiwMap @ 5 NONAME + _ZN11TLiwVariant3SetEPK8CLiwList @ 6 NONAME + _ZN11TLiwVariant3SetERK4TUid @ 7 NONAME + _ZN11TLiwVariant3SetERK5RFile @ 8 NONAME + _ZN11TLiwVariant3SetERK5TTime @ 9 NONAME + _ZN11TLiwVariant3SetERK6TDesC8 @ 10 NONAME + _ZN11TLiwVariant3SetERK7TDesC16 @ 11 NONAME + _ZN11TLiwVariant3SetEd @ 12 NONAME + _ZN11TLiwVariant3SetEi @ 13 NONAME + _ZN11TLiwVariant3SetEj @ 14 NONAME + _ZN11TLiwVariant3SetEl @ 15 NONAME + _ZN11TLiwVariant4SetLERKS_ @ 16 NONAME + _ZN11TLiwVariant5ResetEv @ 17 NONAME + _ZN11TLiwVariantC1ERKS_ @ 18 NONAME + _ZN11TLiwVariantC2ERKS_ @ 19 NONAME + _ZN11TLiwVariantaSERKS_ @ 20 NONAME + _ZN12CLiwIterableeqERS_ @ 21 NONAME + _ZN12CLiwMenuPane12AddMenuItemLEiRN16CEikMenuPaneItem5SDataEi @ 22 NONAME + _ZN12CLiwMenuPane12AddMenuItemLEiRN16CEikMenuPaneItem5SDataEiRK7TDesC16 @ 23 NONAME + _ZN12CLiwMenuPane13AddMenuItemsLER15TResourceReaderiii @ 24 NONAME + _ZN12CLiwMenuPane13AddMenuItemsLER4TBufILi256EEiiii @ 25 NONAME + _ZN12CLiwMenuPane13AddTitleItemLERK7TDesC16i @ 26 NONAME + _ZN12CLiwMenuPaneC1ER12CEikMenuPanei @ 27 NONAME + _ZN12CLiwMenuPaneC2ER12CEikMenuPanei @ 28 NONAME + _ZN12CLiwMenuPaneD0Ev @ 29 NONAME + _ZN12CLiwMenuPaneD1Ev @ 30 NONAME + _ZN12CLiwMenuPaneD2Ev @ 31 NONAME + _ZN13CLiwContainerD0Ev @ 32 NONAME + _ZN13CLiwContainerD1Ev @ 33 NONAME + _ZN13CLiwContainerD2Ev @ 34 NONAME + _ZN14CLiwDefaultMap4NewLEv @ 35 NONAME + _ZN14CLiwDefaultMap5NewLCER11RReadStream @ 36 NONAME + _ZN14CLiwDefaultMap6RemoveERK6TDesC8 @ 37 NONAME + _ZN14CLiwDefaultMap7InsertLERK6TDesC8RK11TLiwVariant @ 38 NONAME + _ZN14CLiwDefaultMapD0Ev @ 39 NONAME + _ZN14CLiwDefaultMapD1Ev @ 40 NONAME + _ZN14CLiwDefaultMapD2Ev @ 41 NONAME + _ZN15CLiwDefaultList4NewLEv @ 42 NONAME + _ZN15CLiwDefaultList5NewLCER11RReadStream @ 43 NONAME + _ZN15CLiwDefaultList6RemoveEi @ 44 NONAME + _ZN15CLiwDefaultList7AppendLERK11TLiwVariant @ 45 NONAME + _ZN15CLiwDefaultListD0Ev @ 46 NONAME + _ZN15CLiwDefaultListD1Ev @ 47 NONAME + _ZN15CLiwDefaultListD2Ev @ 48 NONAME + _ZN16CLiwCriteriaItem10SetOptionsEj @ 49 NONAME + _ZN16CLiwCriteriaItem13SetServiceCmdEi @ 50 NONAME + _ZN16CLiwCriteriaItem14SetServiceCmdLERK6TDesC8 @ 51 NONAME + _ZN16CLiwCriteriaItem15SetContentTypeLERK6TDesC8 @ 52 NONAME + _ZN16CLiwCriteriaItem15SetMaxProvidersEi @ 53 NONAME + _ZN16CLiwCriteriaItem15SetServiceClassERK4TUid @ 54 NONAME + _ZN16CLiwCriteriaItem16ReadFromResoureLER15TResourceReader @ 55 NONAME + _ZN16CLiwCriteriaItem18SetDefaultProviderEi @ 56 NONAME + _ZN16CLiwCriteriaItem18SetMetaDataOptionsERK11TLiwVariant @ 57 NONAME + _ZN16CLiwCriteriaItem4NewLEiRK6TDesC8S2_ @ 58 NONAME + _ZN16CLiwCriteriaItem4NewLEiiRK6TDesC8 @ 59 NONAME + _ZN16CLiwCriteriaItem4NewLEv @ 60 NONAME + _ZN16CLiwCriteriaItem5NewLCEiRK6TDesC8S2_ @ 61 NONAME + _ZN16CLiwCriteriaItem5NewLCEiiRK6TDesC8 @ 62 NONAME + _ZN16CLiwCriteriaItem5NewLCEv @ 63 NONAME + _ZN16CLiwCriteriaItem5SetIdEi @ 64 NONAME + _ZN16CLiwCriteriaItemD0Ev @ 65 NONAME + _ZN16CLiwCriteriaItemD1Ev @ 66 NONAME + _ZN16CLiwCriteriaItemD2Ev @ 67 NONAME + _ZN16CLiwCriteriaItemeqERKS_ @ 68 NONAME + _ZN17CLiwServiceIfBase18ExtensionInterfaceE4TUid @ 69 NONAME + _ZN17CLiwServiceIfBaseD0Ev @ 70 NONAME + _ZN17CLiwServiceIfBaseD1Ev @ 71 NONAME + _ZN17CLiwServiceIfBaseD2Ev @ 72 NONAME + _ZN17CLiwServiceIfMenu18ExtensionInterfaceE4TUid @ 73 NONAME + _ZN17CLiwServiceIfMenuD0Ev @ 74 NONAME + _ZN17CLiwServiceIfMenuD1Ev @ 75 NONAME + _ZN17CLiwServiceIfMenuD2Ev @ 76 NONAME + _ZN18CLiwServiceHandler10DetachMenuEii @ 77 NONAME + _ZN18CLiwServiceHandler11AttachMenuLER6RArrayIiEiR13RPointerArrayI16CLiwCriteriaItemE @ 78 NONAME + _ZN18CLiwServiceHandler11AttachMenuLEiR15TResourceReader @ 79 NONAME + _ZN18CLiwServiceHandler11AttachMenuLEiRK13RPointerArrayI16CLiwCriteriaItemE @ 80 NONAME + _ZN18CLiwServiceHandler11AttachMenuLEii @ 81 NONAME + _ZN18CLiwServiceHandler11GetCriteriaEi @ 82 NONAME + _ZN18CLiwServiceHandler11GetInterestER13RPointerArrayI16CLiwCriteriaItemE @ 83 NONAME + _ZN18CLiwServiceHandler12InParamListLEv @ 84 NONAME + _ZN18CLiwServiceHandler13OutParamListLEv @ 85 NONAME + _ZN18CLiwServiceHandler14HandleSubmenuLER12CEikMenuPane @ 86 NONAME + _ZN18CLiwServiceHandler14IsSubMenuEmptyEi @ 87 NONAME + _ZN18CLiwServiceHandler14NbrOfProvidersEPK16CLiwCriteriaItem @ 88 NONAME + _ZN18CLiwServiceHandler15ExecuteMenuCmdLEiRK20CLiwGenericParamListRS0_jP18MLiwNotifyCallback @ 89 NONAME + _ZN18CLiwServiceHandler16ReportMenuLaunchEv @ 90 NONAME + _ZN18CLiwServiceHandler18ExecuteServiceCmdLERK16CLiwCriteriaItemRK20CLiwGenericParamListRS3_jP18MLiwNotifyCallback @ 91 NONAME + _ZN18CLiwServiceHandler18ExecuteServiceCmdLERKiRK20CLiwGenericParamListRS2_jP18MLiwNotifyCallback @ 92 NONAME + _ZN18CLiwServiceHandler19InitializeMenuPaneLER12CEikMenuPaneiiRK20CLiwGenericParamList @ 93 NONAME + _ZN18CLiwServiceHandler19InitializeMenuPaneLER12CEikMenuPaneiiRK20CLiwGenericParamListi @ 94 NONAME + _ZN18CLiwServiceHandler20QueryImplementationLER13RPointerArrayI16CLiwCriteriaItemES3_ @ 95 NONAME + _ZN18CLiwServiceHandler4NewLEv @ 96 NONAME + _ZN18CLiwServiceHandler5NewLCEv @ 97 NONAME + _ZN18CLiwServiceHandler5ResetEv @ 98 NONAME + _ZN18CLiwServiceHandler7AttachLERK13RPointerArrayI16CLiwCriteriaItemE @ 99 NONAME + _ZN18CLiwServiceHandler7AttachLERK13RPointerArrayI16CLiwCriteriaItemER22CRTSecMgrScriptSession @ 100 NONAME + _ZN18CLiwServiceHandler7AttachLEi @ 101 NONAME + _ZN18CLiwServiceHandler7DetachLERK13RPointerArrayI16CLiwCriteriaItemE @ 102 NONAME + _ZN18CLiwServiceHandler7DetachLEi @ 103 NONAME + _ZN18CLiwServiceHandler9IsLiwMenuEi @ 104 NONAME + _ZN18CLiwServiceHandlerD0Ev @ 105 NONAME + _ZN18CLiwServiceHandlerD1Ev @ 106 NONAME + _ZN18CLiwServiceHandlerD2Ev @ 107 NONAME + _ZN18MLiwNotifyCallback16GetTransactionIDEv @ 108 NONAME + _ZN20CLiwGenericParamList12InternalizeLER11RReadStream @ 109 NONAME + _ZN20CLiwGenericParamList14PackForServerLER8TIpcArgs @ 110 NONAME + _ZN20CLiwGenericParamList17UnpackFromClientLERK9RMessage2 @ 111 NONAME + _ZN20CLiwGenericParamList4NewLER11RReadStream @ 112 NONAME + _ZN20CLiwGenericParamList4NewLEv @ 113 NONAME + _ZN20CLiwGenericParamList5NewLCER11RReadStream @ 114 NONAME + _ZN20CLiwGenericParamList5NewLCEv @ 115 NONAME + _ZN20CLiwGenericParamList5ResetEv @ 116 NONAME + _ZN20CLiwGenericParamList6RemoveERK6TDesC8 @ 117 NONAME + _ZN20CLiwGenericParamList6RemoveEi @ 118 NONAME + _ZN20CLiwGenericParamList7AppendLERK16TLiwGenericParam @ 119 NONAME + _ZN20CLiwGenericParamList7AppendLERKS_ @ 120 NONAME + _ZNK11TLiwVariant10AsIterableEv @ 121 NONAME + _ZNK11TLiwVariant11AsInterfaceEv @ 122 NONAME + _ZNK11TLiwVariant12AsFileHandleEv @ 123 NONAME + _ZNK11TLiwVariant3GetER4TUid @ 124 NONAME + _ZNK11TLiwVariant3GetER5RFile @ 125 NONAME + _ZNK11TLiwVariant3GetER5TDes8 @ 126 NONAME + _ZNK11TLiwVariant3GetER5TTime @ 127 NONAME + _ZNK11TLiwVariant3GetER6TDes16 @ 128 NONAME + _ZNK11TLiwVariant3GetER6TPtrC8 @ 129 NONAME + _ZNK11TLiwVariant3GetER7CLiwMap @ 130 NONAME + _ZNK11TLiwVariant3GetER7TPtrC16 @ 131 NONAME + _ZNK11TLiwVariant3GetER8CLiwList @ 132 NONAME + _ZNK11TLiwVariant3GetERd @ 133 NONAME + _ZNK11TLiwVariant3GetERi @ 134 NONAME + _ZNK11TLiwVariant3GetERj @ 135 NONAME + _ZNK11TLiwVariant3GetERl @ 136 NONAME + _ZNK11TLiwVariant5AsDesEv @ 137 NONAME + _ZNK11TLiwVariant5AsMapEv @ 138 NONAME + _ZNK11TLiwVariant6AsDataEv @ 139 NONAME + _ZNK11TLiwVariant6AsListEv @ 140 NONAME + _ZNK11TLiwVariant6AsTUidEv @ 141 NONAME + _ZNK11TLiwVariant7AsTBoolEv @ 142 NONAME + _ZNK11TLiwVariant7AsTRealEv @ 143 NONAME + _ZNK11TLiwVariant7AsTTimeEv @ 144 NONAME + _ZNK11TLiwVariant7AsTUintEv @ 145 NONAME + _ZNK11TLiwVariant8AsBufferEv @ 146 NONAME + _ZNK11TLiwVariant8AsTInt32Ev @ 147 NONAME + _ZNK12CLiwMenuPane12ServiceCmdIdEi @ 148 NONAME + _ZNK12CLiwMenuPane8DynCmdIdEi @ 149 NONAME + _ZNK12CLiwMenuPane9MenuCmdIdEi @ 150 NONAME + _ZNK13CLiwContainer12ExternalizeLER12RWriteStream @ 151 NONAME + _ZNK13CLiwContainer4SizeEv @ 152 NONAME + _ZNK14CLiwDefaultMap12ExternalizeLER12RWriteStream @ 153 NONAME + _ZNK14CLiwDefaultMap3AtLEi @ 154 NONAME + _ZNK14CLiwDefaultMap3AtLEiR5TDes8 @ 155 NONAME + _ZNK14CLiwDefaultMap4SizeEv @ 156 NONAME + _ZNK14CLiwDefaultMap5CountEv @ 157 NONAME + _ZNK14CLiwDefaultMap5FindLERK6TDesC8R11TLiwVariant @ 158 NONAME + _ZNK15CLiwDefaultList12ExternalizeLER12RWriteStream @ 159 NONAME + _ZNK15CLiwDefaultList3AtLEiR11TLiwVariant @ 160 NONAME + _ZNK15CLiwDefaultList4SizeEv @ 161 NONAME + _ZNK15CLiwDefaultList5CountEv @ 162 NONAME + _ZNK16CLiwCriteriaItem10ServiceCmdEv @ 163 NONAME + _ZNK16CLiwCriteriaItem11ContentTypeEv @ 164 NONAME + _ZNK16CLiwCriteriaItem12MaxProvidersEv @ 165 NONAME + _ZNK16CLiwCriteriaItem12ServiceClassEv @ 166 NONAME + _ZNK16CLiwCriteriaItem13ServiceCmdStrEv @ 167 NONAME + _ZNK16CLiwCriteriaItem15DefaultProviderEv @ 168 NONAME + _ZNK16CLiwCriteriaItem18GetMetaDataOptionsER11TLiwVariant @ 169 NONAME + _ZNK16CLiwCriteriaItem2IdEv @ 170 NONAME + _ZNK16CLiwCriteriaItem7OptionsEv @ 171 NONAME + _ZNK17CLiwServiceIfMenu8MenuPaneEv @ 172 NONAME + _ZNK18CLiwServiceHandler19ServiceCmdByMenuCmdEi @ 173 NONAME + _ZNK18CLiwServiceHandler9MenuCmdIdEi @ 174 NONAME + _ZNK20CLiwGenericParamList12ExternalizeLER12RWriteStream @ 175 NONAME + _ZNK20CLiwGenericParamList3AtLEiR16TLiwGenericParam @ 176 NONAME + _ZNK20CLiwGenericParamList4SizeEv @ 177 NONAME + _ZNK20CLiwGenericParamList5CountEiN3LIW14TVariantTypeIdE @ 178 NONAME + _ZNK20CLiwGenericParamList5CountEv @ 179 NONAME + _ZNK20CLiwGenericParamList8FindNextERiRK6TDesC8N3LIW14TVariantTypeIdE @ 180 NONAME + _ZNK20CLiwGenericParamList8FindNextERiiN3LIW14TVariantTypeIdE @ 181 NONAME + _ZNK20CLiwGenericParamList9FindFirstERiRK6TDesC8N3LIW14TVariantTypeIdE @ 182 NONAME + _ZNK20CLiwGenericParamList9FindFirstERiiN3LIW14TVariantTypeIdE @ 183 NONAME + _ZNK20CLiwGenericParamListixEi @ 184 NONAME + _ZNK7CLiwMapeqERKS_ @ 185 NONAME + _ZNK8CLiwListeqERKS_ @ 186 NONAME + _ZTI12CLiwIterable @ 187 NONAME ; ## + _ZTI12CLiwMenuPane @ 188 NONAME ; ## + _ZTI13CLiwContainer @ 189 NONAME ; ## + _ZTI14CLiwDefaultMap @ 190 NONAME ; ## + _ZTI14CLiwXmlHandler @ 191 NONAME ; ## + _ZTI15CLiwDefaultList @ 192 NONAME ; ## + _ZTI15CLiwEcomMonitor @ 193 NONAME ; ## + _ZTI15CLiwServiceData @ 194 NONAME ; ## + _ZTI16CLiwCriteriaItem @ 195 NONAME ; ## + _ZTI17CLiwServiceIfBase @ 196 NONAME ; ## + _ZTI17CLiwServiceIfMenu @ 197 NONAME ; ## + _ZTI7CLiwMap @ 198 NONAME ; ## + _ZTI8CLiwList @ 199 NONAME ; ## + _ZTV12CLiwIterable @ 200 NONAME ; ## + _ZTV12CLiwMenuPane @ 201 NONAME ; ## + _ZTV13CLiwContainer @ 202 NONAME ; ## + _ZTV14CLiwDefaultMap @ 203 NONAME ; ## + _ZTV14CLiwXmlHandler @ 204 NONAME ; ## + _ZTV15CLiwDefaultList @ 205 NONAME ; ## + _ZTV15CLiwEcomMonitor @ 206 NONAME ; ## + _ZTV15CLiwServiceData @ 207 NONAME ; ## + _ZTV16CLiwCriteriaItem @ 208 NONAME ; ## + _ZTV17CLiwServiceIfBase @ 209 NONAME ; ## + _ZTV17CLiwServiceIfMenu @ 210 NONAME ; ## + _ZTV7CLiwMap @ 211 NONAME ; ## + _ZTV8CLiwList @ 212 NONAME ; ## + _ZeqRK11TLiwVariantS1_ @ 213 NONAME + _ZeqRK16TLiwGenericParamS1_ @ 214 NONAME + _ZN11TLiwVariant14VariantCleanupEPv @ 215 NONAME + _ZN13CLiwContainer5CloseEv @ 216 NONAME + _ZN16TLiwGenericParam12ParamCleanupEPv @ 217 NONAME + _ZN11TLiwVariant5PushLEv @ 218 NONAME + _ZN14CLiwDefaultMap5NewLCEv @ 219 NONAME + _ZN15CLiwDefaultList5NewLCEv @ 220 NONAME + _ZN13CLiwContainer5PushLEv @ 221 NONAME + _ZN16TLiwGenericParam5PushLEv @ 222 NONAME + _ZN11TLiwVariant3SetEx @ 223 NONAME + _ZNK11TLiwVariant3GetERx @ 224 NONAME + _ZNK11TLiwVariant8AsTInt64Ev @ 225 NONAME + diff -r 000000000000 -r 99ef825efeca languageinterworkingfw/servicehandler/bwins/liwServiceHandlerU.DEF --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/languageinterworkingfw/servicehandler/bwins/liwServiceHandlerU.DEF Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,183 @@ +EXPORTS + ??0CLiwMenuPane@@QAE@AAVCEikMenuPane@@H@Z @ 1 NONAME ; CLiwMenuPane::CLiwMenuPane(class CEikMenuPane &, int) + ??0TLiwVariant@@QAE@ABV0@@Z @ 2 NONAME ; TLiwVariant::TLiwVariant(class TLiwVariant const &) + ??1CLiwContainer@@MAE@XZ @ 3 NONAME ; CLiwContainer::~CLiwContainer(void) + ??1CLiwCriteriaItem@@UAE@XZ @ 4 NONAME ; CLiwCriteriaItem::~CLiwCriteriaItem(void) + ??1CLiwDefaultList@@EAE@XZ @ 5 NONAME ; CLiwDefaultList::~CLiwDefaultList(void) + ??1CLiwDefaultMap@@EAE@XZ @ 6 NONAME ; CLiwDefaultMap::~CLiwDefaultMap(void) + ??1CLiwMenuPane@@UAE@XZ @ 7 NONAME ; CLiwMenuPane::~CLiwMenuPane(void) + ??1CLiwServiceHandler@@UAE@XZ @ 8 NONAME ; CLiwServiceHandler::~CLiwServiceHandler(void) + ??1CLiwServiceIfBase@@UAE@XZ @ 9 NONAME ; CLiwServiceIfBase::~CLiwServiceIfBase(void) + ??1CLiwServiceIfMenu@@UAE@XZ @ 10 NONAME ; CLiwServiceIfMenu::~CLiwServiceIfMenu(void) + ??4TLiwVariant@@QAEAAV0@ABV0@@Z @ 11 NONAME ; class TLiwVariant & TLiwVariant::operator=(class TLiwVariant const &) + ??8@YAHABVTLiwGenericParam@@0@Z @ 12 NONAME ; int operator==(class TLiwGenericParam const &, class TLiwGenericParam const &) + ??8@YAHABVTLiwVariant@@0@Z @ 13 NONAME ; int operator==(class TLiwVariant const &, class TLiwVariant const &) + ??8CLiwCriteriaItem@@QAEHABV0@@Z @ 14 NONAME ; int CLiwCriteriaItem::operator==(class CLiwCriteriaItem const &) + ??8CLiwIterable@@UAEHAAV0@@Z @ 15 NONAME ; int CLiwIterable::operator==(class CLiwIterable &) + ??8CLiwList@@UBEHABV0@@Z @ 16 NONAME ; int CLiwList::operator==(class CLiwList const &) const + ??8CLiwMap@@UBEHABV0@@Z @ 17 NONAME ; int CLiwMap::operator==(class CLiwMap const &) const + ??ACLiwGenericParamList@@QBEABVTLiwGenericParam@@H@Z @ 18 NONAME ; class TLiwGenericParam const & CLiwGenericParamList::operator[](int) const + ?AddMenuItemL@CLiwMenuPane@@QAEXHAAUSData@CEikMenuPaneItem@@H@Z @ 19 NONAME ; void CLiwMenuPane::AddMenuItemL(int, struct CEikMenuPaneItem::SData &, int) + ?AddMenuItemL@CLiwMenuPane@@QAEXHAAUSData@CEikMenuPaneItem@@HABVTDesC16@@@Z @ 20 NONAME ; void CLiwMenuPane::AddMenuItemL(int, struct CEikMenuPaneItem::SData &, int, class TDesC16 const &) + ?AddMenuItemsL@CLiwMenuPane@@QAEXAAV?$TBuf@$0BAA@@@HHHH@Z @ 21 NONAME ; void CLiwMenuPane::AddMenuItemsL(class TBuf<256> &, int, int, int, int) + ?AddMenuItemsL@CLiwMenuPane@@QAEXAAVTResourceReader@@HHH@Z @ 22 NONAME ; void CLiwMenuPane::AddMenuItemsL(class TResourceReader &, int, int, int) + ?AddTitleItemL@CLiwMenuPane@@QAEXABVTDesC16@@H@Z @ 23 NONAME ; void CLiwMenuPane::AddTitleItemL(class TDesC16 const &, int) + ?AppendL@CLiwDefaultList@@UAEXABVTLiwVariant@@@Z @ 24 NONAME ; void CLiwDefaultList::AppendL(class TLiwVariant const &) + ?AppendL@CLiwGenericParamList@@QAEXABV1@@Z @ 25 NONAME ; void CLiwGenericParamList::AppendL(class CLiwGenericParamList const &) + ?AppendL@CLiwGenericParamList@@QAEXABVTLiwGenericParam@@@Z @ 26 NONAME ; void CLiwGenericParamList::AppendL(class TLiwGenericParam const &) + ?AsBuffer@TLiwVariant@@QBEPAVCLiwBuffer@@XZ @ 27 NONAME ; class CLiwBuffer * TLiwVariant::AsBuffer(void) const + ?AsData@TLiwVariant@@QBE?AVTPtrC8@@XZ @ 28 NONAME ; class TPtrC8 TLiwVariant::AsData(void) const + ?AsDes@TLiwVariant@@QBE?AVTPtrC16@@XZ @ 29 NONAME ; class TPtrC16 TLiwVariant::AsDes(void) const + ?AsFileHandle@TLiwVariant@@QBE?AVRFile@@XZ @ 30 NONAME ; class RFile TLiwVariant::AsFileHandle(void) const + ?AsInterface@TLiwVariant@@QBEPAVMLiwInterface@@XZ @ 31 NONAME ; class MLiwInterface * TLiwVariant::AsInterface(void) const + ?AsIterable@TLiwVariant@@QBEPAVCLiwIterable@@XZ @ 32 NONAME ; class CLiwIterable * TLiwVariant::AsIterable(void) const + ?AsList@TLiwVariant@@QBEPBVCLiwList@@XZ @ 33 NONAME ; class CLiwList const * TLiwVariant::AsList(void) const + ?AsMap@TLiwVariant@@QBEPBVCLiwMap@@XZ @ 34 NONAME ; class CLiwMap const * TLiwVariant::AsMap(void) const + ?AsTBool@TLiwVariant@@QBEHXZ @ 35 NONAME ; int TLiwVariant::AsTBool(void) const + ?AsTInt32@TLiwVariant@@QBEJXZ @ 36 NONAME ; long TLiwVariant::AsTInt32(void) const + ?AsTReal@TLiwVariant@@QBENXZ @ 37 NONAME ; double TLiwVariant::AsTReal(void) const + ?AsTTime@TLiwVariant@@QBE?AVTTime@@XZ @ 38 NONAME ; class TTime TLiwVariant::AsTTime(void) const + ?AsTUid@TLiwVariant@@QBE?AVTUid@@XZ @ 39 NONAME ; class TUid TLiwVariant::AsTUid(void) const + ?AsTUint@TLiwVariant@@QBEHXZ @ 40 NONAME ; int TLiwVariant::AsTUint(void) const + ?AtL@CLiwDefaultList@@UBEHHAAVTLiwVariant@@@Z @ 41 NONAME ; int CLiwDefaultList::AtL(int, class TLiwVariant &) const + ?AtL@CLiwDefaultMap@@QBEABVTDesC8@@H@Z @ 42 NONAME ; class TDesC8 const & CLiwDefaultMap::AtL(int) const + ?AtL@CLiwDefaultMap@@UBEHHAAVTDes8@@@Z @ 43 NONAME ; int CLiwDefaultMap::AtL(int, class TDes8 &) const + ?AtL@CLiwGenericParamList@@QBEXHAAVTLiwGenericParam@@@Z @ 44 NONAME ; void CLiwGenericParamList::AtL(int, class TLiwGenericParam &) const + ?AttachL@CLiwServiceHandler@@QAEHABV?$RPointerArray@VCLiwCriteriaItem@@@@@Z @ 45 NONAME ; int CLiwServiceHandler::AttachL(class RPointerArray const &) + ?AttachL@CLiwServiceHandler@@QAEHABV?$RPointerArray@VCLiwCriteriaItem@@@@AAVCRTSecMgrScriptSession@@@Z @ 46 NONAME ; int CLiwServiceHandler::AttachL(class RPointerArray const &, class CRTSecMgrScriptSession &) + ?AttachL@CLiwServiceHandler@@QAEXH@Z @ 47 NONAME ; void CLiwServiceHandler::AttachL(int) + ?AttachMenuL@CLiwServiceHandler@@QAEXAAV?$RArray@H@@HAAV?$RPointerArray@VCLiwCriteriaItem@@@@@Z @ 48 NONAME ; void CLiwServiceHandler::AttachMenuL(class RArray &, int, class RPointerArray &) + ?AttachMenuL@CLiwServiceHandler@@QAEXHAAVTResourceReader@@@Z @ 49 NONAME ; void CLiwServiceHandler::AttachMenuL(int, class TResourceReader &) + ?AttachMenuL@CLiwServiceHandler@@QAEXHABV?$RPointerArray@VCLiwCriteriaItem@@@@@Z @ 50 NONAME ; void CLiwServiceHandler::AttachMenuL(int, class RPointerArray const &) + ?AttachMenuL@CLiwServiceHandler@@QAEXHH@Z @ 51 NONAME ; void CLiwServiceHandler::AttachMenuL(int, int) + ?ContentType@CLiwCriteriaItem@@QBEABVTDesC8@@XZ @ 52 NONAME ; class TDesC8 const & CLiwCriteriaItem::ContentType(void) const + ?Count@CLiwDefaultList@@UBEHXZ @ 53 NONAME ; int CLiwDefaultList::Count(void) const + ?Count@CLiwDefaultMap@@UBEHXZ @ 54 NONAME ; int CLiwDefaultMap::Count(void) const + ?Count@CLiwGenericParamList@@QBEHHW4TVariantTypeId@LIW@@@Z @ 55 NONAME ; int CLiwGenericParamList::Count(int, enum LIW::TVariantTypeId) const + ?Count@CLiwGenericParamList@@QBEHXZ @ 56 NONAME ; int CLiwGenericParamList::Count(void) const + ?DefaultProvider@CLiwCriteriaItem@@QBE?AVTUid@@XZ @ 57 NONAME ; class TUid CLiwCriteriaItem::DefaultProvider(void) const + ?DetachL@CLiwServiceHandler@@QAEXABV?$RPointerArray@VCLiwCriteriaItem@@@@@Z @ 58 NONAME ; void CLiwServiceHandler::DetachL(class RPointerArray const &) + ?DetachL@CLiwServiceHandler@@QAEXH@Z @ 59 NONAME ; void CLiwServiceHandler::DetachL(int) + ?DetachMenu@CLiwServiceHandler@@QAEXHH@Z @ 60 NONAME ; void CLiwServiceHandler::DetachMenu(int, int) + ?Dump@@YAXABVTLiwVariant@@@Z @ 61 NONAME ; void Dump(class TLiwVariant const &) + ?DynCmdId@CLiwMenuPane@@QBEHH@Z @ 62 NONAME ; int CLiwMenuPane::DynCmdId(int) const + ?ExecuteMenuCmdL@CLiwServiceHandler@@QAEXHABVCLiwGenericParamList@@AAV2@IPAVMLiwNotifyCallback@@@Z @ 63 NONAME ; void CLiwServiceHandler::ExecuteMenuCmdL(int, class CLiwGenericParamList const &, class CLiwGenericParamList &, unsigned int, class MLiwNotifyCallback *) + ?ExecuteServiceCmdL@CLiwServiceHandler@@QAEXABHABVCLiwGenericParamList@@AAV2@IPAVMLiwNotifyCallback@@@Z @ 64 NONAME ; void CLiwServiceHandler::ExecuteServiceCmdL(int const &, class CLiwGenericParamList const &, class CLiwGenericParamList &, unsigned int, class MLiwNotifyCallback *) + ?ExecuteServiceCmdL@CLiwServiceHandler@@QAEXABVCLiwCriteriaItem@@ABVCLiwGenericParamList@@AAV3@IPAVMLiwNotifyCallback@@@Z @ 65 NONAME ; void CLiwServiceHandler::ExecuteServiceCmdL(class CLiwCriteriaItem const &, class CLiwGenericParamList const &, class CLiwGenericParamList &, unsigned int, class MLiwNotifyCallback *) + ?ExtensionInterface@CLiwServiceIfBase@@MAEPAXVTUid@@@Z @ 66 NONAME ; void * CLiwServiceIfBase::ExtensionInterface(class TUid) + ?ExtensionInterface@CLiwServiceIfMenu@@MAEPAXVTUid@@@Z @ 67 NONAME ; void * CLiwServiceIfMenu::ExtensionInterface(class TUid) + ?ExternalizeL@CLiwContainer@@UBEXAAVRWriteStream@@@Z @ 68 NONAME ; void CLiwContainer::ExternalizeL(class RWriteStream &) const + ?ExternalizeL@CLiwDefaultList@@UBEXAAVRWriteStream@@@Z @ 69 NONAME ; void CLiwDefaultList::ExternalizeL(class RWriteStream &) const + ?ExternalizeL@CLiwDefaultMap@@UBEXAAVRWriteStream@@@Z @ 70 NONAME ; void CLiwDefaultMap::ExternalizeL(class RWriteStream &) const + ?ExternalizeL@CLiwGenericParamList@@QBEXAAVRWriteStream@@@Z @ 71 NONAME ; void CLiwGenericParamList::ExternalizeL(class RWriteStream &) const + ?FindFirst@CLiwGenericParamList@@QBEPBVTLiwGenericParam@@AAHABVTDesC8@@W4TVariantTypeId@LIW@@@Z @ 72 NONAME ; class TLiwGenericParam const * CLiwGenericParamList::FindFirst(int &, class TDesC8 const &, enum LIW::TVariantTypeId) const + ?FindFirst@CLiwGenericParamList@@QBEPBVTLiwGenericParam@@AAHHW4TVariantTypeId@LIW@@@Z @ 73 NONAME ; class TLiwGenericParam const * CLiwGenericParamList::FindFirst(int &, int, enum LIW::TVariantTypeId) const + ?FindL@CLiwDefaultMap@@UBEHABVTDesC8@@AAVTLiwVariant@@@Z @ 74 NONAME ; int CLiwDefaultMap::FindL(class TDesC8 const &, class TLiwVariant &) const + ?FindNext@CLiwGenericParamList@@QBEPBVTLiwGenericParam@@AAHABVTDesC8@@W4TVariantTypeId@LIW@@@Z @ 75 NONAME ; class TLiwGenericParam const * CLiwGenericParamList::FindNext(int &, class TDesC8 const &, enum LIW::TVariantTypeId) const + ?FindNext@CLiwGenericParamList@@QBEPBVTLiwGenericParam@@AAHHW4TVariantTypeId@LIW@@@Z @ 76 NONAME ; class TLiwGenericParam const * CLiwGenericParamList::FindNext(int &, int, enum LIW::TVariantTypeId) const + ?Get@TLiwVariant@@QBEHAAH@Z @ 77 NONAME ; int TLiwVariant::Get(int &) const + ?Get@TLiwVariant@@QBEHAAI@Z @ 78 NONAME ; int TLiwVariant::Get(unsigned int &) const + ?Get@TLiwVariant@@QBEHAAJ@Z @ 79 NONAME ; int TLiwVariant::Get(long &) const + ?Get@TLiwVariant@@QBEHAAN@Z @ 80 NONAME ; int TLiwVariant::Get(double &) const + ?Get@TLiwVariant@@QBEHAAVCLiwList@@@Z @ 81 NONAME ; int TLiwVariant::Get(class CLiwList &) const + ?Get@TLiwVariant@@QBEHAAVCLiwMap@@@Z @ 82 NONAME ; int TLiwVariant::Get(class CLiwMap &) const + ?Get@TLiwVariant@@QBEHAAVRFile@@@Z @ 83 NONAME ; int TLiwVariant::Get(class RFile &) const + ?Get@TLiwVariant@@QBEHAAVTDes16@@@Z @ 84 NONAME ; int TLiwVariant::Get(class TDes16 &) const + ?Get@TLiwVariant@@QBEHAAVTDes8@@@Z @ 85 NONAME ; int TLiwVariant::Get(class TDes8 &) const + ?Get@TLiwVariant@@QBEHAAVTPtrC16@@@Z @ 86 NONAME ; int TLiwVariant::Get(class TPtrC16 &) const + ?Get@TLiwVariant@@QBEHAAVTPtrC8@@@Z @ 87 NONAME ; int TLiwVariant::Get(class TPtrC8 &) const + ?Get@TLiwVariant@@QBEHAAVTTime@@@Z @ 88 NONAME ; int TLiwVariant::Get(class TTime &) const + ?Get@TLiwVariant@@QBEHAAVTUid@@@Z @ 89 NONAME ; int TLiwVariant::Get(class TUid &) const + ?GetCriteria@CLiwServiceHandler@@QAEPBVCLiwCriteriaItem@@H@Z @ 90 NONAME ; class CLiwCriteriaItem const * CLiwServiceHandler::GetCriteria(int) + ?GetInterest@CLiwServiceHandler@@QAEXAAV?$RPointerArray@VCLiwCriteriaItem@@@@@Z @ 91 NONAME ; void CLiwServiceHandler::GetInterest(class RPointerArray &) + ?GetMetaDataOptions@CLiwCriteriaItem@@QBEXAAVTLiwVariant@@@Z @ 92 NONAME ; void CLiwCriteriaItem::GetMetaDataOptions(class TLiwVariant &) const + ?GetTransactionID@MLiwNotifyCallback@@SAJXZ @ 93 NONAME ; long MLiwNotifyCallback::GetTransactionID(void) + ?HandleSubmenuL@CLiwServiceHandler@@QAEHAAVCEikMenuPane@@@Z @ 94 NONAME ; int CLiwServiceHandler::HandleSubmenuL(class CEikMenuPane &) + ?Id@CLiwCriteriaItem@@QBEHXZ @ 95 NONAME ; int CLiwCriteriaItem::Id(void) const + ?InParamListL@CLiwServiceHandler@@QAEAAVCLiwGenericParamList@@XZ @ 96 NONAME ; class CLiwGenericParamList & CLiwServiceHandler::InParamListL(void) + ?InitializeMenuPaneL@CLiwServiceHandler@@QAEXAAVCEikMenuPane@@HHABVCLiwGenericParamList@@@Z @ 97 NONAME ; void CLiwServiceHandler::InitializeMenuPaneL(class CEikMenuPane &, int, int, class CLiwGenericParamList const &) + ?InitializeMenuPaneL@CLiwServiceHandler@@QAEXAAVCEikMenuPane@@HHABVCLiwGenericParamList@@H@Z @ 98 NONAME ; void CLiwServiceHandler::InitializeMenuPaneL(class CEikMenuPane &, int, int, class CLiwGenericParamList const &, int) + ?InsertL@CLiwDefaultMap@@UAEXABVTDesC8@@ABVTLiwVariant@@@Z @ 99 NONAME ; void CLiwDefaultMap::InsertL(class TDesC8 const &, class TLiwVariant const &) + ?InternalizeL@CLiwGenericParamList@@QAEXAAVRReadStream@@@Z @ 100 NONAME ; void CLiwGenericParamList::InternalizeL(class RReadStream &) + ?IsLiwMenu@CLiwServiceHandler@@QAEHH@Z @ 101 NONAME ; int CLiwServiceHandler::IsLiwMenu(int) + ?IsSubMenuEmpty@CLiwServiceHandler@@QAEHH@Z @ 102 NONAME ; int CLiwServiceHandler::IsSubMenuEmpty(int) + ?MaxProviders@CLiwCriteriaItem@@QBEHXZ @ 103 NONAME ; int CLiwCriteriaItem::MaxProviders(void) const + ?MenuCmdId@CLiwMenuPane@@QBEHH@Z @ 104 NONAME ; int CLiwMenuPane::MenuCmdId(int) const + ?MenuCmdId@CLiwServiceHandler@@QBEHH@Z @ 105 NONAME ; int CLiwServiceHandler::MenuCmdId(int) const + ?MenuPane@CLiwServiceIfMenu@@QBEPBVCLiwMenuPane@@XZ @ 106 NONAME ; class CLiwMenuPane const * CLiwServiceIfMenu::MenuPane(void) const + ?NbrOfProviders@CLiwServiceHandler@@QAEHPBVCLiwCriteriaItem@@@Z @ 107 NONAME ; int CLiwServiceHandler::NbrOfProviders(class CLiwCriteriaItem const *) + ?NewL@CLiwCriteriaItem@@SAPAV1@HABVTDesC8@@0@Z @ 108 NONAME ; class CLiwCriteriaItem * CLiwCriteriaItem::NewL(int, class TDesC8 const &, class TDesC8 const &) + ?NewL@CLiwCriteriaItem@@SAPAV1@HHABVTDesC8@@@Z @ 109 NONAME ; class CLiwCriteriaItem * CLiwCriteriaItem::NewL(int, int, class TDesC8 const &) + ?NewL@CLiwCriteriaItem@@SAPAV1@XZ @ 110 NONAME ; class CLiwCriteriaItem * CLiwCriteriaItem::NewL(void) + ?NewL@CLiwDefaultList@@SAPAV1@XZ @ 111 NONAME ; class CLiwDefaultList * CLiwDefaultList::NewL(void) + ?NewL@CLiwDefaultMap@@SAPAV1@XZ @ 112 NONAME ; class CLiwDefaultMap * CLiwDefaultMap::NewL(void) + ?NewL@CLiwGenericParamList@@SAPAV1@AAVRReadStream@@@Z @ 113 NONAME ; class CLiwGenericParamList * CLiwGenericParamList::NewL(class RReadStream &) + ?NewL@CLiwGenericParamList@@SAPAV1@XZ @ 114 NONAME ; class CLiwGenericParamList * CLiwGenericParamList::NewL(void) + ?NewL@CLiwServiceHandler@@SAPAV1@XZ @ 115 NONAME ; class CLiwServiceHandler * CLiwServiceHandler::NewL(void) + ?NewLC@CLiwCriteriaItem@@SAPAV1@HABVTDesC8@@0@Z @ 116 NONAME ; class CLiwCriteriaItem * CLiwCriteriaItem::NewLC(int, class TDesC8 const &, class TDesC8 const &) + ?NewLC@CLiwCriteriaItem@@SAPAV1@HHABVTDesC8@@@Z @ 117 NONAME ; class CLiwCriteriaItem * CLiwCriteriaItem::NewLC(int, int, class TDesC8 const &) + ?NewLC@CLiwCriteriaItem@@SAPAV1@XZ @ 118 NONAME ; class CLiwCriteriaItem * CLiwCriteriaItem::NewLC(void) + ?NewLC@CLiwDefaultList@@SAPAV1@AAVRReadStream@@@Z @ 119 NONAME ; class CLiwDefaultList * CLiwDefaultList::NewLC(class RReadStream &) + ?NewLC@CLiwDefaultMap@@SAPAV1@AAVRReadStream@@@Z @ 120 NONAME ; class CLiwDefaultMap * CLiwDefaultMap::NewLC(class RReadStream &) + ?NewLC@CLiwGenericParamList@@SAPAV1@AAVRReadStream@@@Z @ 121 NONAME ; class CLiwGenericParamList * CLiwGenericParamList::NewLC(class RReadStream &) + ?NewLC@CLiwGenericParamList@@SAPAV1@XZ @ 122 NONAME ; class CLiwGenericParamList * CLiwGenericParamList::NewLC(void) + ?NewLC@CLiwServiceHandler@@SAPAV1@XZ @ 123 NONAME ; class CLiwServiceHandler * CLiwServiceHandler::NewLC(void) + ?Options@CLiwCriteriaItem@@QBEIXZ @ 124 NONAME ; unsigned int CLiwCriteriaItem::Options(void) const + ?OutParamListL@CLiwServiceHandler@@QAEAAVCLiwGenericParamList@@XZ @ 125 NONAME ; class CLiwGenericParamList & CLiwServiceHandler::OutParamListL(void) + ?PackForServerL@CLiwGenericParamList@@QAEPAVHBufC8@@AAVTIpcArgs@@@Z @ 126 NONAME ; class HBufC8 * CLiwGenericParamList::PackForServerL(class TIpcArgs &) + ?QueryImplementationL@CLiwServiceHandler@@QAEXAAV?$RPointerArray@VCLiwCriteriaItem@@@@0@Z @ 127 NONAME ; void CLiwServiceHandler::QueryImplementationL(class RPointerArray &, class RPointerArray &) + ?ReadFromResoureL@CLiwCriteriaItem@@QAEXAAVTResourceReader@@@Z @ 128 NONAME ; void CLiwCriteriaItem::ReadFromResoureL(class TResourceReader &) + ?Remove@CLiwDefaultList@@UAEXH@Z @ 129 NONAME ; void CLiwDefaultList::Remove(int) + ?Remove@CLiwDefaultMap@@UAEXABVTDesC8@@@Z @ 130 NONAME ; void CLiwDefaultMap::Remove(class TDesC8 const &) + ?Remove@CLiwGenericParamList@@QAEHH@Z @ 131 NONAME ; int CLiwGenericParamList::Remove(int) + ?Remove@CLiwGenericParamList@@QAEXABVTDesC8@@@Z @ 132 NONAME ; void CLiwGenericParamList::Remove(class TDesC8 const &) + ?ReportMenuLaunch@CLiwServiceHandler@@SAXXZ @ 133 NONAME ; void CLiwServiceHandler::ReportMenuLaunch(void) + ?Reset@CLiwGenericParamList@@QAEXXZ @ 134 NONAME ; void CLiwGenericParamList::Reset(void) + ?Reset@CLiwServiceHandler@@QAEXXZ @ 135 NONAME ; void CLiwServiceHandler::Reset(void) + ?Reset@TLiwVariant@@QAEXXZ @ 136 NONAME ; void TLiwVariant::Reset(void) + ?ServiceClass@CLiwCriteriaItem@@QBEABVTUid@@XZ @ 137 NONAME ; class TUid const & CLiwCriteriaItem::ServiceClass(void) const + ?ServiceCmd@CLiwCriteriaItem@@QBEHXZ @ 138 NONAME ; int CLiwCriteriaItem::ServiceCmd(void) const + ?ServiceCmdByMenuCmd@CLiwServiceHandler@@QBEHH@Z @ 139 NONAME ; int CLiwServiceHandler::ServiceCmdByMenuCmd(int) const + ?ServiceCmdId@CLiwMenuPane@@QBEHH@Z @ 140 NONAME ; int CLiwMenuPane::ServiceCmdId(int) const + ?ServiceCmdStr@CLiwCriteriaItem@@QBEABVTDesC8@@XZ @ 141 NONAME ; class TDesC8 const & CLiwCriteriaItem::ServiceCmdStr(void) const + ?Set@TLiwVariant@@QAEXABVRFile@@@Z @ 142 NONAME ; void TLiwVariant::Set(class RFile const &) + ?Set@TLiwVariant@@QAEXABVTDesC16@@@Z @ 143 NONAME ; void TLiwVariant::Set(class TDesC16 const &) + ?Set@TLiwVariant@@QAEXABVTDesC8@@@Z @ 144 NONAME ; void TLiwVariant::Set(class TDesC8 const &) + ?Set@TLiwVariant@@QAEXABVTTime@@@Z @ 145 NONAME ; void TLiwVariant::Set(class TTime const &) + ?Set@TLiwVariant@@QAEXABVTUid@@@Z @ 146 NONAME ; void TLiwVariant::Set(class TUid const &) + ?Set@TLiwVariant@@QAEXH@Z @ 147 NONAME ; void TLiwVariant::Set(int) + ?Set@TLiwVariant@@QAEXI@Z @ 148 NONAME ; void TLiwVariant::Set(unsigned int) + ?Set@TLiwVariant@@QAEXJ@Z @ 149 NONAME ; void TLiwVariant::Set(long) + ?Set@TLiwVariant@@QAEXN@Z @ 150 NONAME ; void TLiwVariant::Set(double) + ?Set@TLiwVariant@@QAEXPBVCLiwBuffer@@@Z @ 151 NONAME ; void TLiwVariant::Set(class CLiwBuffer const *) + ?Set@TLiwVariant@@QAEXPBVCLiwIterable@@@Z @ 152 NONAME ; void TLiwVariant::Set(class CLiwIterable const *) + ?Set@TLiwVariant@@QAEXPBVCLiwList@@@Z @ 153 NONAME ; void TLiwVariant::Set(class CLiwList const *) + ?Set@TLiwVariant@@QAEXPBVCLiwMap@@@Z @ 154 NONAME ; void TLiwVariant::Set(class CLiwMap const *) + ?Set@TLiwVariant@@QAEXPBVMLiwInterface@@@Z @ 155 NONAME ; void TLiwVariant::Set(class MLiwInterface const *) + ?SetContentTypeL@CLiwCriteriaItem@@QAEXABVTDesC8@@@Z @ 156 NONAME ; void CLiwCriteriaItem::SetContentTypeL(class TDesC8 const &) + ?SetDefaultProvider@CLiwCriteriaItem@@QAEXH@Z @ 157 NONAME ; void CLiwCriteriaItem::SetDefaultProvider(int) + ?SetId@CLiwCriteriaItem@@QAEXH@Z @ 158 NONAME ; void CLiwCriteriaItem::SetId(int) + ?SetL@TLiwVariant@@QAEXABV1@@Z @ 159 NONAME ; void TLiwVariant::SetL(class TLiwVariant const &) + ?SetMaxProviders@CLiwCriteriaItem@@QAEXH@Z @ 160 NONAME ; void CLiwCriteriaItem::SetMaxProviders(int) + ?SetMetaDataOptions@CLiwCriteriaItem@@QAEXABVTLiwVariant@@@Z @ 161 NONAME ; void CLiwCriteriaItem::SetMetaDataOptions(class TLiwVariant const &) + ?SetOptions@CLiwCriteriaItem@@QAEXI@Z @ 162 NONAME ; void CLiwCriteriaItem::SetOptions(unsigned int) + ?SetServiceClass@CLiwCriteriaItem@@QAEXABVTUid@@@Z @ 163 NONAME ; void CLiwCriteriaItem::SetServiceClass(class TUid const &) + ?SetServiceCmd@CLiwCriteriaItem@@QAEXH@Z @ 164 NONAME ; void CLiwCriteriaItem::SetServiceCmd(int) + ?SetServiceCmdL@CLiwCriteriaItem@@QAEXABVTDesC8@@@Z @ 165 NONAME ; void CLiwCriteriaItem::SetServiceCmdL(class TDesC8 const &) + ?Size@CLiwContainer@@UBEHXZ @ 166 NONAME ; int CLiwContainer::Size(void) const + ?Size@CLiwDefaultList@@UBEHXZ @ 167 NONAME ; int CLiwDefaultList::Size(void) const + ?Size@CLiwDefaultMap@@UBEHXZ @ 168 NONAME ; int CLiwDefaultMap::Size(void) const + ?Size@CLiwGenericParamList@@QBEHXZ @ 169 NONAME ; int CLiwGenericParamList::Size(void) const + ?UnpackFromClientL@CLiwGenericParamList@@QAEXABVRMessage2@@@Z @ 170 NONAME ; void CLiwGenericParamList::UnpackFromClientL(class RMessage2 const &) + ?VariantCleanup@TLiwVariant@@SAXPAX@Z @ 171 NONAME ; void TLiwVariant::VariantCleanup(void *) + ?Close@CLiwContainer@@QAEXXZ @ 172 NONAME ; void CLiwContainer::Close(void) + ?ParamCleanup@TLiwGenericParam@@SAXPAX@Z @ 173 NONAME ; void TLiwGenericParam::ParamCleanup(void *) + ?NewLC@CLiwDefaultList@@SAPAV1@XZ @ 174 NONAME ; class CLiwDefaultList * CLiwDefaultList::NewLC(void) + ?NewLC@CLiwDefaultMap@@SAPAV1@XZ @ 175 NONAME ; class CLiwDefaultMap * CLiwDefaultMap::NewLC(void) + ?PushL@TLiwVariant@@QAEXXZ @ 176 NONAME ; void TLiwVariant::PushL(void) + ?PushL@CLiwContainer@@QAEXXZ @ 177 NONAME ; void CLiwContainer::PushL(void) + ?PushL@TLiwGenericParam@@QAEXXZ @ 178 NONAME ; void TLiwGenericParam::PushL(void) + ?AsTInt64@TLiwVariant@@QBE_JXZ @ 179 NONAME ; long long TLiwVariant::AsTInt64(void) const + ?Get@TLiwVariant@@QBEHAA_J@Z @ 180 NONAME ; int TLiwVariant::Get(long long &) const + ?Set@TLiwVariant@@QAEX_J@Z @ 181 NONAME ; void TLiwVariant::Set(long long) + diff -r 000000000000 -r 99ef825efeca languageinterworkingfw/servicehandler/data/2000B5D4.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/languageinterworkingfw/servicehandler/data/2000B5D4.rss Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,52 @@ +/* +* Copyright (c) 2002-2004 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Registry info for LIW Custom Resolver. +* +*/ + + + + + + + +#include "registryinfo.rh" +#include "liwuids.hrh" + +// Declares the interface implementation provided: a custom resolver +RESOURCE REGISTRY_INFO theInfo + { + dll_uid = KLiwResolverDLLUidValue; + interfaces = + { + INTERFACE_INFO + { + // Interface UID of resolvers + interface_uid = 0x10009D90; // Uid for CResolver interface + implementations = + { + IMPLEMENTATION_INFO + { + implementation_uid = KLiwResolverImplUidValue; + version_no = 1; + display_name = ""; + default_data = ""; + opaque_data = ""; + } + }; + } + }; + } + +// End of File diff -r 000000000000 -r 99ef825efeca languageinterworkingfw/servicehandler/data/liwservicehandler.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/languageinterworkingfw/servicehandler/data/liwservicehandler.rss Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,174 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: LIW menu resource placeholders are defined here. +* +*/ + + + + + + +#include +#include +#include +#include +#include +#include "liwmenuslot.hrh" + +NAME LIWR + +RESOURCE RSS_SIGNATURE { } + + +RESOURCE MENU_PANE r_liw_empty_menu_0 + { + items = + { + MENU_ITEM { command=ELiwMenuSlot0; } + }; + } + +RESOURCE MENU_PANE r_liw_empty_menu_1 + { + items = + { + MENU_ITEM { command=ELiwMenuSlot1; } + }; + } + +RESOURCE MENU_PANE r_liw_empty_menu_2 + { + items = + { + MENU_ITEM { command=ELiwMenuSlot2; } + }; + } + +RESOURCE MENU_PANE r_liw_empty_menu_3 + { + items = + { + MENU_ITEM { command=ELiwMenuSlot3; } + }; + } + +RESOURCE MENU_PANE r_liw_empty_menu_4 + { + items = + { + MENU_ITEM { command=ELiwMenuSlot4; } + }; + } + + +RESOURCE MENU_PANE r_liw_empty_menu_5 + { + items = + { + MENU_ITEM { command=ELiwMenuSlot5; } + }; + } + + +RESOURCE MENU_PANE r_liw_empty_menu_6 + { + items = + { + MENU_ITEM { command=ELiwMenuSlot6; } + }; + } + +RESOURCE MENU_PANE r_liw_empty_menu_7 + { + items = + { + MENU_ITEM { command=ELiwMenuSlot7; } + }; + } + + +RESOURCE MENU_PANE r_liw_empty_menu_8 + { + items = + { + MENU_ITEM { command=ELiwMenuSlot8; } + }; + } + + +RESOURCE MENU_PANE r_liw_empty_menu_9 + { + items = + { + MENU_ITEM { command=ELiwMenuSlot9; } + }; + } + + +RESOURCE MENU_PANE r_liw_empty_menu_10 + { + items = + { + MENU_ITEM { command=ELiwMenuSlot10; } + }; + } + + +RESOURCE MENU_PANE r_liw_empty_menu_11 + { + items = + { + MENU_ITEM { command=ELiwMenuSlot11; } + }; + } + + +RESOURCE MENU_PANE r_liw_empty_menu_12 + { + items = + { + MENU_ITEM { command=ELiwMenuSlot12; } + }; + } + + +RESOURCE MENU_PANE r_liw_empty_menu_13 + { + items = + { + MENU_ITEM { command=ELiwMenuSlot13; } + }; + } + + +RESOURCE MENU_PANE r_liw_empty_menu_14 + { + items = + { + MENU_ITEM { command=ELiwMenuSlot14; } + }; + } + + +RESOURCE MENU_PANE r_liw_empty_menu_15 + { + items = + { + MENU_ITEM { command=ELiwMenuSlot15; } + }; + } + + +// End of file diff -r 000000000000 -r 99ef825efeca languageinterworkingfw/servicehandler/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/languageinterworkingfw/servicehandler/group/bld.inf Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,46 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: This file provides the information required for +* building the whole LIWFW. +* +*/ + + + + + + + +#include + +PRJ_EXPORTS + +//../inc/LiwServiceData.h MW_LAYER_PLATFORM_EXPORT_PATH(LiwServiceData.h) + + +// ../install/liwservicehandlerstub.sis /epoc32/data/z/system/install/liwservicehandlerstub.sis + +// Export IBY and LOC files as per CP50 build improvements. +// ../rom/liwservicehandler.iby CORE_MW_LAYER_IBY_EXPORT_PATH(liwservicehandler.iby) + +PRJ_MMPFILES + +#ifndef TOOLS + +ServiceHandler.mmp +LiwResolver.mmp + +#endif + +PRJ_TESTMMPFILES diff -r 000000000000 -r 99ef825efeca languageinterworkingfw/servicehandler/group/liwresolver.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/languageinterworkingfw/servicehandler/group/liwresolver.mmp Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,53 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Project definition file for LiwResolver. +* +*/ + + + + + + + +#include "../inc/liwuids.hrh" +#include + +TARGET liwResolver.dll +CAPABILITY CAP_ECOM_PLUGIN +TARGETTYPE PLUGIN + +// ECom Dll recognition UID followed by the unique UID for this dll +UID 0x10009D8D KLiwResolverDLLUidValue +VENDORID VID_DEFAULT + +VERSION 10.1 +paged + +SOURCEPATH ../src +SOURCE LiwResolver.cpp + +USERINCLUDE ../inc +SYSTEMINCLUDE /epoc32/include/ecom +// This is a SYSTEMINCLUDE macro containing the middleware +// layer specific include directories +MW_LAYER_SYSTEMINCLUDE + +START RESOURCE ../data/2000B5D4.RSS +TARGET liwResolver.rsc +END + +LIBRARY euser.lib + +// End of File diff -r 000000000000 -r 99ef825efeca languageinterworkingfw/servicehandler/group/servicehandler.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/languageinterworkingfw/servicehandler/group/servicehandler.mmp Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,86 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: LIW project file. +* +*/ + + + + + + + +#include "../inc/liwuids.hrh" +#include + +TARGET liwServiceHandler.dll +TARGETTYPE DLL +UID 0x1000008d KLiwServiceHandlerDLLUidValue + + +VERSION 10.1 +paged + +CAPABILITY CAP_GENERAL_DLL + +SOURCEPATH ../src +SOURCE LiwCommon.cpp +SOURCE LiwServiceHandler.cpp +SOURCE LiwServiceHandlerImpl.cpp +SOURCE LiwMenu.cpp +SOURCE LiwBinding.cpp +SOURCE LiwMenuBinding.cpp +SOURCE LiwServiceIfBase.cpp +SOURCE LiwServiceIfMenu.cpp +SOURCE LiwGenericParam.cpp +SOURCE LiwVariant.cpp +SOURCE LiwEcomMonitor.cpp +SOURCE LiwTlsData.cpp +SOURCE LiwXmlHandler.cpp +SOURCE LiwServiceData.cpp + +USERINCLUDE . +USERINCLUDE ../inc + +// This is a SYSTEMINCLUDE macro containing the middleware +// layer specific include directories +MW_LAYER_SYSTEMINCLUDE + +#include + +START RESOURCE ../data/liwServiceHandler.rss + HEADER + TARGETPATH RESOURCE_FILES_DIR +END + +LIBRARY euser.lib +LIBRARY eikcoctl.lib +LIBRARY ecom.lib +LIBRARY cone.lib +LIBRARY bafl.lib +LIBRARY efsrv.lib +LIBRARY estor.lib +LIBRARY eikcore.lib +LIBRARY SenXML.lib +LIBRARY RTSecMgrClient.lib +LIBRARY inetprotutil.lib + +START WINS +END + +START MARM +END + + +// End of File diff -r 000000000000 -r 99ef825efeca languageinterworkingfw/servicehandler/inc/liwbinding.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/languageinterworkingfw/servicehandler/inc/liwbinding.h Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,62 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Criteria binding base class declaration. +* +*/ + + + + + + + +#ifndef _LIW_BINDING_H +#define _LIW_BINDING_H + +#include "liwcommon.h" +#include "liwserviceifbase.h" + +class CLiwBinding : public CBase + { + public: + static CLiwBinding* NewL(); + static CLiwBinding* NewLC(); + + inline virtual ~CLiwBinding(); + inline RPointerArray& Interest(); + inline void AddCriteriaL(CLiwCriteriaItem* aItem); + inline CLiwServiceIfBase* BaseProvider(TInt aIndex); + inline TInt NumberOfProviders() const; + void AddProviderL(CLiwServiceIfBase* aProvider, TBool aIsDefault); + TBool RemoveProvider(TInt aImplUid); + TInt HasCriteriaItem(CLiwCriteriaItem& aItem) const; + void RemoveCriteria(TInt aIndex); + TBool HasProvider(CLiwServiceIfBase* aProvider) const; + TBool HasServiceCmd(TInt aServiceCmd) const; + protected: + inline CLiwBinding(); + + private: + + protected: + RPointerArray iInterest; + RPointerArray iProviders; + }; + + +#include "liwbinding.inl" + +#endif + +// End of file diff -r 000000000000 -r 99ef825efeca languageinterworkingfw/servicehandler/inc/liwbinding.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/languageinterworkingfw/servicehandler/inc/liwbinding.inl Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,63 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Criteria binding base class declaration. +* +*/ + + + + + + + +inline CLiwBinding::~CLiwBinding() + { + iInterest.Reset(); + iProviders.Reset(); + } + + +inline CLiwBinding::CLiwBinding() + { + } + + +inline RPointerArray& CLiwBinding::Interest() + { + return iInterest; + } + + +inline void CLiwBinding::AddCriteriaL(CLiwCriteriaItem* aItem) + { + User::LeaveIfError(iInterest.Append(aItem)); + } + + +inline CLiwServiceIfBase* CLiwBinding::BaseProvider(TInt aIndex) + { + if (aIndex < iProviders.Count()) + { + return iProviders[aIndex]; + } + return NULL; + } + + +inline TInt CLiwBinding::NumberOfProviders() const + { + return iProviders.Count(); + } + +// End of file diff -r 000000000000 -r 99ef825efeca languageinterworkingfw/servicehandler/inc/liwecommonitor.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/languageinterworkingfw/servicehandler/inc/liwecommonitor.h Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,75 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Declares ECom monitoring class for LIW framework. +* +*/ + + + + + + +#ifndef _LIWECOMMONITOR_H +#define _LIWECOMMONITOR_H + +#include + +// FORWARD DECLARATIONS +class CLiwCriteriaItem; +class CLiwServiceIfBase; + +class CLiwEcomMonitor : public CActive + { + public: + static CLiwEcomMonitor* NewL(TCallBack& aSynchronizeCallBack); + virtual ~CLiwEcomMonitor(); + + protected: // Functions from base classes + /** + * From CActive + */ + void RunL(); + + /** + * From CActive + */ + void DoCancel(); + + public: + inline REComSession& EComSession(); + void ListImplemetationsL(RImplInfoPtrArray& aResult, CLiwCriteriaItem* aItem) const; + CLiwServiceIfBase* CreateImplementationL(TUid aImplUid); + + protected: + /** + * C++ default constructor. + */ + CLiwEcomMonitor(TCallBack& aSynchronizeCallBack); + void ConstructL(); + void StartMonitoring(); + + private: + TCallBack iSynchronizeCallBack; + REComSession iEcomSession; + }; + + +inline REComSession& CLiwEcomMonitor::EComSession() + { + return iEcomSession; + } + +#endif // _LIWECOMMONITOR_H + +// End of file diff -r 000000000000 -r 99ef825efeca languageinterworkingfw/servicehandler/inc/liwmenubinding.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/languageinterworkingfw/servicehandler/inc/liwmenubinding.h Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,68 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Declares LIW Menu utilities for providers to access consumer menu. +* +*/ + + + + + + +#ifndef _LIW_MENUBINDING_H +#define _LIW_MENUBINDING_H + +#include "liwserviceifmenu.h" +#include "liwbinding.h" + +/** +* This utility class is used for binding a set of providers to a menu placeholder. +*/ +NONSHARABLE_CLASS(CLiwMenuBinding) : public CLiwBinding + { + public: + static CLiwMenuBinding* NewL(); + static CLiwMenuBinding* NewL(TInt aMenuItemIndex, TInt aMenuId); + static CLiwMenuBinding* NewLC(); + static CLiwMenuBinding* NewLC(TInt aMenuItemIndex, TInt aMenuId); + + virtual ~CLiwMenuBinding(); + + inline void SetMenuItemIndex(TInt aMenuItemIndex); + inline TInt MenuItemIndex() const; + inline CLiwServiceIfMenu* MenuProvider(TInt aIndex); + inline TInt MenuCmd() const; + inline void SetMenuCmd(TInt aMenuCmd); + inline TInt MenuId(); + inline void SetMenuId(TInt aId); + inline void SetMenuPane(CLiwMenuPane* aPane); + inline CLiwMenuPane* MenuPane(); + + private: + CLiwMenuBinding(); + CLiwMenuBinding(TInt aMenItemIndex, TInt aParentId); + void ConstructL(); + + private: + TInt iMenuItemIndex; + TInt iMenuCmd; + TInt iMenuId; + CLiwMenuPane* iMenuPane; + }; + +#include "liwmenubinding.inl" + +#endif // _LIW_MENUBINDING_H + +// End of file diff -r 000000000000 -r 99ef825efeca languageinterworkingfw/servicehandler/inc/liwmenubinding.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/languageinterworkingfw/servicehandler/inc/liwmenubinding.inl Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,82 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Inline methods for CLiwMenuBinding class. +* +*/ + + + + + + +inline void CLiwMenuBinding::SetMenuItemIndex(TInt aMenuItemIndex) + { + iMenuItemIndex = aMenuItemIndex; + } + + +inline TInt CLiwMenuBinding::MenuItemIndex() const + { + return iMenuItemIndex; + } + + +inline TInt CLiwMenuBinding::MenuCmd() const + { + return iMenuCmd; + } + + +inline void CLiwMenuBinding::SetMenuCmd(TInt aMenuCmd) + { + iMenuCmd = aMenuCmd; + } + + +inline TInt CLiwMenuBinding::MenuId() + { + return iMenuId; + } + + +inline void CLiwMenuBinding::SetMenuId(TInt aId) + { + iMenuId = aId; + } + + +inline CLiwServiceIfMenu* CLiwMenuBinding::MenuProvider(TInt aIndex) + { + if (aIndex >= 0 && aIndex < iProviders.Count()) + { + return reinterpret_cast(iProviders[aIndex]); + } + return NULL; + } + + +inline void CLiwMenuBinding::SetMenuPane(CLiwMenuPane* aPane) + { + iMenuPane = aPane; + } + + +inline CLiwMenuPane* CLiwMenuBinding::MenuPane() + { + return iMenuPane; + } + + +// End of file + diff -r 000000000000 -r 99ef825efeca languageinterworkingfw/servicehandler/inc/liwmenuslot.hrh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/languageinterworkingfw/servicehandler/inc/liwmenuslot.hrh Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,50 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Menu resource slot definitions. +* +*/ + + + + + + + +#ifndef _LIW_MENU_SLOT_HRH +#define _LIW_MENU_SLOT_HRH + +// Base value can be changed if needed, but other values +// MUST be consecutive. +#define ELiwMenuSlotBase 0x5000 +#define ELiwMenuSlot0 ELiwMenuSlotBase +#define ELiwMenuSlot1 (ELiwMenuSlotBase + 1) +#define ELiwMenuSlot2 (ELiwMenuSlotBase + 2) +#define ELiwMenuSlot3 (ELiwMenuSlotBase + 3) +#define ELiwMenuSlot4 (ELiwMenuSlotBase + 4) +#define ELiwMenuSlot5 (ELiwMenuSlotBase + 5) +#define ELiwMenuSlot6 (ELiwMenuSlotBase + 6) +#define ELiwMenuSlot7 (ELiwMenuSlotBase + 7) +#define ELiwMenuSlot8 (ELiwMenuSlotBase + 8) +#define ELiwMenuSlot9 (ELiwMenuSlotBase + 9) +#define ELiwMenuSlot10 (ELiwMenuSlotBase + 10) +#define ELiwMenuSlot11 (ELiwMenuSlotBase + 11) +#define ELiwMenuSlot12 (ELiwMenuSlotBase + 12) +#define ELiwMenuSlot13 (ELiwMenuSlotBase + 13) +#define ELiwMenuSlot14 (ELiwMenuSlotBase + 14) +#define ELiwMenuSlot15 (ELiwMenuSlotBase + 15) + + +#endif // LIW_MENU_SLOT_HRH + +// End of file diff -r 000000000000 -r 99ef825efeca languageinterworkingfw/servicehandler/inc/liwresolver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/languageinterworkingfw/servicehandler/inc/liwresolver.h Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,134 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Declares custom ECom resolver. +* +*/ + + + + + + +#ifndef _LIW_RESOLVER_H +#define _LIW_RESOLVER_H + +#include "liwuids.hrh" +#include +#include +#include + +// FORWARD DECLARATIONS +class TEComResolverParams; + +// DynFeature resolver's UID +const TUid KLiwResolverImplUid = { KLiwResolverImplUidValue }; + +/** + * Implements a non-default resolver. + * + * This controls the identification, (resolution), of which implementation + * will be used to satisfy an interface implementation instantiation. + */ +class CLiwResolver : public CResolver + { + public: + + /** + * Factory function + * @param aRegistry + */ + static CLiwResolver* NewL(MPublicRegistry& aRegistry); + + /** + * Destructor. + */ + virtual ~CLiwResolver(); + + /** + * Request that the resolver identify the most appropriate interface implementation. + * + * @param aInterfaceUid The interface for which implementations are requested. + * @param aAdditionalParameters Data to be used to refine the search further. + * @return The Uid of the best fit interface implementation - + * KNullUid if no match is found. + */ + TUid IdentifyImplementationL(TUid aInterfaceUid, + const TEComResolverParams& aAdditionalParameters) const; + + /** + * List all the implementations which satisfy the specified interface. + * + * @param aInterfaceUid The interface for which implementations are requested + * @param aAdditionalParameters Data to be used to refine the search further + * @return Pointer to an array of suitable implementations. + * Ownership of this array is passed to the calling function. + */ + RImplInfoArray* ListAllL(TUid aInterfaceUid, + const TEComResolverParams& aAdditionalParameters) const; + + private: + + /** + * Constructor. + * @param aRegistry + */ + explicit CLiwResolver(MPublicRegistry& aRegistry); + + /** + * Called by IdentifyImplementationL to select an appropriate implementation from a + * list of possibles. + * + * @param aImplementationsInfo Information on the potential implementations + * @param aAdditionalParameters The data to match against to detemine the implementation + * @return The Uid of the selected implementation - + * KNullUid if no match is found + */ + TUid Resolve(const RImplInfoArray& aImplementationsInfo, + const TEComResolverParams& aAdditionalParameters) const; + + /** + * Searches for a match of a data type on an implementation type. + * Match returns ETrue if aMatchType is found within aImplementationType according + * to the following rules: + * + * 1) aImplementationType is treated as a series of descriptors separated by double + * bars (||). ETrue is returned if aMatchType matches exactly any of the short + * descriptors. If no double bar is present then aImplementationType is treated as a + * single descriptor. + * + * 2) If aUseWildcards == ETrue then a '?' in aMatchType will be matched to any single + * character and '*' will be matched to any series of characters. + * + * @param aImplementationType The implementation data type to search for a match + * @param aMatchType The data to search for + * @param aUseWildcards ETrue if wildcard matching should be allowed + * @return ETrue if a match was found, EFalse otherwise + */ + TBool Match(const TDesC8& aImplementationType, const TDesC8& aMatchType, + TBool aUseWildcards) const; + + TBool MatchServiceCmd(const TDesC8& aOpaqueData, const TDesC8& aServiceCmd) const; + + void ParseInput(const TDesC8& aParam, TDes8& aContent, TDes8& aOpaque) const; + + private: + + mutable RImplInfoArray* iImplementationInfoArray; + }; + + +#endif // LIW_RESOLVER_H + +// End of file + diff -r 000000000000 -r 99ef825efeca languageinterworkingfw/servicehandler/inc/liwservicedata.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/languageinterworkingfw/servicehandler/inc/liwservicedata.h Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,141 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Declares Service Data and Service Provider Metadata classes +* +*/ + + + + + + + +#ifndef LIW_SERVICEDATA_H +#define LIW_SERVICEDATA_H + +// INCLUDES +#include + +// CONSTANTS + +// MACROS + +// FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS +class CLiwServiceData; +class CLiwXmlHandler; +class CLiwServiceHandlerImpl; +class CDesC8Array; + +class CLiwMap; +class CLiwGenericParamList; +class TLiwVariant; + +/** +* CLiwServiceData models the service provider data/information. +* A Service provider can obtain its metadata through the interfaces +* of this class. The Service metadata is a name-value pair defined +* by the provider as part of its registration information (Refer \c REGISTRY_INFO). +* +* One of the key metadata value is the capability set which are expected +* from the service consumer by the provider. The required capability set +* is specifed in the provider registration information (Refer \c REGISTRY_INFO). +* +* ServiceHandler queries for those capabilities using \c CLiwServiceData::GetCapabilitiesL +* +* @lib ServiceHandler.lib +* +* @see CLiwServiceHandler +* @see CLiwMetaData +* @see TCapability +*/ +class CLiwServiceData : public CBase +{ +public: + + + /** + * Returns the service metadata. + * + * @return the service metadata + */ + CLiwGenericParamList* GetMetaData() const; + + // Destructor + virtual ~CLiwServiceData(); + +private: + + /* + * Creates and returns an instance of \c CLiwServiceData + * This is private and not available for external clients. + * + * @return the instance of created instance of \c CLiwServiceData + */ + static CLiwServiceData* NewL(); + + /* + * Creates and returns an instance of \c CLiwServiceData + * The created instance is left in the cleanupstack. + * This is private and not available for external clients. + * + * @return the instance of created instance of \c CLiwServiceData + */ + static CLiwServiceData* NewLC(); + + /* + * Default private constructor. + * Creates the metadata associated with the service data + */ + CLiwServiceData(); + + /* + * Second phase constructor + */ + void ConstructL(); + + /* + * Adds a metadata name-value pair. If the key already exists, + * then the value will be added to the list of values associated + * with the metadata key + * + * @param aKey the metadata key to be inserted + * @param aValue the value associated with the metadata key to be inserted + */ + void AddMetaDataL(const TDesC8& aKey, const TDesC8& aValue); + void AddMetaDataL(const TDesC8& aKey, const TLiwVariant& aValue); + + /* + * Removes all the metadata key-value pairs. + * This is called from service handler implementation if and only + * if there is an error in parsing. Since, the FW uses SAX parser + * and if the XML error happens after the metadata entries are + * created, the entries should be cleaned up. + */ + void CleanUpMetaData(); + + + + CLiwGenericParamList* iDataList; + + friend class CLiwXmlHandler; + friend class CLiwServiceHandlerImpl; +}; + +#endif + +// End of File + + diff -r 000000000000 -r 99ef825efeca languageinterworkingfw/servicehandler/inc/liwservicehandlerimpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/languageinterworkingfw/servicehandler/inc/liwservicehandlerimpl.h Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,431 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Implementation class for CLiwServiceHandler. +* See also LiwServiceHandler.h. +* +*/ + + + + + + + +#ifndef LIW_SERVICE_HANDLER_IMPL_H +#define LIW_SERVICE_HANDLER_IMPL_H + +// INCLUDES +#include +#include +#include +#include "liwtlsdata.h" +#include +#include + +// CONSTANTS + +// MACROS + +// FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS +class CLiwMenuBinding; +class CLiwMenuPane; +class CLiwServiceIfMenu; +class CLiwServiceIfBase; +class CLiwEcomMonitor; +class CRTSecMgrScriptSession; + +// CLASS DECLARATION + +/** +* Internal implementation class for CLiwServiceHandler. +* +* Contains the actual implementation logic for Service Handler, whereas the +* CLiwServiceHandler class provides only the public API. +* +* @see CLiwServiceHandler for API documentation. +* @since Series 60 2.6 +*/ +NONSHARABLE_CLASS(CLiwServiceHandlerImpl) : + public CBase, + public MLiwNotifyCallback, + public MEikMenuObserver, + public MLiwMenuLaunchObserver + { + public: // Construction & destruction + /** + * Constructs CLiwServiceHandlerImpl instance. + * + * @return Pointer to the new instance. + */ + static CLiwServiceHandlerImpl* NewL(); + + /** + * Destructor. + */ + virtual ~CLiwServiceHandlerImpl(); + + public: // Management + /** + * @see CLiwServiceHandler::Reset() + */ + void Reset(); + + /** + * @see CLiwServiceHandler::NbrOfProviders() + */ + TInt NbrOfProviders(const CLiwCriteriaItem* aCriteria); + + + + public: // Interest handling + /** + * @see CLiwServiceHandler::AttachL() + */ + void AttachL(TInt aInterestResourceId); + + /** + * @see CLiwServiceHandler::AttachL() + */ + TInt AttachL(const RCriteriaArray& aInterest); + + TInt AttachL(const RCriteriaArray& aInterest,CRTSecMgrScriptSession* aSecMgrScriptSession); + /** + * @see CLiwServiceHandler::QueryImplementationL() + */ + void QueryImplementationL(CLiwCriteriaItem* aItem, RCriteriaArray& aProviderList); + void GetCapabilitiesL(RArray& secMgrCapList,CLiwGenericParamList* pMetaData); + + /** + * @see CLiwServiceHandler::GetInterest() + */ + void GetInterest(RCriteriaArray& aInterest); + + /** + * @see CLiwServiceHandler::DetachL() + */ + void DetachL(const RCriteriaArray& aInterest); + + /** + * @see CLiwServiceHandler::DetachL() + */ + void DetachL(TInt aInterestResourceId); + + /** + * @see CLiwServiceHandler::GetCriteria() + */ + const CLiwCriteriaItem* GetCriteria(TInt aId); + + /** + * @see CLiwServiceHandler::InParamListL() + */ + CLiwGenericParamList& InParamListL(); + + /** + * @see CLiwServiceHandler::OutParamListL() + */ + CLiwGenericParamList& OutParamListL(); + + public: // Menu handling + /** + * @see CLiwServiceHandler::InitializeMenuPaneL() + */ + void InitializeMenuPaneL( + CEikMenuPane& aMenuPane, + TInt aMenuResourceId, + TInt aBaseMenuCmdId, + const CLiwGenericParamList& aInParamList); + /** + * @see CLiwServiceHandler::InitializeMenuPaneL() + */ + void InitializeMenuPaneL( + CEikMenuPane& aMenuPane, + TInt aMenuResourceId, + TInt aBaseMenuCmdId, + const CLiwGenericParamList& aInParamList, + TBool aUseSubmenuTextsIfAvailable); + + /** + * @see CLiwServiceHandler::ServiceCmdByMenuCmd() + */ + TInt ServiceCmdByMenuCmd(TInt aMenuCmdId) const; + + /** + * @see CLiwServiceHandler::ExecuteMenuCmdL() + */ + void ExecuteMenuCmdL( + TInt aMenuCmdId, + const CLiwGenericParamList& aInParamList, + CLiwGenericParamList& aOutParamList, + TUint aCmdOptions = 0, + MLiwNotifyCallback* aCallback= NULL); + + /** + * @see CLiwServiceHandler::AttachMenuL() + */ + void AttachMenuL(TInt aMenuResourceId, TInt aInterestResourceId); + + /** + * @see CLiwServiceHandler::AttachMenuL() + */ + void AttachMenuL(TInt aMenuResourceId, TResourceReader& aReader); + + /** + * @see CLiwServiceHandler::AttachMenuL() + */ + void AttachMenuL(TInt aMenuResourceId, const RCriteriaArray& aInterest); + + /** + * Attach menu related criteria items to given menu. + * + * @param aMenuEntries List of menu command ids. + * @param aMenuResourceId Menu to be attached. + * @param aInterest Interest list. + */ + void AttachMenuL(RArray& aMenuEntries, TInt aMenuResourceId, RCriteriaArray& aInterest); + + /** + * Attach menu related criteria items to given menu. + * + * @param aMenuResourceId Resource reader pointing + * to menu to be attached. + */ + + //void AttachMenuL(TResourceReader& aReader, TInt aMenuId, RCriteriaArray& aInterest); + + /** + * @see CLiwServiceHandler::DetachMenu() + */ + void DetachMenu(TInt aMenuResourceId, TInt aInterestResourceId); + + /** + * @see CLiwServiceHandler::IsSubMenuEmpty() + */ + TBool IsSubMenuEmpty(TInt aSubMenuId); + + /** + * @see CLiwServiceHandler::IsLiwMenu() + */ + TBool IsLiwMenu(TInt aMenuResourceId); + + /** + * @see CLiwServiceHandler::HandleSubmenuL() + */ + TBool HandleSubmenuL(CEikMenuPane& aPane); + + public: // Generic service command handling + /** + * @see CLiwServiceHandler::ExecuteServiceCmdL() + */ + void ExecuteServiceCmdL( + const TInt& aCmdId, + const CLiwGenericParamList& aInParamList, + CLiwGenericParamList& aOutParamList, + TUint aCmdOptions = 0, + MLiwNotifyCallback* aCallback = 0); + + /** + * @see CLiwServiceHandler::ExecuteServiceCmdL() + */ + void ExecuteServiceCmdL( + const CLiwCriteriaItem& aCmd, + const CLiwGenericParamList& aInParamList, + CLiwGenericParamList& aOutParamList, + TUint aCmdOptions = 0, + MLiwNotifyCallback* aCallback = 0); + + /** + * @see CLiwServiceHandler::MenuCmdId() + */ + TInt MenuCmdId(TInt aMenuCmdId) const; + + public: // Other new methods + /** + * Called by CLiwEcomMonitor. + * + * @param aImpl An object representing this class. + * @return An error code. KErrNone if successful. + */ + static TInt SynchronizeCallBack(TAny* aImpl); + + public: // From MLiwNotifyCallback + TInt HandleNotifyL( + TInt aCmdId, + TInt aEventId, + CLiwGenericParamList& aEventParamList, + const CLiwGenericParamList& aInParamList); + + public: // From MEikMenuObserver + void SetEmphasis(CCoeControl* aMenuControl,TBool aEmphasis); + + public: // From MEikCommandObserver (via MEikMenuObserver) + void ProcessCommandL(TInt aCommandId); + + void GetProviderCapability(CLiwCriteriaItem* aItem,RCriteriaArray& aOutItem); + + private: // From MLiwMenuLaunchObserver + void MenuLaunched(); + + private: + // Possible placeholder types. + enum TLiwPlaceholderType + { + ELiwPlaceholderNormal, + ELiwPlaceholderCascade, + ELiwPlaceholderIntelligentCascade + }; + + private: + CLiwServiceHandlerImpl(); + void ConstructL(); + + // Attach menu related criteria items to given menu. + void DoAttachMenuL(TResourceReader& aReader, TInt aMenuId, RCriteriaArray& aInterest); + + TInt DoAttachL(const RCriteriaArray& aInterest,CRTSecMgrScriptSession* aScriptSession); + void DoAttachL(const RCriteriaArray& aInterest); + + void ReadInterestListL(TResourceReader& aReader, RPointerArray& aResult); + TInt ResolveProvidersL(CLiwBinding* aBinding, CLiwCriteriaItem* aItem, CRTSecMgrScriptSession* aScriptSession); + TInt ResolveProvidersL(CLiwBinding* aBinding, CLiwCriteriaItem* aItem); + + TBool IsCached(CLiwServiceIfBase* aProvider); + + CLiwMenuPane* CreateEmptyLiwMenuPaneL(TInt aBaseMenuCmdId, TInt aResourceId); + void DeleteLiwMenuPane(CLiwMenuPane* aLiwPane); + + TInt ResourceIdForNextFreeSlot(); + void CopyMenuItemsL(CLiwMenuPane* aSource, CEikMenuPane& aDest, TInt aStartIndex, + TBool aIsSubmenu); + TInt SlotItemCmd(CEikMenuPane& aPane); + CLiwMenuPane* MenuPaneForSlotCmd(TInt aCmdId); + TLiwPlaceholderType PlaceholderType(CEikMenuPane& aPane, TInt aCmd, TBool& aTitleLocked); + void ConvertPlaceholderL(CEikMenuPane& aPane, TInt aCmd, CLiwMenuPane& aLiwPane, + const TDesC& aTitle); + void UnCascadeL(CEikMenuPane& aPane, TInt aCmd, CLiwMenuPane& aLiwPane); + void SkipMenuFields(TResourceReader& aReader); + TBool IsInLastInitialized(CLiwMenuPane* liwPane) const; + TBool GetSubmenuTitle(CEikMenuPane& aPane, TDes& aResult); + TBool IsCriteriaAlreadyInInterest(CLiwCriteriaItem& aItem, + RPointerArray& aInterest) const; + CLiwCriteriaItem* ConvertCriteriaItemPointerL(CLiwCriteriaItem* aCandidate); + void FilterInterestListL(RPointerArray& aOrginal, + RPointerArray& aFiltered); + void FilterInfoArray(RImplInfoPtrArray& aArray, RArray& aArrayPlugin, + CLiwCriteriaItem* aItem); + CLiwMenuBinding* AlreadyBound(TInt aMenuId, TInt aMenuCmd, TInt aMenuItemIndex) const; + void SynchronizeDbL(); + void ListProvidersForCriteriaL(RArray& aResult, CLiwCriteriaItem& aItem); + void HandleRemovedProviders(RArray& aInMemory, RImplInfoPtrArray& aOnSystem); + void HandleNewProvidersL(RArray& aInMemory, RImplInfoPtrArray& aOnSystem, + CLiwCriteriaItem* aItem); + void RemoveProvider(TInt aImplUid); + void AddProviderL(TUid aImplUid, CLiwCriteriaItem* aItem); + inline void ClearMenuPaneArray(); + void AttachServiceManagerPluginsL(); + void ServiceManagerPlugin_ListImplementationsL(RArray& aArray, CLiwCriteriaItem* aItem); + CLiwServiceIfBase* ServiceManagerPlugin_CreateImplementationL(TInt32 aImplUid); + TInt NumAlreadyInitializedPaneIdsL() const; + + // Leaving helper method. Handler cleanupstack issues and calls ReadInterestListL(). + void ReadInterestL(RCriteriaArray& aInterest, TInt aInterestResourceId); + + // Detaches all items from given menu. + void DoDetachMenu(TInt aMenuResourceId); + + // Detaches only those items from a given menu, which match the given interest. + + + void DoDetachMenu(TInt aMenuResourceId, RCriteriaArray& aInterest); + + // Removes unnecessary criteria items from Service Handler. + void RemoveObsoleteCriteriaItems(); + + // Removes unnecessary providers from Service Handler. + void RemoveObsoleteProviders(); + + /* Parses the metadata information stored in the opaque_data field + * of service provider registration information \c REGISTRY_INFO. + * + * The metadata information is seprated from the service command definition + * in the opaque_data field using a separator "::". + * + * @param aOpaque the opaque_data values specified in the registration information + * @param aMetaData the parsed metadata entries will be stored in this variable + * + */ + void ParseMetaData(const TDesC8& aOpaque, TDes8& aMetaData); + + //To fetch the infoArray + void QueryImplementationL(CLiwCriteriaItem* aItem, RImplInfoPtrArray& aInfoArray); + + TCapability GetServiceCapability(const TDesC& aCapName); + + //To fetch the version range specified by the consumer while creating Criteria + TBool GetVersionRange(CLiwCriteriaItem* aItem,TReal& aMinVersion, TReal& aMaxVersion); + + //To fetch the version range specified by the consumer while creating Criteria + TBool GetVersion (CLiwCriteriaItem* aItem,TReal& aVersion); + + //To fetch the implementation version specified in provider metadata + void ComputeIntfVersion(CLiwServiceData* pProvMetaData,TReal& aIntfVersion); + + private: + // Pointer to the control environment. + CCoeEnv* iCoeEnv; + + // Owns all the attached criteria items. + RPointerArray iInterestList; + + // Criteria -> provider bindings for base service providers. + RPointerArray iBaseBindings; + + // Criteria -> provider bindings for menu service providers. + RPointerArray iMenuBindings; + + // Contains the LIW menu panes. + RPointerArray iMenuPanes; + + // Input parameter list which can be given to the consumer application. + CLiwGenericParamList* iInParams; + + // Output parameter list which can be given to the consumer application. + CLiwGenericParamList* iOutParams; + + // Resource offset for LiwServiceHandler.rsc. + TInt iResourceOffset; + + // Owns all the providers currently in memory. + RPointerArray iProviders; + + TInt iNextFreeSlot; + RPointerArray iLastInitialized; + CLiwMenuPane* iSubmenu; + TInt iSubmenuCmd; + CLiwEcomMonitor* iEcomMonitor; + TBool iTlsDataOpened; + }; + + +inline void CLiwServiceHandlerImpl::ClearMenuPaneArray() + { + iMenuPanes.ResetAndDestroy(); + } + +#endif // LIW_SERVICE_HANDLER_IMPL_H + +// END of File + + diff -r 000000000000 -r 99ef825efeca languageinterworkingfw/servicehandler/inc/liwtlsdata.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/languageinterworkingfw/servicehandler/inc/liwtlsdata.h Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,66 @@ +/* +* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: TLS data object. +* +*/ + + + + + + + +#ifndef _LIW_TLS_DATA_H +#define _LIW_TLS_DATA_H + +#include + +class MLiwMenuLaunchObserver + { + public: + virtual void MenuLaunched() = 0; + }; + +NONSHARABLE_CLASS( CLiwTlsData ) : public CBase + { + public: + static CLiwTlsData* OpenL(); + static void Close(); + + inline static CLiwTlsData* Instance() + { + return static_cast( Dll::Tls() ); + } + + void AddMenuLaunchObserverL( MLiwMenuLaunchObserver* aObserver ); + void RemoveMenuLaunchObserver( MLiwMenuLaunchObserver* aObserver ); + + // CEikMenuPane uses this to inform LIW when a menu is launched. + void ReportMenuLaunch(); + + private: + CLiwTlsData(); + virtual ~CLiwTlsData(); + + static CLiwTlsData* NewL(); + void ConstructL(); + + private: + TInt iRefCount; + RPointerArray iMenuLaunchObservers; + }; + +#endif // _LIW_TLS_DATA_H + +// End of file diff -r 000000000000 -r 99ef825efeca languageinterworkingfw/servicehandler/inc/liwuids.hrh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/languageinterworkingfw/servicehandler/inc/liwuids.hrh Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,34 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: UID definitions for Language Interworking Framework. +* +*/ + + + + + + + +#ifndef INC_LIWUIDS_HRH +#define INC_LIWUIDS_HRH + +#define KLiwServiceHandlerDLLUidValue 0x2000B5D3 + +#define KLiwResolverDLLUidValue 0x2000B5D4 +#define KLiwResolverImplUidValue 0x2000B5D5 + +#endif + +// End of File diff -r 000000000000 -r 99ef825efeca languageinterworkingfw/servicehandler/inc/liwxmlhandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/languageinterworkingfw/servicehandler/inc/liwxmlhandler.h Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,184 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Wrapper to XML parser interface. Loads the inline and external XML metadata +* and populates the service provider metadata information. This class +* uses Symbian SAX parser to load the metadata information. +* +*/ + + + + + + + +#ifndef LIW_XMLHANDLER_H +#define LIW_XMLHANDLER_H + +#include +#include +#include +#include + +// CONSTANTS +const TInt KMaxBufLen = 255; + +// MACROS + +// DATA TYPES + +// FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS +class CLiwServiceData; +class CLiwList; + +/** +* Wrapper class for XML parser. This class is used to parse inline +* and file-based external metadata definitions. SAX (Simple API for XML) +* parser is used to parse the XML content. +* +* @lib ServiceHandler.lib +* +* @see MSenContentHandlerClient +* @see CSenXmlReader +* @see CLiwServiceData +**/ +class CLiwXmlHandler : public CBase, public MSenContentHandlerClient +{ +public: + + /* + * Creates and returns an instance of \c CLiwXmlHandler + * + * @return an instance of \c CLiwXmlHandler + */ + static CLiwXmlHandler* NewL(); + + /* + * Creates and returns an instance of \c CLiwXmlHandler + * Leaves the created instance in the cleanupstack. + * + * @return an instance of \c CLiwXmlHandler + */ + static CLiwXmlHandler* NewLC(); + + /* + * Destructor + */ + virtual ~CLiwXmlHandler(); + + /** + * Receive notification of the beginning of a document. + * @return KErrNone or some of the system-wide Symbian error codes. + */ + virtual TInt StartDocument(); + + /** + * Receive notification of the end of a document. + * @return KErrNone or some of the system-wide Symbian error codes. + */ + virtual TInt EndDocument(); + + /** + * Receive notification of the start of an element. + * @return KErrNone or some of the system-wide Symbian error codes. + */ + virtual TInt StartElement( const TDesC8& /*aURI*/, + const TDesC8& /*aLocalName*/, + const TDesC8& /*aName*/, + const RAttributeArray& /* apAttrs */); + + /** + * Receive notification of the end of an element. + * @return KErrNone or some of the system-wide Symbian error codes. + */ + virtual TInt EndElement( const TDesC8& /*aURI*/, + const TDesC8& /*aLocalName*/, + const TDesC8& /*aName*/); + /** + * Receive notification of the character data found in the XML document. + * @return KErrNone or some of the system-wide Symbian error codes. + */ + virtual TInt Characters(const TDesC8& /*aBuf*/, + const TInt /*aStart*/, + const TInt /*aLength*/); + + /** + * Called when there is an error in parsing. + * @return KErrNone or some of the system-wide Symbian error codes. + */ + inline virtual TInt Error(TInt /*aErrorCode*/); + + /** + * Loads service data from an external file specified + * in aFileToParse parameter. + * + * @param aFileToParse a valid well defined XML file having metadata definition + * @param aServiceData service data to be populated with service provider information. + * The caller should pass a properly instantiated pointer to CLiwServiceData instance + * + * @return KErrNone if the loading of service data is successful + KSrvDataLoadFailed if the loading of XML file failed + */ + TInt LoadServiceData(const TDesC& aFileToParse, CLiwServiceData* aServiceData); + + /** + * Loads service data from a XML data buffer. The passed XML data buffer + * should be well defined and well formatted valid XML content. + * + * @param aXmlBuffer a valid well defined and well formatted XML data content + * @param aServiceData service data to be populated with service provider information. + * The caller should pass a properly instantiated pointer to CLiwServiceData instance + * + * @return KErrNone if the loading of service data is successful + KSrvDataLoadFailed if the loading of XML buffer content failed + */ + TInt LoadServiceData(const TDesC8& aXmlBuffer, CLiwServiceData* aServiceData); + + /* + * Enumeration IDs corresponding to XML parsing status + */ + enum TLiwXmlParseStatus + { + ESrvDataLoadSuccess=0, + ESrvDataLoadFailed, //General failures other than below + ESrvDataFileNotFnd, + ESrvDataInvalidFile, //Parse error + ESrvDataCapNotSpecified + }; + +private: + + //private default constructor + CLiwXmlHandler(); + + //second phase constructor + void ConstructL(); + + //the SAX parser instance + CSenXmlReader* iXmlHandler; + + //the service data instance to be populated with metadata information + CLiwServiceData* iServiceData; + + HBufC8* iBuffer; + TBuf8 startBuf; +}; + +#endif + +// End of File + + diff -r 000000000000 -r 99ef825efeca languageinterworkingfw/servicehandler/install/liwservicehandler.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/languageinterworkingfw/servicehandler/install/liwservicehandler.pkg Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,40 @@ +; +; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +; All rights reserved. +; This component and the accompanying materials are made available +; under the terms of the License "Eclipse Public License v1.0" +; which accompanies this distribution, and is available +; at the URL "http://www.eclipse.org/legal/epl-v10.html". +; +; Initial Contributors: +; Nokia Corporation - initial contribution. +; +; Contributors: +; +; Description: +; +&EN +; +; UID is the app's UID +; +#{"LIWServiceHandler"},(0x2000B5D3),1,0,0 + +; +; List of localised vendor names +%{"Vendor-EN"} + +; The non-localised, globally unique vendor name (mandatory) +:"Nokia OY" +;Supports Series 60 v 3.x +;This line indicates that this installation is for the Series 60 platform v3.x +;This line must appear _exactly_ as shown below in the sis file +;If this line is missing or incorrect, the sis file will not be able +;to be installed on Series 60 v3.x platforms +(0x101F7961), 0, 0, 0, {"Series60ProductID"} +; +; Two files to install +; +"\epoc32\release\armv5\urel\liwServiceHandler.dll" -"!:\sys\bin\liwServiceHandler.dll" +"\epoc32\release\armv5\urel\liwResolver.dll" -"!:\sys\bin\liwResolver.dll" +"\epoc32\data\z\resource\liwServiceHandler.RSC" -"!:\resource\liwServiceHandler.RSC" +"\epoc32\data\z\resource\plugins\liwResolver.RSC" -"!:\resource\plugins\liwResolver.RSC" \ No newline at end of file diff -r 000000000000 -r 99ef825efeca languageinterworkingfw/servicehandler/install/liwservicehandler_PU.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/languageinterworkingfw/servicehandler/install/liwservicehandler_PU.pkg Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,40 @@ +; +; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +; All rights reserved. +; This component and the accompanying materials are made available +; under the terms of the License "Eclipse Public License v1.0" +; which accompanies this distribution, and is available +; at the URL "http://www.eclipse.org/legal/epl-v10.html". +; +; Initial Contributors: +; Nokia Corporation - initial contribution. +; +; Contributors: +; +; Description: +; +&EN +; +; UID is the app's UID +; +#{"LIWServiceHandler"},(0x2000B5D3),1,0,0, TYPE = PU + +; +; List of localised vendor names +%{"Vendor-EN"} + +; The non-localised, globally unique vendor name (mandatory) +:"Nokia OY" +;Supports Series 60 v 3.x +;This line indicates that this installation is for the Series 60 platform v3.x +;This line must appear _exactly_ as shown below in the sis file +;If this line is missing or incorrect, the sis file will not be able +;to be installed on Series 60 v3.x platforms +(0x101F7961), 0, 0, 0, {"Series60ProductID"} +; +; Two files to install +; +"\epoc32\release\armv5\urel\liwServiceHandler.dll" -"!:\sys\bin\liwServiceHandler.dll" +"\epoc32\release\armv5\urel\liwResolver.dll" -"!:\sys\bin\liwResolver.dll" +"\epoc32\data\z\resource\liwServiceHandler.RSC" -"!:\resource\liwServiceHandler.RSC" +"\epoc32\data\z\resource\plugins\liwResolver.RSC" -"!:\resource\plugins\liwResolver.RSC" \ No newline at end of file diff -r 000000000000 -r 99ef825efeca languageinterworkingfw/servicehandler/install/liwservicehandlerstub.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/languageinterworkingfw/servicehandler/install/liwservicehandlerstub.pkg Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,31 @@ +; +; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +; All rights reserved. +; This component and the accompanying materials are made available +; under the terms of the License "Eclipse Public License v1.0" +; which accompanies this distribution, and is available +; at the URL "http://www.eclipse.org/legal/epl-v10.html". +; +; Initial Contributors: +; Nokia Corporation - initial contribution. +; +; Contributors: +; +; Description: +; +&EN + +; standard SIS file header +#{"LIWServiceHandler"}, (0x2000b5d3), 1, 0, 0, TYPE=SA + +;Localized Vendor Name +%{"Nokia-EN"} + +;Unique Vendor name +:"Nokia" + +; Files to copy +""-"z:\sys\bin\liwServiceHandler.dll" +""-"z:\sys\bin\liwResolver.dll" +""-"z:\resource\liwResolver.RSC" +""-"z:\resource\liwServiceHandler.RSC" \ No newline at end of file diff -r 000000000000 -r 99ef825efeca languageinterworkingfw/servicehandler/install/liwservicehandlerstub.sis Binary file languageinterworkingfw/servicehandler/install/liwservicehandlerstub.sis has changed diff -r 000000000000 -r 99ef825efeca languageinterworkingfw/servicehandler/src/liwbinding.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/languageinterworkingfw/servicehandler/src/liwbinding.cpp Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,117 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + + +#include "liwbinding.h" + + +CLiwBinding* CLiwBinding::NewL() + { + return new (ELeave) CLiwBinding(); + } + + + +CLiwBinding* CLiwBinding::NewLC() + { + CLiwBinding* bind = new (ELeave) CLiwBinding(); + CleanupStack::PushL(bind); + return bind; + } + + +void CLiwBinding::AddProviderL(CLiwServiceIfBase* aProvider, TBool aIsDefault) + { + if (aIsDefault) + { + // Default provider will be the first item in array. + User::LeaveIfError(iProviders.Insert(aProvider, 0)); + } + else + { + User::LeaveIfError(iProviders.Append(aProvider)); + } + } + + + +TInt CLiwBinding::HasCriteriaItem(CLiwCriteriaItem& aItem) const + { + const TInt count = iInterest.Count(); + for (TInt index = 0; index < count; index++) + { + if ((*iInterest[index]) == aItem) + { + return index; + } + } + + return KErrNotFound; + } + + +TBool CLiwBinding::HasProvider(CLiwServiceIfBase* aProvider) const + { + for (TInt index = 0; index < iProviders.Count(); index++) + { + if (iProviders[index] == aProvider) + { + return ETrue; + } + } + + return EFalse; + } + + +void CLiwBinding::RemoveCriteria(TInt aIndex) + { + iInterest.Remove( aIndex ); + } + + + +TBool CLiwBinding::RemoveProvider(TInt aImplUid) + { + for (TInt index = 0; index < iProviders.Count(); index++) + { + if (iProviders[index]->ImplementationUid().iUid == aImplUid) + { + iProviders.Remove( index ); + return ETrue; + } + } + + return EFalse; + } + +TBool CLiwBinding::HasServiceCmd(TInt aServiceCmd) const + { + for (TInt index = 0; index < iInterest.Count(); index++) + { + if(iInterest[index]->ServiceCmd() == aServiceCmd) + { + return ETrue; + } + } + return EFalse; + } +// End of file diff -r 000000000000 -r 99ef825efeca languageinterworkingfw/servicehandler/src/liwcommon.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/languageinterworkingfw/servicehandler/src/liwcommon.cpp Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,365 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Implementation for common LIW classes to be used both +* consumer and provider side. +* +*/ + + + + + + +#include "liwcommon.h" +#include +const TInt KInitialMaxProviders = 0xff; + +CLiwCriteriaItem::CLiwCriteriaItem() + { + } + + + +EXPORT_C CLiwCriteriaItem* CLiwCriteriaItem::NewL() + { + CLiwCriteriaItem* item = new (ELeave) CLiwCriteriaItem(); + CleanupStack::PushL( item ); + item->ConstructL(); + CleanupStack::Pop(item); // item + return item; + } + + + +EXPORT_C CLiwCriteriaItem* CLiwCriteriaItem::NewLC() + { + CLiwCriteriaItem* item = new (ELeave) CLiwCriteriaItem(); + CleanupStack::PushL( item ); + item->ConstructL(); + return item; + } + + + +EXPORT_C CLiwCriteriaItem* CLiwCriteriaItem::NewL( + TInt aCriteriaId, + TInt aServiceCmd, + const TDesC8& aContentType) + { + CLiwCriteriaItem* item = new (ELeave) CLiwCriteriaItem(); + CleanupStack::PushL( item ); + item->ConstructL(aCriteriaId, aServiceCmd, aContentType); + CleanupStack::Pop(item); // item + return item; + } + + + +EXPORT_C CLiwCriteriaItem* CLiwCriteriaItem::NewLC( + TInt aCriteriaId, + TInt aServiceCmd, + const TDesC8& aContentType) + { + CLiwCriteriaItem* item = new (ELeave) CLiwCriteriaItem(); + CleanupStack::PushL( item ); + item->ConstructL(aCriteriaId, aServiceCmd, aContentType); + return item; + } + +EXPORT_C CLiwCriteriaItem* CLiwCriteriaItem::NewL( + TInt aCriteriaId, + const TDesC8& aServiceCmd, + const TDesC8& aContentType) + { + CLiwCriteriaItem* item = new (ELeave) CLiwCriteriaItem(); + CleanupStack::PushL( item ); + item->ConstructL(aCriteriaId, aServiceCmd, aContentType); + CleanupStack::Pop(item); // item + return item; + } + +EXPORT_C CLiwCriteriaItem* CLiwCriteriaItem::NewLC( + TInt aCriteriaId, + const TDesC8& aServiceCmd, + const TDesC8& aContentType) + { + CLiwCriteriaItem* item = new (ELeave) CLiwCriteriaItem(); + CleanupStack::PushL( item ); + item->ConstructL(aCriteriaId, aServiceCmd, aContentType); + return item; + } + + +EXPORT_C CLiwCriteriaItem::~CLiwCriteriaItem() + { + delete iReserved.iData.iBufC8; + delete iContentType; + iOptions.Reset(); + + iMetadataOptions.Reset(); + } + + +void CLiwCriteriaItem::ConstructL() + { + iMaxProviders = KInitialMaxProviders; + } + + + +void CLiwCriteriaItem::ConstructL(TInt aCriteriaId, TInt aServiceCmd, + const TDesC8& aContentType) + { + iMaxProviders = KInitialMaxProviders; + iCriteriaId = aCriteriaId; + iServiceCmd = aServiceCmd; + SetContentTypeL( aContentType ); + } + +void CLiwCriteriaItem::ConstructL(TInt aCriteriaId, const TDesC8& aServiceCmd, + const TDesC8& aContentType) + { + iMaxProviders = KInitialMaxProviders; + iCriteriaId = aCriteriaId; + SetServiceCmdL( aServiceCmd ); + SetContentTypeL( aContentType ); + } + +EXPORT_C void CLiwCriteriaItem::SetId(TInt aId) + { + iCriteriaId = aId; + } + + + +EXPORT_C void CLiwCriteriaItem::SetServiceClass(const TUid& aServiceUid) + { + iServiceClass = aServiceUid; + } + + + +EXPORT_C void CLiwCriteriaItem::SetServiceCmd(TInt aServiceCmd) + { + iServiceCmd = aServiceCmd; + } + +EXPORT_C void CLiwCriteriaItem::SetServiceCmdL(const TDesC8& aServiceCmd) + { + iServiceCmd = KLiwCmdAsStr; + delete iReserved.iData.iBufC8; + iReserved.iData.iBufC8 = NULL; + iReserved.iData.iBufC8 = HBufC8::NewL(aServiceCmd.Length()); + TPtr8 content(iReserved.iData.iBufC8->Des()); + content.SetLength(aServiceCmd.Length()); + content.Copy(aServiceCmd); + } + +EXPORT_C void CLiwCriteriaItem::SetContentTypeL(const TDesC8& aContentType) + { + delete iContentType; + iContentType = NULL; + iContentType = HBufC8::NewL(aContentType.Length()); + TPtr8 content(iContentType->Des()); + content.SetLength(aContentType.Length()); + content.Copy(aContentType); + } + + + +EXPORT_C TInt CLiwCriteriaItem::Id() const + { + return iCriteriaId; + } + + + +EXPORT_C const TUid& CLiwCriteriaItem::ServiceClass() const + { + return iServiceClass; + } + + + +EXPORT_C TInt CLiwCriteriaItem::ServiceCmd() const + { + return iServiceCmd; + } + +EXPORT_C const TDesC8& CLiwCriteriaItem::ServiceCmdStr() const + { + return ((iReserved.iData.iBufC8) ? *iReserved.iData.iBufC8 : KNullDesC8()); + } + +EXPORT_C const TDesC8& CLiwCriteriaItem::ContentType() const + { + if (iContentType) + { + return *iContentType; + } + + return KNullDesC8(); + } + + + +EXPORT_C void CLiwCriteriaItem::SetOptions(TUint aOptions) + { + if(aOptions == 0) + return; + + iOptions.Set(aOptions); + } + + +EXPORT_C void CLiwCriteriaItem::SetMetaDataOptions(const TLiwVariant& aMetaDataOptions) + { + iMetadataOptions.SetL(aMetaDataOptions); + } + +EXPORT_C void CLiwCriteriaItem::GetMetaDataOptions(TLiwVariant& aMetaDataOptions) const + { + aMetaDataOptions.SetL(iMetadataOptions); + } + +EXPORT_C TUint CLiwCriteriaItem::Options() const + { + return iOptions.AsTUint(); + } + + + +EXPORT_C void CLiwCriteriaItem::ReadFromResoureL(TResourceReader& aReader) + { + delete iContentType; + iContentType = NULL; + + delete iReserved.iData.iBufC8; + iReserved.iData.iBufC8 = NULL; + + iCriteriaId = aReader.ReadInt32(); + iServiceCmd = aReader.ReadInt32(); + + if (iServiceCmd == KLiwCmdAsStr) + { + TPtrC8 txtptr = aReader.ReadTPtrC8(); + iReserved.iData.iBufC8 = HBufC8::NewL(txtptr.Length()); + TPtr8 content(iReserved.iData.iBufC8->Des()); + content.Copy( txtptr ); + } + + { + TPtrC8 txtptr = aReader.ReadTPtrC8(); + iContentType = HBufC8::NewL(txtptr.Length()); + TPtr8 content(iContentType->Des()); + content.Copy( txtptr ); + } + + iServiceClass = TUid::Uid(aReader.ReadInt32()); + + iDefaultProvider = TUid::Uid(aReader.ReadInt32()); + + iMaxProviders = aReader.ReadUint8(); + + SetOptions((TUint)aReader.ReadUint8()); + + TInt capResID = aReader.ReadInt32(); // Skip over reserved field. + + + } + + + +EXPORT_C TUid CLiwCriteriaItem::DefaultProvider() const + { + return iDefaultProvider; + } + + + +EXPORT_C void CLiwCriteriaItem::SetDefaultProvider(TInt aDefault) + { + iDefaultProvider = TUid::Uid(aDefault); + } + + +EXPORT_C TInt CLiwCriteriaItem::MaxProviders() const + { + return iMaxProviders; + } + + +EXPORT_C void CLiwCriteriaItem::SetMaxProviders(TInt aMaxProviders) + { + iMaxProviders = aMaxProviders; + } + + +EXPORT_C TBool CLiwCriteriaItem::operator==(const CLiwCriteriaItem& aItem) + { + if (iServiceCmd != KLiwCmdAsStr) + { + return ((iCriteriaId == aItem.iCriteriaId) && + (iServiceCmd == aItem.iServiceCmd) && + (iContentType->Compare(*(aItem.iContentType)) == KErrNone) && + (iServiceClass.iUid == aItem.iServiceClass.iUid) && + (iDefaultProvider.iUid == aItem.iDefaultProvider.iUid) && + (iMaxProviders == aItem.iMaxProviders) && + (iOptions == aItem.iOptions) && + (iMetadataOptions == aItem.iMetadataOptions)); + } + else + { + if(iCriteriaId== aItem.iCriteriaId) + { + if(0 == iReserved.iData.iBufC8->Des().Compare(aItem.iReserved.iData.iBufC8->Des())) + { + if(iContentType->Compare(*(aItem.iContentType)) == KErrNone) + { + if(iServiceClass.iUid == aItem.iServiceClass.iUid) + { + if(iDefaultProvider.iUid == aItem.iDefaultProvider.iUid) + { + if(iMaxProviders == aItem.iMaxProviders) + { + if((iOptions == aItem.iOptions)) + { + if((iMetadataOptions == aItem.iMetadataOptions)) + { + return ETrue; + } + } + } + } + } + } + } + } + return EFalse; + } + } + +EXPORT_C TInt32 MLiwNotifyCallback::GetTransactionID() +{ + TTime currentTime; + const TInt KMin = 60; + const TInt KSec = 60; + const TInt KMcSec = 1000; + currentTime.HomeTime(); + return (KMin * KSec * currentTime.DateTime().Hour())+ + (KMin * currentTime.DateTime().Minute())+ + (KMcSec * currentTime.DateTime().Second()) + + (currentTime.DateTime().MicroSecond()); +} +// End of file diff -r 000000000000 -r 99ef825efeca languageinterworkingfw/servicehandler/src/liwecommonitor.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/languageinterworkingfw/servicehandler/src/liwecommonitor.cpp Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,132 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Implementation for ECom monitoring class for LIW framework. +* +*/ + + + + + + +#include "liwecommonitor.h" +#include "liwcommon.h" +#include "liwuids.hrh" +#include "liwserviceifbase.h" + +// CONSTANTS +_LIT8(KContentTag, ""); +_LIT8(KOpaqueTag, ""); +_LIT8(KLiwMimeTypeAll, "*"); + +const TInt KMaxDataParamSize = 255; + +CLiwEcomMonitor* CLiwEcomMonitor::NewL(TCallBack& aSynchronizeCallBack) + { + CLiwEcomMonitor* self = new (ELeave) CLiwEcomMonitor(aSynchronizeCallBack); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); // self + return self; + } + + +CLiwEcomMonitor::CLiwEcomMonitor(TCallBack& aSynchronizeCallBack) +:CActive(CActive::EPriorityStandard), iSynchronizeCallBack(aSynchronizeCallBack) + { + } + + +CLiwEcomMonitor::~CLiwEcomMonitor() + { + Cancel(); + iEcomSession.Close(); + REComSession::FinalClose(); + } + + +void CLiwEcomMonitor::ConstructL() + { + iEcomSession = REComSession::OpenL(); + CActiveScheduler::Add(this); + StartMonitoring(); + } + + +void CLiwEcomMonitor::RunL() + { + iSynchronizeCallBack.CallBack(); + StartMonitoring(); + } + + + +void CLiwEcomMonitor::DoCancel() + { + iEcomSession.CancelNotifyOnChange(iStatus); + } + + +void CLiwEcomMonitor::StartMonitoring() + { + iEcomSession.NotifyOnChange(iStatus); + SetActive(); + } + + + +void CLiwEcomMonitor::ListImplemetationsL(RImplInfoPtrArray& aResult, + CLiwCriteriaItem* aItem) const + { + TEComResolverParams params; + + TUid resolvUid = { KLiwResolverImplUidValue }; + + TBuf8 dataType; + dataType.Copy(KContentTag); + dataType.Append(aItem->ContentType()); + dataType.Append(KOpaqueTag); + if (aItem->ServiceCmd() != KLiwCmdAsStr) + { + dataType.AppendNumUC(aItem->ServiceCmd(), EHex); + } + else + { + dataType.Append(aItem->ServiceCmdStr()); + } + params.SetDataType(dataType); + params.SetWildcardMatch(dataType.Find(KLiwMimeTypeAll) != KErrNotFound); + + iEcomSession.ListImplementationsL(aItem->ServiceClass(), params, resolvUid, aResult); + } + + + +CLiwServiceIfBase* CLiwEcomMonitor::CreateImplementationL(TUid aImplUid) + { + TUid dtorKeyId; + + CLiwServiceIfBase* iface = (CLiwServiceIfBase*)iEcomSession.CreateImplementationL(aImplUid, + dtorKeyId); + + if (iface) + { + iface->SetDtorKeyId( dtorKeyId ); + iface->SetImplementationUid( aImplUid ); + } + + return iface; + } + +// End of file diff -r 000000000000 -r 99ef825efeca languageinterworkingfw/servicehandler/src/liwgenericparam.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/languageinterworkingfw/servicehandler/src/liwgenericparam.cpp Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,575 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Implementation of TLiwGenericParam and CLiwGenericParamList. +* +*/ + + + + + + + +// INCLUDES +#include +#include "liwgenericparam.h" +using namespace LIW; +namespace { + +// CONSTANTS +// Protect against possible data format changes +const TInt KVersion = 10; // Version 1.0 + +enum TPanicCode + { + EPanicPostCond_CopyLC = 1, + EPanicPostCond_AppendL, + EPanicPostCond_Reset + }; + + +// ============================= LOCAL FUNCTIONS =============================== + +#ifdef _DEBUG +void Panic(TPanicCode aCode) + { + _LIT(KPanicText, "GenericParam"); + User::Panic(KPanicText, aCode); + } +#endif + +} + + +const TInt KRFsSlot = 2; +const TInt KRFileSlot = 3; + + +// ============================ MEMBER FUNCTIONS =============================== + +/** + * Releases any dynamic data owned by this parameter. + */ +void TLiwGenericParam::Destroy() + { + if (iSemanticId != EGenericParamNameAsStringTransient) + { + delete iReserved; + iReserved = NULL; + } + iValue.Destroy(); + } + +/** + * Copies aParam to this parameter. Takes an own copy of the value held in + * aParam. + */ +void TLiwGenericParam::CopyLC(const TLiwGenericParam& aParam) + { + // Take a copy of value + iValue.SetL(aParam.iValue); + // Copy semantic id + iSemanticId = aParam.iSemanticId; + // Copy name + if (iSemanticId == EGenericParamNameAsString) { + delete iReserved; + iReserved = NULL; + iReserved = ((HBufC8*)aParam.iReserved)->AllocL(); + } + else if (iSemanticId == EGenericParamNameAsStringTransient) { + delete iReserved; + iReserved = NULL; + iReserved = ((TDesC8*)aParam.iReserved)->AllocL(); + iSemanticId = EGenericParamNameAsString; + } + CleanupStack::PushL(*this); + + //__ASSERT_DEBUG(*this==aParam, Panic(EPanicPostCond_CopyLC)); + } + + +EXPORT_C void TLiwGenericParam::PushL() + { + CleanupStack::PushL( TCleanupItem( TLiwGenericParam::ParamCleanup , this) ); + } + +EXPORT_C void TLiwGenericParam::ParamCleanup( TAny* aObj ) + { + static_cast(aObj)->Destroy(); + } + +/** + * Returns a cleanup item that will call Destroy to this object when + * PopAndDestroy'ed. + */ +TLiwGenericParam::operator TCleanupItem() + { + return TCleanupItem(&CleanupDestroy,this); + } + +/** + * Callback for operator TCleanupItem(). + */ +void TLiwGenericParam::CleanupDestroy(TAny* aObj) + { + static_cast(aObj)->Destroy(); + } +/** + * Internalizes this parameter from aStream. + */ +void TLiwGenericParam::InternalizeL(RReadStream& aStream) + { + /*const TInt version =*/ aStream.ReadInt8L(); + const TGenericParamId id = + static_cast(aStream.ReadInt32L()); + if (id == EGenericParamNameAsString) + { + TInt len = aStream.ReadInt32L(); + delete iReserved; + iReserved = NULL; + iReserved = HBufC8::NewL(aStream, len); + } + iValue.InternalizeL(aStream); + iSemanticId = id; + } + +/** + * Externalizes this parameter to aStream. + */ +void TLiwGenericParam::ExternalizeL(RWriteStream& aStream) const + { + aStream.WriteInt8L(KVersion); + aStream.WriteInt32L(iSemanticId); + if (iSemanticId == EGenericParamNameAsString) + { + aStream.WriteInt32L(((HBufC8*)iReserved)->Length()); + aStream << (*((HBufC8*)iReserved)); + } + iValue.ExternalizeL(aStream); + } + +/** + * Returns the maximum externalized size of this parameter. + */ +TInt TLiwGenericParam::Size() const + { + TInt size = sizeof (TInt8); // version + size += sizeof (TInt32); // semantic ID + if (iSemanticId == EGenericParamNameAsString) + { + size += sizeof (TInt32); // name length + //size += 1; // header written by operator<< + if(((HBufC8*)iReserved)->Size()>=64) + { + size += 2; + } + else + { + size += 1; + } + + size += ((HBufC8*)iReserved)->Size(); + } + size += iValue.Size(); + return size; + } + +EXPORT_C TBool operator==(const TLiwGenericParam& aLhs, + const TLiwGenericParam& aRhs) + { + if (((aLhs.SemanticId() == EGenericParamNameAsString) || + (aLhs.SemanticId() == EGenericParamNameAsStringTransient)) && + ((aRhs.SemanticId() == EGenericParamNameAsString) || + (aRhs.SemanticId() == EGenericParamNameAsStringTransient))) + return ((aLhs.Name() == aRhs.Name()) && (aLhs.Value() == aRhs.Value())); + else + return + ((aLhs.SemanticId() == aRhs.SemanticId()) && + (aLhs.Value() == aRhs.Value())); + } + + +// CLiwGenericParamList + +inline CLiwGenericParamList::CLiwGenericParamList() + { + } + +EXPORT_C CLiwGenericParamList* CLiwGenericParamList::NewL() + { + CLiwGenericParamList *self = NewLC(); + CleanupStack::Pop(self); + return self; + } + +EXPORT_C CLiwGenericParamList* CLiwGenericParamList::NewL(RReadStream& aReadStream) + { + CLiwGenericParamList *self = NewLC(aReadStream); + CleanupStack::Pop(self); + return self; + } + +EXPORT_C CLiwGenericParamList* CLiwGenericParamList::NewLC() + { + CLiwGenericParamList *self = new( ELeave ) CLiwGenericParamList(); + CleanupStack::PushL( self ); + return self; + } + +EXPORT_C CLiwGenericParamList* CLiwGenericParamList::NewLC(RReadStream& aReadStream) + { + CLiwGenericParamList *self = new( ELeave ) CLiwGenericParamList(); + CleanupStack::PushL( self ); + self->AppendL(aReadStream); + return self; + } + +CLiwGenericParamList::~CLiwGenericParamList() + { + for (TInt index = iParameters.Count()-1; index >= 0; --index) + { + // Can use Destroy because the parameters cannot be accessed anymore + iParameters[index].Destroy(); + } + iParameters.Close(); + } + +EXPORT_C TInt CLiwGenericParamList::Count() const + { + return iParameters.Count(); + } + +EXPORT_C TInt CLiwGenericParamList::Count(TGenericParamId aSemanticId, + TVariantTypeId aDataType) const + { + TInt result = 0; + const TInt count = iParameters.Count(); + + for (TInt index = 0; index < count; index++) + { + const TLiwGenericParam& param = iParameters[index]; + if (param.SemanticId() == aSemanticId) + { + if (aDataType==EVariantTypeAny || param.Value().TypeId()==aDataType) + { + result++; + } + } + } + return result; + } + + +EXPORT_C const TLiwGenericParam& CLiwGenericParamList::operator[](TInt aIndex) const + { + return iParameters[aIndex]; + } + +EXPORT_C void CLiwGenericParamList::AtL(TInt aIndex, TLiwGenericParam& aParam) const + { + aParam.CopyLC(iParameters[aIndex]); + CleanupStack::Pop(&aParam); + } + +EXPORT_C void CLiwGenericParamList::AppendL(const TLiwGenericParam& aParam) + { + TLiwGenericParam newParam; + newParam.CopyLC(aParam); + User::LeaveIfError(iParameters.Append(newParam)); + CleanupStack::Pop(&newParam); + + //__ASSERT_DEBUG((*this)[Count()-1]==aParam, Panic(EPanicPostCond_AppendL)); + } + + +EXPORT_C TBool CLiwGenericParamList::Remove(TInt aSemanticId) + { + const TInt count = iParameters.Count(); + for (TInt index = 0; index < count; ++index) + { + const TLiwGenericParam& param = iParameters[index]; + if (param.SemanticId() == aSemanticId) + { + iParameters.Remove(index); + return ETrue; + } + } + + return EFalse; + } + +EXPORT_C void CLiwGenericParamList::Remove(const TDesC8& aName) + { + TInt start = 0; + FindFirst(start, aName); + while (start != KErrNotFound) + { + // Can use Destroy because the parameters cannot be accessed anymore + iParameters[start].Destroy(); + iParameters.Remove(start); + start = 0; + FindFirst(start, aName); + } + } + +EXPORT_C void CLiwGenericParamList::Reset() + { + for (TInt index = iParameters.Count()-1; index >= 0; --index) + { + // Can use Destroy because the parameters cannot be accessed anymore + iParameters[index].Destroy(); + iParameters.Remove(index); + } + + __ASSERT_DEBUG(Count()==0, Panic(EPanicPostCond_Reset)); + } + +EXPORT_C const TLiwGenericParam* CLiwGenericParamList::FindFirst( + TInt &aIndex, + TGenericParamId aSemanticId, + TVariantTypeId aDataType) const + { + if (aIndex >= 0) + { + const TInt count = iParameters.Count(); + for (TInt index = aIndex; index < count; ++index) + { + const TLiwGenericParam& param = iParameters[index]; + if (param.SemanticId() == aSemanticId) + { + if (aDataType==EVariantTypeAny || param.Value().TypeId()==aDataType) + { + aIndex = index; + return ¶m; + } + } + } + } + aIndex = KErrNotFound; + return NULL; + } + +EXPORT_C const TLiwGenericParam* CLiwGenericParamList::FindNext( + TInt &aIndex, + TGenericParamId aSemanticId, + TVariantTypeId aDataType) const + { + if (aIndex < 0) + { + aIndex = KErrNotFound; + return NULL; + } + + TInt index = aIndex+1; + const TLiwGenericParam* result = FindFirst(index, aSemanticId, aDataType); + aIndex = index; + return result; + } + +EXPORT_C const TLiwGenericParam* CLiwGenericParamList::FindNext( + TInt &aIndex, + const TDesC8& aName, + TVariantTypeId aDataType) const + { + if (aIndex < 0) + { + aIndex = KErrNotFound; + return NULL; + } + + TInt index = aIndex+1; + const TLiwGenericParam* result = FindFirst(index, aName, aDataType); + aIndex = index; + return result; + } + +EXPORT_C const TLiwGenericParam* CLiwGenericParamList::FindFirst + (TInt &aIndex, const TDesC8& aName, + TVariantTypeId aDataType) const + { + if (aIndex >= 0) + { + const TInt count = iParameters.Count(); + for (TInt index = aIndex; index < count; ++index) + { + const TLiwGenericParam& param = iParameters[index]; + if ((param.SemanticId() == EGenericParamNameAsString) && + (param.Name() == aName)) + { + if (aDataType==EVariantTypeAny || param.Value().TypeId()==aDataType) + { + aIndex = index; + return ¶m; + } + } + } + } + aIndex = KErrNotFound; + return NULL; + } + +EXPORT_C void CLiwGenericParamList::ExternalizeL(RWriteStream& aStream) const + { + aStream.WriteInt8L(KVersion); + const TInt count = iParameters.Count(); + aStream.WriteInt32L(count); + for (TInt index = 0; index < count; ++index) + { + iParameters[index].ExternalizeL(aStream); + } + } + +EXPORT_C TInt CLiwGenericParamList::Size() const + { + TInt size = sizeof (TInt8); // version + size += sizeof (TInt32); // param count + const TInt count = iParameters.Count(); + for (TInt index = 0; index < count; ++index) + { + size += iParameters[index].Size(); + } + return size; + } + +/** + * Appends parameters to this list from aStream. + */ +void CLiwGenericParamList::AppendL(RReadStream& aReadStream) + { + /*const TInt version =*/ aReadStream.ReadInt8L(); + + TInt count = aReadStream.ReadInt32L(); + while (count--) + { + TLiwGenericParam param; + CleanupStack::PushL(param); + param.InternalizeL(aReadStream); + User::LeaveIfError(iParameters.Append(param)); + CleanupStack::Pop(¶m); + } + } + + + +EXPORT_C void CLiwGenericParamList::InternalizeL(RReadStream& aStream) + { + AppendL(aStream); + } + + +EXPORT_C HBufC8* CLiwGenericParamList::PackForServerL(TIpcArgs& aArgs) + { + TInt index; + TInt rfileCount = 0; + RFile fhandle; + + HBufC8* buf = HBufC8::NewLC(Size() + iParameters.Count()); + TPtr8 des = buf->Des(); + RDesWriteStream outstrm(des); + CleanupClosePushL(outstrm); + + outstrm.WriteInt16L(iParameters.Count()); + + for (index = 0; index < iParameters.Count(); index++) + { + if (iParameters[index].Value().TypeId() == EVariantTypeFileHandle) + { + if (rfileCount == 0) + { + outstrm.WriteInt8L(iParameters[index].Value().TypeId()); + outstrm.WriteInt32L(iParameters[index].SemanticId()); + if (iParameters[index].Value().Get(fhandle)) + { + rfileCount++; + } + } + } + else + { + outstrm.WriteInt8L(iParameters[index].Value().TypeId()); + iParameters[index].ExternalizeL( outstrm ); + } + } + + outstrm.CommitL(); + CleanupStack::PopAndDestroy(&outstrm); + + aArgs.Set(0, buf); + aArgs.Set(1, des.MaxLength()); + + if (rfileCount) + { + fhandle.TransferToServer(aArgs, KRFsSlot, KRFileSlot); + } + + CleanupStack::Pop(buf); // buf + + return buf; + } + + +EXPORT_C void CLiwGenericParamList::UnpackFromClientL(const RMessage2& aMsg) + { + TInt8 type; + TInt index; + TLiwGenericParam param; + TGenericParamId handleId = EGenericParamUnspecified; + TInt numFileHandles = 0; + + HBufC8* buf = HBufC8::NewLC(aMsg.Int1()); + TPtr8 ptr(buf->Des()); + aMsg.ReadL(0, ptr); + RDesReadStream instrm(buf->Des()); + + const TInt16 count = instrm.ReadInt16L(); + for (index = 0; index < count; index++) + { + type = instrm.ReadInt8L(); + if (type == EVariantTypeFileHandle) + { + if (numFileHandles == 0) + { + handleId = (TGenericParamId)instrm.ReadInt32L(); + numFileHandles++; + } + } + else + { + param.InternalizeL(instrm); + AppendL(param); + param.Reset(); + } + } + + if (numFileHandles) + { + RFile file; + file.AdoptFromClient(aMsg, KRFsSlot, KRFileSlot); + TLiwVariant variant(file); + AppendL(TLiwGenericParam(handleId, variant)); + } + + CleanupStack::PopAndDestroy(buf); // buf + } + + +EXPORT_C void CLiwGenericParamList::AppendL(const CLiwGenericParamList& aList) + { + for (TInt index = 0; index < aList.iParameters.Count(); index++) + { + AppendL(aList.iParameters[index]); + } + } + +// End of file diff -r 000000000000 -r 99ef825efeca languageinterworkingfw/servicehandler/src/liwmenu.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/languageinterworkingfw/servicehandler/src/liwmenu.cpp Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,276 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Implements LIW Menu utilities for providers to access consumer menu. +* +*/ + + + + + + +#include +#include +#include +#include "liwmenu.h" +#include "liwcommon.hrh" + +// This is needed for resource reading. +const TInt KCCMask(0x00000fff); + + +EXPORT_C CLiwMenuPane::CLiwMenuPane(CEikMenuPane& aMenuPane, TInt aBaseCmdId) +: iMenuPane(&aMenuPane), iBaseCmdId(aBaseCmdId) + { + iNextCmdId = aBaseCmdId; + } + + +EXPORT_C CLiwMenuPane::~CLiwMenuPane() + { + delete iMenuPane; + + for(TInt i = 0; i < iIdMap.Count(); i++) + { + iIdMap[i].extraText.Close(); + } + + iIdMap.Reset(); + } + + +EXPORT_C void CLiwMenuPane::AddMenuItemL( + TInt aServiceCmd, + CEikMenuPaneItem::SData& aMenuItem, + TInt aIndex) + { + AddMenuItemL(aServiceCmd, aMenuItem, aIndex, KNullDesC()); + } + + +EXPORT_C void CLiwMenuPane::AddMenuItemL( + TInt aServiceCmd, + CEikMenuPaneItem::SData& aMenuItem, + TInt aIndex, + const TDesC& aExtraText) + { + SMenuIdMap map; + + map.dynMenuCmdId = iNextCmdId + iPaneOffset; + map.serviceCmdId = aServiceCmd; + map.origCmdId = aMenuItem.iCommandId; + map.owner = iInitializingOwner; + map.extraText.Assign(aExtraText.AllocL()); + CleanupClosePushL(map.extraText); + + aMenuItem.iCommandId = iNextCmdId + iPaneOffset; + iNextCmdId++; + + iMenuPane->InsertMenuItemL(aMenuItem, aIndex); + User::LeaveIfError(iIdMap.Append( map )); + CleanupStack::Pop(&(map.extraText)); // map.extraText + } + + + +EXPORT_C void CLiwMenuPane::AddMenuItemsL( + TResourceReader& aReader, + TInt aServiceCmd, + TInt aIndex, + TBool /*aAddSeperator*/) + { + CEikMenuPaneItem::SData data; + + TInt index = aIndex; + + TInt count = aReader.ReadInt16(); + for (TInt i = 0; i < count; i++) + { + data.iCommandId = aReader.ReadInt32(); + data.iCascadeId = aReader.ReadInt32(); + data.iFlags = aReader.ReadInt32(); + data.iText.Copy(aReader.ReadTPtrC()); + + // Extra text (additional submenu text) must be handled separately + // because SData doesn't offer space for it. + TPtrC extraText = aReader.ReadTPtrC(); + + aReader.ReadTPtrC(); // Skip bmpfile. + aReader.ReadInt16(); // Skip bmpid. + aReader.ReadInt16(); // Skip bmpmask. + aReader.ReadInt32(); // Skip extension. + + if (data.iCommandId == LIW_SUBMENU_TITLE) + { + AddTitleItemL(data.iText, index); + } + else + { + AddMenuItemL(aServiceCmd, data, index++, extraText); + } + } + } + + + +EXPORT_C void CLiwMenuPane::AddMenuItemsL( + TFileName& aFileName, + TInt aResId, + TInt aServiceCmd, + TInt aIndex, + TBool aAddSeparator) + { + TResourceReader reader; + + RFs fsSession; + User::LeaveIfError( fsSession.Connect() ); + CleanupClosePushL( fsSession ); + + BaflUtils::NearestLanguageFile(fsSession, aFileName); + + RResourceFile rsFile; + rsFile.OpenL( fsSession, aFileName ); + CleanupClosePushL( rsFile ); + + // Read multitapping resource. + HBufC8* rBuffer = rsFile.AllocReadLC(aResId & KCCMask); // Remove offset from id + reader.SetBuffer( rBuffer ); + + AddMenuItemsL(reader, aServiceCmd, aIndex, aAddSeparator); + + CleanupStack::PopAndDestroy(rBuffer); // rBuffer, rsFile, fsSession + CleanupStack::PopAndDestroy(&rsFile); + CleanupStack::PopAndDestroy(&fsSession); + } + + + +EXPORT_C TInt CLiwMenuPane::MenuCmdId(TInt aDynCmdId) const + { + for (TInt i = 0; i < iIdMap.Count(); i++) + { + if (iIdMap[i].dynMenuCmdId == aDynCmdId) + { + return iIdMap[i].origCmdId; + } + } + + return 0; + } + + + +EXPORT_C TInt CLiwMenuPane::DynCmdId(TInt aMenuCmdId) const + { + for (TInt i = 0; i < iIdMap.Count(); i++) + { + if (iIdMap[i].origCmdId == aMenuCmdId) + { + return iIdMap[i].dynMenuCmdId; + } + } + + return 0; + } + + + +EXPORT_C TInt CLiwMenuPane::ServiceCmdId(TInt aDynCmdId) const + { + for (TInt i = 0; i < iIdMap.Count(); i++) + { + if (iIdMap[i].dynMenuCmdId == aDynCmdId) + { + return iIdMap[i].serviceCmdId; + } + } + + return 0; + } + + + +TInt CLiwMenuPane::FindCmdId(TInt aIndex) + { + TInt index; + + for (TInt i = 0; i < iIdMap.Count(); i++) + { + if (iMenuPane->MenuItemExists(iIdMap[i].dynMenuCmdId, index)) + { + if (aIndex == index) + { + return iIdMap[i].dynMenuCmdId; + } + } + } + + return -1; + } + + + +EXPORT_C void CLiwMenuPane::AddTitleItemL(const TDesC& aTitle, TInt aIndex) + { + CEikMenuPaneItem::SData data; + + data.iCommandId = LIW_SUBMENU_TITLE; + data.iCascadeId = 0; + data.iFlags = 0; + data.iText.Copy(aTitle); + + iMenuPane->InsertMenuItemL(data, aIndex); + } + + +TBool CLiwMenuPane::IsCmdInRange(TInt aCmdSpaceSize, TInt aCmd) + { + if ((aCmd >= iPaneOffset + iBaseCmdId) && + (aCmd < iPaneOffset + iBaseCmdId + aCmdSpaceSize)) + { + return ETrue; + } + + return EFalse; + } + + +CLiwServiceIfBase* CLiwMenuPane::CommandOwner(TInt aDynCmd) const + { + for (TInt i = 0; i < iIdMap.Count(); i++) + { + if (iIdMap[i].dynMenuCmdId == aDynCmd) + { + return iIdMap[i].owner; + } + } + + return NULL; + } + + +const TDesC& CLiwMenuPane::ExtraText(TInt aDynMenuCmdId) + { + TInt count = iIdMap.Count(); + for(TInt i = 0; i < count; i++) + { + if(iIdMap[i].dynMenuCmdId == aDynMenuCmdId) + { + return iIdMap[i].extraText; + } + } + return KNullDesC; + } + +// End of file diff -r 000000000000 -r 99ef825efeca languageinterworkingfw/servicehandler/src/liwmenubinding.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/languageinterworkingfw/servicehandler/src/liwmenubinding.cpp Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,89 @@ +/* +* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + + +#include +#include "liwmenubinding.h" + +CLiwMenuBinding* CLiwMenuBinding::NewL() + { + CLiwMenuBinding* bind = new (ELeave) CLiwMenuBinding(); + CleanupStack::PushL(bind); + bind->ConstructL(); + CleanupStack::Pop(bind); // bind + return bind; + } + + +CLiwMenuBinding* CLiwMenuBinding::NewL(TInt aMenuItemIndex, TInt aParentId) + { + CLiwMenuBinding* bind = new (ELeave) CLiwMenuBinding(aMenuItemIndex, aParentId); + CleanupStack::PushL(bind); + bind->ConstructL(); + CleanupStack::Pop(bind); // bind + return bind; + } + + +CLiwMenuBinding* CLiwMenuBinding::NewLC() + { + CLiwMenuBinding* bind = new (ELeave) CLiwMenuBinding(); + CleanupStack::PushL(bind); + bind->ConstructL(); + return bind; + } + + +CLiwMenuBinding* CLiwMenuBinding::NewLC(TInt aMenuItemIndex, TInt aMenuId) + { + CLiwMenuBinding* bind = new (ELeave) CLiwMenuBinding(aMenuItemIndex, aMenuId); + CleanupStack::PushL(bind); + bind->ConstructL(); + return bind; + } + + + +CLiwMenuBinding::CLiwMenuBinding() + { + } + + +void CLiwMenuBinding::ConstructL() + { + } + + +CLiwMenuBinding::CLiwMenuBinding(TInt aMenuItemIndex, TInt aMenuId) +:iMenuItemIndex(aMenuItemIndex), iMenuId(aMenuId) + { + // Nothing to do here. + } + + + +CLiwMenuBinding::~CLiwMenuBinding() + { + } + + +// End of file + diff -r 000000000000 -r 99ef825efeca languageinterworkingfw/servicehandler/src/liwresolver.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/languageinterworkingfw/servicehandler/src/liwresolver.cpp Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,328 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Implementation of Custom ECom Resolver for LIW. +* +*/ + + + + + + +#include "liwresolver.h" + +const TInt KMaxDataItemSize = 150; +_LIT8(KContentTag, ""); +_LIT8(KOpaqueTag, ""); + + +CLiwResolver* CLiwResolver::NewL(MPublicRegistry& aRegistry) + { + return new (ELeave) CLiwResolver(aRegistry); + } + + +CLiwResolver::CLiwResolver(MPublicRegistry& aRegistry) : CResolver(aRegistry) + { + // Nothing to do. + } + + +CLiwResolver::~CLiwResolver() + { + if (iImplementationInfoArray) + { + iImplementationInfoArray->Reset(); + delete iImplementationInfoArray; + } + } + + + +TUid CLiwResolver::IdentifyImplementationL(TUid aInterfaceUid, + const TEComResolverParams& aAdditionalParameters) const + { + RImplInfoArray& implementationsInfo = iRegistry.ListImplementationsL(aInterfaceUid); + TUid found = KNullUid; + + if(implementationsInfo.Count()) + { + found = Resolve(implementationsInfo, aAdditionalParameters); + } + + return found; + } + + + +RImplInfoArray* CLiwResolver::ListAllL(TUid aInterfaceUid, + const TEComResolverParams& aAdditionalParameters) const + { + // Use the member var to create the array so that we get proper cleanup behaviour + delete iImplementationInfoArray; + iImplementationInfoArray = NULL; + iImplementationInfoArray = new (ELeave) RImplInfoArray; + RImplInfoArray* retList = iImplementationInfoArray; + + RImplInfoArray& fullList = iRegistry.ListImplementationsL(aInterfaceUid); + + const TBool useWildcards = aAdditionalParameters.IsWildcardMatch(); + TBuf8 content; + TBuf8 opaque; + + ParseInput(aAdditionalParameters.DataType(), content, opaque); + const TInt numImps = fullList.Count(); + + for (TInt index = 0; index < numImps; ++index) + { + if (Match(fullList[index]->DataType(), content, useWildcards) && + MatchServiceCmd(fullList[index]->OpaqueData(), opaque)) + { + User::LeaveIfError(retList->Append(fullList[index])); + } + } + + // Reset the member variable because we are passing ownership back + iImplementationInfoArray = NULL; + + return retList; + } + + + +void CLiwResolver::ParseInput(const TDesC8& aParam, TDes8& aContent, TDes8& aOpaque) const + { + TInt cind = aParam.Find(KContentTag); + TInt oind = aParam.Find(KOpaqueTag); + + if (cind != KErrNotFound) + { + if (oind != KErrNotFound) + { + aContent.Copy(aParam.Mid(cind + (&KContentTag)->Length(), + oind - (cind + (&KContentTag)->Length()))); + } + else + { + aContent.Copy(aParam.Mid(cind + (&KContentTag)->Length())); + } + } + + if (oind != KErrNotFound) + { + aOpaque.Copy(aParam.Mid(oind + (&KOpaqueTag)->Length())); + } + } + + + +TUid CLiwResolver::Resolve(const RImplInfoArray& aImplementationsInfo, + const TEComResolverParams& aAdditionalParameters) const + { + // Loop through the implementations matching on type + const TInt count = aImplementationsInfo.Count(); + + for (TInt index = 0; index < count; ++index) + { + const CImplementationInformation& impData = *aImplementationsInfo[index]; + // As soon as we get a match on the datatype then return uid of the + // implementation found. + if (Match(impData.DataType(), // The Datatype of this implementation + aAdditionalParameters.DataType(), // The type we are trying to find + aAdditionalParameters.IsWildcardMatch())) // If wildcards should be used + { + return impData.ImplementationUid(); + } + } + + return KNullUid; + } + + +TBool CLiwResolver::Match(const TDesC8& aImplementationType, const TDesC8& aMatchType, + TBool aUseWildcards) const + { + TInt matchPos = KErrNotFound; + + _LIT8(dataSeparator, "||"); + const TInt separatorLength = dataSeparator().Length(); + + // Look for the section separator marker '||' + TInt separatorPos = aImplementationType.Find(dataSeparator); + + if (separatorPos == KErrNotFound) + { + // Match against the whole string + if (aUseWildcards) + { + matchPos = aImplementationType.Match(aMatchType); + } + else + { + + if (aImplementationType.Compare(aMatchType) == 0) + { + matchPos = KErrNone; + } + } + } + else + { + // Find the first section, up to the separator + TPtrC8 dataSection = aImplementationType.Left(separatorPos); + TPtrC8 remainingData = aImplementationType.Mid(separatorPos + separatorLength); + + // Match against each section in turn + while (separatorPos != KErrNotFound) + { + // Search this section + if (aUseWildcards) + { + matchPos = dataSection.Match(aMatchType); + } + else + { + matchPos = dataSection.Compare(aMatchType); + } + + // If we found it then no need to continue, so return + if (matchPos != KErrNotFound) + { + return ETrue; + } + + // Move on to the next section + separatorPos = remainingData.Find(dataSeparator); + + if (separatorPos != KErrNotFound) + { + dataSection.Set(remainingData.Left(separatorPos)); + remainingData.Set(remainingData.Mid(separatorPos + separatorLength)); + } + else + { + dataSection.Set(remainingData); + } + } + + // Check the final part + if (aUseWildcards) + { + matchPos = dataSection.Match(aMatchType); + } + else + { + matchPos = dataSection.Compare(aMatchType); + } + + } + + return matchPos != KErrNotFound; + } + + + + +TBool CLiwResolver::MatchServiceCmd(const TDesC8& aOpaqueData, const TDesC8& aServiceCmd) const + { + _LIT8(KWild,"*"); + + //check for wildcard character * + //if yes, return immediatly + if(0==aServiceCmd.Compare(KWild)) + return ETrue; + + // Extract List Of service command from OpaQue Data + _LIT8(MetadataSeparator, "::"); + TPtrC8 dataSection; + TInt MetadataSeparatorPos = aOpaqueData.Find(MetadataSeparator); + if (MetadataSeparatorPos != KErrNotFound) + { + dataSection.Set(aOpaqueData.Left(MetadataSeparatorPos)); + } + else + { + dataSection.Set(aOpaqueData); + } + + _LIT8(dataSeparator, "||"); + const TInt separatorLength = dataSeparator().Length(); + + // Look for the section separator marker '||' + TInt separatorPos = dataSection.Find(dataSeparator); + + if (separatorPos == KErrNotFound) + { + if (aServiceCmd.Compare(dataSection) == 0) + { + return ETrue; + } + } + else + { + // Find the first section, up to the separator + TPtrC8 remainingData = dataSection.Mid(separatorPos + separatorLength); + dataSection.Set(dataSection.Left(separatorPos)); + + // Match against each section in turn + while (separatorPos != KErrNotFound) + { + if (dataSection.Compare(aServiceCmd) == 0) + { + return ETrue; + } + + // Move on to the next section + separatorPos = remainingData.Find(dataSeparator); + + if (separatorPos != KErrNotFound) + { + dataSection.Set(remainingData.Left(separatorPos)); + remainingData.Set(remainingData.Mid(separatorPos + separatorLength)); + } + else + { + dataSection.Set(remainingData); + } + } + + if (dataSection.Compare(aServiceCmd) == 0) + { + return ETrue; + } + } + + return EFalse; + } + +// Map the interface UIDs +const TImplementationProxy ImplementationTable[] = + { + IMPLEMENTATION_PROXY_ENTRY(KLiwResolverImplUidValue, CLiwResolver::NewL) + }; + +// Exported proxy for instantiation method resolution +// --------------------------------------------------------- +// +// +// --------------------------------------------------------- +// +EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount) + { + aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy); + return ImplementationTable; + } + +// End of file + diff -r 000000000000 -r 99ef825efeca languageinterworkingfw/servicehandler/src/liwservicedata.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/languageinterworkingfw/servicehandler/src/liwservicedata.cpp Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,159 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Class modelling service provider data. The important +* service provider data that are part of this class +* is metadata information. +* +*/ + + + + + + + +#include "LiwServiceData.h" +#include +#include + +#include + +#include + +/** +* Creates and returns an instance of \c CLiwServiceData +* +* @return an instance of \c CLiwServiceData +*/ +CLiwServiceData* CLiwServiceData::NewL() +{ + CLiwServiceData* srvData = CLiwServiceData::NewLC(); + CleanupStack::Pop(srvData); + return srvData; +} + +/** +* Creates and returns an instance of \c CLiwServiceData. +* Leaves the created instance in the cleanupstack. +* +* @return an instance of \c CLiwServiceData +*/ +CLiwServiceData* CLiwServiceData::NewLC() +{ + CLiwServiceData* srvData = new (ELeave) CLiwServiceData(); + CleanupStack::PushL( srvData ); + srvData->ConstructL(); + return srvData; +} + +/** +* Default constructor +* +*/ +CLiwServiceData::CLiwServiceData():iDataList(NULL) +{ +} + +/** +* Instantiates metadata instance +* +*/ +void CLiwServiceData::ConstructL() +{ + iDataList = CLiwGenericParamList::NewL(); +} + +/** +* Destructor. Cleans up the metadata instance +* +*/ +CLiwServiceData::~CLiwServiceData() +{ + if(iDataList) + { + iDataList->Reset(); + delete iDataList; + } +} + +CLiwGenericParamList* CLiwServiceData::GetMetaData() const +{ + if(iDataList) + return iDataList; + else + return NULL; +} + +void CLiwServiceData::AddMetaDataL(const TDesC8& aKey, const TLiwVariant& aValue) +{ + TInt idx(0); + const TLiwGenericParam* constParam = iDataList->FindFirst(idx,aKey); + + if(constParam) + { + TLiwGenericParam* param = const_cast(constParam); + + //list exists already..fetch the value list and append aValue to it + CLiwList* pValues = const_cast(param->Value().AsList()); + pValues->AppendL(aValue); + } + else + { + //key does not exist so far.. + CLiwList* pValues = CLiwDefaultList::NewLC(); + pValues->AppendL(aValue); + + iDataList->AppendL(TLiwGenericParam(aKey,TLiwVariant(pValues))); + CleanupStack::Pop(pValues); + pValues->DecRef(); + } +} + +/* + * Adds a metadata name-value pair if not already added. If the key already + * exists, then the new metadata value (if does not exist already) will be added + * to the list of values associated with a metadata key. + * + * @param aKey the metadata key to be inserted + * @param aValue the metadata value corresponding to the key to be added + * + */ +void CLiwServiceData::AddMetaDataL(const TDesC8& aKey, const TDesC8& aValue) +{ + HBufC *buff = EscapeUtils::ConvertToUnicodeFromUtf8L(aValue); + CleanupStack::PushL(buff); + TPtrC ptr = buff->Des(); + TLiwVariant tempVar(ptr); + tempVar.PushL(); + + this->AddMetaDataL(aKey,tempVar); + + CleanupStack::Pop(&tempVar); + tempVar.Reset(); + CleanupStack::PopAndDestroy(buff); +} + +/* + * Removes all the metadata key-value pairs. + * This is called from service handler implementation if and only + * if there is an error in parsing. Since, the FW uses SAX parser + * and if the XML error happens after the metadata entries are + * created, the entries should be cleaned up. + * + */ +void CLiwServiceData::CleanUpMetaData() +{ + iDataList->Reset(); +} + diff -r 000000000000 -r 99ef825efeca languageinterworkingfw/servicehandler/src/liwservicehandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/languageinterworkingfw/servicehandler/src/liwservicehandler.cpp Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,271 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Implements API for consumer application to access Language +* Interworking Framework. +* +*/ + + + + + + +#include +#include +#include "liwmenubinding.h" +#include "liwservicehandler.h" +#include "liwservicehandlerimpl.h" +#include "liwmenu.h" +#include "liwuids.hrh" +#include "liwcommon.hrh" +#include "liwtlsdata.h" + + +// +// LiwServiceHandler +// + +EXPORT_C CLiwServiceHandler* CLiwServiceHandler::NewL() + { + CLiwServiceHandler* handler = new (ELeave) CLiwServiceHandler(); + CleanupStack::PushL( handler ); + handler->ConstructL(); + CleanupStack::Pop(handler); // handler + return handler; + } + + +EXPORT_C CLiwServiceHandler* CLiwServiceHandler::NewLC() + { + CLiwServiceHandler* handler = new (ELeave) CLiwServiceHandler(); + CleanupStack::PushL( handler ); + handler->ConstructL(); + return handler; + } + + +CLiwServiceHandler::CLiwServiceHandler() + { + // Nothing to do here. + } + + +void CLiwServiceHandler::ConstructL() + { + iImpl = CLiwServiceHandlerImpl::NewL(); + } + + +EXPORT_C CLiwServiceHandler::~CLiwServiceHandler() + { + delete iImpl; + } + + +EXPORT_C void CLiwServiceHandler::Reset() + { + iImpl->Reset(); + } + + +EXPORT_C TInt CLiwServiceHandler::NbrOfProviders(const CLiwCriteriaItem* aCriteria) + { + return iImpl->NbrOfProviders(aCriteria); + } + + +EXPORT_C void CLiwServiceHandler::AttachL(TInt aInterestResourceId) + { + iImpl->AttachL(aInterestResourceId); + } + + +EXPORT_C TInt CLiwServiceHandler::AttachL(const RCriteriaArray& aInterest) + { + return (iImpl->AttachL(aInterest,NULL)); + } + +EXPORT_C TInt CLiwServiceHandler::AttachL(const RCriteriaArray& aInterest,CRTSecMgrScriptSession& aSecMgrScriptSession) + { + return (iImpl->AttachL(aInterest,&aSecMgrScriptSession)); + } + +EXPORT_C void CLiwServiceHandler::GetInterest(RCriteriaArray& aInterest) + { + iImpl->GetInterest(aInterest); + } + + +EXPORT_C void CLiwServiceHandler::DetachL(const RCriteriaArray& aInterest) + { + iImpl->DetachL(aInterest); + } + + +EXPORT_C void CLiwServiceHandler::DetachL(TInt aInterestResourceId) + { + iImpl->DetachL(aInterestResourceId); + } + + +EXPORT_C const CLiwCriteriaItem* CLiwServiceHandler::GetCriteria(TInt aId) + { + return iImpl->GetCriteria(aId); + } + + +EXPORT_C void CLiwServiceHandler::InitializeMenuPaneL( + CEikMenuPane& aMenuPane, + TInt aMenuResourceId, + TInt aBaseMenuCmdId, + const CLiwGenericParamList& aInParamList) + { + iImpl->InitializeMenuPaneL(aMenuPane, aMenuResourceId, aBaseMenuCmdId, aInParamList); + } + +EXPORT_C void CLiwServiceHandler::InitializeMenuPaneL( + CEikMenuPane& aMenuPane, + TInt aMenuResourceId, + TInt aBaseMenuCmdId, + const CLiwGenericParamList& aInParamList, + TBool aUseSubmenuTextsIfAvailable) + { + iImpl->InitializeMenuPaneL(aMenuPane, + aMenuResourceId, + aBaseMenuCmdId, + aInParamList, + aUseSubmenuTextsIfAvailable); + } + + +EXPORT_C TInt CLiwServiceHandler::ServiceCmdByMenuCmd(TInt aMenuCmdId) const + { + return iImpl->ServiceCmdByMenuCmd(aMenuCmdId); + } + + +EXPORT_C void CLiwServiceHandler::ExecuteMenuCmdL( + TInt aMenuCmdId, + const CLiwGenericParamList& aInParamList, + CLiwGenericParamList& aOutParamList, + TUint aCmdOptions, + MLiwNotifyCallback* aCallback) + { + iImpl->ExecuteMenuCmdL(aMenuCmdId, aInParamList, aOutParamList, aCmdOptions, aCallback); + } + + +EXPORT_C void CLiwServiceHandler::AttachMenuL(TInt aMenuResourceId, TInt aInterestResourceId) + { + iImpl->AttachMenuL(aMenuResourceId, aInterestResourceId); + } + + +EXPORT_C void CLiwServiceHandler::AttachMenuL(TInt aMenuResourceId, TResourceReader& aReader) + { + iImpl->AttachMenuL(aMenuResourceId, aReader); + } + +EXPORT_C void CLiwServiceHandler::AttachMenuL(TInt aMenuResourceId, const RCriteriaArray& aInterest) + { + iImpl->AttachMenuL(aMenuResourceId, aInterest); + } + +EXPORT_C void CLiwServiceHandler::AttachMenuL(RArray& aMenuEntries, TInt aMenuResourceId, + RCriteriaArray& aInterest) + { + iImpl->AttachMenuL(aMenuEntries, aMenuResourceId, aInterest); + } + +EXPORT_C void CLiwServiceHandler::DetachMenu(TInt aMenuResourceId, TInt aInterestResourceId) + { + iImpl->DetachMenu(aMenuResourceId, aInterestResourceId); + } + + +EXPORT_C TBool CLiwServiceHandler::IsSubMenuEmpty(TInt aSubMenuId) + { + return iImpl->IsSubMenuEmpty(aSubMenuId); + } + + +EXPORT_C void CLiwServiceHandler::ExecuteServiceCmdL( + const TInt& aCmdId, + const CLiwGenericParamList& aInParamList, + CLiwGenericParamList& aOutParamList, + TUint aCmdOptions, + MLiwNotifyCallback* aCallback) + { + iImpl->ExecuteServiceCmdL(aCmdId, aInParamList, aOutParamList, aCmdOptions, aCallback); + } + +EXPORT_C void CLiwServiceHandler::ExecuteServiceCmdL( + const CLiwCriteriaItem& aCmd, + const CLiwGenericParamList& aInParamList, + CLiwGenericParamList& aOutParamList, + TUint aCmdOptions, + MLiwNotifyCallback* aCallback) + { + iImpl->ExecuteServiceCmdL(aCmd, aInParamList, aOutParamList, aCmdOptions, aCallback); + } + +EXPORT_C CLiwGenericParamList& CLiwServiceHandler::InParamListL() + { + return iImpl->InParamListL(); + } + + +EXPORT_C CLiwGenericParamList& CLiwServiceHandler::OutParamListL() + { + return iImpl->OutParamListL(); + } + + +EXPORT_C TBool CLiwServiceHandler::IsLiwMenu(TInt aMenuResourceId) + { + return iImpl->IsLiwMenu(aMenuResourceId); + } + + +EXPORT_C TBool CLiwServiceHandler::HandleSubmenuL(CEikMenuPane& aPane) + { + return iImpl->HandleSubmenuL(aPane); + } + + +EXPORT_C TInt CLiwServiceHandler::MenuCmdId(TInt aMenuCmdId) const + { + return iImpl->MenuCmdId(aMenuCmdId); + } + + +EXPORT_C void CLiwServiceHandler::ReportMenuLaunch() + { + CLiwTlsData* data = CLiwTlsData::Instance(); + if(data) + { + data->ReportMenuLaunch(); + } + } + + +EXPORT_C void CLiwServiceHandler::QueryImplementationL(RCriteriaArray& aFilterItem, RCriteriaArray& aProviderList) + { + for(TInt itemIndex = 0; itemIndex < aFilterItem.Count(); ++itemIndex) + { + iImpl->QueryImplementationL(aFilterItem[itemIndex], aProviderList); + } + + } +// End of file diff -r 000000000000 -r 99ef825efeca languageinterworkingfw/servicehandler/src/liwservicehandlerimpl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/languageinterworkingfw/servicehandler/src/liwservicehandlerimpl.cpp Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,3033 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Implements API for consumer application to access Language +* Interworking Framework. +* +*/ + + + + + + +#include +#include // file helpers +#include +#include "liwmenubinding.h" +#include "liwservicehandler.h" +#include "liwservicehandlerimpl.h" +#include "liwmenu.h" +#include "liwuids.hrh" +#include "liwcommon.hrh" +#include "liwmenuslot.hrh" +#include "liwecommonitor.h" +#include "liwtlsdata.h" +#include "data_caging_path_literals.hrh" + +#include "LiwXmlHandler.h" +#include "LiwServiceData.h" + +#include + +// CONSTANTS +// Max number of empty menu resource slots. +const TInt KMaxMenuResources = 16; + +// This value tells how many times consumer can call InitializeMenuPaneL() without +// closing the Options-menu. +const TInt KMaxPaneIds = KMaxMenuResources; + +// The range reserved for individual menu pane. +const TInt KIndividualMenuPaneIdRange = 10000; + +// The whole range that is reserved to all menu panes. Currently value is 170 000. +const TInt KMenuPaneCommandRange = (KMaxMenuResources + 1) * KIndividualMenuPaneIdRange; + +_LIT(KLiwResourceFile, "liwServiceHandler.rsc"); +_LIT(KLiwZDrive, "z:"); +_LIT8(KDataSeparator, "||"); +_LIT(KPerExtension,".per"); + +const TInt KMaxMenuTitleSize = 100; + +// Command id space reserved for single placeholder. +const TInt KPlaceholderCmdIdRange = 200; + +const TInt KMaxLength=255; + +const TReal KDefVersion = 1.0; +const TReal KUnspVersion = 0.0; + +void Cleanup(TAny* aAny); +void InterestCleanup(TAny* aAny); +void IntArrayCleanup(TAny* aAny); +void FilteredCleanup(TAny* aAny); +void Int32ArrayCleanup(TAny* aAny); +void InterfaceCleanup(TAny* aAny); + +_LIT8(KResolverInterface, "IResolver"); +_LIT8(KResolverDomain, "ServiceManager"); +_LIT8(serviceCmdSeparator, "::"); + +const TInt KDummySrvCmd=1; +_LIT(KCapabilityCommDD,"CDD"); +_LIT(KCapabilityPowerMgmt,"PMT"); +_LIT(KCapabilityMultimediaDD,"MDD"); +_LIT(KCapabilityReadDeviceData,"RDD"); +_LIT(KCapabilityWriteDeviceData,"WDD"); +_LIT(KCapabilityDRM,"DRM"); +_LIT(KCapabilityTrustedUI,"TUI"); +_LIT(KCapabilityProtServ,"PSV"); +_LIT(KCapabilityDiskAdmin,"DAD"); +_LIT(KCapabilityNetworkControl,"NWC"); +_LIT(KCapabilityAllFiles,"ALF"); +_LIT(KCapabilitySwEvent,"SWE"); +_LIT(KCapabilityNetworkServices,"NWS"); +_LIT(KCapabilityLocalServices,"LOS"); +_LIT(KCapabilityReadUserData,"RUD"); +_LIT(KCapabilityWriteUserData,"WUD"); +_LIT(KCapabilityLocation,"LOC"); +_LIT(KCapabilitySurroundingsDD,"SDD"); +_LIT(KCapabilityUserEnvironment,"USE"); + +using namespace LIW; +// +// LiwServiceHandler +// + +CLiwServiceHandlerImpl* CLiwServiceHandlerImpl::NewL() + { + CLiwServiceHandlerImpl* handler = new (ELeave) CLiwServiceHandlerImpl(); + CleanupStack::PushL( handler ); + handler->ConstructL(); + CleanupStack::Pop(handler); // handler + return handler; + } + + + +CLiwServiceHandlerImpl::CLiwServiceHandlerImpl() + { + // Nothing to do here. + } + + + +void CLiwServiceHandlerImpl::ConstructL() + { + TFileName resFile; + TCallBack callBack(SynchronizeCallBack, this); + iEcomMonitor = CLiwEcomMonitor::NewL(callBack); + + + iCoeEnv = CCoeEnv::Static(); + RFs rFs; + TInt err = rFs.Connect(); + + TFileName dllName; + Dll::FileName(dllName); + + TBuf<2> drive = dllName.Left(2); + resFile.Copy(drive); + resFile.Append(KDC_RESOURCE_FILES_DIR); + resFile.Append(KLiwResourceFile); + TBool fileExists( BaflUtils::FileExists(rFs, resFile) ); + if ( ! fileExists ) + { + resFile.Copy(KLiwZDrive); + resFile.Append(KDC_RESOURCE_FILES_DIR); + resFile.Append(KLiwResourceFile); + } + rFs.Close(); + // A Service Handler instance can be created also when CCoeEnv is not + // available (e.g. from server applications). In this case, the methods + // needing CCoeEnv/CEikonEnv will leave with KErrNotSupported. + if(iCoeEnv) + { + // This is commented to avoid resource file getting locked affecting the IAD update. + // Also, there is no use of resource file since LIW does not support menu related services + // iResourceOffset = iCoeEnv->AddResourceFileL(resFile); + } + // CLiwTlsData has a reference count so each OpenL call + // must have a matching Close call (done in destructor). + // OpenL is called only here, the TLS data object can be + // referenced by calling CLiwTlsData::Instance(). + CLiwTlsData* data = CLiwTlsData::OpenL(); + iTlsDataOpened = ETrue; + + // CEikMenuPane informs all menu launch observers + // when an options menu is launched. + data->AddMenuLaunchObserverL( this ); + } + + + +CLiwServiceHandlerImpl::~CLiwServiceHandlerImpl() + { + if (iResourceOffset && iCoeEnv) + { + // This is commented to avoid resource file getting locked affecting the IAD update. + // Also, there is no use of resource file since LIW does not support menu related services + // iCoeEnv->DeleteResourceFile(iResourceOffset); + } + Reset(); + + delete iEcomMonitor; + + if ( iTlsDataOpened ) + { + CLiwTlsData* data = CLiwTlsData::Instance(); + data->RemoveMenuLaunchObserver( this ); + CLiwTlsData::Close(); + } + } + + + +void CLiwServiceHandlerImpl::Reset() + { + iInterestList.ResetAndDestroy(); + iMenuBindings.ResetAndDestroy(); + iBaseBindings.ResetAndDestroy(); + iProviders.ResetAndDestroy(); + + iLastInitialized.Reset(); + + iMenuPanes.ResetAndDestroy(); + + delete iInParams; + iInParams = NULL; + delete iOutParams; + iOutParams = NULL; + } + +void CLiwServiceHandlerImpl::AttachServiceManagerPluginsL() +{ + CLiwCriteriaItem* crit = CLiwCriteriaItem::NewLC(KDummySrvCmd, KResolverInterface, KResolverDomain); + crit->SetServiceClass(TUid::Uid(KLiwClassBase)); + + RCriteriaArray a; + a.AppendL(crit); + + AttachL(a); + + CleanupStack::Pop(crit); // crit + a.ResetAndDestroy(); +} + +void CLiwServiceHandlerImpl::ServiceManagerPlugin_ListImplementationsL(RArray& aArray, + CLiwCriteriaItem* aItem) +{ + CLiwGenericParamList* inps = &(InParamListL()); + CLiwGenericParamList* outps = &(OutParamListL()); + + CLiwCriteriaItem* crit = CLiwCriteriaItem::NewLC(KDummySrvCmd, KResolverInterface, KResolverDomain); + crit->SetServiceClass(TUid::Uid(KLiwClassBase)); + + ExecuteServiceCmdL(*crit, *inps, *outps); + CleanupStack::PopAndDestroy(crit); // crit + + TInt pos = 0; + MLiwInterface* ifp; + const TLiwGenericParam* p = outps->FindFirst(pos, KResolverInterface, EVariantTypeInterface); + if (p) { + ifp = p->Value().AsInterface(); + CleanupStack::PushL(TCleanupItem(InterfaceCleanup, ifp)); + } + else + return; + + outps->Reset(); + inps->Reset(); + + _LIT8(KId,"id"); + _LIT8(KCmd,"cmd"); + _LIT8(KCmdStr,"cmd_str"); + _LIT8(KType,"type"); + _LIT8(KListImpl,"ListImplementations"); + + inps->AppendL(TLiwGenericParam(KId, TLiwVariant(aItem->Id()))); + inps->AppendL(TLiwGenericParam(KCmd, TLiwVariant(aItem->ServiceCmd()))); + inps->AppendL(TLiwGenericParam(KCmdStr, TLiwVariant(aItem->ServiceCmdStr()))); + inps->AppendL(TLiwGenericParam(KType, TLiwVariant(aItem->ContentType()))); + ifp->ExecuteCmdL(KListImpl, *inps, *outps); + + pos = 0; + p = outps->FindFirst(pos, EGenericParamError); + if (p && (p->Value().AsTInt32() == KErrNone)) { + pos = 0; + const CLiwList* list; + _LIT8(KIdList,"id_list"); + p = outps->FindFirst(pos, KIdList, EVariantTypeList); + if (p) { + list = p->Value().AsList(); + for (TInt i = 0; i < list->Count(); i++) { + TLiwVariant v; + v.PushL(); + list->AtL(i, v); + aArray.AppendL(v.AsTInt32()); + CleanupStack::Pop(&v); + v.Reset(); + } + } + } + + CleanupStack::Pop(ifp); // ifp + ifp->Close(); +} + +CLiwServiceIfBase* CLiwServiceHandlerImpl::ServiceManagerPlugin_CreateImplementationL(TInt32 aImplUid) +{ + CLiwGenericParamList* inps = &(InParamListL()); + CLiwGenericParamList* outps = &(OutParamListL()); + + CLiwCriteriaItem* crit = CLiwCriteriaItem::NewLC(KDummySrvCmd, KResolverInterface, KResolverDomain); + crit->SetServiceClass(TUid::Uid(KLiwClassBase)); + + ExecuteServiceCmdL(*crit, *inps, *outps); + CleanupStack::PopAndDestroy(crit); // crit + + TInt pos = 0; + MLiwInterface* ifp = NULL; + const TLiwGenericParam* p = outps->FindFirst(pos, KResolverInterface, EVariantTypeInterface); + if (p) { + ifp = p->Value().AsInterface(); + CleanupStack::PushL(TCleanupItem(InterfaceCleanup, ifp)); + } + else + User::Leave(KErrNotFound); + + outps->Reset(); + inps->Reset(); + _LIT8(KUid,"uid"); + _LIT8(KCreateImpl,"CreateImplementation"); + + inps->AppendL(TLiwGenericParam(KUid, TLiwVariant(aImplUid))); + ifp->ExecuteCmdL(KCreateImpl, *inps, *outps); + + pos = 0; + p = outps->FindFirst(pos, EGenericParamError); + User::LeaveIfError(p->Value().AsTInt32()); + + pos = 0; + CLiwServiceIfBase* iface = NULL; + _LIT8(KImplPtr, "impl_ptr"); + p = outps->FindFirst(pos, KImplPtr, EVariantTypeDesC8); + if (p) { + TPtrC8 buf = p->Value().AsData(); + if (buf.Size() == sizeof(iface)) + Mem::Copy(&iface, buf.Ptr(), buf.Size()); + else + User::Leave(KErrNotFound); + } + else + User::Leave(KErrNotFound); + + CleanupStack::Pop(ifp); // ifp + ifp->Close(); + + return iface; +} + +void CLiwServiceHandlerImpl::ListProvidersForCriteriaL(RArray& aResult, + CLiwCriteriaItem& aItem) + { + TInt i; + + for (i = 0; i < iProviders.Count(); i++) + { + if (iProviders[i]->HasCriteria(aItem)) + { + User::LeaveIfError(aResult.Append(iProviders[i]->ImplementationUid().iUid)); + } + } + } + + + +TInt CLiwServiceHandlerImpl::NbrOfProviders(const CLiwCriteriaItem* aCriteria) + { + if(!aCriteria) + { + return 0; + } + + TInt i, j; + + for (i = 0; i < iBaseBindings.Count(); i++) + { + for (j = 0; j < iBaseBindings[i]->Interest().Count(); j++) + { + if ((*iBaseBindings[i]->Interest()[j]) == (*aCriteria)) + { + return iBaseBindings[i]->NumberOfProviders(); + } + } + } + + for (i = 0; i < iMenuBindings.Count(); i++) + { + for (j = 0; j < iMenuBindings[i]->Interest().Count(); j++) + { + if ((*iMenuBindings[i]->Interest()[j]) == (*aCriteria)) + { + return iMenuBindings[i]->NumberOfProviders(); + } + } + } + + return 0; + } + + + +void CLiwServiceHandlerImpl::AttachL(TInt aInterestResourceId) + { + // CCoeEnv/CEikonEnv needs to be accessible. + if(!iCoeEnv) + { + User::Leave(KErrNotSupported); + } + + RCriteriaArray interest, filtered; + + CleanupStack::PushL( TCleanupItem( InterestCleanup, &interest ) ); + CleanupStack::PushL( TCleanupItem( FilteredCleanup, &filtered ) ); + + TResourceReader reader; + iCoeEnv->CreateResourceReaderLC(reader, aInterestResourceId); + ReadInterestListL(reader, interest); + CleanupStack::PopAndDestroy(); //reader + + FilterInterestListL(interest, filtered); + + DoAttachL(filtered,NULL); + + filtered.Reset(); + + CleanupStack::Pop(&filtered); // filtered + CleanupStack::Pop(&interest); // interest + } + + + +TInt CLiwServiceHandlerImpl::AttachL(const RCriteriaArray& aInterest) + { + return (this->AttachL(aInterest,NULL)); + } + +TInt CLiwServiceHandlerImpl::AttachL(const RCriteriaArray& aInterest ,CRTSecMgrScriptSession* aSecMgrScriptSession) + { + RCriteriaArray interest, filtered; + + CleanupStack::PushL( TCleanupItem( InterestCleanup, &interest ) ); + CleanupStack::PushL( TCleanupItem( FilteredCleanup, &filtered ) ); + + for(TInt i = 0; i < aInterest.Count(); i++) + { + CLiwCriteriaItem* item = CLiwCriteriaItem::NewLC(); + + item->SetId( aInterest[i]->Id() ); + if (aInterest[i]->ServiceCmd() == KLiwCmdAsStr) + item->SetServiceCmdL( aInterest[i]->ServiceCmdStr() ); + else + item->SetServiceCmd( aInterest[i]->ServiceCmd() ); + item->SetContentTypeL( aInterest[i]->ContentType() ); + item->SetServiceClass( aInterest[i]->ServiceClass() ); + + item->SetOptions( aInterest[i]->Options() ); + + //Setting the imetadataOptions of item + TLiwVariant metadataOption; + metadataOption.PushL(); + + aInterest[i]->GetMetaDataOptions(metadataOption); + item->SetMetaDataOptions(metadataOption); + metadataOption.Reset(); + + item->SetDefaultProvider( (aInterest[i]->DefaultProvider()).iUid ); + item->SetMaxProviders( aInterest[i]->MaxProviders() ); + + User::LeaveIfError(interest.Append(item)); + CleanupStack::Pop(&metadataOption); + CleanupStack::Pop(item); + } + + FilterInterestListL(interest, filtered); + + TInt result = DoAttachL(filtered,aSecMgrScriptSession); + + filtered.Reset(); + + CleanupStack::Pop(&filtered); // filtered + CleanupStack::Pop(&interest); // interest + + return result; + } + +TInt CLiwServiceHandlerImpl::DoAttachL(const RCriteriaArray& aInterest,CRTSecMgrScriptSession* aSecMgrScriptSession) + { + CLiwBinding* bind; + TInt success = -1; + for (TInt i = 0; i < aInterest.Count(); i++) + { + bind = CLiwBinding::NewLC(); + + success = ResolveProvidersL(bind, aInterest[i],aSecMgrScriptSession); + + if (success == KLiwServiceLoadSuccess) + { + User::LeaveIfError(iBaseBindings.Append( bind )); + CleanupStack::Pop(bind); // bind + bind->AddCriteriaL(aInterest[i]); + + // Initialise providers. + for (TInt k = 0; k < bind->NumberOfProviders(); k++) + { + // Trap the initialisation. If not done, a leaving provider + // could prevent the initialisation of other providers. + TRAPD(err, bind->BaseProvider(k)->InitialiseL(*this, bind->Interest())); + + + + if(err) + { +#ifdef _DEBUG + RDebug::Print(_L("LIW PROVIDER ERROR: CLiwServiceIfBase::InitialiseL() failed, leave code:%d"), err); +#endif + } + } + } + else + { + CleanupStack::PopAndDestroy(bind); // bind + } + } + return success; // returns status of 'n'th criteria in interest + } + + +void CLiwServiceHandlerImpl::GetInterest(RCriteriaArray& aInterest) + { + for (TInt i = 0; i < iInterestList.Count(); i++) + { + if (aInterest.Append(iInterestList[i]) != KErrNone) + { + return; + } + } + } + + + +void CLiwServiceHandlerImpl::DetachL(const RCriteriaArray& aInterest) + { + // First, remove relevant criteria items from relevat base bindings. + for (TInt i = 0; i < aInterest.Count(); i++) + { + for (TInt j = 0; j < iBaseBindings.Count(); j++) + { + TInt index = iBaseBindings[j]->HasCriteriaItem(*aInterest[i]); + if (index != KErrNotFound) + { + iBaseBindings[j]->RemoveCriteria(index); + } + } + } + + // Second pass removes empty bindings. + for (TInt i = 0; i < iBaseBindings.Count(); i++) + { + if (iBaseBindings[i]->Interest().Count() == 0) + { + delete iBaseBindings[i]; + iBaseBindings.Remove(i); + i--; + } + } + + // Then check if there were left obselete criteria items and remove them. + RemoveObsoleteCriteriaItems(); + + // Finally check if there were left obselete providers and remove them. + RemoveObsoleteProviders(); + } + + + +void CLiwServiceHandlerImpl::DetachL(TInt aInterestResourceId) + { + // CCoeEnv/CEikonEnv needs to be accessible. + if(!iCoeEnv) + { + User::Leave(KErrNotSupported); + } + + RCriteriaArray interest; + + CleanupStack::PushL( TCleanupItem( InterestCleanup, &interest ) ); + + TResourceReader reader; + iCoeEnv->CreateResourceReaderLC(reader, aInterestResourceId); + ReadInterestListL(reader, interest); + CleanupStack::PopAndDestroy(); //reader + + DetachL( interest ); + + interest.ResetAndDestroy(); + CleanupStack::Pop(&interest); // interest + } + + +const CLiwCriteriaItem* CLiwServiceHandlerImpl::GetCriteria(TInt aId) + { + for (TInt i = 0; i < iInterestList.Count(); i++) + { + if (iInterestList[i]->Id() == aId) + { + return iInterestList[i]; + } + } + + return NULL; + } + +TInt CLiwServiceHandlerImpl::NumAlreadyInitializedPaneIdsL() const + { + TInt ret = 0; + TInt paneIds[KMaxPaneIds] = {0}; + TBool found = EFalse; + + for (TInt i = 0; i < iLastInitialized.Count(); i++) + { + found = EFalse; + + for (TInt j = 0; j < ret; j++) + { + if (iLastInitialized[i]->MenuResourceId() == paneIds[j]) + { + found = ETrue; + break; + } + } + + if (!found) + { + // Create new item. + if (ret >= KMaxPaneIds) + { +#ifdef _DEBUG + RDebug::Print(_L("ERROR: OVERFLOW in CLiwServiceHandlerImpl::NumAlreadyInitializedPaneIdsL()")); +#endif + User::Leave(KErrOverflow); + } + paneIds[ret] = iLastInitialized[i]->MenuResourceId(); + ret++; + } + } + return ret; + } + +void CLiwServiceHandlerImpl::InitializeMenuPaneL( + CEikMenuPane& aMenuPane, + TInt aMenuResourceId, + TInt aBaseMenuCmdId, + const CLiwGenericParamList& aInParamList) + { + InitializeMenuPaneL(aMenuPane, aMenuResourceId, aBaseMenuCmdId, aInParamList, EFalse); + } + +void CLiwServiceHandlerImpl::InitializeMenuPaneL( + CEikMenuPane& aMenuPane, + TInt aMenuResourceId, + TInt aBaseMenuCmdId, + const CLiwGenericParamList& aInParamList, + TBool aUseSubmenuTextsIfAvailable) + { + // CCoeEnv/CEikonEnv needs to be accessible. + if(!iCoeEnv) + { + User::Leave(KErrNotSupported); + } + + if (!iMenuBindings.Count()) + { + // Either no menu is attached to interest or menu was attached but + // it didn't contain any placeholders for criteria items. So + // nothing to do, get out. + return; + } + + TInt index; + TInt slotcmd; + TBuf subTitle; + TBool titleLocked; + TInt paneOffset = NumAlreadyInitializedPaneIdsL() * KIndividualMenuPaneIdRange; + + iSubmenuCmd = aBaseMenuCmdId + KMenuPaneCommandRange; + slotcmd = SlotItemCmd(aMenuPane); + if (slotcmd >= 0) + { + // aMenuPane is liw submenu. At this point it is empty and we must + // copy provider menu items to it. + CLiwMenuPane* liwPane = MenuPaneForSlotCmd(slotcmd); + if (liwPane) + { + CopyMenuItemsL(liwPane, aMenuPane, 0, ETrue); + aMenuPane.DeleteMenuItem(slotcmd); + iSubmenu = liwPane; + } + } + else + { + iSubmenu = NULL; + + const TInt bindcount = iMenuBindings.Count(); + for (TInt i = 0; i < bindcount; i++) + { + if ((iMenuBindings[i]->MenuId() == aMenuResourceId) && + (aMenuPane.MenuItemExists(iMenuBindings[i]->MenuCmd(), index))) + { + CLiwMenuPane* liwPane = iMenuBindings[i]->MenuPane(); + TInt menuResourceId = -1; + if(liwPane) + { + // An LIW menu pane already exists (this means that a normal + // non-LIW submenu with LIW items has been opened more than once). + // In this case we use the existing resource slot id. + menuResourceId = liwPane->ResourceSlotId(); + paneOffset = liwPane->PaneOffset(); + DeleteLiwMenuPane(liwPane); + liwPane = NULL; + } + liwPane = CreateEmptyLiwMenuPaneL(aBaseMenuCmdId, menuResourceId); + CleanupStack::PushL(liwPane); + liwPane->SetPaneOffset(paneOffset); + paneOffset += KPlaceholderCmdIdRange; + iMenuBindings[i]->SetMenuPane(liwPane); + + // Clean previous service commands from list. + CLiwGenericParamList& list = const_cast(aInParamList); + while (list.Remove(EGenericParamServiceCommand)) + { + // Intentionally left empty. + } + + // Add service commands for current placeholder. + const TInt icount = iMenuBindings[i]->Interest().Count(); + for (TInt k = 0; k < icount; k++) + { + list.AppendL(TLiwGenericParam(EGenericParamServiceCommand, + TLiwVariant(iMenuBindings[i]->Interest()[k]->ServiceCmd()))); + } + + // Loop from last entry to first entry always inserting to same index. + // Default provider is the first item in list, so if there is a default + // provider defined, it will be the first one to appear in menus. + for (TInt j = iMenuBindings[i]->NumberOfProviders() - 1; j >= 0; j--) + { + liwPane->SetInitializingOwner(iMenuBindings[i]->MenuProvider(j)); + iMenuBindings[i]->MenuProvider(j)->InitializeMenuPaneHookL(liwPane, + 0, 0, aInParamList); + } + + GetSubmenuTitle(liwPane->MenuPane(), subTitle); + + TLiwPlaceholderType phtype = PlaceholderType(aMenuPane, + iMenuBindings[i]->MenuCmd(), titleLocked); + + if ((phtype == ELiwPlaceholderCascade) || + (phtype == ELiwPlaceholderIntelligentCascade)) + { + if (liwPane->MenuPane().NumberOfItemsInPane() == 1) + { + // Remove placeholder item. + aMenuPane.DeleteMenuItem(iMenuBindings[i]->MenuCmd()); + CleanupStack::PopAndDestroy(liwPane); // liwPane + continue; + } + else if ((liwPane->MenuPane().NumberOfItemsInPane() == 2) && + (phtype == ELiwPlaceholderIntelligentCascade)) + { + UnCascadeL(aMenuPane, iMenuBindings[i]->MenuCmd(), *liwPane); + User::LeaveIfError(iLastInitialized.Append(liwPane)); + } + else + { + if (titleLocked) + { + subTitle.Zero(); + } + ConvertPlaceholderL(aMenuPane, iMenuBindings[i]->MenuCmd(), *liwPane, + subTitle); + } + } + else + { + // Remove placeholder item. + aMenuPane.DeleteMenuItem(iMenuBindings[i]->MenuCmd()); + + // Copy menu items to actual menu pane + CopyMenuItemsL(liwPane, aMenuPane, index, aUseSubmenuTextsIfAvailable); + User::LeaveIfError(iLastInitialized.Append(liwPane)); + } + liwPane->SetMenuResourceId(aMenuResourceId); + User::LeaveIfError(iMenuPanes.Append(liwPane)); + CleanupStack::Pop(liwPane); // liwPane + } + } + } + } + + + + +TInt CLiwServiceHandlerImpl::ServiceCmdByMenuCmd(TInt aMenuCmdId) const + { + for (TInt i = 0; i < iMenuBindings.Count(); i++) + { + if ((IsInLastInitialized(iMenuBindings[i]->MenuPane())) && + (iMenuBindings[i]->MenuPane()->IsCmdInRange(KPlaceholderCmdIdRange, aMenuCmdId))) + { + return iMenuBindings[i]->MenuPane()->ServiceCmdId(aMenuCmdId); + } + } + + return 0; + } + + + +void CLiwServiceHandlerImpl::ExecuteMenuCmdL( + TInt aMenuCmdId, + const CLiwGenericParamList& aInParamList, + CLiwGenericParamList& aOutParamList, + TUint aCmdOptions, + MLiwNotifyCallback* aCallback) + { + // CCoeEnv/CEikonEnv needs to be accessible. + if(!iCoeEnv) + { + User::Leave(KErrNotSupported); + } + + if (!iMenuBindings.Count()) + { + return; + } + + // Handle real menu providers. + for (TInt i = 0; i < iMenuBindings.Count(); i++) + { + CLiwMenuPane* menuPane = iMenuBindings[i]->MenuPane(); + + if (IsInLastInitialized(menuPane)) + { + for (TInt j = 0; j < iMenuBindings[i]->NumberOfProviders(); j++) + { + if ((menuPane->IsCmdInRange(KPlaceholderCmdIdRange, aMenuCmdId)) && + (menuPane->CommandOwner(aMenuCmdId) == iMenuBindings[i]->MenuProvider(j))) + { + iMenuBindings[i]->MenuProvider(j)->HandleMenuCmdHookL( + menuPane, + aMenuCmdId, + aInParamList, + aOutParamList, + aCmdOptions, + aCallback); + return; + } + } + } + } + } + + + +void CLiwServiceHandlerImpl::AttachMenuL(TInt aMenuResourceId, TInt aInterestResourceId) + { + // CCoeEnv/CEikonEnv needs to be accessible. + if(!iCoeEnv) + { + User::Leave(KErrNotSupported); + } + + RCriteriaArray interest, filtered; + TResourceReader reader; + + CleanupStack::PushL( TCleanupItem( InterestCleanup, &interest ) ); + CleanupStack::PushL( TCleanupItem( FilteredCleanup, &filtered ) ); + iCoeEnv->CreateResourceReaderLC(reader, aInterestResourceId); + ReadInterestListL(reader, interest); + CleanupStack::PopAndDestroy(); //reader + FilterInterestListL(interest, filtered); + + iCoeEnv->CreateResourceReaderLC(reader, aMenuResourceId); + DoAttachMenuL(reader, aMenuResourceId, filtered); + filtered.Reset(); + CleanupStack::PopAndDestroy(); //reader + CleanupStack::Pop(&filtered); // filtered + CleanupStack::Pop(&interest); // interest + } + + + +void CLiwServiceHandlerImpl::AttachMenuL(TInt aMenuResourceId, TResourceReader& aReader) + { + // CCoeEnv/CEikonEnv needs to be accessible. + if(!iCoeEnv) + { + User::Leave(KErrNotSupported); + } + + RCriteriaArray interest, filtered; + TResourceReader reader; + + CleanupStack::PushL( TCleanupItem( InterestCleanup, &interest ) ); + CleanupStack::PushL( TCleanupItem( FilteredCleanup, &filtered ) ); + ReadInterestListL(aReader, interest); + FilterInterestListL(interest, filtered); + + iCoeEnv->CreateResourceReaderLC(reader, aMenuResourceId); + DoAttachMenuL(reader, aMenuResourceId, filtered); + filtered.Reset(); + CleanupStack::PopAndDestroy(); //reader + CleanupStack::Pop(&filtered); // filtered + CleanupStack::Pop(&interest); // interest + } + +void CLiwServiceHandlerImpl::AttachMenuL(TInt aMenuResourceId, const RCriteriaArray& aInterest) + { + // CCoeEnv/CEikonEnv needs to be accessible. + if(!iCoeEnv) + { + User::Leave(KErrNotSupported); + } + + RCriteriaArray interest, filtered; + TResourceReader reader; + + CleanupStack::PushL( TCleanupItem( InterestCleanup, &interest ) ); + CleanupStack::PushL( TCleanupItem( FilteredCleanup, &filtered ) ); + + for(TInt i = 0; i < aInterest.Count(); i++) + { + CLiwCriteriaItem* item = CLiwCriteriaItem::NewLC(); + + item->SetId( aInterest[i]->Id() ); + item->SetServiceCmd( aInterest[i]->ServiceCmd() ); + item->SetContentTypeL( aInterest[i]->ContentType() ); + item->SetServiceClass( aInterest[i]->ServiceClass() ); + item->SetOptions( aInterest[i]->Options() ); + item->SetDefaultProvider( (aInterest[i]->DefaultProvider()).iUid ); + item->SetMaxProviders( aInterest[i]->MaxProviders() ); + + User::LeaveIfError(interest.Append(item)); + CleanupStack::Pop(item); + } + + FilterInterestListL(interest, filtered); + + iCoeEnv->CreateResourceReaderLC(reader, aMenuResourceId); + DoAttachMenuL(reader, aMenuResourceId, filtered); + filtered.Reset(); + CleanupStack::PopAndDestroy(); //reader + CleanupStack::Pop(&filtered); // filtered + CleanupStack::Pop(&interest); // interest + } + +void CLiwServiceHandlerImpl::AttachMenuL(RArray& aMenuEntries, + TInt aMenuResourceId, + RCriteriaArray& aInterest) + { + RCriteriaArray filtered; + + CleanupStack::PushL( TCleanupItem( FilteredCleanup, &filtered ) ); + FilterInterestListL(aInterest, filtered); + + TInt menuCmd; + TInt count = aMenuEntries.Count(); + TBool bound; + + for (TInt i = 0; i < count; i++) + { + menuCmd = aMenuEntries[i]; + CLiwMenuBinding* bind = NULL; + bound = EFalse; + + if (!menuCmd) + continue; + + for (TInt j = 0; j < filtered.Count(); j++) + { + if (filtered[j]->Id() == menuCmd) + { + if (!bind) + { + bind = AlreadyBound(aMenuResourceId, menuCmd, i); + if (!bind) + { + bind = CLiwMenuBinding::NewLC(i, aMenuResourceId); + bind->SetMenuCmd( menuCmd ); + } + else + { + bound = ETrue; + } + } + + if (bind->HasCriteriaItem(*(filtered[j])) == KErrNotFound) + { + ResolveProvidersL(bind, filtered[j],NULL); + bind->AddCriteriaL(filtered[j]); + } + } + } + + // Initialise providers. + if (bind) + { + for (TInt k = 0; k < bind->NumberOfProviders(); k++) + { + bind->MenuProvider(k)->InitialiseL(*this, bind->Interest()); + } + if (!bound) + { + User::LeaveIfError(iMenuBindings.Append( bind )); + CleanupStack::Pop(bind); // bind + } + } + } + + filtered.Reset(); + CleanupStack::Pop(&filtered); // filtered + } + +void CLiwServiceHandlerImpl::DoAttachMenuL(TResourceReader& aReader, TInt aMenuId, + RCriteriaArray& aInterest) + { + TInt menuCmd; + TInt count = aReader.ReadInt16(); + TBool bound; + + for (TInt i = 0; i < count; i++) + { + menuCmd = aReader.ReadInt32(); + CLiwMenuBinding* bind = NULL; + bound = EFalse; + + for (TInt j = 0; j < aInterest.Count(); j++) + { + if (aInterest[j]->Id() == menuCmd) + { + if (!bind) + { + bind = AlreadyBound(aMenuId, menuCmd, i); + if (!bind) + { + bind = CLiwMenuBinding::NewLC(i, aMenuId); + bind->SetMenuCmd( menuCmd ); + } + else + { + bound = ETrue; + } + } + + if (bind->HasCriteriaItem(*(aInterest[j])) == KErrNotFound) + { + ResolveProvidersL(bind, aInterest[j],NULL); + bind->AddCriteriaL(aInterest[j]); + } + } + } + + // Initialise providers. + if (bind) + { + for (TInt k = 0; k < bind->NumberOfProviders(); k++) + { + TRAPD(err, bind->MenuProvider(k)->InitialiseL(*this, bind->Interest())); + if(err) + { +#ifdef _DEBUG + RDebug::Print(_L("LIW PROVIDER ERROR: CLiwServiceIfMenu::InitialiseL() failed, leave code:%d"), err); +#endif + // The provider failed to initialise. + // Remove the failed provider from this menu binding. + CLiwServiceIfMenu* provider = bind->MenuProvider(k); + TInt implUid = provider->ImplementationUid().iUid; + bind->RemoveProvider(implUid); + + // Remove the failed provider also from other menu bindings. + for (TInt m = 0; m < iMenuBindings.Count(); m++) + { + iMenuBindings[m]->RemoveProvider(implUid); + } + + // Then remove provider from the owner list and delete it. + for (TInt m = 0; m < iProviders.Count(); m++) + { + if (iProviders[m]->ImplementationUid().iUid == implUid) + { + delete iProviders[m]; + iProviders.Remove(m); + m--; + } + } + } + } + if (!bound) + { + User::LeaveIfError(iMenuBindings.Append( bind )); + CleanupStack::Pop(bind); // bind + } + } + SkipMenuFields(aReader); // Jump to next menu item + } + } + +void CLiwServiceHandlerImpl::ReadInterestL(RCriteriaArray& aInterest, TInt aInterestResourceId) + { + CleanupStack::PushL( TCleanupItem( InterestCleanup, &aInterest ) ); + TResourceReader reader; + iCoeEnv->CreateResourceReaderLC(reader, aInterestResourceId); + ReadInterestListL(reader, aInterest); + CleanupStack::PopAndDestroy(); //reader + CleanupStack::Pop(&aInterest); + } + + +void CLiwServiceHandlerImpl::DetachMenu(TInt aMenuResourceId, TInt aInterestResourceId) + { + // If interest resource id is null, then detach all items in the given menu. + if (!aInterestResourceId) + { + DoDetachMenu(aMenuResourceId); + } + else + { + // CCoeEnv/CEikonEnv needs to be accessible. + if(!iCoeEnv) + { + // We cannot leave because this is a non-leaving method. + return; + } + + RCriteriaArray interest; + TRAPD(err, ReadInterestL(interest, aInterestResourceId)); + if (err) + { + return; + } + + DoDetachMenu(aMenuResourceId, interest); + + interest.ResetAndDestroy(); + } + } + + +void CLiwServiceHandlerImpl::DoDetachMenu(TInt aMenuResourceId) + { + // First, delete the relevant menu bindings. + for (TInt i = 0; i < iMenuBindings.Count(); i++) + { + if (iMenuBindings[i]->MenuId() == aMenuResourceId) + { + delete iMenuBindings[i]; + iMenuBindings.Remove(i); + i--; + } + } + + // Then check if there were left obselete criteria items and remove them. + RemoveObsoleteCriteriaItems(); + + // Finally check if there were left obselete providers and remove them. + RemoveObsoleteProviders(); + } + + +void CLiwServiceHandlerImpl::DoDetachMenu(TInt aMenuResourceId, RCriteriaArray& aInterest) + { + // First, remove relevant criteria items from relevant menu bindings. + for (TInt i = 0; i < iMenuBindings.Count(); i++) + { + if (iMenuBindings[i]->MenuId() == aMenuResourceId) + { + for (TInt j = 0; j < aInterest.Count(); j++) + { + TInt index = iMenuBindings[i]->HasCriteriaItem(*aInterest[j]); + if (index != KErrNotFound) + { + iMenuBindings[i]->RemoveCriteria(index); + } + } + } + } + + // Second pass removes empty bindings. + for (TInt i = 0; i < iMenuBindings.Count(); i++) + { + if (iMenuBindings[i]->Interest().Count() == 0) + { + delete iMenuBindings[i]; + iMenuBindings.Remove(i); + i--; + } + } + + // Then check if there were left obselete criteria items and remove them. + RemoveObsoleteCriteriaItems(); + + // Finally check if there were left obselete providers and remove them. + RemoveObsoleteProviders(); + } + + +void CLiwServiceHandlerImpl::RemoveObsoleteCriteriaItems() + { + for (TInt i = 0; i < iInterestList.Count(); i++) + { + CLiwCriteriaItem* criteria = iInterestList[i]; + TBool found = EFalse; + + // Loop through base bindings. + for (TInt j = 0; j < iBaseBindings.Count(); j++) + { + if (iBaseBindings[j]->HasCriteriaItem(*criteria) != KErrNotFound) + { + found = ETrue; + break; + } + } + + // If still not found, loop through menu bindings. + if (!found) + { + for (TInt j = 0; j < iMenuBindings.Count(); j++) + { + if (iMenuBindings[j]->HasCriteriaItem(*criteria) != KErrNotFound) + { + found = ETrue; + break; + } + } + } + + // Criteria item can be deleted if it was not found. + if (!found) + { + delete iInterestList[i]; + iInterestList.Remove(i); + i--; + } + } + } + + +void CLiwServiceHandlerImpl::RemoveObsoleteProviders() + { + for (TInt i = 0; i < iProviders.Count(); i++) + { + CLiwServiceIfBase* provider = iProviders[i]; + TBool found = EFalse; + + // Loop through base bindings. + for (TInt j = 0; j < iBaseBindings.Count(); j++) + { + if (iBaseBindings[j]->HasProvider(provider)) + { + found = ETrue; + break; + } + } + + // If still not found, loop through menu bindings. + if (!found) + { + for (TInt j = 0; j < iMenuBindings.Count(); j++) + { + if (iMenuBindings[j]->HasProvider(provider)) + { + found = ETrue; + break; + } + } + } + + // Criteria item can be deleted if it was not found. + if (!found) + { + delete iProviders[i]; + iProviders.Remove(i); + i--; + } + } + } + + +TBool CLiwServiceHandlerImpl::IsSubMenuEmpty(TInt aSubMenuId) + { + for (TInt i = 0; i < iMenuBindings.Count(); i++) + { + if (iMenuBindings[i]->MenuId() == aSubMenuId) + { + if (iMenuBindings[i]->NumberOfProviders() > 0) + { + return EFalse; + } + + return ETrue; + } + } + + return EFalse; + } + + + + +CLiwMenuBinding* CLiwServiceHandlerImpl::AlreadyBound(TInt aMenuId, TInt aMenuCmd, + TInt aMenuItemIndex) const + { + for (TInt i = 0; i < iMenuBindings.Count(); i++) + { + if ((iMenuBindings[i]->MenuId() == aMenuId) && + (iMenuBindings[i]->MenuCmd() == aMenuCmd) && + (iMenuBindings[i]->MenuItemIndex() == aMenuItemIndex)) + { + return iMenuBindings[i]; + } + } + + return NULL; + } + + +void CLiwServiceHandlerImpl::ExecuteServiceCmdL( + const TInt& aCmdId, + const CLiwGenericParamList& aInParamList, + CLiwGenericParamList& aOutParamList, + TUint aCmdOptions, + MLiwNotifyCallback* aCallback) + { + for (TInt i = 0; i < iBaseBindings.Count(); i++) + { + if(iBaseBindings[i]->HasServiceCmd(aCmdId)) + { + for (TInt j = 0; j < iBaseBindings[i]->NumberOfProviders(); j++) + { + iBaseBindings[i]->BaseProvider(j)->HandleServiceCmdL(aCmdId, + aInParamList, aOutParamList, aCmdOptions, aCallback); + } + } + } +} + +void CLiwServiceHandlerImpl::ExecuteServiceCmdL( + const CLiwCriteriaItem& aCmd, + const CLiwGenericParamList& aInParamList, + CLiwGenericParamList& aOutParamList, + TUint aCmdOptions, + MLiwNotifyCallback* aCallback) + { + for (TInt i = 0; i < iBaseBindings.Count(); i++) { + for (TInt k = 0; k < iBaseBindings[i]->Interest().Count(); k++) { + if ((iBaseBindings[i]->Interest()[k]->ServiceCmd() == KLiwCmdAsStr) && + (aCmd.ServiceCmd() == KLiwCmdAsStr) && + (iBaseBindings[i]->Interest()[k]->ServiceCmdStr() == aCmd.ServiceCmdStr()) && + (iBaseBindings[i]->Interest()[k]->ContentType() == aCmd.ContentType())) + { + //call only one provider + if (iBaseBindings[i]->NumberOfProviders() > 0) { + iBaseBindings[i]->BaseProvider(0)->HandleServiceCmdL(aCmd.ServiceCmdStr(), + aInParamList, aOutParamList, aCmdOptions, aCallback); + } + } + } + } + } + +void CLiwServiceHandlerImpl::ReadInterestListL(TResourceReader& aReader, + RPointerArray& aResult) + { + const TInt count = aReader.ReadInt16(); + for (TInt ii = 0; ii < count; ++ii) + { + CLiwCriteriaItem* item = CLiwCriteriaItem::NewLC(); + item->ReadFromResoureL( aReader ); + User::LeaveIfError(aResult.Append(item)); + CleanupStack::Pop(item); // item + } + } + +/* Parses the metadata information stored in the opaque_data field + * of service provider registration information \c REGISTRY_INFO. + * + * The metadata information is seprated from the service command definition + * in the opaque_data field using a separator "::". + * + * @param aOpaque the opaque_data values specified in the registration information + * @param aMetaData the parsed metadata entries will be stored in this variable + * + */ +void CLiwServiceHandlerImpl::ParseMetaData(const TDesC8& aOpaque, TDes8& aMetaData) + { + + _LIT8(serviceCmdSeparator, "::"); + const TInt metaDataStartPos=2; + + TInt separatorPos = aOpaque.Find(serviceCmdSeparator); + + if (separatorPos != KErrNotFound) + { + // Find the first section, up to the separator + separatorPos += metaDataStartPos; + aMetaData.Copy(aOpaque.Mid(separatorPos,aOpaque.Length()-separatorPos)); + } + } + +/* + QueryImplementationL finds the providers that match the given criteria item that is passed as the parameters +*/ +void CLiwServiceHandlerImpl::QueryImplementationL(CLiwCriteriaItem* aItem, RCriteriaArray& aProviderList) + { + RImplInfoPtrArray infoArray; + _LIT8(KWild,"*"); + + if(0 == aItem->ContentType().Compare(KNullDesC8)) + aItem->SetContentTypeL(KWild); + + if(0 == aItem->ServiceCmdStr().Compare(KNullDesC8)) + aItem->SetServiceCmdL(KWild); + + //to fetch the infoArray + QueryImplementationL(aItem,infoArray); + + CLiwXmlHandler* pXmlHandler = CLiwXmlHandler::NewLC(); + + CLiwServiceData* pServiceData = NULL; + + TInt versionCheck = 0; + + for (TInt index = 0; index < infoArray.Count(); ++index) + { + if ((aItem->Options() & LIW_OPTIONS_ROM_ONLY) && (infoArray[index]->RomBased() == EFalse)) + { + continue; + } + + CImplementationInformation* pImplInfo = infoArray[index]; + const TInt separatorLength = KDataSeparator().Length();//find "||" + TInt separatorPos = pImplInfo->OpaqueData().Find(KDataSeparator); + + TInt leftExtractPos = 0; + TBool separatorFound = EFalse; + + do + { + //Constructing the Criteria Item and appending to providerList + CLiwCriteriaItem* item = CLiwCriteriaItem::NewLC(); //iCriteriaId & iServiceCmd are ignored... + item->SetServiceClass(TUid::Uid(KLiwClassBase)); + item->SetContentTypeL(infoArray[index]->DataType()); + + TBuf8 sName; + TBuf8 opaq; + + if(separatorPos != KErrNotFound && (leftExtractPos < separatorPos)) + { + separatorFound = ETrue; + sName = pImplInfo->OpaqueData().Mid(leftExtractPos, separatorPos-leftExtractPos); //ServiceName + leftExtractPos = separatorLength + separatorPos; + TPtrC8 remainingData = pImplInfo->OpaqueData().Mid(separatorPos + separatorLength); + separatorPos = remainingData.Find(KDataSeparator) + separatorPos + separatorLength; + } + else + { + separatorFound = EFalse; + TInt mDataSepPos = pImplInfo->OpaqueData().Find(serviceCmdSeparator); + if(mDataSepPos != KErrNotFound) + sName = pImplInfo->OpaqueData().Mid(leftExtractPos, mDataSepPos - leftExtractPos); + else + sName = pImplInfo->OpaqueData().Mid(leftExtractPos); + } + + //check for wildcard character * + //if yes, return immediatly + if(0 == aItem->ServiceCmdStr().Compare(sName) || 0 == aItem->ServiceCmdStr().Compare(KWild)) + { + //parse metadata and if metadata valid, + //setmetadataoptions to criteriaitem.. + pServiceData = CLiwServiceData::NewLC(); + TInt loadStatus = CLiwXmlHandler::ESrvDataLoadFailed; + + ParseMetaData(pImplInfo->OpaqueData(),opaq); + + //Inline metadata defined + if(opaq.Length()>0) + { + loadStatus=pXmlHandler->LoadServiceData(opaq,pServiceData); + } + else + { + //Obtain the capabilities from the metadata + TUid implUid = pImplInfo->ImplementationUid(); + TUidName srvProvUid = implUid.Name(); + + TPtrC16 ptrSrv = srvProvUid.Right(srvProvUid.Length()-1); + TPtrC16 srvFile = ptrSrv.Left(ptrSrv.Length()-1); + TDriveUnit driveUnit = pImplInfo->Drive(); + TFileName fileName = driveUnit.Name(); + fileName.Append(KDC_RESOURCE_FILES_DIR); + fileName.Append(srvFile); + fileName.Append(KPerExtension); + loadStatus=pXmlHandler->LoadServiceData(fileName,pServiceData); + } + + if(CLiwXmlHandler::ESrvDataLoadSuccess==loadStatus) + { + versionCheck = 0; + + TReal implVersion(KDefVersion); + this->ComputeIntfVersion(pServiceData,implVersion); //fetch impl version.. + + TReal minVer(KDefVersion); + TReal maxVer(KUnspVersion); + + if(this->GetVersionRange(aItem,minVer,maxVer)) //Get version queried by consumer + { + if(minVer == KUnspVersion) + minVer = KDefVersion; + + //perform comparison... + if(maxVer!=KUnspVersion) + { + if((implVersion>=minVer) && (implVersion<=maxVer)) + { + versionCheck = 1; + //current impl is the best choice..this is THE CHOSEN ONE.. + } + } + else + { + //means maxVer == KUnspVersion + if(implVersion>=minVer) + { + versionCheck = 1; + + //current impl is the best choice..this is THE CHOSEN ONE.. + } + } + } + } + else //means no metadata information + { + versionCheck = 1; + } + + if(versionCheck) + { + //Since version matches, this item is appended to the providerList + //before which the metadata information is SET + CLiwMap* metadataMap = CLiwDefaultMap::NewLC(); + + CLiwGenericParamList* pMetaData = pServiceData->GetMetaData(); + + for(TInt mdataIdx(0); mdataIdxCount(); ++mdataIdx) + { + TLiwGenericParam param; + pMetaData->AtL(mdataIdx,param); + metadataMap->InsertL(param.Name(),param.Value()); + param.Reset(); + } + + TLiwVariant mdataVar(metadataMap); + mdataVar.PushL(); + + item->SetMetaDataOptions(mdataVar); + + item->SetServiceCmdL(sName); + CleanupStack::Pop(&mdataVar); + mdataVar.Reset(); + + CleanupStack::Pop(metadataMap); + metadataMap->DecRef(); + + User::LeaveIfError(aProviderList.Append(item)); + } + + if(pServiceData) + pServiceData->CleanUpMetaData(); + + CleanupStack::PopAndDestroy(pServiceData); //pServiceData::CLiwServiceData* + CleanupStack::Pop(item); //item::CLiwCriteriaItem* + } + else + { + CleanupStack::PopAndDestroy(item); //item::CLiwCriteriaItem* + } + }while(separatorFound); + }// end of outer for loop + + CleanupStack::PopAndDestroy(pXmlHandler); //pXmlHandler::CLiwXMLHandler* + infoArray.ResetAndDestroy(); + } + + +void CLiwServiceHandlerImpl::QueryImplementationL(CLiwCriteriaItem* aItem, RImplInfoPtrArray& infoArray) + { + iEcomMonitor->ListImplemetationsL(infoArray, (CLiwCriteriaItem*)aItem); + } + + +void CLiwServiceHandlerImpl::FilterInfoArray(RImplInfoPtrArray& aArray, + RArray& aArrayPlugin, + CLiwCriteriaItem* aItem) + { + if (aItem->MaxProviders() <= 0) + { + aArray.ResetAndDestroy(); + aArrayPlugin.Reset(); + } + else + { + while ((aArray.Count() + aArrayPlugin.Count()) > aItem->MaxProviders()) + { + if (aArrayPlugin.Count() == 0) + break; + // Skip default provider. + if (aArrayPlugin[0] == aItem->DefaultProvider()) + { + if (aArrayPlugin.Count() == 1) + break; + aArrayPlugin.Remove(1); + } + else + { + aArrayPlugin.Remove(0); + } + } + + while ((aArray.Count() + aArrayPlugin.Count()) > aItem->MaxProviders()) + { + // Skip default provider. + if (aArray[0]->ImplementationUid() == aItem->DefaultProvider()) + { + delete aArray[1]; + aArray.Remove(1); + } + else + { + delete aArray[0]; + aArray.Remove(0); + } + } + } + } + + + +TBool CLiwServiceHandlerImpl::IsCached(CLiwServiceIfBase* /*aProvider*/) + { + return EFalse; + } + + +CLiwGenericParamList& CLiwServiceHandlerImpl::InParamListL() + { + if (!iInParams) + { + iInParams = CLiwGenericParamList::NewL(); + } + iInParams->Reset(); + return *iInParams; + } + + + +CLiwGenericParamList& CLiwServiceHandlerImpl::OutParamListL() + { + if (!iOutParams) + { + iOutParams = CLiwGenericParamList::NewL(); + } + iOutParams->Reset(); + return *iOutParams; + } + + + +TBool CLiwServiceHandlerImpl::IsInLastInitialized(CLiwMenuPane* liwPane) const + { + if (liwPane) + { + if (iSubmenu == liwPane) + { + return ETrue; + } + + for (TInt i = 0; i < iLastInitialized.Count(); i++) + { + if (iLastInitialized[i] == liwPane) + { + return ETrue; + } + } + } + + return EFalse; + } + + +TInt CLiwServiceHandlerImpl::HandleNotifyL( + TInt /*aCmdId*/, + TInt /*aEventId*/, + CLiwGenericParamList& /*aEventParamList*/, + const CLiwGenericParamList& /*aInParamList*/) + { + return KErrNone; + } + + +// CEikMenuPane::ConstructFromresourceL is defined as 'protected' so +// we have to use a wrapper class for accessing it. +class CLiwMenuResource : public CEikMenuPane + { + public: + CLiwMenuResource() : CEikMenuPane(NULL) {} + CLiwMenuResource(MEikMenuObserver* aObserver) : CEikMenuPane(aObserver) {} + + void CreateL(TResourceReader& aReader) + { + ConstructFromResourceL(aReader); + } + }; + + +CLiwMenuPane* CLiwServiceHandlerImpl::CreateEmptyLiwMenuPaneL(TInt aBaseMenuCmdId, + TInt aResourceId) + { + CLiwMenuPane* result = NULL; + TResourceReader reader; + + TInt id; + if(aResourceId >= 0) + { + // Use existing id. + id = aResourceId; + } + else + { + // Create new id. + id = ResourceIdForNextFreeSlot(); + if (id < 0) + { + User::Leave(KErrOverflow); + } + } + iCoeEnv->CreateResourceReaderLC(reader, id); + + CLiwMenuResource* pane = new (ELeave) CLiwMenuResource(this); + CleanupStack::PushL(pane); + pane->ConstructL(NULL); + pane->CreateL(reader); + + result = new (ELeave) CLiwMenuPane(*pane, aBaseMenuCmdId); + + CleanupStack::Pop(pane); + CleanupStack::PopAndDestroy(); //reader + + result->SetResourceSlotId( id ); + + return result; + } + + +void CLiwServiceHandlerImpl::DeleteLiwMenuPane(CLiwMenuPane* aLiwPane) + { + delete aLiwPane->iMenuPane; + aLiwPane->iMenuPane = NULL; + + // Reset iIdMap and extraText. + for(TInt i = 0; i < aLiwPane->iIdMap.Count(); i++) + { + aLiwPane->iIdMap[i].extraText.Close(); + } + aLiwPane->iIdMap.Reset(); + + // Remove the liw menu pane from iMenuPanes array. + for(TInt i = 0; i < iMenuPanes.Count(); i++) + { + if(iMenuPanes[i] == aLiwPane) + { + iMenuPanes.Remove(i); + break; + } + } + + // Remove the liw menu pane from iMenuLastInitialized array. + for(TInt i = 0; i < iLastInitialized.Count(); i++) + { + if(iLastInitialized[i] == aLiwPane) + { + iLastInitialized.Remove(i); + break; + } + } + + delete aLiwPane; + aLiwPane = NULL; + } + +const TInt resourceSlotIds[KMaxMenuResources] = + { + R_LIW_EMPTY_MENU_0, + R_LIW_EMPTY_MENU_1, + R_LIW_EMPTY_MENU_2, + R_LIW_EMPTY_MENU_3, + R_LIW_EMPTY_MENU_4, + R_LIW_EMPTY_MENU_5, + R_LIW_EMPTY_MENU_6, + R_LIW_EMPTY_MENU_7, + R_LIW_EMPTY_MENU_8, + R_LIW_EMPTY_MENU_9, + R_LIW_EMPTY_MENU_10, + R_LIW_EMPTY_MENU_11, + R_LIW_EMPTY_MENU_12, + R_LIW_EMPTY_MENU_13, + R_LIW_EMPTY_MENU_14, + R_LIW_EMPTY_MENU_15 + }; + + +TInt CLiwServiceHandlerImpl::ResourceIdForNextFreeSlot() + { + if (iNextFreeSlot < KMaxMenuResources) + { + return resourceSlotIds[iNextFreeSlot++]; + } + + return -1; + } + + +void CLiwServiceHandlerImpl::SetEmphasis(CCoeControl* /*aMenuControl*/,TBool /*aEmphasis*/) + { + } + + +void CLiwServiceHandlerImpl::ProcessCommandL(TInt /*aCommandId*/) + { + } + + +// Rewrite this method. It doesn't make sense. Variable j is not used at all. +TInt CLiwServiceHandlerImpl::MenuCmdId(TInt aMenuCmdId) const + { + TInt ret( KErrNotFound ); + + for (TInt i = 0; i < iMenuBindings.Count() && (ret == KErrNotFound); i++) + { + for (TInt j = 0; j < iMenuBindings[i]->NumberOfProviders() && (ret == KErrNotFound); j++) + { + if ((IsInLastInitialized(iMenuBindings[i]->MenuPane())) && + (iMenuBindings[i]->MenuPane()->IsCmdInRange(KPlaceholderCmdIdRange, aMenuCmdId)) && + (ret == KErrNotFound )) + { + ret = iMenuBindings[i]->MenuPane()->MenuCmdId(aMenuCmdId); + } + } + } + + return ret; + } + + +void Cleanup( TAny* aAny ) + { + RImplInfoPtrArray* implArray = + reinterpret_cast< RImplInfoPtrArray*> ( aAny ); + implArray->ResetAndDestroy(); + implArray->Close(); + } + + +void InterestCleanup( TAny* aAny ) + { + RPointerArray* interestArray = + reinterpret_cast*> ( aAny ); + + interestArray->ResetAndDestroy(); + } + +void FilteredCleanup( TAny* aAny ) + { + RPointerArray* filteredArray = + reinterpret_cast*> ( aAny ); + + filteredArray->Reset(); + } + + +void IntArrayCleanup(TAny* aAny) + { + RArray* intArray = + reinterpret_cast*> ( aAny ); + + intArray->Close(); + } + +void Int32ArrayCleanup(TAny* aAny) + { + RArray* intArray = + reinterpret_cast*> ( aAny ); + + intArray->Close(); + } + +void InterfaceCleanup( TAny* aAny ) + { + MLiwInterface* interface = reinterpret_cast(aAny); + interface->Close(); + } + +void CLiwServiceHandlerImpl::CopyMenuItemsL(CLiwMenuPane* aSource, CEikMenuPane& aDest, + TInt aStartIndex, TBool aIsSubmenu) + { + TInt cmdId; + TInt inPos = aStartIndex; + + for (TInt i = 0; i < aSource->MenuPane().NumberOfItemsInPane(); i++) + { + cmdId = aSource->FindCmdId(i); + if (cmdId >= 0) + { + CEikMenuPaneItem::SData itemData = aSource->MenuPane().ItemData(cmdId); + + // The menu item might include alternative texts for a main menu level + // and for submenu. Use submenu string if it is intended so. + if(aIsSubmenu) + { + const TDesC& extraText = aSource->ExtraText(cmdId); + if(extraText.Length()) + { + itemData.iText.Zero(); + itemData.iText.Append(extraText); + } + } + + aDest.InsertMenuItemL(itemData, inPos++); + } + } + } + + + +TInt CLiwServiceHandlerImpl::SlotItemCmd(CEikMenuPane& aPane) + { + TInt index; + + for (TInt i = 0; i < KMaxMenuResources; i++) + { + if (aPane.MenuItemExists(ELiwMenuSlotBase + i, index)) + { + return ELiwMenuSlotBase + i; + } + } + + return -1; + } + + + +CLiwMenuPane* CLiwServiceHandlerImpl::MenuPaneForSlotCmd(TInt aCmdId) + { + TInt index = aCmdId - ELiwMenuSlotBase; + + if (index < KMaxMenuResources) + { + TInt resId = resourceSlotIds[index]; + for (TInt i = 0; i < iMenuPanes.Count(); i++) + { + if (iMenuPanes[i]->ResourceSlotId() == resId) + { + return iMenuPanes[i]; + } + } + } + + return NULL; + } + + + +CLiwServiceHandlerImpl::TLiwPlaceholderType CLiwServiceHandlerImpl::PlaceholderType( + CEikMenuPane& aPane, TInt aCmd, TBool& aTitleLocked) + { + CEikMenuPaneItem::SData& itemData = aPane.ItemData(aCmd); + + aTitleLocked = EFalse; + + if ((itemData.iCascadeId & LIW_CASCADE_ID) == LIW_CASCADE_ID) + { + if (itemData.iCascadeId & LIW_LOCK_SUBMENU_TITLE) + { + aTitleLocked = ETrue; + } + return ELiwPlaceholderCascade; + } + else if ((itemData.iCascadeId & LIW_INTELLIGENT_CASCADE_ID) == LIW_INTELLIGENT_CASCADE_ID) + { + if (itemData.iCascadeId & LIW_LOCK_SUBMENU_TITLE) + { + aTitleLocked = ETrue; + } + return ELiwPlaceholderIntelligentCascade; + } + + return ELiwPlaceholderNormal; + } + + + +void CLiwServiceHandlerImpl::ConvertPlaceholderL(CEikMenuPane& aPane, TInt aCmd, + CLiwMenuPane& aLiwPane, const TDesC& aTitle) + { + CEikMenuPaneItem::SData itemData = aPane.ItemData(aCmd); + TInt index; + + // Remenber index. + aPane.MenuItemExists(aCmd, index); + + // Remove placeholder item. + aPane.DeleteMenuItem(aCmd); + + // Replace liw cascade id with actual menu resource id. + itemData.iCascadeId = aLiwPane.iResourceSlotId; + + if (aTitle.Length()) + { + itemData.iText.Copy(aTitle); + } + + // Set unused dynamic cmd id. + itemData.iCommandId = iSubmenuCmd++; + + // Insert cascade item. + aPane.InsertMenuItemL(itemData, index); + } + + + +void CLiwServiceHandlerImpl::UnCascadeL(CEikMenuPane& aPane, TInt aCmd, CLiwMenuPane& aLiwPane) + { + CEikMenuPaneItem::SData itemData = aLiwPane.MenuPane().ItemData(aLiwPane.FindCmdId(0)); + TInt index; + + // Remenber index. + aPane.MenuItemExists(aCmd, index); + + // Remove placeholder item. + aPane.DeleteMenuItem(aCmd); + + // Uncascade + itemData.iCascadeId = 0; + + // Insert cascade item. + aPane.InsertMenuItemL(itemData, index); + } + + + +void CLiwServiceHandlerImpl::SkipMenuFields(TResourceReader& aReader) + { + aReader.ReadInt32(); // Skip cascade id + aReader.ReadInt32(); // Skip flags + aReader.ReadTPtrC(); // Skip text + aReader.ReadTPtrC(); // Skip extra text + aReader.ReadTPtrC(); // Skip bmpfile. + aReader.ReadInt16(); // Skip bmpid. + aReader.ReadInt16(); // Skip bmpmask. + aReader.ReadInt32(); // Skip extension. + } + + +TBool CLiwServiceHandlerImpl::IsLiwMenu(TInt aMenuResourceId) + { + TInt index; + + // First check if this is liw submenu id + for (index = 0; index < KMaxMenuResources; index++) + { + if (aMenuResourceId == resourceSlotIds[index]) + { + return ETrue; + } + } + + // Then check if this menu is among attached menus. + for (index = 0; index < iMenuBindings.Count(); index++) + { + if (iMenuBindings[index]->MenuId() == aMenuResourceId) + { + return ETrue; + } + } + + return EFalse; + } + + + +TBool CLiwServiceHandlerImpl::HandleSubmenuL(CEikMenuPane& aPane) + { + TInt slotcmd = SlotItemCmd(aPane); + if (slotcmd >= 0) + { + // aPane is liw submenu. At this point it is empty and we must + // copy provider menu items to it. + CLiwMenuPane* liwPane = MenuPaneForSlotCmd(slotcmd); + if (liwPane) + { + CopyMenuItemsL(liwPane, aPane, 0, ETrue); + aPane.DeleteMenuItem(slotcmd); + iSubmenu = liwPane; + return ETrue; + } + } + + return EFalse; + } + + + +TBool CLiwServiceHandlerImpl::GetSubmenuTitle(CEikMenuPane& aPane, TDes& aResult) + { + TInt index; + + aResult.Zero(); + while (aPane.MenuItemExists(LIW_SUBMENU_TITLE, index)) + { + CEikMenuPaneItem::SData& itemData = aPane.ItemData(LIW_SUBMENU_TITLE); + if (aResult.Length() == 0) + { + aResult.Copy(itemData.iText); + } + aPane.DeleteMenuItem(LIW_SUBMENU_TITLE); + return ETrue; + } + + return EFalse; + } + + + +CLiwCriteriaItem* CLiwServiceHandlerImpl::ConvertCriteriaItemPointerL(CLiwCriteriaItem* aCandidate) + { + for (TInt index = 0; index < iInterestList.Count(); index++) + { + if ((*iInterestList[index]) == (*aCandidate)) + { + // Already in list, aCandidate is not needed. + delete aCandidate; + return iInterestList[index]; + } + } + + CleanupStack::PushL(aCandidate); + User::LeaveIfError(iInterestList.Append(aCandidate)); + CleanupStack::Pop(aCandidate); // aCandidate + + return aCandidate; + } + + + +void CLiwServiceHandlerImpl::FilterInterestListL(RPointerArray& aOrginal, + RPointerArray& aFiltered) + { + CLiwCriteriaItem* item; + + while (aOrginal.Count() > 0) + { + item = aOrginal[0]; + aOrginal.Remove(0); + item = ConvertCriteriaItemPointerL(item); + User::LeaveIfError(aFiltered.Append(item)); + } + aOrginal.Reset(); + } + + + +void CLiwServiceHandlerImpl::RemoveProvider(TInt aImplUid) + { + TInt index; + + // First go through bindings and remove all the + // references to given provider. + for (index = 0; index < iBaseBindings.Count(); index++) + { + iBaseBindings[index]->RemoveProvider(aImplUid); + } + + for (index = 0; index < iMenuBindings.Count(); index++) + { + iMenuBindings[index]->RemoveProvider(aImplUid); + } + + // Then remove provider from the owner list and delete it. + for (index = 0; index < iProviders.Count(); index++) + { + if (iProviders[index]->ImplementationUid().iUid == aImplUid) + { + delete iProviders[index]; + iProviders.Remove(index); + index--; + } + } + } + + +void CLiwServiceHandlerImpl::AddProviderL(TUid aImplUid, CLiwCriteriaItem* aItem) + { + TInt index; + CLiwServiceIfBase* iface = iEcomMonitor->CreateImplementationL(aImplUid); + + if (iface) + { + CleanupStack::PushL(iface); + iface->AddCriteria(aItem); + User::LeaveIfError(iProviders.Append( iface )); + CleanupStack::Pop(iface); + + for (index = 0; index < iBaseBindings.Count(); index++) + { + if (iBaseBindings[index]->HasCriteriaItem(*aItem) != KErrNotFound) + { + iBaseBindings[index]->AddProviderL(iface, aImplUid == aItem->DefaultProvider()); + iface->InitialiseL(*this, iBaseBindings[index]->Interest()); + } + } + + for (index = 0; index < iMenuBindings.Count(); index++) + { + if (iMenuBindings[index]->HasCriteriaItem(*aItem) != KErrNotFound) + { + iMenuBindings[index]->AddProviderL(iface, aImplUid == aItem->DefaultProvider()); + iface->InitialiseL(*this, iMenuBindings[index]->Interest()); + } + } + } + } + + + +TInt CLiwServiceHandlerImpl::SynchronizeCallBack(TAny* aImpl) + { + CLiwServiceHandlerImpl* impl = reinterpret_cast(aImpl); + TRAPD(err, impl->SynchronizeDbL()); + return err; + } + + + +void CLiwServiceHandlerImpl::SynchronizeDbL() + { + TInt index; + RArray providers; + RImplInfoPtrArray infoArray; + + CleanupStack::PushL( TCleanupItem( IntArrayCleanup, &providers ) ); + CleanupStack::PushL( TCleanupItem( Cleanup, &infoArray ) ); + + for (index = 0; index < iInterestList.Count(); index++) + { + if (iInterestList[index]->RomOnly()) // Rom-only criterias can be skipped. + { + continue; + } + + providers.Reset(); + infoArray.ResetAndDestroy(); + ListProvidersForCriteriaL(providers, *(iInterestList[index])); + iEcomMonitor->ListImplemetationsL(infoArray, iInterestList[index]); + HandleRemovedProviders(providers, infoArray); + HandleNewProvidersL(providers, infoArray, iInterestList[index]); + } + + CleanupStack::PopAndDestroy(&infoArray); // providers, infoArray + CleanupStack::PopAndDestroy(&providers); + } + + +void CLiwServiceHandlerImpl::HandleRemovedProviders(RArray& aInMemory, + RImplInfoPtrArray& aInSystem) + { + TInt index, index2; + + for (index = 0; index < aInMemory.Count(); index++) + { + for (index2 = 0; index2 < aInSystem.Count(); index2++) + { + if (aInSystem[index2]->ImplementationUid().iUid == aInMemory[index]) + { + break; + } + } + if (index2 >= aInSystem.Count()) // Was removed from system. + { + RemoveProvider(aInMemory[index]); + } + } + } + + +void CLiwServiceHandlerImpl::HandleNewProvidersL(RArray& aInMemory, + RImplInfoPtrArray& aInSystem, CLiwCriteriaItem* aItem) + { + TInt index; + + for (index = 0; index < aInSystem.Count(); index++) + { + if (aInMemory.Find(aInSystem[index]->ImplementationUid().iUid) == KErrNotFound) + { + AddProviderL(aInSystem[index]->ImplementationUid(), aItem); + } + } + } + +void CLiwServiceHandlerImpl::MenuLaunched() + { + ClearMenuPaneArray(); + iNextFreeSlot = 0; + iLastInitialized.Reset(); + + // Reset the iMenuPane pointers from iMenuBindings. + for(TInt index = 0; index < iMenuBindings.Count(); index++) + { + iMenuBindings[index]->SetMenuPane(NULL); + } + } + +/* Utility function to get the symbian TCapability enum value + * from the string defined in the providers xml file + * + * @param aCapName name of the capabiility to be converted to \c TCapability enum + * + */ + +TCapability CLiwServiceHandlerImpl::GetServiceCapability(const TDesC& aCapName) +{ + TCapability cap(ECapability_None); + + if(0==aCapName.Compare(KCapabilityCommDD)) + { + cap=ECapabilityCommDD; + } + else if(0==aCapName.Compare(KCapabilityPowerMgmt)) + { + cap=ECapabilityPowerMgmt; + } + else if(0==aCapName.Compare(KCapabilityMultimediaDD)) + { + cap=ECapabilityMultimediaDD; + } + else if(0==aCapName.Compare(KCapabilityReadDeviceData)) + { + cap=ECapabilityReadDeviceData; + } + else if(0==aCapName.Compare(KCapabilityWriteDeviceData)) + { + cap=ECapabilityWriteDeviceData; + } + else if(0==aCapName.Compare(KCapabilityDRM)) + { + cap=ECapabilityDRM; + } + else if(0==aCapName.Compare(KCapabilityTrustedUI)) + { + cap=ECapabilityTrustedUI; + } + else if(0==aCapName.Compare(KCapabilityProtServ)) + { + cap=ECapabilityProtServ; + } + else if(0==aCapName.Compare(KCapabilityDiskAdmin)) + { + cap=ECapabilityDiskAdmin; + } + else if(0==aCapName.Compare(KCapabilityNetworkControl)) + { + cap=ECapabilityNetworkControl; + } + else if(0==aCapName.Compare(KCapabilityAllFiles)) + { + cap=ECapabilityAllFiles; + } + else if(0==aCapName.Compare(KCapabilitySwEvent)) + { + cap=ECapabilitySwEvent; + } + else if(0==aCapName.Compare(KCapabilityNetworkServices)) + { + cap=ECapabilityNetworkServices; + } + else if(0==aCapName.Compare(KCapabilityLocalServices)) + { + cap=ECapabilityLocalServices; + } + else if(0==aCapName.Compare(KCapabilityReadUserData)) + { + cap=ECapabilityReadUserData; + } + else if(0==aCapName.Compare(KCapabilityWriteUserData)) + { + cap=ECapabilityWriteUserData; + } + else if(0==aCapName.Compare(KCapabilityLocation)) + { + cap=ECapabilityLocation; + } + else if(0==aCapName.Compare(KCapabilitySurroundingsDD)) + { + cap=ECapabilitySurroundingsDD; + } + else if(0==aCapName.Compare(KCapabilityUserEnvironment)) + { + cap=ECapabilityUserEnvironment; + } + + return cap; +} + + +/** +* Returns the capability set defined in the service provider +* metadata information. The capability set is a pre-requisite +* for the service consumer to load the service provider module. +* +* The capability metadata information are defined as XML character +* data inside the element . The capability information +* are type of metadata information. Hence, the capability element tags +* should appear as child element of element. +* +* @param aCapability Capability set that the consumer should posess while +* loading the service provider +* +* @example +* +* @code +* +* +* CapabilityReadUserData +* CapabilityWriteUserData +* CapabilityDRM +* +* @endcode +* +*/ + +void CLiwServiceHandlerImpl::GetCapabilitiesL(RArray& secMgrCapList,CLiwGenericParamList* pMetaData) +{ + _LIT8(KCapability,"cap"); + + TInt pos = 0; + const TLiwGenericParam* pCapData = pMetaData->FindFirst(pos,KCapability); + + if(pCapData) + { + const CLiwList* pCapList = pCapData->Value().AsList(); + if(pCapList) + { + for(TInt idx(0);idx!=pCapList->Count();++idx) + { + TLiwVariant capVar; + capVar.PushL(); + pCapList->AtL(idx, capVar); + TPtrC capStr = capVar.AsDes(); + + TCapability cap = this->GetServiceCapability(capStr); + if( (cap>=ECapabilityTCB) && (cap < ECapability_Limit)) + secMgrCapList.AppendL(cap); + CleanupStack::Pop(&capVar); + capVar.Reset(); + } + } + + } +} + +void CLiwServiceHandlerImpl::ComputeIntfVersion(CLiwServiceData* pProvMetaData,TReal& aIntfVersion) +{ + CLiwGenericParamList* pMetaDataList = pProvMetaData->GetMetaData(); + + if(pMetaDataList) + { + TInt verPos(KErrNone); + _LIT8(KVer,"ver"); + const TLiwGenericParam* pVerParam = pMetaDataList->FindFirst(verPos,KVer); + if(pVerParam) + { + const CLiwList* pVersionList = pVerParam->Value().AsList(); + if(pVersionList) + { + if(pVersionList->Count()) + { + TLiwVariant verVar; + verVar.PushL(); + pVersionList->AtL(0,verVar);//pick up the value in 0th index.. + aIntfVersion = verVar.AsTReal(); + CleanupStack::Pop(&verVar); + verVar.Reset(); + } + } + } + } +} + + +TInt CLiwServiceHandlerImpl::ResolveProvidersL(CLiwBinding* aBinding, + CLiwCriteriaItem* aItem, + CRTSecMgrScriptSession* aScriptSession) + { + TInt result = 0; + TInt status = KLiwUnknown; + + // First resolve for providers already in memory. + TInt index; + for (index = 0; index < iProviders.Count(); index++) + { + if (iProviders[index]->Match(aItem)) + { + aBinding->AddProviderL((CLiwServiceIfBase*)iProviders[index], + iProviders[index]->ImplementationUid() == aItem->DefaultProvider()); + result++; + } + } + + + // If cached providers were found, then it means that all the matching + // providers must be already in memory. No need to query from ECom framework. + if (!result) + { + RImplInfoPtrArray infoArray; + RArray infoArrayPlugin; + + CleanupStack::PushL( TCleanupItem( Cleanup, &infoArray ) ); + CleanupStack::PushL( TCleanupItem( Int32ArrayCleanup, &infoArrayPlugin ) ); + + iEcomMonitor->ListImplemetationsL(infoArray, aItem); + + FilterInfoArray(infoArray, infoArrayPlugin, aItem); + + CLiwServiceData* pServiceData = NULL; + + CLiwServiceData* pPrevSData = NULL; + + CImplementationInformation* pChosenImpl = NULL; + + TReal currentMax(KDefVersion); + + for (index = 0; index < infoArray.Count(); index++) + { + TBool stackPop = EFalse; + if ((aItem->Options() & LIW_OPTIONS_ROM_ONLY) && (infoArray[index]->RomBased() == EFalse)) + { + continue; + } + + //Check whether consumer has capability + //mandated by provider + CImplementationInformation* pImplInfo = infoArray[index]; + + TBuf8 opaq; + + ParseMetaData(pImplInfo->OpaqueData(),opaq); + + CLiwXmlHandler* pXmlHandler = CLiwXmlHandler::NewLC(); + + pServiceData = CLiwServiceData::NewLC(); + + TInt loadStatus= CLiwXmlHandler::ESrvDataLoadFailed; + + //Inline metadata defined + if(opaq.Length()>0) + { + loadStatus=pXmlHandler->LoadServiceData(opaq,pServiceData); + } + else + { + //Obtain the capabilities from the metadata + TUid implUid = pImplInfo->ImplementationUid(); + TUidName srvProvUid = implUid.Name(); + + + TPtrC16 ptrSrv = srvProvUid.Right(srvProvUid.Length()-1); + TPtrC16 srvFile = ptrSrv.Left(ptrSrv.Length()-1); + TDriveUnit driveUnit = pImplInfo->Drive(); + TFileName fileName = driveUnit.Name(); + fileName.Append(KDC_RESOURCE_FILES_DIR); + fileName.Append(srvFile); + fileName.Append(KPerExtension); + loadStatus=pXmlHandler->LoadServiceData(fileName,pServiceData); + } + + /* + * - Get version range specified by the consumer + * - Iterate over the list of intf impl + * + * //LOOP: + * - For each implementation item, + * + * - Check if intf impl has version tag from its metadata + * - Pick up interface impl's version tag + * - If intf impl has NO specifed version tag + * - set this intf impl version as DEFAULT VERSION (//pref 1.0).. + * + * //CHOOSE LATEST VERSION: + * - If consumer has specifed version range + * - CALL COMPARE routine (//To check if this is the latest version so far) + * - Mark this as the chosen implementation + * - Else (//This is NOT the latest) + * - Continue; + * + * - Else (//If consumer did not specify version range) + * - CALL COMPARE routine (//To check if this is the latest version so far) + * - Mark this as the chosen implementation + * - Else (//This is NOT the latest) + * - Continue; + * + * //COMPARE (currentMax,implVersion,minVer,maxVer): //default minVer=1.0 + * - if(implVersion>currentMax) + * - if(implVersion>=minVer && implVersion<=maxVer) + * - currentMax = implVersion; + * - return; //mark pServiceData to point to the current impl's service data + * - else + * - return; //leave pServiceData as it is + * - else + * - return; //leave pServiceData as it is + * + */ + + if(CLiwXmlHandler::ESrvDataLoadSuccess==loadStatus) //metadata is parsed successfully + { + TReal implVersion(KDefVersion); + this->ComputeIntfVersion(pServiceData,implVersion); //fetch impl version.. + + TReal minVer(KDefVersion); + TReal maxVer(KUnspVersion); + + TBool verChk = this->GetVersionRange(aItem,minVer,maxVer); + + if(verChk) //Get version queried by consumer + { + if(minVer == KUnspVersion) + minVer = KDefVersion; + + //perform comparison... + if(implVersion>=currentMax) + { + if(maxVer!=KUnspVersion) + { + if((implVersion>=minVer) && (implVersion<=maxVer)) + { + currentMax = implVersion; + pChosenImpl = infoArray[index]; + //current impl is the best choice..this is THE CHOSEN ONE.. + if(pPrevSData) + { + pPrevSData->CleanUpMetaData(); + delete pPrevSData; + + } + + pPrevSData = pServiceData; + + } + else + { + //current impl is NOT THE RIGHT CHOICE.. since not within the range + if(pServiceData) + { + if(!stackPop) + { + stackPop = ETrue; + CleanupStack::Pop(pServiceData); + } + pServiceData->CleanUpMetaData(); + delete pServiceData; + pServiceData = NULL; + } + status = KLiwVersionOutOfRange; + } + } + else + { + //means maxVer == KUnspVersion + if(implVersion>=minVer) + { + currentMax = implVersion; + pChosenImpl = infoArray[index]; + + //current impl is the best choice..this is THE CHOSEN ONE.. + if(pPrevSData) + { + pPrevSData->CleanUpMetaData(); + delete pPrevSData; + } + + pPrevSData = pServiceData; + } + else + { + //current impl is NOT THE RIGHT CHOICE.. + if(pServiceData) + { + if(!stackPop) + { + stackPop = ETrue; + CleanupStack::Pop(pServiceData); + } + pServiceData->CleanUpMetaData(); + delete pServiceData; + pServiceData = NULL; + } + + status = KLiwVersionOutOfRange; + } + } + } + else + { + //current impl is NOT THE RIGHT CHOICE..since implVer > maxVer + if(pServiceData) + { + if(!stackPop) + { + stackPop = ETrue; + CleanupStack::Pop(pServiceData); + } + pServiceData->CleanUpMetaData(); + delete pServiceData; + pServiceData = NULL; + } + + status = KLiwVersionOutOfRange; + } + } + else + { + //GetVersionRange Fails.. + //abort service resolution process.. + if(pServiceData) + { + if(!stackPop) + { + stackPop = ETrue; + CleanupStack::Pop(pServiceData); + } + pServiceData->CleanUpMetaData(); + delete pServiceData; + pServiceData = NULL; + } + + status = KLiwInvalidVersionSpecification; + } + + //other cases like parse error, capability not + //specified in meta data are handled + + if(currentMax == implVersion) + { + if(pPrevSData && (pPrevSData!=pServiceData)) //just in case... + { + pPrevSData->CleanUpMetaData(); + delete pPrevSData; + pPrevSData = NULL; + } + } + else + { + if(!stackPop) + { + stackPop = ETrue; + CleanupStack::Pop(pServiceData); + } + pServiceData = pPrevSData; + } + } + else + { + //Metadata specification not found.. Hence Load Fails + if(CLiwXmlHandler::ESrvDataFileNotFnd==loadStatus) + { + pChosenImpl = infoArray[index]; + } + else //Some error like parse error, capability not specified are handled + { + if(pServiceData) + { + if(!stackPop) + { + stackPop = ETrue; + CleanupStack::Pop(pServiceData); + } + pServiceData->CleanUpMetaData(); + delete pServiceData; + pServiceData = NULL; + } + + status = KLiwMetaDataInvalidFormat; + } + } + + for (TInt idx = 0; idx < infoArrayPlugin.Count(); idx++) + { + // currently assumed that implementations managed by plugins cannot be in ROM + if (aItem->Options() & LIW_OPTIONS_ROM_ONLY) + { + continue; + } + } + + if(!stackPop) + { + CleanupStack::Pop(pServiceData); + } + + CleanupStack::Pop(pXmlHandler); + + if(pXmlHandler) + { + delete pXmlHandler; + } + + + } //end of for loop + + if(pChosenImpl) + { + RArray provCaps; + GetCapabilitiesL(provCaps,pServiceData->GetMetaData()); + + TInt isAllowed(KErrNone); + + if(aScriptSession) + isAllowed = aScriptSession->IsAllowed(provCaps); + + if(KErrNone==isAllowed) + { + CLiwServiceIfBase* iface = iEcomMonitor->CreateImplementationL( + pChosenImpl->ImplementationUid()); + + if (iface) + { + if(pServiceData) + { + iface->iReserved=pServiceData; + } + + + if (!IsCached(iface)) + { + CleanupStack::PushL(iface); + status = KLiwServiceLoadSuccess; + iface->AddCriteria(aItem); + User::LeaveIfError(iProviders.Append( iface )); + CleanupStack::Pop(iface); + + aBinding->AddProviderL(iface, + pChosenImpl->ImplementationUid() == aItem->DefaultProvider()); + } + else + { + delete iface; + iface = NULL; + } + } + + } + else + { + status = KLiwSecurityAccessCheckFailed; + + if(pServiceData) + { + pServiceData->CleanUpMetaData(); + delete pServiceData; + pServiceData = NULL; + } + + //enhancement : Should assign this to the previous service data + } + + provCaps.Close(); + } + else + { + //No Chosen implementation.. + + if(pServiceData) //This should ideally fail always + { + pServiceData->CleanUpMetaData(); + delete pServiceData; + pServiceData = NULL; + } + } + + if(0 == infoArray.Count()) + status = KLiwUnknown; + + CleanupStack::PopAndDestroy(2);//infoArray and infoArrayPlugin + } + else + { + status = KLiwServiceAlreadyLoaded; + } + + return status; + + } + + +TBool CLiwServiceHandlerImpl::GetVersionRange(CLiwCriteriaItem* aItem,TReal& aMinVersion, TReal& aMaxVersion) +{ + TBool bFailed=EFalse; + TLiwVariant metaDataVar; + metaDataVar.PushL(); + + aItem->GetMetaDataOptions(metaDataVar); + + const CLiwMap* metaDataMap = metaDataVar.AsMap(); + + if(metaDataMap) + { + _LIT8(KRangeKey,"range"); + TLiwVariant rangeVar; + rangeVar.PushL(); + + if(metaDataMap->FindL(KRangeKey, rangeVar)) + { + const CLiwList* pRangeList = rangeVar.AsList(); + if(pRangeList) + { + TLiwVariant verCheck; + verCheck.PushL(); + _LIT8(KVersion,"ver"); + pRangeList->AtL(0,verCheck); + + if(EVariantTypeDesC8==verCheck.TypeId()) + { + if(0==KVersion().CompareF(verCheck.AsData())) + { + TLiwVariant minVerVar, maxVerVar; + minVerVar.PushL(); + maxVerVar.PushL(); + + pRangeList->AtL(1,minVerVar); + aMinVersion = minVerVar.AsTReal(); + + if(minVerVar.AsTReal() < KDefVersion) + bFailed = ETrue; + + pRangeList->AtL(2,maxVerVar); + aMaxVersion = maxVerVar.AsTReal(); + + if(maxVerVar.AsTReal() < aMinVersion && maxVerVar.AsTReal() != KUnspVersion) + bFailed = ETrue; + + CleanupStack::Pop(&maxVerVar); + CleanupStack::Pop(&minVerVar); + minVerVar.Reset(); + maxVerVar.Reset(); + } + } + CleanupStack::Pop(&verCheck); + verCheck.Reset(); + } + } + CleanupStack::Pop(&rangeVar); + rangeVar.Reset(); + } + + CleanupStack::Pop(&metaDataVar); + metaDataVar.Reset(); + + return !bFailed; +} + +TBool CLiwServiceHandlerImpl::GetVersion(CLiwCriteriaItem* aItem,TReal& aVersion) +{ + TBool bFailed=EFalse; + TLiwVariant metaDataVar; + metaDataVar.PushL(); + + aItem->GetMetaDataOptions(metaDataVar); + + const CLiwMap* metaDataMap = metaDataVar.AsMap(); + + if(metaDataMap) + { + _LIT8(KExactKey,"exact"); + TLiwVariant exactVar; + exactVar.PushL(); + + if(metaDataMap->FindL(KExactKey, exactVar)) + { + const CLiwList* pExactList = exactVar.AsList(); + if(pExactList) + { + TLiwVariant verCheck; + verCheck.PushL(); + _LIT8(KVersion,"ver"); + pExactList->AtL(0,verCheck); + + if(EVariantTypeDesC8==verCheck.TypeId()) + { + if(0==KVersion().CompareF(verCheck.AsData())) + { + TLiwVariant versionVar; + versionVar.PushL(); + + pExactList->AtL(1,versionVar); + + if((versionVar.AsTReal()) < KDefVersion) + { + bFailed = ETrue; + } + + aVersion = versionVar.AsTReal(); + CleanupStack::Pop(&versionVar); + versionVar.Reset(); + } + } + CleanupStack::Pop(&verCheck); + verCheck.Reset(); + } + } + + CleanupStack::Pop(&exactVar); + exactVar.Reset(); + } + + CleanupStack::Pop(&metaDataVar); + metaDataVar.Reset(); + + return !bFailed; +} + +// End of file diff -r 000000000000 -r 99ef825efeca languageinterworkingfw/servicehandler/src/liwserviceifbase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/languageinterworkingfw/servicehandler/src/liwserviceifbase.cpp Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,119 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + + +#include +#include "liwserviceifbase.h" +#include "liwcommon.h" +#include "liwservicedata.h" + +EXPORT_C CLiwServiceIfBase::~CLiwServiceIfBase() + { + if (iDtorKeyId.iUid) + { + REComSession::DestroyedImplementation(iDtorKeyId); + } + iCriterias.Close(); + + if(iReserved) + delete (CLiwServiceData*)iReserved; + } + + +void CLiwServiceIfBase::SetDtorKeyId(TUid aDtorKeyId) + { + iDtorKeyId = aDtorKeyId; + } + + +TBool CLiwServiceIfBase::Match(CLiwCriteriaItem* aItem) + { + for (TInt index = 0; index < iCriterias.Count(); index++) + { + if ((iCriterias[index]->ServiceClass() == aItem->ServiceClass()) && + (iCriterias[index]->ServiceCmd() == aItem->ServiceCmd()) && + (iCriterias[index]->ContentType() == aItem->ContentType()) && + (iCriterias[index]->Options() == aItem->Options()) && + (iCriterias[index]->DefaultProvider() == aItem->DefaultProvider())) + { + if (iCriterias[index]->ServiceCmd() == KLiwCmdAsStr) + { + return (iCriterias[index]->ServiceCmdStr() == aItem->ServiceCmdStr()) ? ETrue : EFalse; + } + + else + { + return ETrue; + } + } + } + + return EFalse; + } + + +void CLiwServiceIfBase::AddCriteria(CLiwCriteriaItem* aItem) + { + iCriterias.Append(aItem); + } + + + +TUid CLiwServiceIfBase::ImplementationUid() const + { + return iImplUid; + } + + + +void CLiwServiceIfBase::SetImplementationUid(TUid aUid) + { + iImplUid = aUid; + } + + + +TBool CLiwServiceIfBase::HasCriteria(CLiwCriteriaItem& aItem) const + { + TInt index; + + for (index = 0; index < iCriterias.Count(); index++) + { + if (aItem == *(iCriterias[index])) + { + return ETrue; + } + } + + return EFalse; + } + + +EXPORT_C void* CLiwServiceIfBase::ExtensionInterface(TUid aInterface) + { + if(KLiwGetServiceDataIf==aInterface.iUid) + { + return iReserved; + } + + return NULL; + } +// Enf of file diff -r 000000000000 -r 99ef825efeca languageinterworkingfw/servicehandler/src/liwserviceifmenu.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/languageinterworkingfw/servicehandler/src/liwserviceifmenu.cpp Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,83 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Implements service API for providers offering menu services +* for consumers. +* +*/ + + + + + + +#include +#include "liwserviceifmenu.h" +#include "liwmenu.h" + + +void CLiwServiceIfMenu::InitializeMenuPaneHookL( + CLiwMenuPane* aMenuPane, + TInt aIndex, + TInt aCascadeId, + const CLiwGenericParamList& aInParamList) + { + iMenuPane = aMenuPane; + + // Trapping prevents a leaving provider from breaking the whole consumer menu. + TRAPD(err, InitializeMenuPaneL(*aMenuPane, aIndex, aCascadeId, aInParamList)); + if(err) + { +#ifdef _DEBUG + RDebug::Print(_L("LIW PROVIDER ERROR: CLiwServiceIfMenu::InitializeMenuPaneL() failed, leave code:%d"), err); +#endif + } + } + + + +void CLiwServiceIfMenu::HandleMenuCmdHookL( + CLiwMenuPane* aMenuPane, + TInt aMenuCmdId, + const CLiwGenericParamList& aInParamList, + CLiwGenericParamList& aOutParamList, + TUint aCmdOptions, + const MLiwNotifyCallback* aCallback) + { + if (!iMenuPane) + { + return; + } + + HandleMenuCmdL(aMenuPane->MenuCmdId(aMenuCmdId), aInParamList, aOutParamList, + aCmdOptions, aCallback); + } + + +EXPORT_C const CLiwMenuPane* CLiwServiceIfMenu::MenuPane() const + { + return iMenuPane; + } + + +EXPORT_C CLiwServiceIfMenu::~CLiwServiceIfMenu() + { + } + + +EXPORT_C void* CLiwServiceIfMenu::ExtensionInterface(TUid /*aInterface*/) + { + return NULL; + } + +// End of file diff -r 000000000000 -r 99ef825efeca languageinterworkingfw/servicehandler/src/liwtlsdata.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/languageinterworkingfw/servicehandler/src/liwtlsdata.cpp Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,125 @@ +/* +* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: TLS data object. +* +*/ + + + + + + +// INCLUDE FILES +#include "liwtlsdata.h" + +// CONSTANTS + +const TInt KMenuLaunchObserversGranularity = 2; + +// ================= MEMBER FUNCTIONS ========================================== + +CLiwTlsData::CLiwTlsData() : + iMenuLaunchObservers( KMenuLaunchObserversGranularity ) + { + } + +CLiwTlsData::~CLiwTlsData() + { + iMenuLaunchObservers.Reset(); + Dll::FreeTls(); + } + +CLiwTlsData* CLiwTlsData::NewL() + { + CLiwTlsData* data = new( ELeave ) CLiwTlsData; + CleanupStack::PushL( data ); + data->ConstructL(); + CleanupStack::Pop(data); // data + return data; + } + +void CLiwTlsData::ConstructL() + { + User::LeaveIfError( Dll::SetTls( this ) ); + } + +// ----------------------------------------------------------------------------- +// CLiwTlsData::OpenL +// ----------------------------------------------------------------------------- +// +CLiwTlsData* CLiwTlsData::OpenL() + { + CLiwTlsData* data = Instance(); + if ( !data ) + { + data = NewL(); + } + + data->iRefCount++; + return data; + } + +// ----------------------------------------------------------------------------- +// CLiwTlsData::Close +// ----------------------------------------------------------------------------- +// +void CLiwTlsData::Close() + { + CLiwTlsData* data = Instance(); + __ASSERT_DEBUG( data, User::Invariant() ); + if ( data ) + { + if ( --data->iRefCount == 0 ) + { + delete data; // also frees TLS + } + } + } + +// ----------------------------------------------------------------------------- +// CLiwTlsData::AddMenuLaunchObserverL +// ----------------------------------------------------------------------------- +// +void CLiwTlsData::AddMenuLaunchObserverL( MLiwMenuLaunchObserver* aObserver ) + { + User::LeaveIfError( iMenuLaunchObservers.Append( aObserver ) ); + } + +// ----------------------------------------------------------------------------- +// CLiwTlsData::RemoveMenuLaunchObserver +// ----------------------------------------------------------------------------- +// +void CLiwTlsData::RemoveMenuLaunchObserver( MLiwMenuLaunchObserver* aObserver ) + { + TInt index = iMenuLaunchObservers.Find( aObserver ); + if ( index >= 0 ) + { + iMenuLaunchObservers.Remove( index ); + } + } + +// ----------------------------------------------------------------------------- +// CLiwTlsData::ReportMenuLaunch +// ----------------------------------------------------------------------------- +// +void CLiwTlsData::ReportMenuLaunch() + { + TInt count = iMenuLaunchObservers.Count(); + for ( TInt index = 0 ; index < count ; index++ ) + { + iMenuLaunchObservers[index]->MenuLaunched(); + } + } + +// End of file diff -r 000000000000 -r 99ef825efeca languageinterworkingfw/servicehandler/src/liwvariant.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/languageinterworkingfw/servicehandler/src/liwvariant.cpp Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,1767 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Implementation of class TLiwVariant. +* +*/ + + + + + + + +// INCLUDES +#ifdef _DEBUG +#include +#endif +#include "liwvariant.h" +#include "liwgenericparam.h" + +// ============================= LOCAL FUNCTIONS =============================== + +using namespace LIW; +namespace { + +// CONSTANTS +/// TLiwVariant streaming version +const TInt KVersion = 10; // Version 1.0 + + +const TInt KBufSizeMid = 128; +const TInt KBufSizeSmall = 64; +const TInt KBufSizeLarge = 8192; + + +// Debug helpers +#ifdef _DEBUG + +enum TPanicCode + { + EPanicPostCond_Constructor = 1, + EPanicPostCond_Reset, + EPanicPostCond_Set_TInt32, + EPanicPostCond_Set_TUid, + EPanicPostCond_Set_TTime, + EPanicPostCond_Set_TDesC, + EPanicPostCond_CopyL, + EPanicInvariant_InvalidDesCState, + EPanicPostCond_Set_TDesC8, + EPanicPreCond_DataSizeMismatch, + EPanicPostCond_Set_TBool, + EPanicPostCond_Set_TUint, + EPanicPostCond_Set_TReal, + EPanicPostCond_Set_TInt64 + }; + +void Panic(TPanicCode aCode) + { + _LIT(KPanicText, "TLiwVariant"); + User::Panic(KPanicText, aCode); + } + +#endif // #ifdef _DEBUG + +} // namespace + +_LIT8(KDummy, "Dummy"); // needed for BC-preserving hack to store info about ownership of container + +/* + * class CLiwContainer, class CLiwIterable, class CLiwList, class CLiwMap, + * class CLiwDefaultList, class CLiwDefaultMap + */ + +EXPORT_C void CLiwContainer::PushL() + { + CleanupClosePushL(*this); + } + +EXPORT_C void CLiwContainer::ExternalizeL(RWriteStream&) const + { + User::Leave(KErrNotSupported); + } + +EXPORT_C TInt CLiwContainer::Size() const + { + return KErrNotSupported; + } + +EXPORT_C CLiwContainer::~CLiwContainer() + { + /* + * Since CLiwContainer is based on reference count mechanism, it does not go with CleanupStack::PushL() + * + * LIW takes care of managing the memory in heap for CLiwContainer using the reference count logic + * + * The container should not be destroyed until the reference count is ZERO. + * If the reference count is not equal to ZERO, it means there are some more owners of that container + * + * This panics if the reference count is not equal to ZERO, in DEBUG Mode only + * + * Hence it is recommended to use CleanupClosePushL for Container objects when using CleanupStack + */ + + __ASSERT_DEBUG(iRefCount == 0, User::Panic(_L("E32USER-CBase: 33"), 1)); + } + +EXPORT_C void CLiwContainer::Close() + { + DecRef(); + } + + +EXPORT_C TBool CLiwIterable::operator==(CLiwIterable& aOther) + { + if (this == &aOther) + return ETrue; + + Reset(); + aOther.Reset(); + + TBool rval = ETrue; + TLiwVariant variant1, variant2; + + TRAPD(error, { + while (NextL(variant1)) + { + if (!aOther.NextL(variant2) || (variant1 != variant2)) + rval = EFalse; + } + }); + + if (rval && (error == KErrNone)) + { + TRAP(error, (rval = !(aOther.NextL(variant2)))); + } + + variant1.Reset(); + variant2.Reset(); + + return (error == KErrNone) ? rval : EFalse; + } + +EXPORT_C TBool CLiwList::operator==(const CLiwList& aOther) const + { + TInt count = Count(); + if (count != aOther.Count()) + return EFalse; + + TInt error = KErrNone; + TBool retval = ETrue; + TLiwVariant variant1, variant2; + for (TInt index = 0; index < count; index++) { + TRAP(error, { + AtL(index, variant1); aOther.AtL(index, variant2); + }); + if ((error != KErrNone) || (!(variant1 == variant2))) + { + retval = EFalse; + break; + } + } + variant1.Reset(); + variant2.Reset(); + return retval; + } + +EXPORT_C TBool CLiwMap::operator==(const CLiwMap& aOther) const + { + TInt count = Count(); + if (count != aOther.Count()) + return EFalse; + + TInt error = KErrNone; + TBool retval = ETrue; + TLiwVariant variant1, variant2; + TBuf8 buf1, buf2; + for (TInt index = 0; index < count; index++) + { + TRAP(error, { + AtL(index, buf1); aOther.AtL(index, buf2); + retval = (FindL(buf1, variant1) && aOther.FindL(buf2, variant2)); + }); + if (error != KErrNone) + retval = EFalse; + if (!retval || (!(variant1 == variant2))) + { + retval = EFalse; + break; + } + } + variant1.Reset(); + variant2.Reset(); + return retval; + } + +EXPORT_C CLiwDefaultList* CLiwDefaultList::NewL() + { + CLiwGenericParamList* gl = CLiwGenericParamList::NewLC(); + CLiwDefaultList* tempList = new (ELeave) CLiwDefaultList(gl); + CleanupStack::Pop(gl); // gl + return tempList; + } + +EXPORT_C CLiwDefaultList* CLiwDefaultList::NewLC() + { + CLiwGenericParamList* gl = CLiwGenericParamList::NewLC(); + CLiwDefaultList* tempList = new (ELeave) CLiwDefaultList(gl); + CleanupStack::Pop(gl); // gl + CleanupClosePushL(*tempList); + return tempList; + } + +EXPORT_C CLiwDefaultList* CLiwDefaultList::NewLC(RReadStream& aStream) + { + CLiwDefaultList* tempList = CLiwDefaultList::NewL(); + CleanupClosePushL(*tempList); + tempList->iList->InternalizeL(aStream); + return tempList; + } + +EXPORT_C void CLiwDefaultList::AppendL(const TLiwVariant& aValue) + { + iList->AppendL(TLiwGenericParam(EGenericParamUnspecified, aValue)); + } + +EXPORT_C TBool CLiwDefaultList::AtL(TInt aIndex, TLiwVariant& aValue) const + { + if(0 <= aIndex && aIndex < iList->Count()) + { + aValue.SetL((*iList)[aIndex].Value()); + return ETrue; + } + else + { + return EFalse; + } + } + +EXPORT_C void CLiwDefaultList::Remove(TInt aIndex) + { + if(0 <= aIndex && aIndex < iList->Count()) + { + iList->iParameters[aIndex].Destroy(); + iList->iParameters.Remove(aIndex); + } + } + +EXPORT_C TInt CLiwDefaultList::Count() const + { + return iList->Count(); + } + +EXPORT_C void CLiwDefaultList::ExternalizeL(RWriteStream& aStream) const + { + iList->ExternalizeL(aStream); + } + +EXPORT_C TInt CLiwDefaultList::Size() const + { + return iList->Size(); + } + +EXPORT_C CLiwDefaultList::~CLiwDefaultList() + { + delete iList; + } + +EXPORT_C CLiwDefaultMap* CLiwDefaultMap::NewL() + { + CLiwGenericParamList* gl = CLiwGenericParamList::NewLC(); + CLiwDefaultMap* tempMap = new (ELeave) CLiwDefaultMap(gl); + CleanupStack::Pop(gl); // gl + return tempMap; + } + +EXPORT_C CLiwDefaultMap* CLiwDefaultMap::NewLC() + { + CLiwGenericParamList* gl = CLiwGenericParamList::NewLC(); + CLiwDefaultMap* tempMap = new (ELeave) CLiwDefaultMap(gl); + CleanupStack::Pop(gl); // gl + CleanupClosePushL(*tempMap); + return tempMap; + } + +EXPORT_C CLiwDefaultMap* CLiwDefaultMap::NewLC(RReadStream& aStream) + { + CLiwDefaultMap* tempMap = CLiwDefaultMap::NewL(); + CleanupClosePushL(*tempMap); + tempMap->iMap->InternalizeL(aStream); + return tempMap; + } + +EXPORT_C void CLiwDefaultMap::InsertL(const TDesC8& aKey, const TLiwVariant& aValue) + { + Remove(aKey); + TLiwGenericParam mp; + mp.SetNameAndValueL(aKey, aValue); + iMap->AppendL(mp); + mp.Reset(); + } + +EXPORT_C TBool CLiwDefaultMap::FindL(const TDesC8& aKey, TLiwVariant& aValue) const + { + TInt pos = 0; + const TLiwGenericParam* tempParam = iMap->FindFirst(pos, aKey); + if (tempParam) + { + aValue.SetL(tempParam->Value()); + return ETrue; + } + else + return EFalse; + } + +EXPORT_C TInt CLiwDefaultMap::Count() const + { + return iMap->Count(); + } + +EXPORT_C TBool CLiwDefaultMap::AtL(TInt aIndex, TDes8& aKey) const + { + if(0 <= aIndex && aIndex < iMap->Count()) + { + aKey = ((*iMap)[aIndex]).Name(); + return ETrue; + } + else + { + return EFalse; + } + } + +EXPORT_C const TDesC8& CLiwDefaultMap::AtL(TInt aIndex) const + { + if(0 <= aIndex && aIndex < iMap->Count()) + { + return ((*iMap)[aIndex]).Name(); + } + else + { + User::LeaveIfError(KErrArgument); + return KNullDesC8; + } + } + +EXPORT_C void CLiwDefaultMap::Remove(const TDesC8& aKey) + { + TInt pos = 0; + iMap->FindFirst(pos, aKey); + if (pos != KErrNotFound) + { + iMap->iParameters[pos].Destroy(); + iMap->iParameters.Remove(pos); + } + } + +EXPORT_C void CLiwDefaultMap::ExternalizeL(RWriteStream& aStream) const + { + iMap->ExternalizeL(aStream); + } + +EXPORT_C TInt CLiwDefaultMap::Size() const + { + return iMap->Size(); + } + +EXPORT_C CLiwDefaultMap::~CLiwDefaultMap() + { + delete iMap; + } + +// ============================ MEMBER FUNCTIONS =============================== + +#ifdef _DEBUG +void TLiwVariant::__DbgTestInvariant() const + { + if (iTypeId==EVariantTypeDesC && iData.iBufC) + { + __ASSERT_ALWAYS(iData.iBufC->Ptr() == iPtrC.Ptr(), + Panic(EPanicInvariant_InvalidDesCState)); + + } + } +#endif // #ifdef _DEBUG + + +EXPORT_C void TLiwVariant::PushL() + { + CleanupStack::PushL( TCleanupItem( TLiwVariant::VariantCleanup , this) ); + } + +EXPORT_C void TLiwVariant::VariantCleanup( TAny* aObj ) + { + static_cast(aObj)->Destroy(); + } + +inline void TLiwVariant::SInt64::InternalizeL(RReadStream& aStream) + { + TInt32 low = aStream.ReadInt32L(); + iHigh = aStream.ReadInt32L(); + iLow = low; + } + +inline void TLiwVariant::SInt64::ExternalizeL(RWriteStream& aStream) const + { + aStream.WriteInt32L(iLow); + aStream.WriteInt32L(iHigh); + } + +inline void TLiwVariant::SInt64::Set(const TInt64& aTInt64) + { + iLow = I64LOW(aTInt64); + iHigh = I64HIGH(aTInt64); + } + +inline TLiwVariant::SInt64::operator TInt64() const + { + return MAKE_TINT64(iHigh,iLow); + } + +inline TBool TLiwVariant::SInt64::operator==(const SInt64& aRhs) const + { + return (iHigh==aRhs.iHigh && iLow==aRhs.iLow); + } + + +EXPORT_C TLiwVariant::TLiwVariant(const TLiwVariant& aSrc) : + iTypeId(aSrc.iTypeId), iData(aSrc.iData), iPtrC(), iPtrC8() + { + if (iTypeId == EVariantTypeDesC) + { + iPtrC.Set(aSrc.iPtrC); + // Do not take ownership of data + iData.iBufC = NULL; + } + else if ( iTypeId == EVariantTypeDesC8 ) + { + iPtrC8.Set( aSrc.iPtrC8 ); + // Do not take ownership of data + iData.iBufC8 = NULL; + } + } + +EXPORT_C TLiwVariant& TLiwVariant::operator=(const TLiwVariant& aSrc) + { + // Check self-assignment first. + if (this == &aSrc) + { + return *this; + } + Reset(); + iTypeId = aSrc.iTypeId; + iData = aSrc.iData; + if (iTypeId == EVariantTypeDesC) + { + iPtrC.Set(aSrc.iPtrC); + // Do not take ownership of data + iData.iBufC = NULL; + } + else if ( iTypeId == EVariantTypeDesC8 ) + { + iPtrC8.Set( aSrc.iPtrC8 ); + // Do not take ownership of data + iData.iBufC8 = NULL; + } + return *this; + } + +EXPORT_C TBool TLiwVariant::Get(TInt32& aValue) const + { + __TEST_INVARIANT; + if (iTypeId == EVariantTypeTInt32) + { + aValue = iData.iInt32; + return ETrue; + } + else if (iTypeId == EVariantTypeTReal) + { + aValue = (TInt32)iData.iReal; + return ETrue; + } + else if (iTypeId == EVariantTypeDesC8) //string to real conversion + { + TLex8 parseString(iPtrC8); + TInt err = parseString.Val(aValue); + if(err == KErrNone) + return ETrue; + } + else if (iTypeId == EVariantTypeDesC) //string to real conversion + { + TLex16 parseString(iPtrC); + TInt err = parseString.Val(aValue); + if(err == KErrNone) + return ETrue; + } + else if (iTypeId == EVariantTypeTUint) //TUint to int conversion + { + aValue = (TInt32)iData.iUint; + return ETrue; + } + else if (iTypeId == EVariantTypeTInt64) //TInt64 to TInt32 conversion + { + aValue = (TInt32)iData.iLong; //Warning : Results in loss of data sometimes + return ETrue; + } + return EFalse; + } + +EXPORT_C TBool TLiwVariant::Get(TInt64& aValue) const + { + __TEST_INVARIANT; + if (iTypeId == EVariantTypeTInt64) + { + aValue = iData.iLong; + return ETrue; + } + else if (iTypeId == EVariantTypeTInt32) + { + aValue = iData.iInt32; + return ETrue; + } + else if (iTypeId == EVariantTypeTReal) + { + aValue = (TInt32)iData.iReal; + return ETrue; + } + else if (iTypeId == EVariantTypeDesC8) //string to real conversion + { + TLex8 parseString(iPtrC8); + TInt err = parseString.Val(aValue); + if(err == KErrNone) + return ETrue; + } + else if (iTypeId == EVariantTypeDesC) //string to real conversion + { + TLex16 parseString(iPtrC); + TInt err = parseString.Val(aValue); + if(err == KErrNone) + return ETrue; + } + else if (iTypeId == EVariantTypeTUint) //TUint to int conversion + { + aValue = (TInt32)iData.iUint; + return ETrue; + } + return EFalse; + } + +EXPORT_C TBool TLiwVariant::Get(TReal& aValue) const + { + __TEST_INVARIANT; + if (iTypeId == EVariantTypeTReal) + { + aValue = iData.iReal; + return ETrue; + } + else if(iTypeId == EVariantTypeTInt32) + { + aValue = iData.iInt32; + return ETrue; + } + else if (iTypeId == EVariantTypeDesC8) //string to integer conversion + { + TLex8 parseString(iPtrC8); + TInt err = parseString.Val(aValue); + if(err == KErrNone) + return ETrue; + } + else if (iTypeId == EVariantTypeDesC) //string to integer conversion + { + TLex16 parseString(iPtrC); + TInt err = parseString.Val(aValue); + if(err == KErrNone) + return ETrue; + } + else if (iTypeId == EVariantTypeTUint) //TUint to real conversion + { + aValue = iData.iUint; + return ETrue; + } + else if(iTypeId == EVariantTypeTInt64) + { + aValue = iData.iLong; //Warning : Results in loss of data + return ETrue; + } + return EFalse; + } +EXPORT_C TBool TLiwVariant::Get(TBool& aValue) const + { + __TEST_INVARIANT; + if (iTypeId == EVariantTypeTBool) + { + aValue = iData.iBool; + return ETrue; + } + return EFalse; + } + +EXPORT_C TBool TLiwVariant::Get(TUint& aValue) const + { + __TEST_INVARIANT; + if (iTypeId == EVariantTypeTUint) + { + aValue = iData.iUint; + return ETrue; + } + else if (iTypeId == EVariantTypeTReal) //real to TUint conversion + { + aValue = static_cast(iData.iReal); + return ETrue; + } + else if(iTypeId == EVariantTypeTInt32) // TInt32 to TUint conversion + { + aValue = static_cast(iData.iInt32); + return ETrue; + } + else if (iTypeId == EVariantTypeDesC8) //desc8 to TUint conversion + { + TLex8 parseString(iPtrC8); + TInt err = parseString.Val(aValue); + if(err == KErrNone) + return ETrue; + } + else if (iTypeId == EVariantTypeDesC) //desc16 to TUint conversion + { + TLex16 parseString(iPtrC); + TInt err = parseString.Val(aValue); + if(err == KErrNone) + return ETrue; + } + else if(iTypeId == EVariantTypeTInt64) // TInt32 to TUint conversion + { + aValue = static_cast(iData.iLong); //Warning : Results in loss of data + return ETrue; + } + return EFalse; + } + +EXPORT_C TBool TLiwVariant::Get(TUid& aValue) const + { + __TEST_INVARIANT; + if (iTypeId == EVariantTypeTUid) + { + aValue = TUid::Uid(iData.iInt32); + return ETrue; + } + return EFalse; + } + +EXPORT_C TBool TLiwVariant::Get(TPtrC& aValue) const + { + __TEST_INVARIANT; + if (iTypeId == EVariantTypeDesC) + { + aValue.Set(iPtrC); + return ETrue; + } + return EFalse; + } + +EXPORT_C TBool TLiwVariant::Get(TTime& aValue) const + { + __TEST_INVARIANT; + if (iTypeId == EVariantTypeTTime) + { + aValue = TTime(iData.iInt64); + return ETrue; + } + return EFalse; + } + + +EXPORT_C TBool TLiwVariant::Get(TPtrC8& aValue) const + { + __TEST_INVARIANT; + if (iTypeId == EVariantTypeDesC8) + { + aValue.Set(iPtrC8); + return ETrue; + } + + return EFalse; + } + +EXPORT_C TBool TLiwVariant::Get(TDes& aValue) const + { + __TEST_INVARIANT; + if (iTypeId == EVariantTypeDesC) + { + aValue.Copy(iPtrC); + return ETrue; + } + else if (iTypeId == EVariantTypeDesC8) + { + aValue.Copy(iPtrC8); + return ETrue; + } + else if (iTypeId == EVariantTypeTReal) //real to TDes conversion + { + const TRealFormat realFormat; + aValue.Num(iData.iReal,realFormat); + return ETrue; + } + else if(iTypeId == EVariantTypeTInt32) // TInt32 to TDes conversion + { + aValue.Num(iData.iInt32); + return ETrue; + } + else if(iTypeId == EVariantTypeTUint) // TInt32 to TDes conversion + { + aValue.Num(iData.iUint,EDecimal); + return ETrue; + } + else if(iTypeId == EVariantTypeTInt64) // TInt32 to TDes conversion + { + aValue.Num(iData.iLong); + return ETrue; + } + return EFalse; + } + + +EXPORT_C TBool TLiwVariant::Get(TDes8& aValue) const + { + __TEST_INVARIANT; + if (iTypeId == EVariantTypeDesC8) + { + aValue.Copy(iPtrC8); + return ETrue; + } + else if (iTypeId == EVariantTypeDesC) + { + aValue.Copy(iPtrC); + return ETrue; + } + else if (iTypeId == EVariantTypeTReal) //real to TDes8 conversion + { + const TRealFormat realFormat; + aValue.Num(iData.iReal,realFormat); + return ETrue; + } + else if(iTypeId == EVariantTypeTInt32) // TInt32 to TDes8 conversion + { + aValue.Num(iData.iInt32); + return ETrue; + } + else if(iTypeId == EVariantTypeTUint) // TInt32 to TDes conversion + { + aValue.Num(iData.iUint,EDecimal); + return ETrue; + } + else if(iTypeId == EVariantTypeTInt64) // TInt32 to TDes8 conversion + { + aValue.Num(iData.iLong); + return ETrue; + } + return EFalse; + } + + +EXPORT_C TBool TLiwVariant::Get(RFile& aValue) const + { + __TEST_INVARIANT; + if (iTypeId == EVariantTypeFileHandle) + { + aValue = *((RFile*)&iData.iInt64); + return ETrue; + } + + return EFalse; + } + +EXPORT_C TBool TLiwVariant::Get(CLiwList& aValue) const + { + __TEST_INVARIANT; + if (iTypeId == EVariantTypeList) + { + TInt pos = 0; + TLiwVariant tempVarient; + tempVarient.PushL(); + // Overwrite the list + if(0 != aValue.Count()) + { + // make the list Empty + for (pos = aValue.Count() - 1; pos >= 0 ; pos--) + aValue.Remove(pos); + } + // Copy List varient by varient + for (pos = 0; pos < iData.iList->Count(); pos++) + { + iData.iList->AtL(pos, tempVarient); + aValue.AppendL(tempVarient); + } + CleanupStack::Pop(&tempVarient); + tempVarient.Reset(); + return ETrue; + } + + return EFalse; + } + +EXPORT_C TBool TLiwVariant::Get(CLiwMap& aValue) const + { + __TEST_INVARIANT; + if (iTypeId == EVariantTypeMap) + { + TInt pos = 0; + TLiwVariant tempVarient; + tempVarient.PushL(); + // Overwrite the Map + if(0 != aValue.Count()) + { + // make the Map Empty + for (pos = aValue.Count() - 1; pos >= 0 ; pos--) + { + TBuf8 mapKey; + aValue.AtL(pos, mapKey); + aValue.Remove(mapKey); + } + } + // Copy Map varient by varient + for (pos = 0; pos < iData.iMap->Count(); pos++) + { + TBuf8 mapKey; + iData.iMap->AtL(pos, mapKey); + iData.iMap->FindL(mapKey, tempVarient); + aValue.InsertL(mapKey, tempVarient); + } + CleanupStack::Pop(&tempVarient); + tempVarient.Reset(); + return ETrue; + } + + return EFalse; + } +EXPORT_C TReal TLiwVariant::AsTReal() const + { + TReal value = 0; + Get(value); + return value; + } + +EXPORT_C TInt32 TLiwVariant::AsTInt32() const + { + TInt32 value = 0; + Get(value); + return value; + } + +EXPORT_C TInt64 TLiwVariant::AsTInt64() const + { + TInt64 value = 0; + Get(value); + return value; + } + +EXPORT_C CLiwBuffer* TLiwVariant::AsBuffer() const + { + __TEST_INVARIANT; + if (iTypeId == EVariantTypeBuffer) + { + return iData.iBuffer; + } + + return NULL; + } + +EXPORT_C TBool TLiwVariant::AsTBool() const + { + TBool value = 0; + Get(value); + return value; + } + +EXPORT_C TBool TLiwVariant::AsTUint() const + { + TUint value = 0; + Get(value); + return value; + } + +EXPORT_C TUid TLiwVariant::AsTUid() const + { + __TEST_INVARIANT; + TUid value = {0}; + Get(value); + return value; + } + +EXPORT_C TPtrC TLiwVariant::AsDes() const + { + __TEST_INVARIANT; + TPtrC value; + Get(value); + return value; + } + +EXPORT_C TTime TLiwVariant::AsTTime() const + { + __TEST_INVARIANT; + TTime value(Time::NullTTime()); + Get(value); + return value; + } + + +EXPORT_C TPtrC8 TLiwVariant::AsData() const + { + __TEST_INVARIANT; + TPtrC8 value; + Get(value); + return value; + } + + +EXPORT_C RFile TLiwVariant::AsFileHandle() const + { + __TEST_INVARIANT; + RFile value; + Get(value); + return value; + } + +EXPORT_C const CLiwList* TLiwVariant::AsList() const + { + __TEST_INVARIANT; + return (iTypeId == EVariantTypeList) ? iData.iList : NULL; + } + +EXPORT_C const CLiwMap* TLiwVariant::AsMap() const + { + __TEST_INVARIANT; + return (iTypeId == EVariantTypeMap) ? iData.iMap : NULL; + } + +EXPORT_C MLiwInterface* TLiwVariant::AsInterface() const + { + __TEST_INVARIANT; + return (iTypeId == EVariantTypeInterface) ? iData.iSession : NULL; + } + +EXPORT_C CLiwIterable* TLiwVariant::AsIterable() const + { + __TEST_INVARIANT; + return (iTypeId == EVariantTypeIterable) ? iData.iIterable : NULL; + } + +EXPORT_C void TLiwVariant::Reset() + { + __TEST_INVARIANT; + + if (iTypeId == EVariantTypeDesC) + { + // Delete any owned buffer + delete iData.iBufC; + iData.iBufC = NULL; + } + else if (iTypeId == EVariantTypeDesC8) + { + delete iData.iBufC8; + iData.iBufC8 = NULL; + } + else if (iTypeId == EVariantTypeList) + { + if (iPtrC8.Compare(KDummy) == 0) + { + iData.iList->DecRef(); + iData.iList = NULL; + iPtrC8.Set(TPtrC8()); + } + } + else if (iTypeId == EVariantTypeMap) + { + if (iPtrC8.Compare(KDummy) == 0) + { + iData.iMap->DecRef(); + iData.iMap = NULL; + iPtrC8.Set(TPtrC8()); + } + } + else if (iTypeId == EVariantTypeIterable) + { + if (iPtrC8.Compare(KDummy) == 0) + { + iData.iIterable->DecRef(); + iData.iIterable = NULL; + iPtrC8.Set(TPtrC8()); + } + } + else if (iTypeId == EVariantTypeBuffer) + { + if (iPtrC8.Compare(KDummy) == 0) + { + iData.iBuffer->DecRef(); + iData.iBuffer = NULL; + iPtrC8.Set(TPtrC8()); + } + } + // No need to clear other data, because Get methods wont't do anything if type + // is Null. + iTypeId = EVariantTypeNull; + + __ASSERT_DEBUG(IsEmpty(), Panic(EPanicPostCond_Reset)); + __TEST_INVARIANT; + } + +EXPORT_C void TLiwVariant::Set(TInt32 aValue) + { + __TEST_INVARIANT; + + Reset(); + iTypeId = EVariantTypeTInt32; + iData.iInt32 = aValue; + + __ASSERT_DEBUG(this->AsTInt32()==aValue, Panic(EPanicPostCond_Set_TInt32)); + __TEST_INVARIANT; + } + +EXPORT_C void TLiwVariant::Set(TInt64 aValue) + { + __TEST_INVARIANT; + + Reset(); + iTypeId = EVariantTypeTInt64; + iData.iLong = aValue; + + __ASSERT_DEBUG(this->AsTInt64()==aValue, Panic(EPanicPostCond_Set_TInt64)); + __TEST_INVARIANT; + } + +EXPORT_C void TLiwVariant::Set(TReal aValue) + { + __TEST_INVARIANT; + + Reset(); + iTypeId = EVariantTypeTReal; + iData.iReal = aValue; + + __ASSERT_DEBUG(this->AsTReal()==aValue, Panic(EPanicPostCond_Set_TReal)); + __TEST_INVARIANT; + } +EXPORT_C void TLiwVariant::Set(const CLiwBuffer* aValue) + { + __TEST_INVARIANT; + + Reset(); + iTypeId = EVariantTypeBuffer; + iData.iBuffer = (CLiwBuffer*)aValue; + + __TEST_INVARIANT; + } + +EXPORT_C void TLiwVariant::Set(TBool aValue) + { + __TEST_INVARIANT; + + Reset(); + iTypeId = EVariantTypeTBool; + iData.iBool = aValue; + + __ASSERT_DEBUG(this->AsTBool()==aValue, Panic(EPanicPostCond_Set_TBool)); + __TEST_INVARIANT; + } + +EXPORT_C void TLiwVariant::Set(TUint aValue) + { + __TEST_INVARIANT; + + Reset(); + iTypeId = EVariantTypeTUint; + iData.iUint = aValue; + + __ASSERT_DEBUG(this->AsTUint()==aValue, Panic(EPanicPostCond_Set_TUint)); + __TEST_INVARIANT; + } + +EXPORT_C void TLiwVariant::Set(const TUid& aValue) + { + __TEST_INVARIANT; + + Reset(); + iTypeId = EVariantTypeTUid; + iData.iInt32 = aValue.iUid; + + __ASSERT_DEBUG(this->AsTUid()==aValue, Panic(EPanicPostCond_Set_TUid)); + __TEST_INVARIANT; + } + +EXPORT_C void TLiwVariant::Set(const TTime& aValue) + { + __TEST_INVARIANT; + + Reset(); + iTypeId = EVariantTypeTTime; + iData.iInt64.Set(aValue.Int64()); + + __ASSERT_DEBUG(this->AsTTime()==aValue, Panic(EPanicPostCond_Set_TTime)); + __TEST_INVARIANT; + } + +EXPORT_C void TLiwVariant::Set(const TDesC& aValue) + { + __TEST_INVARIANT; + + Reset(); + iTypeId = EVariantTypeDesC; + iData.iBufC = NULL; // not owned + iPtrC.Set(aValue); + + __ASSERT_DEBUG(this->AsDes()==aValue, Panic(EPanicPostCond_Set_TDesC)); + __TEST_INVARIANT; + } + + + +EXPORT_C void TLiwVariant::Set(const TDesC8& aValue) + { + __TEST_INVARIANT; + + Reset(); + iTypeId = EVariantTypeDesC8; + iData.iBufC8 = NULL; // not owned + iPtrC8.Set(aValue); + + __ASSERT_DEBUG(this->AsData()==aValue, Panic(EPanicPostCond_Set_TDesC)); + __TEST_INVARIANT; + } + + + +EXPORT_C void TLiwVariant::Set(const RFile& aValue) + { + __TEST_INVARIANT; + __ASSERT_DEBUG(sizeof(SInt64) == sizeof(RFile), Panic(EPanicPreCond_DataSizeMismatch)); + + Reset(); + iTypeId = EVariantTypeFileHandle; + *((RFile*)&iData.iInt64) = aValue; + + __TEST_INVARIANT; + } + +EXPORT_C void TLiwVariant::Set(const CLiwList* aValue) + { + __TEST_INVARIANT; + + Reset(); + iTypeId = EVariantTypeList; + iData.iList = (CLiwList*)aValue; + + __TEST_INVARIANT; + } + +EXPORT_C void TLiwVariant::Set(const CLiwMap* aValue) + { + __TEST_INVARIANT; + + Reset(); + iTypeId = EVariantTypeMap; + iData.iMap = (CLiwMap*)aValue; + + __TEST_INVARIANT; + } + +EXPORT_C void TLiwVariant::Set(const MLiwInterface* aValue) + { + __TEST_INVARIANT; + + Reset(); + iTypeId = EVariantTypeInterface; + iData.iSession = (MLiwInterface*)aValue; + + __TEST_INVARIANT; + } + +EXPORT_C void TLiwVariant::Set(const CLiwIterable* aValue) + { + __TEST_INVARIANT; + + Reset(); + iTypeId = EVariantTypeIterable; + iData.iIterable = (CLiwIterable*)aValue; + + __TEST_INVARIANT; + } + +EXPORT_C void TLiwVariant::SetL(const TLiwVariant& aValue) + { + __TEST_INVARIANT; + + if (aValue.iTypeId == EVariantTypeDesC) + { + // Take an own copy of the string value + HBufC* buf = aValue.iPtrC.AllocL(); + Reset(); + iTypeId = EVariantTypeDesC; + iData.iBufC = buf; + iPtrC.Set(*iData.iBufC); + } + else if (aValue.iTypeId == EVariantTypeDesC8) + { + // Take an own copy of the data + HBufC8* buf = aValue.iPtrC8.AllocL(); + Reset(); + iTypeId = EVariantTypeDesC8; + iData.iBufC8 = buf; + iPtrC8.Set(*iData.iBufC8); + } + else if (aValue.iTypeId == EVariantTypeList) + { + // Take an own copy of the data by increasing the reference count + Reset(); + iTypeId = EVariantTypeList; + iData.iList = aValue.iData.iList; + iData.iList->IncRef(); + iPtrC8.Set(KDummy); // hack: mark owned + } + else if (aValue.iTypeId == EVariantTypeMap) + { + // Take an own copy of the data by increasing the reference count + Reset(); + iTypeId = EVariantTypeMap; + iData.iMap = aValue.iData.iMap; + iData.iMap->IncRef(); + iPtrC8.Set(KDummy); // hack: mark owned + } + else if (aValue.iTypeId == EVariantTypeIterable) + { + // Take an own copy of the data by increasing the reference count + Reset(); + iTypeId = EVariantTypeIterable; + iData.iIterable = aValue.iData.iIterable; + iData.iIterable->IncRef(); + iPtrC8.Set(KDummy); // hack: mark owned + } + else if (aValue.iTypeId == EVariantTypeBuffer) + { + Reset(); + iTypeId = EVariantTypeBuffer; + iData.iBuffer = aValue.iData.iBuffer; + iData.iBuffer->IncRef(); + iPtrC8.Set(KDummy); // hack: mark owned + } + else + { + Reset(); + iTypeId = aValue.iTypeId; + // Copy the data union as one block + iData = aValue.iData; + } + + //__ASSERT_DEBUG(*this == aValue, Panic(EPanicPostCond_CopyL)); + __TEST_INVARIANT; + } + +void TLiwVariant::Destroy() + { + __TEST_INVARIANT; + + if (iTypeId == EVariantTypeDesC) + { + // Delete any owned buffer + delete iData.iBufC; + iData.iBufC = NULL; + } + else if (iTypeId == EVariantTypeDesC8) + { + delete iData.iBufC8; + iData.iBufC8 = NULL; + } + else if (iTypeId == EVariantTypeList) + { + if (iPtrC8.Compare(KDummy) == 0) + { + iData.iList->DecRef(); + iData.iList = NULL; + iPtrC8.Set(TPtrC8()); + } + } + else if (iTypeId == EVariantTypeMap) + { + if (iPtrC8.Compare(KDummy) == 0) + { + iData.iMap->DecRef(); + iData.iMap = NULL; + iPtrC8.Set(TPtrC8()); + } + } + else if (iTypeId == EVariantTypeIterable) + { + if (iPtrC8.Compare(KDummy) == 0) + { + iData.iIterable->DecRef(); + iData.iIterable = NULL; + iPtrC8.Set(TPtrC8()); + } + } + else if (iTypeId == EVariantTypeBuffer) + { + if (iPtrC8.Compare(KDummy) == 0) + { + iData.iBuffer->DecRef(); + iData.iBuffer = NULL; + iPtrC8.Set(TPtrC8()); + } + } + } + +void TLiwVariant::InternalizeL(RReadStream& aStream) + { + __TEST_INVARIANT; + + aStream.ReadInt8L(); // version + // if older version adapt to changes (who knows if + // parameters would be also persistent...) + + const TUint8 typeId = aStream.ReadUint8L(); + switch (typeId) + { + case EVariantTypeNull: + { + Reset(); + break; + } + case EVariantTypeTInt32: // FALLTHROUGH + case EVariantTypeTUid: + case EVariantTypeTBool: + case EVariantTypeTUint: + { + TInt32 value = aStream.ReadInt32L(); + Reset(); + iTypeId = typeId; + iData.iInt32 = value; + break; + } + case EVariantTypeTInt64: + { + TInt64 value = aStream.ReadReal64L(); + Reset(); + iTypeId = typeId; + iData.iLong = value; + break; + } + case EVariantTypeFileHandle: // FALLTHROUGH + case EVariantTypeTTime: + case EVariantTypeTReal: + { + SInt64 value; + value.InternalizeL(aStream); + Reset(); + iTypeId = typeId; + iData.iInt64 = value; + break; + } + case EVariantTypeDesC: + { + const TInt len = aStream.ReadInt32L(); + HBufC* buf = HBufC::NewL(aStream,len); + Reset(); + iTypeId = typeId; + iData.iBufC = buf; + iPtrC.Set(*iData.iBufC); + break; + } + case EVariantTypeDesC8: + { + const TInt len = aStream.ReadInt32L(); + HBufC8* buf = HBufC8::NewL(aStream,len); + Reset(); + iTypeId = typeId; + iData.iBufC8 = buf; + iPtrC8.Set(*iData.iBufC8); + break; + } + case EVariantTypeList: + { + CLiwList* list = CLiwDefaultList::NewLC(aStream); + Reset(); + iTypeId = EVariantTypeList; + iData.iList = list; + iPtrC8.Set(KDummy); // hack: mark owned + CleanupStack::Pop(list); // list + break; + } + case EVariantTypeMap: + { + CLiwMap* map = CLiwDefaultMap::NewLC(aStream); + Reset(); + iTypeId = EVariantTypeMap; + iData.iMap = map; + iPtrC8.Set(KDummy); // hack: mark owned + CleanupStack::Pop(map); // map + break; + } + default: + { + // Corrupted data stream. +#ifdef _DEBUG + RDebug::Print(_L("***ERROR TLiwVariant::InternalizeL")); +#endif + User::Leave(KErrCorrupt); + return; + } + } + + __TEST_INVARIANT; + } + +void TLiwVariant::ExternalizeL(RWriteStream& aStream) const + { + __TEST_INVARIANT; + + aStream.WriteInt8L(KVersion); + // if older version adapt to changes (who knows if parameters would be also persistent...) + + aStream.WriteUint8L(iTypeId); + switch (iTypeId) + { + case EVariantTypeTInt32: // FALLTHROUGH + case EVariantTypeTUid: + case EVariantTypeTBool: + case EVariantTypeTUint: + { + aStream.WriteInt32L(iData.iInt32); + break; + } + case EVariantTypeTInt64: + { + aStream.WriteReal64L(iData.iLong); + break; + } + case EVariantTypeFileHandle: // FALLTHROUGH + case EVariantTypeTTime: + case EVariantTypeTReal: + { + iData.iInt64.ExternalizeL(aStream); + break; + } + case EVariantTypeDesC: + { + aStream.WriteInt32L(iPtrC.Length()); + aStream << iPtrC; + break; + } + case EVariantTypeDesC8: + { + aStream.WriteInt32L(iPtrC8.Length()); + aStream << iPtrC8; + break; + } + case EVariantTypeList: + { + iData.iList->ExternalizeL(aStream); + break; + } + case EVariantTypeMap: + { + iData.iMap->ExternalizeL(aStream); + break; + } + case EVariantTypeInterface: + { + _LIT(KMsg, "TLiwVariant: type Interface not externizable"); + User::Panic(KMsg, 1); + break; + } + default: + break; + } + + __TEST_INVARIANT; + } + +TInt TLiwVariant::Size() const + { + __TEST_INVARIANT; + + TInt size = sizeof (TInt8); // version + size += sizeof (TUint8); // iTypeId + switch (iTypeId) + { + case EVariantTypeTInt32: // FALLTHROUGH + case EVariantTypeTUid: + case EVariantTypeTBool: + case EVariantTypeTUint: + { + size += sizeof (TInt32); + break; + } + case EVariantTypeFileHandle: // FALLTHROUGH + case EVariantTypeTTime: + case EVariantTypeTReal: + case EVariantTypeTInt64: + { + size += sizeof (TInt64); + break; + } + case EVariantTypeDesC: + { + size += sizeof (TInt32); // length + //size += 1; // the externalization method used adds a header byte + if(iPtrC.Size() >= KBufSizeLarge) + { + size += 4; + } + else if(iPtrC.Size() >= KBufSizeSmall) + { + size += 2; + } + else + { + size += 1; + } + size += iPtrC.Size(); + break; + } + case EVariantTypeDesC8: + { + size += sizeof (TInt32); // length + //size += 1; // the externalization method used adds a header byte + if(iPtrC8.Size() >= KBufSizeLarge) + { + size += 4; + } + + else if(iPtrC8.Size() >= KBufSizeSmall) + { + size += 2; + } + else + { + size += 1; + } + size += iPtrC8.Size(); + break; + } + case EVariantTypeList: + { + size += iData.iList->Size(); + break; + } + case EVariantTypeMap: + { + size += iData.iMap->Size(); + break; + } + default: + break; + } + return size; + } + +// ============================ EXTERNAL FUNCTIONS =============================== + +EXPORT_C TBool operator==(const TLiwVariant& aLhs, const TLiwVariant& aRhs) + { + if (aLhs.iTypeId == aRhs.iTypeId) + { + switch (aLhs.iTypeId) + { + case EVariantTypeNull: + { + // Null equals Null + return ETrue; + } + case EVariantTypeTInt32: // FALLTHROUGH + case EVariantTypeTUid: + case EVariantTypeTBool: + case EVariantTypeTUint: + { + return (aLhs.iData.iInt32 == aRhs.iData.iInt32); + } + case EVariantTypeTInt64: + { + return (aLhs.iData.iLong == aRhs.iData.iLong); + } + case EVariantTypeDesC: + { + return (aLhs.iPtrC == aRhs.iPtrC); + } + case EVariantTypeDesC8: + { + return (aLhs.iPtrC8 == aRhs.iPtrC8); + } + case EVariantTypeFileHandle: // FALLTHROUGH + case EVariantTypeTTime: + case EVariantTypeTReal: + { + return (aLhs.iData.iInt64 == aRhs.iData.iInt64); + } + case EVariantTypeList: + { + return (*(aLhs.iData.iList) == *(aRhs.iData.iList)); + } + case EVariantTypeMap: + { + return (*(aLhs.iData.iMap) == *(aRhs.iData.iMap)); + } + case EVariantTypeInterface: + { + return (aLhs.iData.iSession == aRhs.iData.iSession); + } + case EVariantTypeIterable: + { + return (*(aLhs.iData.iIterable) == *(aRhs.iData.iIterable)); + } + case EVariantTypeBuffer: + { + return (aLhs.iData.iBuffer == aRhs.iData.iBuffer); + } + default: + { + break; + } + } + } + return EFalse; + } + +#ifdef _DEBUG +EXPORT_C void Dump(const TLiwVariant& aVariant) + { + switch (aVariant.TypeId()) + { + case EVariantTypeNull: + { + RDebug::Print(_L(" TLiwVariant::Dump = Null")); + break; + } + case EVariantTypeTInt32: + { + RDebug::Print(_L(" TLiwVariant::Dump(TInt32) = %d"), aVariant.AsTInt32()); + break; + } + case EVariantTypeTInt64: + { + RDebug::Print(_L(" TLiwVariant::Dump(TInt64) = %d"), aVariant.AsTInt64()); + break; + } + case EVariantTypeTReal: + { + RDebug::Print(_L(" TLiwVariant::Dump(TReal) = %d"), aVariant.AsTReal()); + break; + } + case EVariantTypeTBool: + { + RDebug::Print(_L(" TLiwVariant::Dump(TBool) = %d"), aVariant.AsTBool()); + break; + } + case EVariantTypeTUint: + { + RDebug::Print(_L(" TLiwVariant::Dump(TUint) = %d"), aVariant.AsTUint()); + break; + } + + case EVariantTypeTUid: + { + const TUidName& uidName = aVariant.AsTUid().Name(); + RDebug::Print(_L(" TLiwVariant::Dump(TUid) = %S"), &uidName); + break; + } + case EVariantTypeDesC: + { + TPtrC des = aVariant.AsDes(); + RDebug::Print(_L(" TLiwVariant::Dump(TBufC) = %S"), &des); + break; + } + case EVariantTypeDesC8: + { + TPtrC8 des = aVariant.AsData(); + RDebug::Print(_L(" TLiwVariant::Dump(TBufC8) = %S"), &des); + break; + } + case EVariantTypeTTime: + { + TDateTime dt = aVariant.AsTTime().DateTime(); + RDebug::Print(_L(" TLiwVariant::Dump(TTime): day=%d,mon=%d,year=%d,hh=%d,mm=%d,ss=%d"), + dt.Day()+1, dt.Month()+1, dt.Year(), + dt.Hour(),dt.Minute(), dt.Second()); + break; + } + case EVariantTypeFileHandle: + { + RDebug::Print(_L(" TLiwVariant::Dump(RFile): Value is file handle.")); + break; + } + case EVariantTypeList: + { + const CLiwList* tempList = aVariant.AsList(); + TInt count = tempList->Count(); + TLiwVariant tempVariant; + tempVariant.PushL(); + RDebug::Print(_L(" TLiwVariant::Dump(List[%d]):"), count); + for (TInt index = 0; index < count; index++) + { + TRAPD(error, {tempList->AtL(index, tempVariant);}); + if(error != KErrNone) + RDebug::Print(_L("TLiwVariant::Dump ERROR: %d"), error); + Dump(tempVariant); + } + CleanupStack::Pop(&tempVariant); + tempVariant.Reset(); + RDebug::Print(_L(" TLiwVariant::Dump List END")); + break; + } + case EVariantTypeIterable: + { + CLiwIterable* tempItr = aVariant.AsIterable(); + TLiwVariant tempVariant; + RDebug::Print(_L(" TLiwVariant::Dump(Iterable):")); + tempItr->Reset(); + TRAPD(errno, { + while (tempItr->NextL(tempVariant)) { + Dump(tempVariant); + } + }); + if(errno != KErrNone) + RDebug::Print(_L("TLiwVariant::Dump ERROR: %d"), errno); + tempVariant.Reset(); + RDebug::Print(_L(" TLiwVariant::Dump Iterable END")); + break; + } + case EVariantTypeMap: + { + const CLiwMap* tempMap = aVariant.AsMap(); + TInt count = tempMap->Count(); + TLiwVariant tempVariant; + RDebug::Print(_L(" TLiwVariant::Dump(Map):")); + for (TInt index = 0; index < count; index++) { + TBuf8 key; + TRAPD(error, {tempMap->AtL(index, key);}); + RDebug::Print(_L(" key=%S, value= "), &key); + TRAP(error, {tempMap->FindL(key, tempVariant);}); + Dump(tempVariant); + } + tempVariant.Reset(); + RDebug::Print(_L(" TLiwVariant::Dump Map END")); + break; + } + case EVariantTypeInterface: + { + RDebug::Print(_L(" TLiwVariant::Dump(Interface): Value is interface pointer.")); + break; + } + default: + { + RDebug::Print(_L(" *** TLiwVariant::Dump(Unknown) ***")); + break; + } + } + } +#else +EXPORT_C void Dump(const TLiwVariant& /*aVariant*/) + { + } + +#endif // ifdef _DEBUG diff -r 000000000000 -r 99ef825efeca languageinterworkingfw/servicehandler/src/liwxmlhandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/languageinterworkingfw/servicehandler/src/liwxmlhandler.cpp Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,273 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Wrapper to XML parser interface. Loads the inline and external XML metadata +* and populates the service provider metadata information. This class +* uses Symbian SAX parser to load the metadata information. +* +*/ + + + + + + + +#include "LiwXmlHandler.h" +#include +#include "data_caging_path_literals.hrh" +#include + +#include "LiwServiceData.h" +#include + +_LIT8(KMetaDataName, "meta"); + + +/* + * Creates and returns an instance of \c CLiwXmlHandler + */ +CLiwXmlHandler* CLiwXmlHandler::NewL() +{ + CLiwXmlHandler* ptrToThis = CLiwXmlHandler::NewLC(); + CleanupStack::Pop(ptrToThis); + + return ptrToThis; +} + +/* + * Creates and returns an instance of \c CLiwXmlHandler + * Leaves the created instance in the cleanupstack. + * + * @return an instance of \c CLiwXmlHandler + */ +CLiwXmlHandler* CLiwXmlHandler::NewLC() +{ + CLiwXmlHandler* ptrToThis = new (ELeave) CLiwXmlHandler(); + CleanupStack::PushL(ptrToThis); + + ptrToThis->ConstructL(); + + return ptrToThis; +} + + +/* + * Destructor. Deletes the handler to XML parser + */ +CLiwXmlHandler::~CLiwXmlHandler() +{ + if(iXmlHandler) + delete iXmlHandler; + + if(iBuffer) + delete iBuffer; +} + +/* + * Default constructor. + */ +CLiwXmlHandler::CLiwXmlHandler() +{ + +} + +/* + * Instantiates the SAX parser instance and registers itself + * as the callback to handle SAX events. + */ +void CLiwXmlHandler::ConstructL() +{ + TInt parserFeature = EErrorOnUnrecognisedTags | EXmlVersion_1_1; + iXmlHandler = CSenXmlReader::NewL(parserFeature); + iXmlHandler->SetContentHandler(*this); +} + +/* + * Parses the inline XML content passed in the buffer. The parser + * is kick started to recevie SAX events. This method also accepts the + * reference to \c CLiwServiceData to store the parsed metadata name-value + * pairs. + */ +TInt CLiwXmlHandler::LoadServiceData(const TDesC8& aXmlBuffer,CLiwServiceData* aServiceData) +{ + iServiceData = aServiceData; + + TRAPD(err,iXmlHandler->ParseL(aXmlBuffer)); + + TInt retVal = ESrvDataLoadFailed; + + if(!err) + { + retVal = ESrvDataLoadSuccess; + } + + return retVal; +} + +/* + * Parses the XML content present in an external file. The parser + * is kick started to recevie SAX events. This method also accepts the + * reference to \c CLiwServiceData to store the parsed metadata name-value + * pairs. + */ + #include +TInt CLiwXmlHandler::LoadServiceData(const TDesC& aFileToParse,CLiwServiceData* aServiceData) +{ + TInt retVal = ESrvDataLoadFailed; + + iServiceData = aServiceData; + + RFs fsSession; + User::LeaveIfError( fsSession.Connect() ); + + TFileName resFile; + resFile.Append(aFileToParse); + + if(!BaflUtils::FileExists(fsSession,resFile)) + { + fsSession.Close(); + return ESrvDataFileNotFnd; + } + + + TRAPD(err,iXmlHandler->ParseL(fsSession,resFile)); + + fsSession.Close(); + if(!err) + { + retVal = ESrvDataLoadSuccess; + } + + return retVal; +} + +/** +* Receive notification of the beginning of a document. +* @return KErrNone or some of the system-wide Symbian error codes. +*/ +TInt CLiwXmlHandler::StartDocument() +{ + return KErrNone; +} + +/** +* Receive notification of the end of a document. +* @return KErrNone or some of the system-wide Symbian error codes. +*/ +TInt CLiwXmlHandler::EndDocument() +{ + return KErrNone; +} + +/** +* The important parsed elements are and its sub-element +* . +* The other sub-elements (other than ) are considered +* as service provider specific metadata name-value pairs. +* +* @return KErrNone or some of the system-wide Symbian error codes. +*/ +TInt CLiwXmlHandler::StartElement( const TDesC8& /*aURI*/, + const TDesC8& aLocalName, + const TDesC8& /*aName*/, + const RAttributeArray& /* apAttrs */) +{ + if(iBuffer) + { + delete iBuffer; + iBuffer=NULL; + } + + startBuf = aLocalName; + return KErrNone; +} + + +/** +* The end of the elements such as and its sub-element +* are processed. The flags set for the processing of +* and it sub-elements like are toggled off. +* +* @return KErrNone or some of the system-wide Symbian error codes. +*/ +TInt CLiwXmlHandler::EndElement( const TDesC8& /*aURI*/, + const TDesC8& aLocalName, + const TDesC8& /*aName*/) +{ + if(0!=aLocalName.CompareF(KMetaDataName) && 0==aLocalName.CompareF(startBuf)) + iServiceData->AddMetaDataL(aLocalName,*iBuffer); + + delete iBuffer; + iBuffer = NULL; + + return KErrNone; +} + +/** +* The metadata can be defined in the following XML format: +* +* +* +* metadata_keyvalue1 +* metadata_keyvalue2 +* +* +* A realistic example below +* +* +* +* CapabilityReadDeviceData +* CapabilityWriteDeviceData +* CapabilityLocation +* +* +* This function obtains the character data defined within the +* child elements of . The child element name under +* is taken as metadata key and the character data under it as metadata +* value and added to the internal metadata key-value pair entries. +* +* There could be multiple metadata keys having different values as +* shown above +* +* Right now it supports only capability metadata information +* +*/ +TInt CLiwXmlHandler::Characters(const TDesC8& aBuf, + const TInt /* aStart */, + const TInt /* aLength */) +{ + if(iBuffer) + { + delete iBuffer; + iBuffer=NULL; + } + + + iBuffer = aBuf.Alloc(); + + return KErrNone; +} + +/** +* In case of parsing errors due to non-well formed XML content, +* file not being present etc are handled here. In case of XML content +* error, the metadata stored so far will be cleaned up. +* +* @return KErrNone or some of the system-wide Symbian error codes. +*/ + +TInt CLiwXmlHandler::Error(TInt /*aErrorCode*/) +{ + return ESrvDataLoadFailed; +} diff -r 000000000000 -r 99ef825efeca layers.sysdef.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/layers.sysdef.xml Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,14 @@ + +]> + + + + + + + + + + + \ No newline at end of file diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/group/bld.inf Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,37 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + + + +#include "../rtsecuritymanagerutil/group/bld.inf" +#include "../rtsecuritymanagerserver/group/bld.inf" +#include "../rtsecuritymanagerclient/group/bld.inf" + +#include + +PRJ_EXPORTS + +// ../install/rtsecuritymanagerstub.sis /epoc32/data/z/system/install/rtsecuritymanagerstub.sis +../install/backup_registration.xml /epoc32/data/Z/private/2000F847/backup_registration.xml + +// Export IBY and LOC files as per CP50 build improvements. +// ../rom/rtsecuritymanager.iby CORE_MW_LAYER_IBY_EXPORT_PATH(rtsecuritymanager.iby) +// ../rom/rtsecmgrresource.iby LANGUAGE_MW_LAYER_IBY_EXPORT_PATH(rtsecmgrresource.iby) \ No newline at end of file diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/inc/rtsecmgrdef.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/inc/rtsecmgrdef.h Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,81 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Common definitions of client and server + * +*/ + + + + + + +#ifndef _RTSECMGRDEF_H +#define _RTSECMGRDEF_H + +#include + +/* + * Enumerations for client-server message argument indices + */ +enum TSecMgrMsgSlot + { + EMsgArgZero = 0, + EMsgArgOne, + EMsgArgTwo, + EMsgArgThree, + EMsgArgFour + }; + +//opcodes used in message passing between client and server +enum TRTSecServRqst + { + ESecServCloseSession = 1, + ESetPolicy, + EUpdatePolicy, + EUnsetPolicy, + ERegisterScript, + ERegisterScriptWithHash, + EUnRegisterScript, + EGetScriptSession, + EGetTrustedUnRegScriptSession, + ECloseScriptSession, + ECheckPermission, + EUpdatePermanentGrant, + EGetScriptFile, + ESecMgrSrvReqEnd + }; + +const TInt KSecurityServerUid2Int(0x1020507E); +const TUid KSecMgrServerUid2 = + { + KSecurityServerUid2Int + }; + +//the server version. A version must be specifyed when creating a session with the server +const TUint KRTSecMgrServMajorVersionNumber=0; +const TUint KRTSecMgrServMinorVersionNumber=1; +const TUint KRTSecMgrServBuildVersionNumber=1; + +// number of message slots. +const TUint KDefaultMessageSlots= 16; +const TUint KSecSrvClientTryCount=2; +const TInt KCapabilitySize = 20; + +_LIT(KSecMgrServerExeName, "RTSecMgrServer.exe"); +_LIT(KZDrive, "z:"); +_LIT(KSecServerProcessName, "SecurityManagerServer"); +_LIT(KSecSrvMainThreadName, "SecSrvMain"); + +#endif //_RTSECMGRDEF_H + diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/inc/rtsecmgrmsg.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/inc/rtsecmgrmsg.h Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,166 @@ +/* +* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + + + +#ifndef _RTSECMGRMSG_H +#define _RTSECMGRMSG_H + +// INCLUDES +#include +#include +#include +#include +#include + +// Maximum size expected for iHashMarker in CRTSecMgrRegisterScriptMsg +const TInt KMaxHashValueDesLen = 255; + +// Maximum total size expected for a CRTSecMgrRegisterScriptMsg object +const TInt KMaxMsgLength = 520; + +// CLASS DECLARATION + +/** + * Message type to pass script object across + * client server boundary + * + */ +NONSHARABLE_CLASS(CRTSecMgrRegisterScriptMsg) : public CBase + { +public: + + /** + * Destructor. + */ + IMPORT_C ~CRTSecMgrRegisterScriptMsg(); + + /** + * Two-phased constructor. + * + * Creates an instance of CRTSecMgrRegisterScriptMsg. + * + * + * @param aPolicyID policy identifier of script + * @param aHashValue hash value of script + * + * @return CRTSecMgrRegisterScriptMsg* created instance of CRTSecMgrRegisterScriptMsg + * + */ + IMPORT_C static CRTSecMgrRegisterScriptMsg* NewL(TPolicyID aPolicyID, const TDesC& aHashValue); + + /** + * Two-phased constructor. + * + * Creates an instance of CRTSecMgrRegisterScriptMsg + * and leaves it on cleanupstack + * + * @param aPolicyID policy identifier of script + * @param aHashValue hash value of script + * + * @return CRTSecMgrRegisterScriptMsg* created instance of CRTSecMgrRegisterScriptMsg + * + */ + IMPORT_C static CRTSecMgrRegisterScriptMsg* NewLC(TPolicyID aPolicyID, const TDesC& aHashValue); + + /** + * Two-phased constructor. + * + * Creates an instance of CRTSecMgrRegisterScriptMsg + * from the input source + * + * @param aStreamData input source data + * + * @return CRTSecMgrRegisterScriptMsg* created instance of CRTSecMgrRegisterScriptMsg + * + */ + IMPORT_C static CRTSecMgrRegisterScriptMsg* NewLC(const TDesC8& aStreamData); + + /* + * Creates an HBufC8 representation of CRTSecMgrRegisterScriptMsg + * + * @return HBufC8* buffer representation of CRTSecMgrRegisterScriptMsg + */ + IMPORT_C HBufC8* PackMsgL() const; + + /* + * Gets the hash value of the script + * + * @return const TDesC8& hash value of script + */ + inline const TDesC& HashValue() const + { + if(iHashMarker) + return *iHashMarker; + else + return KNullDesC; + } + + /* + * Gets the policy identifier + * + * @return TPolicyID policy identifier + */ + inline TPolicyID PolicyID() const + { + return iPolicyID; + } + +protected: + // Writes ’this’ to the stream + void ExternalizeL(RWriteStream& aStream) const; + // Initializes ’this’ from stream + void InternalizeL(RReadStream& aStream); + +private: + + /** + * Constructor for performing 1st stage construction + */ + CRTSecMgrRegisterScriptMsg() + {} + + /** + * Constructor for performing 1st stage construction + */ + CRTSecMgrRegisterScriptMsg(TPolicyID aPolicyID); + + /** + * Second stage construction + */ + void ConstructL(const TDesC& aHashValue); + +private: + /* + * Policy identifier + * + */ + TPolicyID iPolicyID; + + /* + * Hash value of the script + * + */ + HBufC* iHashMarker; + }; + +#endif // RTSECMGRMSG_H + diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/inc/rtsecmgrtracer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/inc/rtsecmgrtracer.h Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,180 @@ +/* +* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + + +#ifndef _RTSECMGRTRACE_H +#define _RTSECMGRTRACE_H + +#include + + +// Define tracer logging method if defined RTSECMGR_TRACE +// +// Emulator = Log to RDebug +// Device = Log to file (RFileLogger) + +// ============================================================================ + + +#ifndef RTSECMGR_TRACE // Logging off + + #define RTSecMgrTraceFunction(func) + #define RTSecMgrTraceFunctionRet(func,format) + #define RTSecMgrCreateTraceFile() + #define RTSecMgrTracePrintRet(a) +#else // Logging on + + + // Macro to print function entry, exit and leave. + // Example: RTSecMgrTraceFunction("CMyClass::MyFunction"); + #define RTSecMgrTraceFunction(func) TTracer function_tracer( _S(func), _S("") ); + + // Macro to print function return value in addition to entry, exit + // and leave conditions Second parameter is a formatting string used + // to print the return value Example to print an integer return value: + // RTSecMgrTraceFunctionRet("CMyclass::MyFunction", "%d"); + #define RTSecMgrTraceFunctionRet(func,format) TTracer func_tracer( _S(func), _S(format) ); + + #define RTSecMgrTracePrintRet(a) RFileLogger::WriteFormat(KLogDir, \ + KLogFile,EFileLoggingModeAppend,a); + + /* #if (defined(__WINS__) || defined(__WINSCW__)) // Print to RDebug + + #include + + #define TRACER_PRINT(a) RDebug::Print(a,&iFunc); + #define TRACER_PRINT_RET(a,b) RDebug::Print(a,&iFunc,b); + #define RTSecMgrCreateTraceFile() + + #else //Print to file + */ + #include + #include + + _LIT( KLogDir, "rtsecmgrtracelogs" ); // Log directory: C:\logs\rtsecmgrtracelogs + _LIT( KLogFile, "rtsecmgrtracelogs.txt" ); // Log file: c:\logs\tracer\rtsecmgrtracelogs.txt + _LIT( KFullPath, "c:\\logs\\rtsecmgrtracelogs\\" ); + _LIT(KFullLogFileName , "c:\\logs\\rtsecmgrtracelogs\\rtsecmgrtracelogs.txt") ; + + LOCAL_C void CreateLogFile() // Local function for creating Logdirectory and LogFile + { + RFs fs; + RFile fileHandle ; + if( fs.Connect() == KErrNone ) + { + fs.MkDirAll( KFullPath ); + if(fileHandle.Open(fs ,KFullLogFileName , EFileWrite | EFileShareAny ) == KErrNotFound) + { + fileHandle.Create(fs ,KFullLogFileName , EFileWrite | EFileShareAny ) ; + } + fileHandle.Close() ; + fs.Close(); + } + } + + #define RTSecMgrCreateTraceFile() CreateLogFile(); + + #define TRACER_PRINT(a) RFileLogger::WriteFormat(KLogDir, \ + KLogFile,EFileLoggingModeAppend,a,&iFunc); + #define TRACER_PRINT_RET(a,b) RFileLogger::WriteFormat(KLogDir, \ + KLogFile,EFileLoggingModeAppend,a,&iFunc,b); + + // #endif + + _LIT( KLogEnter, "%S: ENTER" ); + _LIT( KLogExit, "%S: EXIT" ); + _LIT( KLogLeave, "%S: LEAVE!" ); + _LIT( KLogExitRet, "%S: EXIT, Returning " ); + + /** + * Simple tracer class that logs function enter, exit or leave + */ + class TTracer + { + public: + + /** + * inline constructor to write log of entering a function + */ + TTracer( const TText* aFunc, const TText* aRetFormat ) + : iFunc( aFunc ) + , iRetFormat( aRetFormat ) + { + TRACER_PRINT( KLogEnter ); + } + + /** + * inline destructor to write log of exiting a function + * normally or with a leave + */ + ~TTracer() + { + if ( std::uncaught_exception() ) // Leave is an exception + { + // The function exited with a leave + TRACER_PRINT( KLogLeave ); + } + else + { + // The function exited normally + if ( iRetFormat.Length() == 0 ) + { + TRACER_PRINT( KLogExit ); + } + else + { + // Log the return value + #ifdef __WINS__ + TInt32 retVal = 0; + + // The assembly bit. This needs to be reimplemented + // for every target. + _asm( mov retVal, ebx ); + + TBuf<100> format( KLogExitRet ); + format.Append( iRetFormat ); + TRACER_PRINT_RET( format, retVal ); + #else + TRACER_PRINT( KLogExit ); + + #endif + } + } + } + + private: + + /** + * Pointer descriptor to function signature that is to be logged. + */ + TPtrC iFunc; + + + /** + * Formatting string used to print the function return value + */ + TPtrC iRetFormat; + + }; + +#endif // RTSECMGR_TRACE + +#endif // _RTSECMGRTRACE_H \ No newline at end of file diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/install/backup_registration.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/install/backup_registration.xml Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/install/rtsecuritymanager.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/install/rtsecuritymanager.pkg Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,36 @@ +; +; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +; All rights reserved. +; This component and the accompanying materials are made available +; under the terms of the License "Eclipse Public License v1.0" +; which accompanies this distribution, and is available +; at the URL "http://www.eclipse.org/legal/epl-v10.html". +; +; Initial Contributors: +; Nokia Corporation - initial contribution. +; +; Contributors: +; +; Description: +; +&EN + +; standard SIS file header +#{"RTSecMgrServer"},(0x2000F847),1,0,0 + +;Supports Series 60 v 3.0 +(0x101F7961), 0, 0, 0, {"Series60ProductID"} + +;Localized Vendor Name +%{"Nokia EN"} + +;Unique Vendor name +:"Vendor" + +; Files to copy + +"\epoc32\release\armv5\urel\RTSecMgrServer.exe" -"!:\sys\bin\RTSecMgrServer.exe" +"\epoc32\release\armv5\urel\RTSecMgrUtil.dll" -"!:\sys\bin\RTSecMgrUtil.dll" +"\epoc32\release\armv5\urel\RTSecMgrClient.dll" -"!:\sys\bin\RTSecMgrClient.dll" +"\epoc32\data\Z\resource\apps\RTSecManager.rsc" -"!:\resource\apps\RTSecManager.rsc" +"\epoc32\data\Z\private\2000F847\backup_registration.xml" -"!:\private\2000F847\backup_registration.xml" \ No newline at end of file diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/install/rtsecuritymanager_PU.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/install/rtsecuritymanager_PU.pkg Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,36 @@ +; +; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +; All rights reserved. +; This component and the accompanying materials are made available +; under the terms of the License "Eclipse Public License v1.0" +; which accompanies this distribution, and is available +; at the URL "http://www.eclipse.org/legal/epl-v10.html". +; +; Initial Contributors: +; Nokia Corporation - initial contribution. +; +; Contributors: +; +; Description: +; +&EN + +; standard SIS file header +#{"RTSecMgrServer"},(0x2000F847),1,0,0, TYPE = PU + +;Supports Series 60 v 3.0 +(0x101F7961), 0, 0, 0, {"Series60ProductID"} + +;Localized Vendor Name +%{"Nokia EN"} + +;Unique Vendor name +:"Vendor" + +; Files to copy + +"\epoc32\release\armv5\urel\RTSecMgrServer.exe" -"!:\sys\bin\RTSecMgrServer.exe" +"\epoc32\release\armv5\urel\RTSecMgrUtil.dll" -"!:\sys\bin\RTSecMgrUtil.dll" +"\epoc32\release\armv5\urel\RTSecMgrClient.dll" -"!:\sys\bin\RTSecMgrClient.dll" +"\epoc32\data\Z\resource\apps\RTSecManager.rsc" -"!:\resource\apps\RTSecManager.rsc" +;"\epoc32\data\Z\private\2000F847\backup_registration.xml" -"!:\private\2000F847\backup_registration.xml" \ No newline at end of file diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/install/rtsecuritymanagerstub.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/install/rtsecuritymanagerstub.pkg Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,31 @@ +; +; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +; All rights reserved. +; This component and the accompanying materials are made available +; under the terms of the License "Eclipse Public License v1.0" +; which accompanies this distribution, and is available +; at the URL "http://www.eclipse.org/legal/epl-v10.html". +; +; Initial Contributors: +; Nokia Corporation - initial contribution. +; +; Contributors: +; +; Description: +; +&EN + +; standard SIS file header +#{"Runtime Security Manager"},(0x2000F847),1,0,0,TYPE=SA + +;Localized Vendor Name +%{"Nokia-EN"} + +;Unique Vendor name +:"Nokia" + +; Files to copy +""-"z:\sys\bin\RTSecMgrServer.exe" +""-"z:\sys\bin\RTSecMgrUtil.dll" +""-"z:\sys\bin\RTSecMgrClient.dll" +""-"z:\resource\apps\RTSecManager.r*" \ No newline at end of file diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/install/rtsecuritymanagerstub.sis Binary file rtsecuritymanager/install/rtsecuritymanagerstub.sis has changed diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerclient/BWINS/RTSecMgrClientU.DEF --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/rtsecuritymanagerclient/BWINS/RTSecMgrClientU.DEF Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,21 @@ +EXPORTS + ??1CRTSecManager@@UAE@XZ @ 1 NONAME ; CRTSecManager::~CRTSecManager(void) + ??1CRTSecMgrScriptSession@@UAE@XZ @ 2 NONAME ; CRTSecMgrScriptSession::~CRTSecMgrScriptSession(void) + ??1CTrustInfo@@UAE@XZ @ 3 NONAME ; CTrustInfo::~CTrustInfo(void) + ?GetScriptSessionL@CRTSecManager@@QAEPAVCRTSecMgrScriptSession@@HABVCTrustInfo@@PAVMSecMgrPromptHandler@@@Z @ 4 NONAME ; class CRTSecMgrScriptSession * CRTSecManager::GetScriptSessionL(int, class CTrustInfo const &, class MSecMgrPromptHandler *) + ?GetScriptSessionL@CRTSecManager@@QAEPAVCRTSecMgrScriptSession@@HHPAVMSecMgrPromptHandler@@ABVTDesC16@@@Z @ 5 NONAME ; class CRTSecMgrScriptSession * CRTSecManager::GetScriptSessionL(int, int, class MSecMgrPromptHandler *, class TDesC16 const &) + ?IsAllowed@CRTSecMgrScriptSession@@QAEHABV?$RArray@W4TCapability@@@@@Z @ 6 NONAME ; int CRTSecMgrScriptSession::IsAllowed(class RArray const &) + ?IsAllowed@CRTSecMgrScriptSession@@QAEHABV?$RArray@W4TCapability@@@@AAV2@@Z @ 7 NONAME ; int CRTSecMgrScriptSession::IsAllowed(class RArray const &, class RArray &) + ?NewL@CRTSecManager@@SAPAV1@XZ @ 8 NONAME ; class CRTSecManager * CRTSecManager::NewL(void) + ?NewL@CTrustInfo@@SAPAV1@XZ @ 9 NONAME ; class CTrustInfo * CTrustInfo::NewL(void) + ?NewLC@CRTSecManager@@SAPAV1@XZ @ 10 NONAME ; class CRTSecManager * CRTSecManager::NewLC(void) + ?NewLC@CTrustInfo@@SAPAV1@XZ @ 11 NONAME ; class CTrustInfo * CTrustInfo::NewLC(void) + ?RegisterScript@CRTSecManager@@QAEHHABVCTrustInfo@@@Z @ 12 NONAME ; int CRTSecManager::RegisterScript(int, class CTrustInfo const &) + ?RegisterScript@CRTSecManager@@QAEHHABVTDesC16@@ABVCTrustInfo@@@Z @ 13 NONAME ; int CRTSecManager::RegisterScript(int, class TDesC16 const &, class CTrustInfo const &) + ?SetPolicy@CRTSecManager@@QAEHABVRFile@@@Z @ 14 NONAME ; int CRTSecManager::SetPolicy(class RFile const &) + ?SetPolicy@CRTSecManager@@QAEHABVTDesC8@@@Z @ 15 NONAME ; int CRTSecManager::SetPolicy(class TDesC8 const &) + ?UnRegisterScript@CRTSecManager@@QAEHHH@Z @ 16 NONAME ; int CRTSecManager::UnRegisterScript(int, int) + ?UnSetPolicy@CRTSecManager@@QAEHH@Z @ 17 NONAME ; int CRTSecManager::UnSetPolicy(int) + ?UpdatePolicy@CRTSecManager@@QAEHHABVRFile@@@Z @ 18 NONAME ; int CRTSecManager::UpdatePolicy(int, class RFile const &) + ?UpdatePolicy@CRTSecManager@@QAEHHABVTDesC8@@@Z @ 19 NONAME ; int CRTSecManager::UpdatePolicy(int, class TDesC8 const &) + diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerclient/EABI/RTSecMgrClientU.DEF --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/rtsecuritymanagerclient/EABI/RTSecMgrClientU.DEF Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,27 @@ +EXPORTS + _ZN10CTrustInfo4NewLEv @ 1 NONAME + _ZN10CTrustInfo5NewLCEv @ 2 NONAME + _ZN10CTrustInfoD0Ev @ 3 NONAME + _ZN10CTrustInfoD1Ev @ 4 NONAME + _ZN10CTrustInfoD2Ev @ 5 NONAME + _ZN13CRTSecManager11UnSetPolicyEi @ 6 NONAME + _ZN13CRTSecManager12UpdatePolicyEiRK5RFile @ 7 NONAME + _ZN13CRTSecManager12UpdatePolicyEiRK6TDesC8 @ 8 NONAME + _ZN13CRTSecManager14RegisterScriptEiRK10CTrustInfo @ 9 NONAME + _ZN13CRTSecManager14RegisterScriptEiRK7TDesC16RK10CTrustInfo @ 10 NONAME + _ZN13CRTSecManager16UnRegisterScriptEii @ 11 NONAME + _ZN13CRTSecManager17GetScriptSessionLEiRK10CTrustInfoP20MSecMgrPromptHandler @ 12 NONAME + _ZN13CRTSecManager17GetScriptSessionLEiiP20MSecMgrPromptHandlerRK7TDesC16 @ 13 NONAME + _ZN13CRTSecManager4NewLEv @ 14 NONAME + _ZN13CRTSecManager5NewLCEv @ 15 NONAME + _ZN13CRTSecManager9SetPolicyERK5RFile @ 16 NONAME + _ZN13CRTSecManager9SetPolicyERK6TDesC8 @ 17 NONAME + _ZN13CRTSecManagerD0Ev @ 18 NONAME + _ZN13CRTSecManagerD1Ev @ 19 NONAME + _ZN13CRTSecManagerD2Ev @ 20 NONAME + _ZN22CRTSecMgrScriptSession9IsAllowedERK6RArrayI11TCapabilityE @ 21 NONAME + _ZN22CRTSecMgrScriptSession9IsAllowedERK6RArrayI11TCapabilityERS2_ @ 22 NONAME + _ZN22CRTSecMgrScriptSessionD0Ev @ 23 NONAME + _ZN22CRTSecMgrScriptSessionD1Ev @ 24 NONAME + _ZN22CRTSecMgrScriptSessionD2Ev @ 25 NONAME + diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerclient/data/rtsecmanager.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/rtsecuritymanagerclient/data/rtsecmanager.rss Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,182 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + +// rtsecmanager.RSS +// +NAME Sec + +#include +#include +#include +#include +#include +#include +#include + +RESOURCE RSS_SIGNATURE { } + +RESOURCE TBUF r_rtsecmgr_prompt_query_header { buf=qtn_rtsecmgr_prompt_query_header; } +RESOURCE TBUF r_rtsecmgr_commDD { buf=qtn_rtsecmgr_prompt_query_commdd; } //ECapabilityCommDD +RESOURCE TBUF r_rtsecmgr_powermgmt { buf=qtn_rtsecmgr_prompt_query_powermgmt; } //ECapabilityPowerMgmt +RESOURCE TBUF r_rtsecmgr_mmediaDD { buf=qtn_rtsecmgr_prompt_query_mmediadd; } //ECapabilityMultimediaDD +RESOURCE TBUF r_rtsecmgr_readdevicedata { buf=qtn_rtsecmgr_prompt_query_read_devicedata; } //ECapabilityReadDeviceData +RESOURCE TBUF r_rtsecmgr_writedevicedata { buf=qtn_rtsecmgr_prompt_query_write_devicedata; } //ECapabilityWriteDeviceData +RESOURCE TBUF r_rtsecmgr_drm { buf=qtn_rtsecmgr_prompt_query_drm; } //ECapabilityDRM +RESOURCE TBUF r_rtsecmgr_trustedUI { buf=qtn_rtsecmgr_prompt_query_trustedui; } //ECapabilityTrustedUI +RESOURCE TBUF r_rtsecmgr_protserv { buf=qtn_rtsecmgr_prompt_query_protserv; } //ECapabilityProtServ +RESOURCE TBUF r_rtsecmgr_diskadmin { buf=qtn_rtsecmgr_prompt_query_diskadmin; } //ECapabilityDiskAdmin +RESOURCE TBUF r_rtsecmgr_nwcontrol { buf=qtn_rtsecmgr_prompt_query_nwcontrol; } //ECapabilityNetworkControl + +RESOURCE TBUF r_rtsecmgr_userdata_group { buf=qtn_rtsecmgr_prompt_query_userdata; } +RESOURCE TBUF r_rtsecmgr_deviceresources_group { buf=qtn_rtsecmgr_prompt_query_deviceresources; } +RESOURCE TBUF r_rtsecmgr_network_group { buf=qtn_rtsecmgr_prompt_query_network; } +RESOURCE TBUF r_rtsecmgr_cost_network { buf=qtn_rtsecmgr_prompt_cost_network; } +RESOURCE TBUF r_rtsecmgr_group_info { buf=qtn_rtsecmgr_info_about_group; } + + +RESOURCE TBUF r_rtsecmgr_allfiles { buf=qtn_rtsecmgr_prompt_query_allfiles; } //ECapabilityAllFiles +RESOURCE TBUF r_rtsecmgr_swevent { buf=qtn_rtsecmgr_prompt_query_swevent; } //ECapabilitySwEvent +RESOURCE TBUF r_rtsecmgr_nwservices { buf=qtn_rtsecmgr_prompt_query_nwservices; } //ECapabilityNetworkServices +RESOURCE TBUF r_rtsecmgr_localservices { buf=qtn_rtsecmgr_prompt_query_localservices; } //ECapabilityLocalServices +RESOURCE TBUF r_rtsecmgr_readuserdata { buf=qtn_rtsecmgr_prompt_query_read_userdata; } +RESOURCE TBUF r_rtsecmgr_writeuserdata { buf=qtn_rtsecmgr_prompt_query_write_userdata; } //ECapabilityWriteUserData +RESOURCE TBUF r_rtsecmgr_location { buf=qtn_rtsecmgr_prompt_query_location; } //ECapabilityLocation +RESOURCE TBUF r_rtsecmgr_surrDD { buf=qtn_rtsecmgr_prompt_query_surrdd; } //ECapabilitySurroundingsDD +RESOURCE TBUF r_rtsecmgr_userenv { buf=qtn_rtsecmgr_prompt_query_userenv; } //ECapabilityUserEnvironment + + +RESOURCE TBUF r_rtsecmgr_more_info_header_userdata { buf=qtn_rtsecmgr_more_info_header_userdata; } +RESOURCE TBUF r_rtsecmgr_more_info_header_deviceresources { buf=qtn_rtsecmgr_more_info_header_deviceresources; } +RESOURCE TBUF r_rtsecmgr_more_info_header_network { buf=qtn_rtsecmgr_more_info_header_network; } + +RESOURCE TBUF r_rtsecmgr_more_info_commDD { buf=qtn_rtsecmgr_more_info_commdd; } //ECapabilityCommDD +RESOURCE TBUF r_rtsecmgr_more_info_mmediaDD { buf=qtn_rtsecmgr_more_info_mmediadd; } //ECapabilityMultimediaDD +RESOURCE TBUF r_rtsecmgr_more_info_readdevicedata { buf=qtn_rtsecmgr_more_info_read_devicedata; } //ECapabilityReadDeviceData +RESOURCE TBUF r_rtsecmgr_more_info_writedevicedata { buf=qtn_rtsecmgr_more_info_write_devicedata; } //ECapabilityWriteDeviceData +RESOURCE TBUF r_rtsecmgr_more_info_nwcontrol { buf=qtn_rtsecmgr_more_info_nwcontrol; } //ECapabilityNetworkControl +RESOURCE TBUF r_rtsecmgr_more_info_swevent { buf=qtn_rtsecmgr_more_info_swevent; } //ECapabilitySwEvent +RESOURCE TBUF r_rtsecmgr_more_info_nwservices { buf=qtn_rtsecmgr_more_info_nwservices; } //ECapabilityNetworkServices +RESOURCE TBUF r_rtsecmgr_more_info_localservices { buf=qtn_rtsecmgr_more_info_localservices; } //ECapabilityLocalServices +RESOURCE TBUF r_rtsecmgr_more_info_read_userdata { buf=qtn_rtsecmgr_more_info_read_userdata; } +RESOURCE TBUF r_rtsecmgr_more_info_write_userdata { buf=qtn_rtsecmgr_more_info_write_userdata; } +RESOURCE TBUF r_rtsecmgr_more_info_location { buf=qtn_rtsecmgr_more_info_location; } +RESOURCE TBUF r_rtsecmgr_more_info_surrDD { buf=qtn_rtsecmgr_more_info_surrdd; } //ECapabilitySurroundingsDD +RESOURCE TBUF r_rtsecmgr_more_info_userenv { buf=qtn_rtsecmgr_more_info_userenv; } + +RESOURCE TBUF r_rtsecmgr_more_info_individual_prompt_udg { buf=qtn_rtsecmgr_more_info_individual_prompt_udg; } +RESOURCE TBUF r_rtsecmgr_more_info_individual_prompt_drg { buf=qtn_rtsecmgr_more_info_individual_prompt_drg; } +RESOURCE TBUF r_rtsecmgr_more_info_individual_prompt_ng { buf=qtn_rtsecmgr_more_info_individual_prompt_ng; } + +//one-shot yes +RESOURCE TBUF r_rtsecmgr_prompt_oneshot_yes { buf=qtn_rtsecmgr_prompt_oneshot_yes; } +//one-shot no +RESOURCE TBUF r_rtsecmgr_prompt_oneshot_no { buf=qtn_rtsecmgr_prompt_oneshot_no; } + +//session yes +RESOURCE TBUF r_rtsecmgr_prompt_session_yes { buf=qtn_rtsecmgr_prompt_session_yes; } +//session no +RESOURCE TBUF r_rtsecmgr_prompt_session_no { buf=qtn_rtsecmgr_prompt_oneshot_no; } + +//permanent yes +RESOURCE TBUF r_rtsecmgr_prompt_perm_yes { buf=qtn_rtsecmgr_prompt_perm_yes; } +//permanent no +RESOURCE TBUF r_rtsecmgr_prompt_perm_no { buf=qtn_rtsecmgr_prompt_oneshot_no; } + +RESOURCE TBUF r_rtsecmgr_prompt_allow_oneshot { buf=qtn_rtsecmgr_prompt_allow_oneshot; } + +RESOURCE TBUF r_rtsecmgr_prompt_allow_session { buf=qtn_rtsecmgr_prompt_session_yes; } + +RESOURCE TBUF r_rtsecmgr_prompt_allow_permanent { buf=qtn_rtsecmgr_prompt_perm_yes; } + +RESOURCE TBUF r_rtsecmgr_link_more_info { buf=qtn_rtsecmgr_link_more_info; } +RESOURCE TBUF r_rtsecmgr_item_more_info { buf=qtn_rtsecmgr_item_more_info; } +RESOURCE TBUF r_rtsecmgr_more_info_query { buf=qtn_rtsecmgr_info_about_group; } +RESOURCE TBUF r_rtsecmgr_cost_info { buf=qtn_rtsecmgr_prompt_cost_network; } +RESOURCE LISTBOX r_setting_app_listbox + { + flags = EEikListBoxMultipleSelection; + } + +RESOURCE AVKON_SETTING_PAGE r_rtsecmgr_prompt_setting_dialog + { + number = EAknSettingPageNoOrdinalDisplayed; + label = r_rtsecmgr_prompt_setting_dialog_label; + softkey_resource = R_AVKON_SOFTKEYS_OK_EMPTY; + type = EAknSetListBox; + editor_resource_id= r_setting_app_listbox; + } + +RESOURCE AVKON_LIST_QUERY r_list_query_msgbox +{ +items = +{ +AVKON_LIST_QUERY_DLG_LINE + { + control = AVKON_LIST_QUERY_CONTROL_WITH_MSGBOX + { + message = " "; + listtype = EAknListQueryWithMsgBox; + actuallisttype = EAknCtSinglePopupMenuListBox; + listbox = AVKON_LIST_QUERY_LIST + { + + }; + heading = r_rtsecmgr_prompt_query_header; + }; + } +}; +} + +RESOURCE DIALOG r_advprompt_message_query { +flags = EGeneralQueryFlags; +buttons = R_AVKON_SOFTKEYS_YES_NO; +items = { + DLG_LINE { + type = EAknCtPopupHeadingPane; + id = EAknMessageQueryHeaderId; + control = AVKON_HEADING {}; + }, + DLG_LINE { + type = EAknCtMessageQuery; + id = EAknMessageQueryContentId; + control = AVKON_MESSAGE_QUERY { message = " "; }; + } +}; +} + +RESOURCE DIALOG r_moreinfo_message_query { +flags = EGeneralQueryFlags; +buttons = R_AVKON_SOFTKEYS_OK_EMPTY; +items = { + DLG_LINE { + type = EAknCtPopupHeadingPane; + id = EAknMessageQueryHeaderId; + control = AVKON_HEADING {}; + }, + DLG_LINE { + type = EAknCtMessageQuery; + id = EAknMessageQueryContentId; + control = AVKON_MESSAGE_QUERY { message = " "; }; + } +}; +} + +// End of File diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerclient/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/rtsecuritymanagerclient/group/bld.inf Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,28 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + + +#include +PRJ_EXPORTS +../loc/rtsecmanager.loc MW_LAYER_LOC_EXPORT_PATH(rtsecmanager.loc) + +PRJ_MMPFILES +RTSecMgrClient.mmp \ No newline at end of file diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerclient/group/rtsecmgrclient.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/rtsecuritymanagerclient/group/rtsecmgrclient.mmp Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,70 @@ +/* +* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + + +#include +#include + +TARGET RTSecMgrClient.dll +TARGETTYPE dll +UID 0x1000008D 0x2000F848 + +CAPABILITY CAP_CLIENT_DLL +VENDORID VID_DEFAULT + +VERSION 10.1 +paged + +MW_LAYER_SYSTEMINCLUDE + +USERINCLUDE . +USERINCLUDE ../inc/ +USERINCLUDE ../../inc/ + +SOURCEPATH ../src/ +SOURCE RTSecMgrClient.cpp +SOURCE RTSecManager.cpp +SOURCE RTSecMgrScriptSession.cpp +SOURCE RTSecMgrTrustInfo.cpp + +START RESOURCE ../data/rtsecmanager.rss + TARGETPATH APP_RESOURCE_DIR + HEADER + LANGUAGE_IDS +END + +//MACRO RTSECMGR_TRACE + +LIBRARY avkon.lib +LIBRARY aknskins.lib +LIBRARY aknskinsrv.lib +LIBRARY bafl.lib +LIBRARY cone.lib +LIBRARY euser.lib +LIBRARY efsrv.lib +LIBRARY estor.lib +LIBRARY eikcore.lib +LIBRARY gdi.lib +LIBRARY platformEnv.lib +LIBRARY flogger.lib +LIBRARY rtsecmgrutil.lib +LIBRARY eikcoctl.lib +LIBRARY commonengine.lib diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerclient/inc/rtsecmgrclient.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/rtsecuritymanagerclient/inc/rtsecmgrclient.h Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,345 @@ +/* +* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Security Manager Client Side sub-Session Class + * +*/ + + + + + + +#ifndef _R_RSECMGRSESSION_H_ +#define _R_RSECMGRSESSION_H_ + +#include +#include +#include + +#include +#include +#include + +class CTrustInfo; +class CScript; +class CEikonEnv; + +/** + * + * RSecMgrSession represents the client side session handle. + * + * This class mainly communicates with the corresponding server side session object. + * The main reponsibility of this class is to package the input parameters, + * invoke a server request and unpack the server response appropriately. + * + * @lib rtsecmgrclient.lib + */ +NONSHARABLE_CLASS(RSecMgrSession) : public RSessionBase + { +public: + + /** + * Default constructor + * + */ + RSecMgrSession(); + + /** + * Connects to the runtime security manager server resulting in the creation + * of peer server side session object + * + * @return TInt KErrNone if successful; In case of failure, one of system-wide + * error codes + * + */ + TInt Connect(); + + /** + * Gets the version of runtime security manager component + * + * @return TVersion version of runtime security manager + * + */ + TVersion Version() const; + + /** + * Closes the session with the runtime security manager server + * + */ + void Close(); + + /** + * Registers the runtime security policy with security manager. This method + * packs the message parameters required for registering the policy. + * + * The various parameters required for SetPolicy operation are : + * + * Operation Code : ESetPolicy + * IPC Argument[0] : Policy Identifier (as inOut parameter) + * IPC Argument[1] : SecurityPolicy FileHandle + * IPC Argument[2] : SecurityPolicy FileSession object + * IPC Argument[3] : none + * + * @param aSecPolicy RFile Handle to security policy file + * + * @return TPolicyID generated policy identifier if successul; Otherwise one of + * system wide error codes + * + */ + TPolicyID SetPolicy(const RFile& aSecPolicy); + + /** + * Registers the runtime security policy with security manager. This method + * packs the message parameters required for registering the policy. + * + * The various parameters required for SetPolicy operation are : + * + * Operation Code : ESetPolicy + * IPC Argument[0] : Policy Identifier (as inOut parameter) + * IPC Argument[1] : PolicyBuffer + * IPC Argument[2] : SecurityPolicy FileSession object + * IPC Argument[3] : none + * + * @param aSecPolicy RFile Handle to security policy file + * + * @return TPolicyID generated policy identifier if successul; Otherwise one of + * system wide error codes + * + */ + TPolicyID SetPolicy(const TDesC8& aPolicyBuffer); + + /** + * UnRegisters a registered security policy. Runtimes should call this function + * to de-register the already registered security policy. + * + * The various parameters required for UnSetPolicy operation are : + * + * Operation Code : EUnsetPolicy + * IPC Argument[0] : Policy Identifier to un-register + * IPC Argument[1] : Successcode (as inOut parameter) + * IPC Argument[2] : none + * IPC Argument[3] : none + * + * @param aPolicyID TPolicyID Policy identifier previously generated with SetPolicy + * + * @return TInt One of sytem wide error codes in case of failure; Otherwise KErrNone + * + */ + TInt UnSetPolicy(TPolicyID aPolicyID); + + /** + * Updates an already registered security policy. Runtimes should call this function + * to update their policy. + * + * The various parameters required for UpdatePolicy operation are : + * + * Operation Code : EUpdatePolicy + * IPC Argument[0] : Policy Identifier + * IPC Argument[1] : SecurityPolicy FileHandle + * IPC Argument[2] : SecurityPolicy FileSession object + * IPC Argument[3] : none + * + * @param aPolicyID TPolicyID Policy identifier previously generated with SetPolicy + * @param aSecPolicy RFile Handle to security policy file + * + * @see SetPolicy for file session pre-conditions + * + * @return TPolicyID One of sytem wide error codes in case of failure; Otherwise the passed policyID + * + */ + TPolicyID UpdatePolicy(TPolicyID aPolicyID, const RFile& aSecPolicy); + + /** + * Updates an already registered security policy. Runtimes should call this function + * to update their policy. + * + * The various parameters required for UpdatePolicy operation are : + * + * Operation Code : EUpdatePolicy + * IPC Argument[0] : Policy Identifier + * IPC Argument[1] : SecurityPolicy FileBuffer + * IPC Argument[2] : SecurityPolicy FileSession object + * IPC Argument[3] : none + * + * @param aPolicyID TPolicyID Policy identifier previously generated with SetPolicy + * @param aSecPolicy RFile Handle to security policy file + * + * @see SetPolicy for file session pre-conditions + * + * @return TPolicyID One of sytem wide error codes in case of failure; Otherwise the passed policyID + * + */ + TPolicyID UpdatePolicy(TPolicyID aPolicyID, const TDesC8& aPolicyBuffer); + + /** + * Registers a script/executable. Runtimes should specify the trust information + * of the script to be registered. + * + * Operation Code : ERegisterScript + * IPC Argument[0] : Policy Identifier + * IPC Argument[1] : Script Identifier (as inOut Parameter) + * IPC Argument[2] : none + * IPC Argument[3] : none + * + * @param aPolicyID TPolicyID Runtime's registered policy identifier + * @param aTrustInfo CTrustInfo a valid instance of CTrustInfo object + * + * @return TExecutableID generated executable identifier if successul; Otherwise one of + * system wide error codes + * + */ + TExecutableID RegisterScript(TPolicyID aPolicyID, + const CTrustInfo& aTrustInfo); + + /** + * Registers a script/executable. Runtimes should specify the trust information + * of the script to be registered. + * + * Operation Code : ERegisterScript + * IPC Argument[0] : Policy Identifier + * IPC Argument[1] : Script Identifier (as inOut Parameter) + * IPC Argument[2] : hash value of script + * IPC Argument[3] : none + * + * + * @param aPolicyID TPolicyID Runtime's registered policy identifier + * @param aHashMarker const TDesC& Hash value to identify script when starting script session + * @param aTrustInfo CTrustInfo a valid instance of CTrustInfo object + * + * @return TExecutableID generated executable identifier if successul; Otherwise one of + * system wide error codes + * + */ + TExecutableID RegisterScript(TPolicyID aPolicyID, const TDesC& aHashMarker, + const CTrustInfo& aTrustInfo); + + /** + * De-Registers a script/executable. Runtimes should pass the previously registered + * script identifier corresponding to the script to be de-registered. + * + * Operation Code : EUnRegisterScript + * IPC Argument[0] : Script Identifier + * IPC Argument[1] : Policy Identifier + * IPC Argument[2] : Success code (as inOut parameter) + * IPC Argument[3] : none + * + * + * @param aExeID TExecutableID A valid script identifier + * + * @return TInt One of sytem wide error codes in case of failure; Otherwise KErrNone + * + */ + TInt UnRegisterScript(TExecutableID aExeID, TPolicyID aPolicyID); + + +private: + + /** + * Starts security manager server if it is not already started + * + * @return TInt One of sytem wide error codes in case of failure; Otherwise KErrNone + * + */ + TInt StartSecManagerServer() const; + + /** + * Returns security manager server location + * + * @return TFullName Server location path + * + */ + TFullName ServerLocation() const; + }; + +/** + * + * Represents the client side sub-session handle. This class mainly + * communicates with the corresponding server side sub-session handle. + * + * The main reponsibilities of this class are : + * + * - to store the pre-computed capability set of the script associated with the session object + * - to invoke the prompt handler + * - to notify the server sub-session object in case of permanent grant change + * + * @lib rtsecmgrclient.lib + */ +NONSHARABLE_CLASS(RSecMgrSubSession) : public RSubSessionBase + { +public: + + RSecMgrSubSession(); + + /** + * Opens client-side sub-session. The script session is modelled as a + * client side sub-session with a peer server side sub-session. + * + * @param aSession RSessionBase handle to client side session + * @param aScriptInfo CScript the underlying script object + * @param aPolicyID TPolicyID policy identifier of the runtime security policy associated with the + * script + * + * @return KErrNone if creation of sub-session is successful; In case of failure, + * one of system-wide error codes + */ + TInt Open(const RSessionBase& aSession, CScript& aScriptInfo, + TPolicyID aPolicyID, const TDesC& aHashValue = KNullDesC()); + + /** + * Opens client-side sub-session for an un-registered trusted script. The script session is modelled as a + * client side sub-session with a peer server side sub-session. + * + * @param aSession RSessionBase handle to client side session + * @param aScriptInfo CScript the underlying script object + * @param aPolicyID TPolicyID policy identifier of the runtime security policy associated with the + * script + * @param aTrustInfo CTrustInfo trust data structure + * + * @return KErrNone if creation of sub-session is successful; In case of failure, + * one of system-wide error codes + */ + TInt Open(const RSessionBase& aServer, CScript& aScriptInfo, + TPolicyID aPolicyID,const CTrustInfo& aTrustInfo); + + /** + * Closes the script session, inturn closing the sub-session on + * either side of client and server + * + */ + void Close(); + + /** + * Updates the blanket permission data of the script + * + * @param aScriptID TExecutableID Identifier of the scipt + * @param aPermGrant TPermGrant Blanket allowed data + * @param aPermDenied TPermGrant Blanket denied data + * + * @return KErrNone if update of blanket permission successul; Otherwise one of + * system wide error codes + * + */ + TInt UpdatePermGrant(TExecutableID aScriptID, TPermGrant aPermGrant, + TPermGrant aPermDenied) const; + + +private: + + //CEikonEnv* iEnv; + + RFs iFs; + }; + +#endif //_R_RSECMGRSESSION_H_ + diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerclient/loc/rtsecmanager.loc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/rtsecuritymanagerclient/loc/rtsecmanager.loc Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,390 @@ +/* +* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Localisation file for RuntimeSecurityManager Client +* +*/ + + + + + + + + +// LOCALISATION STRINGS + +//d: Runtime security manager prompt header +//l: heading_pane_t1 +//w: +//r:5.0 +// +#define qtn_rtsecmgr_prompt_query_header "Security Warning" + +//d: Runtime security manager prompt text +//l: loc_type_pane +//w: +//r:5.0 +// +#define qtn_rtsecmgr_prompt_query_commdd "Application will need access to communications device. Allow?" + +//d: Runtime security manager prompt text +//l: loc_type_pane +//w: +//r:5.0 +// +#define qtn_rtsecmgr_prompt_query_powermgmt "Application needs to use Power Management functions. Allow?" + +//d: Runtime security manager prompt text +//l: loc_type_pane +//w: +//r:5.0 +// +#define qtn_rtsecmgr_prompt_query_mmediadd "Application needs access to camera, video player or audio features. Allow?" + +//d: Runtime security manager prompt text +//l: loc_type_pane +//w: +//r:5.0 +// +#define qtn_rtsecmgr_prompt_query_read_devicedata "Application needs to read device data. Allow?" + +//d: Runtime security manager prompt text +//l: loc_type_pane +//w: +//r:5.0 +// +#define qtn_rtsecmgr_prompt_query_write_devicedata "Application needs access to modify device data. Allow?" + +//d: Runtime security manager prompt text +//l: loc_type_pane +//w: +//r:5.0 +// +#define qtn_rtsecmgr_prompt_query_drm "Application needs to access DRM protected content. Allow?" + +//d: Runtime security manager prompt text +//l: loc_type_pane +//w: +//r:5.0 +// +#define qtn_rtsecmgr_prompt_query_trustedui "Application needs to create a secure session. Allow?" + +//d: Runtime security manager prompt text +//l: loc_type_pane +//w: +//r:5.0 +// +#define qtn_rtsecmgr_prompt_query_protserv "Application needs to access protected server. Allow?" + +//d: Runtime security manager prompt text +//l: loc_type_pane +//w: +//r:5.0 +// +#define qtn_rtsecmgr_prompt_query_diskadmin "Application needs to access, modify or format device memory. Allow?" + +//d: Runtime security manager prompt text +//l: loc_type_pane +//w: +//r:5.0 +// +#define qtn_rtsecmgr_prompt_query_nwcontrol "Application needs to access and modify network connection. Allow?" + + +//d: Runtime security manager prompt text +//l: loc_type_pane +//w: +//r:5.0 +// +#define qtn_rtsecmgr_prompt_query_allfiles "Application needs to access and write to File System. Allow?" + +//d: Runtime security manager prompt text +//l: loc_type_pane +//w: +//r:5.0 +// +#define qtn_rtsecmgr_prompt_query_swevent "Application needs to capture key presses and joystick movement. Allow?" + +//d: Runtime security manager prompt text +//l: loc_type_pane +//w: +//r:5.0 +// +#define qtn_rtsecmgr_prompt_query_nwservices "Application needs to use network and send or receive data. Allow?" + +//d: Runtime security manager prompt text +//l: loc_type_pane +//w: +//r:5.0 +// +#define qtn_rtsecmgr_prompt_query_localservices "Application needs access to local connectivity. Allow?" + +//d: Runtime security manager prompt text +//l: loc_type_pane +//w: +//r:5.0 +// +#define qtn_rtsecmgr_prompt_query_read_userdata "Application needs to read user data. Allow?" + +//d: Runtime security manager prompt text +//l: loc_type_pane +//w: +//r:5.0 +// +#define qtn_rtsecmgr_prompt_query_write_userdata "Application needs to write user data.Allow?" + +//d: Runtime security manager prompt text +//l: loc_type_pane +//w: +//r:5.0 +// +#define qtn_rtsecmgr_prompt_query_location "Application needs to access location information. Allow?" + +//d: Runtime security manager prompt text +//l: loc_type_pane +//w: +//r:5.0 +// +#define qtn_rtsecmgr_prompt_query_surrdd "Application needs to access a connected device. Allow?" + +//d: Runtime security manager prompt text +//l: loc_type_pane +//w: +//r:5.0 +// +#define qtn_rtsecmgr_prompt_query_userenv "Application needs to access user environment. Allow?" + +//d: Runtime security manager prompt dialog label +//l: list_single_pane_t1_cp2 +//w: +//r:5.0 +// +#define qtn_rtsecmgr_prompt_oneshot_yes "Once" + +//d: Runtime security manager prompt dialog label +//l: list_single_pane_t1_cp2 +//w: +//r:5.0 +// +#define qtn_rtsecmgr_prompt_oneshot_no "No" + +//d: Runtime security manager prompt dialog label +//l: list_single_pane_t1_cp2 +//w: +//r:5.0 +// +#define qtn_rtsecmgr_prompt_session_yes "For this session" + + +//d: Runtime security manager prompt dialog label +//l: list_single_pane_t1_cp2 +//w: +//r:5.0 +// +#define qtn_rtsecmgr_prompt_perm_yes "Always" + + +//d: Runtime security manager prompt dialog label +//l: list_single_pane_t1_cp2 +//w: +//r:5.0 +// +#define qtn_rtsecmgr_prompt_allow_oneshot "Yes" + + +//d: Runtime security manager prompt text +//l: loc_type_pane +//w: +//r:5.0 +// +#define qtn_rtsecmgr_prompt_query_userdata "Application needs to access user related data. Allow?" + + +//d: Runtime security manager prompt text +//l: loc_type_pane +//w: +//r:5.0 +// +#define qtn_rtsecmgr_prompt_query_deviceresources "Application needs to access device resources. Allow?" + + +//d: Runtime security manager prompt text +//l: loc_type_pane +//w: +//r:5.0 +// +#define qtn_rtsecmgr_prompt_query_network "Application needs to access network. Allow?" + + +//d: Runtime security manager prompt text +//l: popup_snote_single_text_window/opt1 +//w: +//r:5.0 +// +#define qtn_rtsecmgr_prompt_cost_network "Use of the application may involve data transfer charges. For further information contact your service provider." + + +//d: Runtime security manager prompt dialog label +//l: list_single_pane_t1_cp2 +//w: +//r:5.0 +// +#define qtn_rtsecmgr_item_more_info "More Info" + + +//d: Runtime security manager prompt dialog label +//l: popup_info_list_pane_t1 +//w: +//r:5.0 +// +#define qtn_rtsecmgr_link_more_info "More Info" + + +//d: Runtime security manager More Info prompt header +//l: heading_pane_t1 +//w: +//r:5.0 +// +#define qtn_rtsecmgr_more_info_header_userdata "User Data Group" + + +//d: Runtime security manager More Info prompt header +//l: heading_pane_t1 +//w: +//r:5.0 +// +#define qtn_rtsecmgr_more_info_header_deviceresources "Device Resource Group" + + +//d: Runtime security manager More Info prompt header +//l: heading_pane_t1 +//w: +//r:5.0 +// +#define qtn_rtsecmgr_more_info_header_network "Network Group" + + +//d: Runtime security manager prompt text +//l: list_single_pane_t1_cp2 +//w: +//r:5.0 +// +#define qtn_rtsecmgr_more_info_commdd "Communication Resources" + + +//d: Runtime security manager prompt text +//l: list_single_pane_t1_cp2 +//w: +//r:5.0 +// +#define qtn_rtsecmgr_more_info_mmediadd "Multimedia Recording" + + +//d: Runtime security manager prompt text +//l: list_single_pane_t1_cp2 +//w: +//r:5.0 +// +#define qtn_rtsecmgr_more_info_read_devicedata "Reading Device Data" + + +//d: Runtime security manager prompt text +//l: list_single_pane_t1_cp2 +//w: +//r:5.0 +// +#define qtn_rtsecmgr_more_info_write_devicedata "Writing Device Data" + + +//d: Runtime security manager prompt text +//l: list_single_pane_t1_cp2 +//w: +//r:5.0 +// +#define qtn_rtsecmgr_more_info_nwcontrol "Network Control" + + +//d: Runtime security manager prompt text +//l: list_single_pane_t1_cp2 +//w: +//r:5.0 +// +#define qtn_rtsecmgr_more_info_swevent "Software Events" + + +//d: Runtime security manager prompt text +//l: list_single_pane_t1_cp2 +//w: +//r:5.0 +// +#define qtn_rtsecmgr_more_info_nwservices "Network Services" + + +//d: Runtime security manager prompt text +//l: list_single_pane_t1_cp2 +//w: +//r:5.0 +// +#define qtn_rtsecmgr_more_info_localservices "Local Connectivity" + + +//d: Runtime security manager prompt text +//l: list_single_pane_t1_cp2 +//w: +//r:5.0 +// +#define qtn_rtsecmgr_more_info_read_userdata "Reading User Data" + + +//d: Runtime security manager prompt text +//l: list_single_pane_t1_cp2 +//w: +//r:5.0 +// +#define qtn_rtsecmgr_more_info_write_userdata "Writing User Data" + + +//d: Runtime security manager prompt text +//l: list_single_pane_t1_cp2 +//w: +//r:5.0 +// +#define qtn_rtsecmgr_more_info_location "Location/Landmark" + + +//d: Runtime security manager prompt text +//l: list_single_pane_t1_cp2 +//w: +//r:5.0 +// +#define qtn_rtsecmgr_more_info_surrdd "Surrounding Devices" + + +//d: Runtime security manager prompt text +//l: list_single_pane_t1_cp2 +//w: +//r:5.0 +// +#define qtn_rtsecmgr_more_info_userenv "Accessories" + + +//d: Runtime security manager prompt text +//l: loc_type_pane +//w: +//r:5.0 +// +#define qtn_rtsecmgr_info_about_group "Application needs following permissions from the group" + + +// End of File diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerclient/src/rtsecmanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/rtsecuritymanagerclient/src/rtsecmanager.cpp Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,328 @@ +/* +* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Defines CRTSecManager and CRTSecMgrClientProxy classes + * +*/ + + + + + + +#include +#include +#include +#include "rtsecmgrclient.h" +#include "rtsecmgrtracer.h" + +/** + * Proxy delegate class for runtime security manager client-side + * session handle. + * + * @lib rtsecmgrclient.lib + */ +class CRTSecMgrClientProxy : public CBase + { +public: + CRTSecMgrClientProxy() + { + } + + void ConstructL() + { + User::LeaveIfError (iSecSession.Connect ()); + } + + static CRTSecMgrClientProxy* NewL() + { + CRTSecMgrClientProxy* self = CRTSecMgrClientProxy::NewLC (); + CleanupStack::Pop (self); + return self; + } + + static CRTSecMgrClientProxy* NewLC() + { + CRTSecMgrClientProxy* self = new (ELeave) CRTSecMgrClientProxy(); + CleanupStack::PushL (self); + self->ConstructL (); + return self; + } + + virtual ~CRTSecMgrClientProxy() + { + iSecSession.Close (); + } + + RSecMgrSession& Session() + { + return iSecSession; + } + RSecMgrSession* operator ->() + { + return &iSecSession; + } +private: + RSecMgrSession iSecSession; + }; + +// --------------------------------------------------------------------------- +// Defintiion of default private constructor +// --------------------------------------------------------------------------- +// +CRTSecManager::CRTSecManager() + { + } + +// --------------------------------------------------------------------------- +// Definition of second phase constructor +// +// Instantiates client proxy object, in turn creating a client-side +// session +// --------------------------------------------------------------------------- +// +void CRTSecManager::ConstructL() + { + iClientProxy = CRTSecMgrClientProxy::NewL (); + +#ifdef _DEBUG + if(CCoeEnv::Static()) + { + CCoeEnv::Static()->DisableExitChecks(ETrue); + } +#endif + } + +// --------------------------------------------------------------------------- +// Definition of second phase constructor +// +// Constructs a CRTSecManager instance +// --------------------------------------------------------------------------- +// +EXPORT_C CRTSecManager* CRTSecManager::NewL() + { + RTSecMgrCreateTraceFile() ; + CRTSecManager* self = CRTSecManager::NewLC(); + CleanupStack::Pop(self); + return self; + } + +// --------------------------------------------------------------------------- +// Definition of second phase constructor +// +// Constructs a CRTSecManager instance and leaves the created instance +// on the cleanupstack +// --------------------------------------------------------------------------- +// +EXPORT_C CRTSecManager* CRTSecManager::NewLC() + { + CRTSecManager* self = new (ELeave) CRTSecManager(); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +// --------------------------------------------------------------------------- +// Destructor +// +// Closes client-side session in turn closing the peer server +// side session +// --------------------------------------------------------------------------- +// +EXPORT_C CRTSecManager::~CRTSecManager() + { + delete iClientProxy; + } + +// --------------------------------------------------------------------------- +// Definition of SetPolicy +// +// This method delegates the actual handling to the client-side session +// handle class +// --------------------------------------------------------------------------- +EXPORT_C TPolicyID CRTSecManager::SetPolicy(const RFile& aSecPolicy) + { + RTSecMgrTraceFunction("CRTSecManager::SetPolicy(const RFile& aSecPolicy)") ; + return (*iClientProxy)->SetPolicy(aSecPolicy); + } + +// --------------------------------------------------------------------------- +// Definition of SetPolicy +// +// This method delegates the actual handling to the client-side session +// handle class +// --------------------------------------------------------------------------- +EXPORT_C TPolicyID CRTSecManager::SetPolicy(const TDesC8& aPolicyBuffer) + { + RTSecMgrTraceFunction("CRTSecManager::SetPolicy(const TDesC8& aPolicyBuffer)") ; + return (*iClientProxy)->SetPolicy(aPolicyBuffer); + } + +// --------------------------------------------------------------------------- +// Definition of UnSetPolicy +// +// This method delegates the actual handling to the client-side session +// handle class +// --------------------------------------------------------------------------- +EXPORT_C TInt CRTSecManager::UnSetPolicy(TPolicyID aPolicyID) + { + RTSecMgrTraceFunction("CRTSecManager::UnSetPolicy(TPolicyID aPolicyID)") ; + return (*iClientProxy)->UnSetPolicy(aPolicyID); + } + +// --------------------------------------------------------------------------- +// Definition of UpdatePolicy +// +// This method delegates the actual handling to the client-side session +// handle class +// --------------------------------------------------------------------------- +EXPORT_C TPolicyID CRTSecManager::UpdatePolicy(TPolicyID aPolicyID,const RFile& aSecPolicy) + { + RTSecMgrTraceFunction("CRTSecManager::UpdatePolicy(TPolicyID aPolicyID,const RFile& aSecPolicy)") ; + return (*iClientProxy)->UpdatePolicy(aPolicyID,aSecPolicy); + } + +// --------------------------------------------------------------------------- +// Definition of UpdatePolicy +// +// This method delegates the actual handling to the client-side session +// handle class +// --------------------------------------------------------------------------- +EXPORT_C TPolicyID CRTSecManager::UpdatePolicy(TPolicyID aPolicyID,const TDesC8& aPolicyBuffer) + { + RTSecMgrTraceFunction("CRTSecManager::UpdatePolicy(TPolicyID aPolicyID,const TDesC8& aPolicyBuffer)") ; + return (*iClientProxy)->UpdatePolicy(aPolicyID,aPolicyBuffer); + } + +// --------------------------------------------------------------------------- +// Definition of RegisterScript +// +// This method delegates the actual handling to the client-side session +// handle class +// --------------------------------------------------------------------------- +EXPORT_C TExecutableID CRTSecManager::RegisterScript(TPolicyID aPolicyID, const CTrustInfo& aTrustInfo) + { + RTSecMgrTraceFunction("CRTSecManager::RegisterScript(TPolicyID aPolicyID, const CTrustInfo& aTrustInfo)") ; + return (*iClientProxy)->RegisterScript(aPolicyID,aTrustInfo); + } + +// --------------------------------------------------------------------------- +// Definition of RegisterScript with script having hash value +// +// This method delegates the actual handling to the client-side session +// handle class +// --------------------------------------------------------------------------- +EXPORT_C TExecutableID CRTSecManager::RegisterScript(TPolicyID aPolicyID, const TDesC& aHashMarker, const CTrustInfo& aTrustInfo) + { + RTSecMgrTraceFunction("CRTSecManager::RegisterScript(TPolicyID aPolicyID, const TDesC& aHashMarker, const CTrustInfo& aTrustInfo)") ; + return (*iClientProxy)->RegisterScript(aPolicyID,aHashMarker,aTrustInfo); + } + +// --------------------------------------------------------------------------- +// Definition of UnRegisterScript +// +// This method delegates the actual handling to the client-side session +// handle class +// --------------------------------------------------------------------------- +EXPORT_C TInt CRTSecManager::UnRegisterScript(TExecutableID aExeID, TPolicyID aPolicyID) + { + RTSecMgrTraceFunction("CRTSecManager::UnRegisterScript(TExecutableID aExeID, TPolicyID aPolicyID)") ; + return (*iClientProxy)->UnRegisterScript(aExeID,aPolicyID); + } + +// --------------------------------------------------------------------------- +// Definition of GetScriptSession +// +// This method starts a client-side sub-session handle, modelling script +// session. This in turn creates a server-side peer sub-session handle +// --------------------------------------------------------------------------- +/*EXPORT_C CRTSecMgrScriptSession* CRTSecManager::GetScriptSession(TPolicyID aPolicyID, + TExecutableID aExecID, + MSecMgrPromptHandler* aPromptHdlr,const TDesC& aHashValue) + { + if(aExecID<=KAnonymousScript) + return NULL; + + CRTSecMgrScriptSession* scriptSession = CRTSecMgrScriptSession::NewLC(aPromptHdlr); + + if(KErrNone==scriptSession->Open(iClientProxy->Session(),aPolicyID,aExecID)) + { + CleanupStack::Pop(scriptSession); + return scriptSession; + } + + if(scriptSession) + CleanupStack::PopAndDestroy(scriptSession); + + return NULL; + }*/ + + +// --------------------------------------------------------------------------- +// Definition of GetScriptSession +// +// This method starts a client-side sub-session handle, modelling script +// session. This in turn creates a server-side peer sub-session handle +// --------------------------------------------------------------------------- +EXPORT_C CRTSecMgrScriptSession* CRTSecManager::GetScriptSessionL(TPolicyID aPolicyID, + const CTrustInfo& aTrustInfo, + MSecMgrPromptHandler* aPromptHdlr) + { + RTSecMgrTraceFunction("CRTSecManager::GetScriptSession(TPolicyID aPolicyID,\ + const CTrustInfo& aTrustInfo,\ + MSecMgrPromptHandler* aPromptHdlr)") ; + CRTSecMgrScriptSession* scriptSession = CRTSecMgrScriptSession::NewLC(aPromptHdlr); + + if(KErrNone==scriptSession->Open(iClientProxy->Session(),aPolicyID,KAnonymousScript,aTrustInfo)) + { + CleanupStack::Pop(scriptSession); + return scriptSession; + } + + if(scriptSession) + CleanupStack::PopAndDestroy(scriptSession); + + return NULL; + } + +// --------------------------------------------------------------------------- +// Definition of GetScriptSession +// +// This method starts a client-side sub-session handle, modelling script +// session. This in turn creates a server-side peer sub-session handle +// --------------------------------------------------------------------------- +EXPORT_C CRTSecMgrScriptSession* CRTSecManager::GetScriptSessionL(TPolicyID aPolicyID, + TExecutableID aExecID, + MSecMgrPromptHandler* aPromptHdlr, + const TDesC& aHashValue) + { + RTSecMgrTraceFunction("CRTSecManager::GetScriptSession(TPolicyID aPolicyID,\ + TExecutableID aExecID,MSecMgrPromptHandler* aPromptHdlr,\ + const TDesC& aHashValue)") ; + if(aExecID<=KAnonymousScript) + return NULL; + + CRTSecMgrScriptSession* scriptSession = CRTSecMgrScriptSession::NewLC(aPromptHdlr); + + if(KErrNone==scriptSession->Open(iClientProxy->Session(),aPolicyID,aExecID,aHashValue)) + { + CleanupStack::Pop(scriptSession); + return scriptSession; + } + + if(scriptSession) + CleanupStack::PopAndDestroy(scriptSession); + + return NULL; + } + diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerclient/src/rtsecmgrclient.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/rtsecuritymanagerclient/src/rtsecmgrclient.cpp Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,591 @@ +/* +* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Defines security manager client side session and sub-session classes + * +*/ + + + + + + + +#include +#include +#include +#include +#include +#include "rtsecmgrmsg.h" +#include "rtsecmgrdef.h" +#include "rtsecmgrclient.h" +#include "rtsecmgrtracer.h" + +#ifdef _DEBUG +_LIT(KServerStartFailed, "Security manager server starting failed"); +#endif + +// --------------------------------------------------------------------------- +// Defintiion of default private constructor +// --------------------------------------------------------------------------- +// +RSecMgrSession::RSecMgrSession() + { + } + +// --------------------------------------------------------------------------- +// Connects to the runtime security manager server +// +// This function attemtps to kick start security manager server if +// it is not running already. The number of attempts is currently 2. +// The number of message slot is defaulted to 4. +// --------------------------------------------------------------------------- +// +TInt RSecMgrSession::Connect() + { + RTSecMgrTraceFunction("RSecMgrSession::Connect()") ; + TInt retry(KSecSrvClientTryCount); // Try this twice + TInt err(KErrNone); + while (retry>KErrNone) + { + // Try to create a Server session + err = CreateSession ( KSecServerProcessName, Version (), + KDefaultMessageSlots); + + if ( err != KErrNotFound && err != KErrServerTerminated) + { + // KErrNone or unrecoverable error + if ( err != KErrNone) + { +#ifdef _DEBUG + RDebug::Print(KServerStartFailed); +#endif + } + retry = 0; + } + else + { + // Return code was KErrNotFound or KErrServerTerminated. + // Try to start a new security manager server instance + err = StartSecManagerServer (); + if ( err != KErrNone && err != KErrAlreadyExists) + { + // Unrecoverable error +#ifdef _DEBUG + RDebug::Print(KServerStartFailed); +#endif + retry = 0; + } + } + + retry--; + } + return (err); + } + +// --------------------------------------------------------------------------- +// Starts runtime security manager server +// +// --------------------------------------------------------------------------- +// +TInt RSecMgrSession::StartSecManagerServer() const + { + RTSecMgrTraceFunction("RSecMgrSession::StartSecManagerServer()") ; + RProcess server; + const TUidType serverUid( KNullUid, KSecMgrServerUid2, KNullUid); + TInt err = server.Create ( ServerLocation (), + KNullDesC, + serverUid, + EOwnerProcess); + + // Return error code if we the process couldn't be created + if ( KErrNone == err) + { + // Rendezvous is used to detect server start + TRequestStatus status; + server.Rendezvous ( status); + if ( status != KRequestPending) + { + // Log Abort Error +#ifdef _DEBUG + RDebug::Print(KServerStartFailed); +#endif + server.Kill ( 0); // Abort startup + } + else + { + server.Resume (); // Logon OK - start the server + } + User::WaitForRequest (status); // Wait for start or death + + if ( server.ExitType ()== EExitPanic) + { +#ifdef _DEBUG + RDebug::Print(KServerStartFailed); +#endif + err = KErrGeneral; + } + else + { + err = status.Int (); + } + + // We can close the handle now + server.Close (); + } + return err; + } + +// --------------------------------------------------------------------------- +// Returns runtime security manager server location +// +// --------------------------------------------------------------------------- +// +TFullName RSecMgrSession::ServerLocation() const + { + TFullName fullPathAndName; + fullPathAndName.Append ( KSecMgrServerExeName); + return fullPathAndName; + } + +// --------------------------------------------------------------------------- +// Returns the earliest version number of the security manager server +// +// --------------------------------------------------------------------------- +// +TVersion RSecMgrSession::Version(void) const + { + return (TVersion(KRTSecMgrServMajorVersionNumber,KRTSecMgrServMinorVersionNumber,KRTSecMgrServBuildVersionNumber)); + } + +// --------------------------------------------------------------------------- +// A request to close the session. +// +// It makes a call to the server, which deletes the object container and object index +// for this session, before calling Close() on the base class. +// --------------------------------------------------------------------------- +// +void RSecMgrSession::Close() + { + if(iHandle) + { + SendReceive (ESecServCloseSession); + RSessionBase::Close(); + } + } + +// +// Registers the runtime security policy with security manager. This method +// packs the message parameters required for registering the policy. +// +// The various parameters required for SetPolicy operation are : +// +// Operation Code : ESetPolicy +// IPC Argument[0] : Policy Identifier (as inOut parameter) +// IPC Argument[1] : SecurityPolicy FileHandle +// IPC Argument[2] : SecurityPolicy FileSession object +// IPC Argument[3] : none +// +TInt RSecMgrSession::SetPolicy(const RFile& aSecPolicy) + { + TPckgBuf pckgPId; + TIpcArgs args(&pckgPId); + + TInt ret = aSecPolicy.TransferToServer (args, EMsgArgOne, + EMsgArgTwo); + + if ( KErrNone==ret) + { + ret = SendReceive (ESetPolicy, args); + + if ( KErrNone==ret) + return pckgPId (); // Extract the policyID returned from the server. + } + + return ret; + } + +TPolicyID RSecMgrSession::SetPolicy(const TDesC8& aPolicyBuffer) + { + TInt ret(ErrInvalidParameters); + if(0==aPolicyBuffer.CompareC(KNullDesC8)) + { + return ret; + } + + TFileName tempDirPath; + TFileName tempPath; + + { + RFs fileSession; + if ( KErrNone==fileSession.Connect ()) + { + fileSession.PrivatePath (tempDirPath); + BaflUtils::EnsurePathExistsL (fileSession, tempDirPath); + + RFile secPolicyFile; + secPolicyFile.Temp (fileSession, tempDirPath, tempPath, EFileWrite); + secPolicyFile.Write(aPolicyBuffer); + secPolicyFile.Close(); + } + fileSession.Close(); + } + + RFs fileSession; + if ( KErrNone==fileSession.Connect ()) + { + CleanupClosePushL (fileSession); + if ( KErrNone==fileSession.ShareProtected ()) + { + RFile secPolicyFile; + + if(KErrNone == secPolicyFile.Open(fileSession,tempPath,EFileRead)) + { + ret = SetPolicy (secPolicyFile); + + secPolicyFile.Close(); + + } + + fileSession.Delete (tempPath); + } + + CleanupStack::PopAndDestroy (&fileSession);//fileSession + } + + fileSession.Close(); + + return ret; + } + +// +// UnRegisters a registered security policy. Runtimes should call this function +// to de-register the already registered security policy. +// +// The various parameters required for UnSetPolicy operation are : +// +// Operation Code : EUnsetPolicy +// IPC Argument[0] : Policy Identifier to un-register +// IPC Argument[1] : Successcode (as inOut parameter) +// IPC Argument[2] : none +// IPC Argument[3] : none +// +TInt RSecMgrSession::UnSetPolicy(TPolicyID aPolicyID) + { + if ( aPolicyID<=KErrNone) + return ErrInvalidPolicyID; + + TPckgBuf sucess(KErrNone); + TIpcArgs args(aPolicyID, &sucess); + + TInt ret = SendReceive (EUnsetPolicy, args); + + if ( KErrNone==ret) + return sucess (); // Extract the value returned from the server. + + return ret; + } + +// +// Updates an already registered security policy. Runtimes should call this function +// to update their policy. +// +// The various parameters required for UpdatePolicy operation are : +// +// Operation Code : EUpdatePolicy +// IPC Argument[0] : Policy Identifier +// IPC Argument[1] : SecurityPolicy FileHandle +// IPC Argument[2] : SecurityPolicy FileSession object +// IPC Argument[3] : none +// +TPolicyID RSecMgrSession::UpdatePolicy(TPolicyID aPolicyID, + const RFile& aSecPolicy) + { + if ( aPolicyID<=KErrNone) + { + return ErrInvalidPolicyID; + } + + TPckgBuf pckgPID(aPolicyID); + TIpcArgs args(&pckgPID); + + TInt ret = aSecPolicy.TransferToServer (args, EMsgArgOne, + EMsgArgTwo); + + if ( KErrNone==ret) + { + ret = SendReceive (EUpdatePolicy, args); + + if ( KErrNone==ret) + ret = pckgPID (); + } + + return ret; + } + +TPolicyID RSecMgrSession::UpdatePolicy(TPolicyID aPolicyID, + const TDesC8& aPolicyBuffer) + { + TInt ret(ErrInvalidParameters); + if(0==aPolicyBuffer.CompareC(KNullDesC8)) + { + return ret; + } + + TFileName tempDirPath; + TFileName tempPath; + + { + RFs fileSession; + if ( KErrNone==fileSession.Connect ()) + { + fileSession.PrivatePath (tempDirPath); + BaflUtils::EnsurePathExistsL (fileSession, tempDirPath); + + RFile secPolicyFile; + secPolicyFile.Temp (fileSession, tempDirPath, tempPath, EFileWrite); + secPolicyFile.Write(aPolicyBuffer); + secPolicyFile.Close(); + } + fileSession.Close(); + } + + RFs fileSession; + if ( KErrNone==fileSession.Connect ()) + { + CleanupClosePushL (fileSession); + if ( KErrNone==fileSession.ShareProtected ()) + { + RFile secPolicyFile; + + if(KErrNone == secPolicyFile.Open(fileSession,tempPath,EFileRead)) + { + + ret = UpdatePolicy (aPolicyID, secPolicyFile); + + secPolicyFile.Close(); + + } + + fileSession.Delete (tempPath); + } + + CleanupStack::PopAndDestroy (&fileSession);//fileSession + } + + fileSession.Close(); + + return ret; + } + +// +// Registers a script/executable. Runtimes should specify the trust information +// of the script to be registered. +// +// Operation Code : ERegisterScript +// IPC Argument[0] : Policy Identifier +// IPC Argument[1] : Script Identifier (as inOut Parameter) +// IPC Argument[2] : none +// IPC Argument[3] : none +// +TExecutableID RSecMgrSession::RegisterScript(TPolicyID aPolicyID, const CTrustInfo& /*aTrustInfo*/) + { + if ( aPolicyID scriptID(KAnonymousScript); + TIpcArgs args(aPolicyID, &scriptID); + + TInt result = SendReceive (ERegisterScript, args); + + if ( KErrNone==result) + result=scriptID (); + + return result; + } + +// +// Registers a script/executable. Runtimes should specify the trust information +// of the script to be registered. +// +// Operation Code : ERegisterScript +// IPC Argument[0] : Policy Identifier +// IPC Argument[1] : Script Identifier (as inOut Parameter) +// IPC Argument[2] : Hash value of script +// IPC Argument[3] : none +// +TExecutableID RSecMgrSession::RegisterScript(TPolicyID aPolicyID, + const TDesC& aHashMarker, const CTrustInfo& /*aTrustInfo*/) + { + __UHEAP_MARK; + + if(!(aHashMarker.Compare(KNullDesC))) + return ErrInvalidParameters; + CRTSecMgrRegisterScriptMsg* scriptMsg = CRTSecMgrRegisterScriptMsg::NewL ( + aPolicyID, aHashMarker); + + HBufC8* dataDes(NULL); + TRAPD(ret, dataDes = scriptMsg->PackMsgL()); + if ( dataDes) + { + TExecutableID scriptID(KAnonymousScript); + TPckgBuf scriptIDBuf(scriptID); + TIpcArgs args(dataDes, &scriptIDBuf); + + ret = SendReceive (ERegisterScriptWithHash, args); + delete dataDes; + + if(KErrNone==ret) + ret = scriptIDBuf(); + } + + delete scriptMsg; + + __UHEAP_MARKEND; + + return ret; + } + +// +// De-Registers a script/executable. Runtimes should pass the previously registered +// script identifier corresponding to the script to be de-registered. +// +// Operation Code : EUnRegisterScript +// IPC Argument[0] : Script Identifier +// IPC Argument[1] : Policy Identifier +// IPC Argument[2] : Success code (as inOut parameter) +// IPC Argument[3] : none +// +TInt RSecMgrSession::UnRegisterScript(TExecutableID aExeID, TPolicyID aPolicyID) + { + if (aExeID<=KErrNone) + return ErrInvalidScriptID; + if (aPolicyID<=KErrNone) + return ErrInvalidPolicyID; + + TPckgBuf errCode(KErrNone); + TIpcArgs args(aExeID, aPolicyID, &errCode); + + TInt result = SendReceive (EUnRegisterScript, args); + + if ( KErrNone==result) + return errCode (); + + return result; + } + +RSecMgrSubSession::RSecMgrSubSession() + { + + } +// +// Opens client-side sub-session for a registered script. The script session is modelled as a +// client side sub-session with a peer server side sub-session. +// +TInt RSecMgrSubSession::Open(const RSessionBase& aSession, + CScript& aScriptInfo, TPolicyID aPolicyID, const TDesC& aHashValue) + { + TIpcArgs args(aScriptInfo.ScriptID (), aPolicyID); + + TInt errCode(KErrNone); + errCode = iFs.Connect(); + if(errCode == KErrNone) + { + if ( KAnonymousScript==aScriptInfo.ScriptID ()) + errCode = CreateSubSession (aSession, EGetTrustedUnRegScriptSession, + args); + else + errCode = CreateSubSession (aSession, EGetScriptSession, args); + + if ( errCode==KErrNone) + { + // Retrieve the RFs and RFile handles from the server + TPckgBuf fh; // sub-session (RFile) handle + TIpcArgs args(&fh); + + RFile file; + CleanupClosePushL(file); + + if ( KErrNone==errCode) + { + iFs.ShareProtected (); + + TFileName tempDirPath; + TFileName tempPath; + + iFs.PrivatePath (tempDirPath); + BaflUtils::EnsurePathExistsL (iFs, tempDirPath); + + errCode = file.Temp (iFs, tempDirPath, tempPath, EFileWrite); + + if ( KErrNone==errCode) + { + file.TransferToServer (args, EMsgArgOne, EMsgArgTwo); + errCode = SendReceive (EGetScriptFile, args); + + if ( KErrNone==errCode) + { + RFileReadStream rfs(file); + CleanupClosePushL(rfs); + aScriptInfo.InternalizeL (rfs); + TBufC hashValue(aScriptInfo.Hash()); + if(0 != hashValue.Compare(KNullDesC)) + { + if(!aScriptInfo.HashMatch(aHashValue)) + { + //hash check failed + errCode = KErrNotFound; + } + } + + CleanupStack::PopAndDestroy(&rfs); + } + } + iFs.Delete (tempPath); + } + + CleanupStack::PopAndDestroy(&file); + } + } + return errCode; + } + +// +// Opens client-side sub-session for an un-registered trusted script. The script session is modelled as a +// client side sub-session with a peer server side sub-session. +// +TInt RSecMgrSubSession::Open(const RSessionBase& aSession, + CScript& aScriptInfo, TPolicyID aPolicyID, const CTrustInfo& /*aTrustInfo*/) + { + return Open (aSession, aScriptInfo, aPolicyID); + } + +// +// Updates the blanket permission data of the script +// +TInt RSecMgrSubSession::UpdatePermGrant(TExecutableID aScriptID, + TPermGrant aPermGrant, TPermGrant aPermDenied) const + { + TIpcArgs args(aScriptID, (TInt)aPermGrant, (TInt)aPermDenied); + return SendReceive (EUpdatePermanentGrant, args); + } + +// +// Close the subsession. +// +void RSecMgrSubSession::Close() + { + iFs.Close(); + RSubSessionBase::CloseSubSession (ECloseScriptSession); + } + diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerclient/src/rtsecmgrscriptsession.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/rtsecuritymanagerclient/src/rtsecmgrscriptsession.cpp Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,1215 @@ +/* +* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Defines runtime security manager script session class + * +*/ + + + + + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include "rtsecmgrclient.h" +#include "rtsecmgrdef.h" + +//security manager resource file literal +_LIT(KSecMgrResourceFile, "RTSecManager.RSC"); + +//constant for descriptor array granularity +const TInt KDescArrayInit = 6; +const TInt KMaxBuf=256; + +//typedef of selection index array +typedef RArray RSelIdxArray; + +//static resource IDs for capability text display in default prompt +static const TInt CAPABILITY_RESOURCEID[KCapabilitySize] = + { + 0, //ECapabilityTCB (0) + R_RTSECMGR_COMMDD, //ECapabilityCommDD (1) + R_RTSECMGR_POWERMGMT, //ECapabilityPowerMgmt (2) + R_RTSECMGR_MMEDIADD, //ECapabilityMultimediaDD (3) + R_RTSECMGR_READDEVICEDATA, //ECapabilityReadDeviceData (4) + R_RTSECMGR_WRITEDEVICEDATA, //ECapabilityWriteDeviceData (5) + R_RTSECMGR_DRM, //ECapabilityDRM (6) + R_RTSECMGR_TRUSTEDUI, //ECapabilityTrustedUI (7) + R_RTSECMGR_PROTSERV, //ECapabilityProtServ (8) + R_RTSECMGR_DISKADMIN, //ECapabilityDiskAdmin (9) + R_RTSECMGR_NWCONTROL, //ECapabilityNetworkControl (10) + R_RTSECMGR_ALLFILES, //ECapabilityAllFiles (11) + R_RTSECMGR_SWEVENT, //ECapabilitySwEvent (12) + R_RTSECMGR_NWSERVICES, //ECapabilityNetworkServices (13) + R_RTSECMGR_LOCALSERVICES, //ECapabilityLocalServices (14) + R_RTSECMGR_READUSERDATA, //ECapabilityReadUserData (15) + R_RTSECMGR_WRITEUSERDATA, //ECapabilityWriteUserData (16) + R_RTSECMGR_LOCATION, //ECapabilityLocation (17) + R_RTSECMGR_SURRDD, //ECapabilitySurroundingsDD (18) + R_RTSECMGR_USERENV //ECapabilityUserEnvironment (19) + }; + +static const TInt MOREINFO_CAP_RESOURCEID[KCapabilitySize] = + { + 0, //ECapabilityTCB (0) + R_RTSECMGR_MORE_INFO_COMMDD, //ECapabilityCommDD (1) + R_RTSECMGR_POWERMGMT, //ECapabilityPowerMgmt (2) + R_RTSECMGR_MORE_INFO_MMEDIADD, //ECapabilityMultimediaDD (3) + R_RTSECMGR_MORE_INFO_READDEVICEDATA, //ECapabilityReadDeviceData (4) + R_RTSECMGR_MORE_INFO_WRITEDEVICEDATA, //ECapabilityWriteDeviceData (5) + 0, //ECapabilityDRM (6) + 0, //ECapabilityTrustedUI (7) + 0, //ECapabilityProtServ (8) + 0, //ECapabilityDiskAdmin (9) + R_RTSECMGR_MORE_INFO_NWCONTROL, //ECapabilityNetworkControl (10) + 0, //ECapabilityAllFiles (11) + R_RTSECMGR_MORE_INFO_SWEVENT, //ECapabilitySwEvent (12) + R_RTSECMGR_MORE_INFO_NWSERVICES, //ECapabilityNetworkServices (13) + R_RTSECMGR_MORE_INFO_LOCALSERVICES, //ECapabilityLocalServices (14) + R_RTSECMGR_MORE_INFO_READ_USERDATA, //ECapabilityReadUserData + R_RTSECMGR_MORE_INFO_WRITE_USERDATA,//ECapabilityWriteUserData + R_RTSECMGR_MORE_INFO_LOCATION,//ECapabilityLocation + R_RTSECMGR_MORE_INFO_SURRDD, //ECapabilitySurroundingsDD + R_RTSECMGR_MORE_INFO_USERENV //ECapabilityUserEnvironment + }; + +struct TCallbackParam +{ + CRTSecMgrScriptSession* iRTSecMgrScriptSession; + CPromptData *iPromptData; +}; + +/** + * Proxy delegate class for runtime security manager client-side + * sub-session handle. + * + * @lib rtsecmgrclient.lib + */ +class CRTSecMgrSubSessionProxy : public CBase + { +public: + + static CRTSecMgrSubSessionProxy* NewL() + { + CRTSecMgrSubSessionProxy* self = CRTSecMgrSubSessionProxy::NewLC (); + CleanupStack::Pop (self); + return self; + } + + static CRTSecMgrSubSessionProxy* NewLC() + { + CRTSecMgrSubSessionProxy* self = new (ELeave) CRTSecMgrSubSessionProxy(); + CleanupStack::PushL (self); + self->ConstructL (); + return self; + } + + virtual ~CRTSecMgrSubSessionProxy() + { + iSubSession.Close (); + } + + inline RSecMgrSubSession& SubSession() + { + return iSubSession; + } + RSecMgrSubSession* operator ->() + { + return &iSubSession; + } +private: + inline CRTSecMgrSubSessionProxy() + { + } + void ConstructL() + { + } + + RSecMgrSubSession iSubSession; + }; + +// --------------------------------------------------------------------------- +// Defintiion of default private constructor +// --------------------------------------------------------------------------- +// +CRTSecMgrScriptSession::CRTSecMgrScriptSession(MSecMgrPromptHandler* aPromptHdlr) : + iPermBits(KDefaultNullBit), iDeniedBits(KDefaultNullBit), + iPromptHdlr(aPromptHdlr), iUIPromptOption(RTPROMPTUI_DEFAULT), isCustomPrompt(EFalse) + { + _sessionInfo.AllowedCaps = KDefaultNullBit; + _sessionInfo.DeniedCaps = KDefaultNullBit; +} + +// --------------------------------------------------------------------------- +// Defintiion of second-phase constructor +// --------------------------------------------------------------------------- +// +CRTSecMgrScriptSession* CRTSecMgrScriptSession::NewL( + MSecMgrPromptHandler* aPromptHdlr) + { + CRTSecMgrScriptSession* self = CRTSecMgrScriptSession::NewLC (aPromptHdlr); + CleanupStack::Pop (self); + return self; + } + +// --------------------------------------------------------------------------- +// Defintiion of second-phase constructor +// --------------------------------------------------------------------------- +// +CRTSecMgrScriptSession* CRTSecMgrScriptSession::NewLC( + MSecMgrPromptHandler* aPromptHdlr) + { + CRTSecMgrScriptSession* self = new (ELeave) CRTSecMgrScriptSession(aPromptHdlr); + CleanupStack::PushL (self); + self->ConstructL (); + return self; + } + +// --------------------------------------------------------------------------- +// Defintiion of second-phase constructor +// This method instantiates client side sub-session proxy instance. +// In addition, this method loads the security manager resource +// --------------------------------------------------------------------------- +// +void CRTSecMgrScriptSession::ConstructL() + { + iCoeEnv = CCoeEnv::Static (); + if ( !iCoeEnv && !iPromptHdlr) + User::Leave (KErrNotSupported); + + iSubSessionProxy = CRTSecMgrSubSessionProxy::NewL (); + + if ( !iPromptHdlr) + { + iPromptHdlr = this; //default prompt handler + isCustomPrompt = ETrue ; + } + + + } + +void CRTSecMgrScriptSession::AddResourceFiles() + { + if(iCoeEnv) + { + + CDesCArray* diskList = new (ELeave) CDesCArrayFlat(KDescArrayInit); + CleanupStack::PushL (diskList); + + BaflUtils::GetDiskListL (iCoeEnv->FsSession (), *diskList); + for (TInt idx(0); idxCount ();++idx) + { + TInt intDrive; + TChar ch = ((*diskList)[idx])[0]; + RFs::CharToDrive (ch, intDrive); + TDriveUnit curDrive(intDrive); + + TFileName resFile(curDrive.Name ()); + resFile.Append (KDC_APP_RESOURCE_DIR); + resFile.Append (KSecMgrResourceFile); + BaflUtils::NearestLanguageFile (iCoeEnv->FsSession (), resFile); + if ( BaflUtils::FileExists (iCoeEnv->FsSession (), resFile)) + { + TRAPD (err, iResourceOffset = iCoeEnv->AddResourceFileL (resFile)); + User::LeaveIfError (err); + break; + } + } + + CleanupStack::PopAndDestroy (diskList); + } + } + +void CRTSecMgrScriptSession::CloseResourceFiles() + { + if ( iResourceOffset && iCoeEnv) + iCoeEnv->DeleteResourceFile (iResourceOffset); + iResourceOffset = 0; + } +// --------------------------------------------------------------------------- +// Destructor +// Closes script sub-session handle +// --------------------------------------------------------------------------- +// +EXPORT_C CRTSecMgrScriptSession::~CRTSecMgrScriptSession() + { + Close (); + } + +// --------------------------------------------------------------------------- +// Opens script session, in turn opening client-side sub-session handle +// --------------------------------------------------------------------------- +// +TInt CRTSecMgrScriptSession::Open(const RSessionBase& aParentSession, + TPolicyID aPolicyID, TExecutableID aExecID) + { + if (iScript) + { + delete iScript; + iScript = NULL; + } + + iScript = CScript::NewL (aPolicyID, aExecID); + + TInt ret((*iSubSessionProxy)->Open (aParentSession, *iScript, aPolicyID)); + if ( KErrNone==ret) + { + iPermBits = iScript->PermGranted (); + iDeniedBits = iScript->PermDenied (); + } + + return ret; + } + +// --------------------------------------------------------------------------- +// Opens script session, in turn opening client-side sub-session handle +// --------------------------------------------------------------------------- +// +TInt CRTSecMgrScriptSession::Open(const RSessionBase& aParentSession, + TPolicyID aPolicyID, TExecutableID aExecID, const TDesC& aHashValue) + { + if (iScript) + { + delete iScript; + iScript = NULL; + } + + iScript = CScript::NewL (aPolicyID, aExecID); + TInt ret((*iSubSessionProxy)->Open (aParentSession, *iScript, aPolicyID, aHashValue)); + if ( KErrNone==ret) + { + iPermBits = iScript->PermGranted (); + iDeniedBits = iScript->PermDenied (); + } + + return ret; + } + +// --------------------------------------------------------------------------- +// Opens script session, in turn opening client-side sub-session handle +// --------------------------------------------------------------------------- +// +TInt CRTSecMgrScriptSession::Open(const RSessionBase& aParentSession, + TPolicyID aPolicyID, TExecutableID aExecID, const CTrustInfo& aTrustInfo) + { + if (iScript) + { + delete iScript; + iScript = NULL; + } + + iScript = CScript::NewL (aPolicyID, aExecID); + TInt ret((*iSubSessionProxy)->Open (aParentSession, *iScript, aPolicyID, aTrustInfo)); + + if ( KErrNone==ret) + { + iPermBits = iScript->PermGranted (); + iDeniedBits = iScript->PermDenied (); + } + + return ret; + } + +// --------------------------------------------------------------------------- +// Performs access permission check, returns unmatched capabilities if any +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CRTSecMgrScriptSession::IsAllowed(const RCapabilityArray& aCapabilitiesToCheck,RCapabilityArray& aUnMatchedCapabilities) + { + RPromptDataList promptDataList; + TCapabilityBitSet unMatchedCapBits(KDefaultNullBit); + TInt ret(IsAllowed(aCapabilitiesToCheck,promptDataList,unMatchedCapBits)); + + promptDataList.ResetAndDestroy(); + + if(KDefaultNullBit!=unMatchedCapBits) + BuildCapsL(unMatchedCapBits,aUnMatchedCapabilities); + return ret; + } + +// --------------------------------------------------------------------------- +// Performs access permission check +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CRTSecMgrScriptSession::IsAllowed(const RCapabilityArray& aCapabilitiesToCheck) + { + RPromptDataList promptDataList; + TCapabilityBitSet unMatchedCapBits(KDefaultNullBit); + TInt ret(IsAllowed(aCapabilitiesToCheck,promptDataList,unMatchedCapBits)); + promptDataList.ResetAndDestroy(); + return ret; + } + +// --------------------------------------------------------------------------- +// Private implementation to perform access perform access check. +// This function is the real task master +// --------------------------------------------------------------------------- +// +TInt CRTSecMgrScriptSession::IsAllowed( + const RCapabilityArray& aCapabilitiesToCheck, + RPromptDataList& aPromptDataList, TCapabilityBitSet& aUnMatchedCaps) + { + if ( aCapabilitiesToCheck.Count ()<=0) + { + return EAccessOk; //if no capabilities are required, safely return + } + if ( aCapabilitiesToCheck.Find(ECapabilityTCB) != KErrNotFound) + return EAccessNok; + aPromptDataList.Reset (); + + TCapabilityBitSet capToCheck(KDefaultNullBit); + TCapabilityBitSet finalCaps(KDefaultNullBit); + for (TInt i(0); i!=aCapabilitiesToCheck.Count (); ++i) + AddCapability (capToCheck, aCapabilitiesToCheck[i]); + + capToCheck &= ~(iScript->PermissionSet().UnconditionalCaps()); + + /* Check if a;ready denied. No point in going forward */ + if(capToCheck & _sessionInfo.DeniedCaps || capToCheck & iDeniedBits) + return EAccessNok; + + TCapabilityBitSet allowedCaps(KDefaultNullBit); + allowedCaps |= _sessionInfo.AllowedCaps; //for session allowed + allowedCaps &= ~iDeniedBits; + allowedCaps |= iPermBits; //for permanently allowed + + //In case if all the capabilities required by the service provider + //are allowed without prompting + TCapabilityBitSet original_capToCheck = capToCheck; + capToCheck &= allowedCaps; + if(original_capToCheck == capToCheck) + return EAccessOk; + + capToCheck ^= original_capToCheck ; + TBool isPermGrantModified(EFalse); + + RPermissions perms = iScript->PermissionSet().Permissions (); + + for (TInt i(0); (i!=perms.Count ())&& capToCheck ;++i) + { + CPermission* perm = CPermission::NewLC(*perms[i]); + + TCapabilityBitSet tempCapToCheck(KDefaultNullBit); + + RCapabilityArray capabilities; + perm->Capabilitilites (capabilities); + + for (TInt capsIdx(0); capsIdx!=capabilities.Count();++capsIdx) + { + TCapability cap(capabilities[capsIdx]); + tempCapToCheck |= LOWBIT << cap; + } + capToCheck &= tempCapToCheck; + if ( capToCheck ) + { + if ( capToCheck & iDeniedBits) //check if permanently disabled + { + allowedCaps &= ~tempCapToCheck; //just in case... + _sessionInfo.DeniedCaps &= ~tempCapToCheck; //just in case... + } + else + if ( capToCheck & _sessionInfo.DeniedCaps) //not necessary to do this check... + { + allowedCaps &= ~tempCapToCheck; //just in case... + } + else + if ((capToCheck & allowedCaps) != capToCheck) //check if it's already allowed + { + //capToCheck &= allowedCaps; + TCapabilityBitSet temp = capToCheck; + temp &= allowedCaps; + temp ^= capToCheck; + capToCheck = temp; + if ( (perm->Condition() & RTUserPrompt_OneShot) ||(perm->Condition() & RTUserPrompt_Session) ||((perm->Condition() & RTUserPrompt_Permanent) && + (iScript->ScriptID()!=KAnonymousScript))) + { + if ( !(_sessionInfo.AllowedCaps & capToCheck)) + { + //check if it's denied for this session + if ( !(_sessionInfo.DeniedCaps & capToCheck)) + { + CPromptData* promptData = CPromptData::NewL();//should write NewL Function + promptData->SetPermissions(*perm); + promptData->SetUserSelection(perm->Default ()) ; + aPromptDataList.Append (promptData); + } + + } + else + { + allowedCaps |= tempCapToCheck; //enable in allowed + } + } + } + } + capToCheck ^= original_capToCheck; + capabilities.Close (); + CleanupStack::PopAndDestroy(perm); + }//for loop + + if ( aPromptDataList.Count ()>0) + { + //TInt ret = EPromptOk; + TInt ret = iPromptHdlr->Prompt (aPromptDataList , iScript->ScriptID()); + + //Iterate over promptDataList and check the user selection + RCapabilityArray capArray; + for (TInt i(0); i!=aPromptDataList.Count ();++i) + { + CPermission *perm = (aPromptDataList[i])->iPermission; + perm->Capabilitilites(capArray); + TCapabilityBitSet tempCapToCheck(KDefaultEnableBit); + TCapabilityBitSet userSelectedCaps = 0; + for(TInt idx(0); idx != capArray.Count(); idx++) + userSelectedCaps |= tempCapToCheck <ScriptID()!=KAnonymousScript)&&(isPermGrantModified)) + UpdatePermGrant ();//commit perm grant change + + finalCaps |= iPermBits ; + + if((finalCaps & NetworkServices_CAP) && isCustomPrompt) + PromptCostL() ; + + finalCaps |= _sessionInfo.AllowedCaps ; + + + if ( KErrNone == ((finalCaps & original_capToCheck) ^ original_capToCheck)) + return EAccessOk; + else + { + aUnMatchedCaps = (finalCaps & original_capToCheck) ^ original_capToCheck; + return EAccessNok; + } + } + else + { + return EAccessNok; + } + + } + +// --------------------------------------------------------------------------- +// Default prompt handler implementation +// --------------------------------------------------------------------------- +// +TInt CRTSecMgrScriptSession::Prompt(RPromptDataList& aPromptDataList,TExecutableID /*aExecID*/) + { + AddResourceFiles(); + TInt ret(EPromptOk); + TInt promptCount = aPromptDataList.Count (); + + for (TInt i(0); i=i; --inLoopCnt) + { + TUserPromptOption selected = aPromptDataList[inLoopCnt]->iUserSelection; + if(!(selected == RTUserPrompt_Denied || selected == RTUserPrompt_SessionDenied || selected == RTUserPrompt_PermDenied)) + { + delete aPromptDataList[inLoopCnt]; + aPromptDataList.Remove(inLoopCnt); + } + } + break; + } + + + } + CloseResourceFiles(); + return ret; + } + +// --------------------------------------------------------------------------- +// Private default prompt handler implementation +// --------------------------------------------------------------------------- +// +TInt CRTSecMgrScriptSession::Prompt(CPromptData* aPromptData) + { + if ( RTPROMPTUI_DEFAULT!=iUIPromptOption) + return PromptAdvanced (aPromptData); + + TInt ret(EPromptOk); + TInt stackResCnt(0); + + CDesCArray* settingPageText = new(ELeave) CDesCArrayFlat(KDescArrayInit); + CleanupStack::PushL(settingPageText); + + HBufC* oneShotOptionText= NULL; + HBufC* oneShotDenyText= NULL; + HBufC* sessionOptionText= NULL; + HBufC* sessionDenyOption= NULL; + HBufC* permGrantOptionText= NULL; + HBufC* permDenyOption= NULL; + + TInt selIndex(PROMPT_SELIDX_ZERO); + RSelIdxArray selIdxArray; + CleanupClosePushL (selIdxArray); + + if ( (RTUserPrompt_Permanent & (aPromptData->iPermission->Default ())) || (RTUserPrompt_Permanent & (aPromptData->iPermission->Condition ()))) + { + permGrantOptionText = iCoeEnv->AllocReadResourceLC (R_RTSECMGR_PROMPT_PERM_YES); + settingPageText->AppendL (permGrantOptionText->Des ()); + ++stackResCnt; + + selIdxArray.Append (R_RTSECMGR_PROMPT_PERM_YES); + + if ( RTUserPrompt_Permanent&aPromptData->iPermission->Default ()) + selIndex = selIdxArray.Count ()-1; + + /* permDenyOption = iCoeEnv->AllocReadResourceLC (R_RTSECMGR_PROMPT_PERM_NO); + ++stackResCnt; + */ + } + + if ( (RTUserPrompt_Session & (aPromptData->iPermission->Default ())) || (RTUserPrompt_Session & (aPromptData->iPermission->Condition ()))) + { + sessionOptionText = iCoeEnv->AllocReadResourceLC (R_RTSECMGR_PROMPT_SESSION_YES); + settingPageText->AppendL (sessionOptionText->Des()); + ++stackResCnt; + + selIdxArray.Append (R_RTSECMGR_PROMPT_SESSION_YES); + + TUserPromptOption def = aPromptData->iPermission->Default (); + if ( RTUserPrompt_Session&def) + selIndex = selIdxArray.Count()-1; + + /* if ( !permDenyOption) + { + sessionDenyOption = iCoeEnv->AllocReadResourceLC (R_RTSECMGR_PROMPT_SESSION_NO); + ++stackResCnt; + }*/ + } + + if ( (RTUserPrompt_OneShot & aPromptData->iPermission->Default ()) || (RTUserPrompt_OneShot & aPromptData->iPermission->Condition ())) + { + oneShotOptionText = iCoeEnv->AllocReadResourceLC (R_RTSECMGR_PROMPT_ONESHOT_YES); + settingPageText->AppendL (oneShotOptionText->Des ()); + ++stackResCnt; + + selIdxArray.Append (R_RTSECMGR_PROMPT_ONESHOT_YES); + + TUserPromptOption def = aPromptData->iPermission->Default (); + if ( RTUserPrompt_OneShot&def) + selIndex = selIdxArray.Count()-1; + /* if ( !permDenyOption && !sessionDenyOption) + { + oneShotDenyText = iCoeEnv->AllocReadResourceLC (R_RTSECMGR_PROMPT_ONESHOT_NO); + ++stackResCnt; + }*/ + } + + + if ( (RTUserPrompt_OneShot & (aPromptData->iPermission->Default ())) || (RTUserPrompt_OneShot & (aPromptData->iPermission->Condition ()))) + { + oneShotDenyText = iCoeEnv->AllocReadResourceLC (R_RTSECMGR_PROMPT_ONESHOT_NO); + ++stackResCnt; + + } + + if ( (RTUserPrompt_Session & (aPromptData->iPermission->Default ())) || (RTUserPrompt_Session & (aPromptData->iPermission->Condition ()))) + { + if ( !oneShotDenyText) + { + sessionDenyOption = iCoeEnv->AllocReadResourceLC (R_RTSECMGR_PROMPT_SESSION_NO); + ++stackResCnt; + } + } + + if ( (RTUserPrompt_Permanent & aPromptData->iPermission->Default ()) || (RTUserPrompt_Permanent & aPromptData->iPermission->Condition ())) + { + if ( !oneShotDenyText && !sessionDenyOption) + { + permDenyOption = iCoeEnv->AllocReadResourceLC (R_RTSECMGR_PROMPT_PERM_NO); + ++stackResCnt; + } + } + + if ( oneShotDenyText) + { + settingPageText->AppendL (oneShotDenyText->Des ()); + selIdxArray.Append (R_RTSECMGR_PROMPT_ONESHOT_NO); + } + + if ( sessionDenyOption) + { + settingPageText->AppendL (sessionDenyOption->Des ()); + selIdxArray.Append (R_RTSECMGR_PROMPT_SESSION_NO); + } + + if ( permDenyOption) + { + settingPageText->AppendL (permDenyOption->Des ()); + selIdxArray.Append (R_RTSECMGR_PROMPT_PERM_NO); + } + + HBufC* body(NULL); + HBufC *moreInfo(NULL); + + if(((aPromptData->iPermission->PermName()).Compare(KNullDesC)) != KErrNone) + { + if(((aPromptData->iPermission->PermName()).Compare(_L("UserDataGroup"))) == KErrNone ) + { + body = iCoeEnv->AllocReadResourceLC (R_RTSECMGR_USERDATA_GROUP); + ++stackResCnt; + } + else if(((aPromptData->iPermission->PermName()).Compare(_L("DeviceResourcesGroup"))) == KErrNone ) + { + body = iCoeEnv->AllocReadResourceLC (R_RTSECMGR_DEVICERESOURCES_GROUP); + ++stackResCnt; + } + else if(((aPromptData->iPermission->PermName()).Compare(_L("NetworkGroup"))) == KErrNone ) + { + body = iCoeEnv->AllocReadResourceLC (R_RTSECMGR_NETWORK_GROUP); + ++stackResCnt; + } + } + else if ( (aPromptData->iPermission->Capability()iPermission->Capability()>ECapabilityTCB)) + { + TInt textResID(CAPABILITY_RESOURCEID[aPromptData->iPermission->Capability()]); + if(KErrNone!=textResID) + { + body = iCoeEnv->AllocReadResourceLC (textResID); + ++stackResCnt; + } + } + + if(((aPromptData->iPermission->PermName()).Compare(KNullDesC)) != KErrNone) + { + moreInfo = iCoeEnv->AllocReadResourceLC (R_RTSECMGR_ITEM_MORE_INFO); + ++stackResCnt; + if( moreInfo ) + { + settingPageText->AppendL (moreInfo->Des ()); + selIdxArray.Append (R_RTSECMGR_ITEM_MORE_INFO); + } + } + + CAknListQueryDialog* queryDialog = new (ELeave) CAknListQueryDialog(&selIndex); + CleanupStack::PushL (queryDialog); + ++stackResCnt; + + queryDialog->PrepareLC (R_LIST_QUERY_MSGBOX); + + queryDialog->SetItemTextArray (settingPageText); + queryDialog->SetOwnershipType(ELbmDoesNotOwnItemArray); + + CAknMessageQueryControl* msgBox = queryDialog->MessageBox (); + if ( msgBox && body ) + msgBox->SetMessageTextL (body); + + CAknPopupHeadingPane* heading = queryDialog->QueryHeading (); + HBufC* headerText(NULL); + if ( heading) + { + heading->SetLayout (CAknPopupHeadingPane::EMessageQueryHeadingPane); + headerText = iCoeEnv->AllocReadResourceLC (R_RTSECMGR_PROMPT_QUERY_HEADER); + heading->SetTextL (headerText->Des ()); + ++stackResCnt; + } + + if(moreInfo) + { + TListItemProperties moreInfoProperties; + moreInfoProperties.SetUnderlined(ETrue); + queryDialog->ListControl()->Listbox()->ItemDrawer()->SetPropertiesL(settingPageText->Count()-1,moreInfoProperties); + } + + CleanupStack::Pop (stackResCnt); + + queryDialog->ListBox()->SetCurrentItemIndex(selIndex); + + TInt queryOk = queryDialog->RunLD (); + if ( queryOk == EAknSoftkeyOk) + { + if ( (selIndex>=0) && (selIndexiUserSelection = RTUserPrompt_OneShot; + + else if ( R_RTSECMGR_PROMPT_ONESHOT_NO==selIdxArray[selIndex]) + { + aPromptData->iUserSelection = RTUserPrompt_Denied; + ret = EPromptCancel; + } + + else if ( R_RTSECMGR_PROMPT_SESSION_YES==selIdxArray[selIndex]) + aPromptData->iUserSelection = RTUserPrompt_Session; + + else if ( R_RTSECMGR_PROMPT_SESSION_NO==selIdxArray[selIndex]) + { + aPromptData->iUserSelection = RTUserPrompt_SessionDenied; + ret = EPromptCancel; + } + + else if ( R_RTSECMGR_PROMPT_PERM_YES==selIdxArray[selIndex]) + aPromptData->iUserSelection = RTUserPrompt_Permanent; + + else if ( R_RTSECMGR_PROMPT_PERM_NO==selIdxArray[selIndex]) + { + aPromptData->iUserSelection = RTUserPrompt_PermDenied; + ret = EPromptCancel; + } + + else if ( R_RTSECMGR_ITEM_MORE_INFO == selIdxArray[selIndex]) + { + ret = MoreInfoL(*aPromptData); + } + } + } + else + { + ret = EPromptCancel; + } + + if ( headerText) + delete headerText; + + if ( body) + delete body; + + if ( oneShotOptionText) + delete oneShotOptionText; + + if ( sessionOptionText) + delete sessionOptionText; + + if ( permGrantOptionText) + delete permGrantOptionText; + + if ( oneShotDenyText) + delete oneShotDenyText; + + if ( sessionDenyOption) + delete sessionDenyOption; + + if ( permDenyOption) + delete permDenyOption; + + if (moreInfo) + delete moreInfo; + + CleanupStack::PopAndDestroy ();//settingPageText + CleanupStack::PopAndDestroy ();//selIdxArray + return ret; + } + + + +// --------------------------------------------------------------------------- +// Private default prompt handler implementation for advanced prompt UI +// --------------------------------------------------------------------------- +// +TInt CRTSecMgrScriptSession::PromptAdvanced(CPromptData* aPromptData) + { + TInt ret(EPromptOk); + TInt selIndex(PROMPT_SELIDX_ZERO); //R_RTSECMGR_PROMPT_ONESHOT_YES + TInt stackResCnt(0); + + HBufC* msgText(NULL); + HBufC* moreInfo(NULL); + TBuf<256> LinkText; + + if(((aPromptData->iPermission->PermName()).Compare(KNullDesC)) != KErrNone) + { + if(((aPromptData->iPermission->PermName()).Compare(_L("UserDataGroup"))) == KErrNone ) + { + msgText = iCoeEnv->AllocReadResourceLC (R_RTSECMGR_USERDATA_GROUP); + LinkText.Append(msgText->Des()); + ++stackResCnt; + } + else if(((aPromptData->iPermission->PermName()).Compare(_L("DeviceResourcesGroup"))) == KErrNone ) + { + msgText = iCoeEnv->AllocReadResourceLC (R_RTSECMGR_DEVICERESOURCES_GROUP); + LinkText.Append(msgText->Des()); + ++stackResCnt; + } + else if(((aPromptData->iPermission->PermName()).Compare(_L("NetworkGroup"))) == KErrNone ) + { + msgText = iCoeEnv->AllocReadResourceLC (R_RTSECMGR_NETWORK_GROUP); + LinkText.Append(msgText->Des()); + ++stackResCnt; + } + } + else if ((aPromptData->iPermission->Capability()iPermission->Capability()>ECapabilityTCB)) + { + TInt textResID(CAPABILITY_RESOURCEID[aPromptData->iPermission->Capability()]); + if(KErrNone!=textResID) + { + msgText = iCoeEnv->AllocReadResourceLC (textResID); + ++stackResCnt; + LinkText.Append(msgText->Des()); + } + } + + if(((aPromptData->iPermission->PermName()).Compare(KNullDesC)) != KErrNone) + { + moreInfo = iCoeEnv->AllocReadResourceLC (R_RTSECMGR_LINK_MORE_INFO); + ++stackResCnt; + + LinkText.Append(_L("\n\n")); + LinkText.Append(_L("")); + LinkText.Append(moreInfo->Des()); + LinkText.Append(_L("")); + } + + CAknMessageQueryDialog* queryDialog = new(ELeave) CAknMessageQueryDialog(); + CleanupStack::PushL (queryDialog); + ++stackResCnt; + + queryDialog->PrepareLC (R_ADVPROMPT_MESSAGE_QUERY); + + queryDialog->SetMessageTextL(LinkText); + HBufC* headerText(NULL); + CAknPopupHeadingPane* heading = queryDialog->QueryHeading (); + if ( heading) + { + heading->SetLayout (CAknPopupHeadingPane::EMessageQueryHeadingPane); + headerText = iCoeEnv->AllocReadResourceLC (R_RTSECMGR_PROMPT_QUERY_HEADER); + heading->SetTextL (headerText->Des ()); + ++stackResCnt; + } + + if(moreInfo) + { + TCallBack callback; + TCallbackParam callbackParam; + + callbackParam.iPromptData = aPromptData; + callbackParam.iRTSecMgrScriptSession = this; + callback.iFunction = LinkCallback; + callback.iPtr = &callbackParam; + + queryDialog->SetLink(callback); + } + + CleanupStack::Pop (stackResCnt); + TInt queryOk = queryDialog->RunLD (); + if ( queryOk == EAknSoftkeyYes) + { + if ( selIndex==0) + { + if ( aPromptData->iPermission->Default ()& RTUserPrompt_OneShot) + { + aPromptData->SetUserSelection(RTUserPrompt_OneShot); + } + else + if ( aPromptData->iPermission->Default ()& RTUserPrompt_Session) + { + aPromptData->SetUserSelection(RTUserPrompt_Session); + } + else + if ( aPromptData->iPermission->Default ()& RTUserPrompt_Permanent) + { + aPromptData->SetUserSelection(RTUserPrompt_Permanent); + } + } + else + { + aPromptData->SetUserSelection(RTUserPrompt_Denied); + } + } + else + { + ret = EPromptCancel; + } + + if ( headerText) + delete headerText; + + if ( msgText) + delete msgText; + + if ( moreInfo) + delete moreInfo; + + return ret; + } +// --------------------------------------------------------------------------- +// Pops up a new query dialog when the user clicks on more info. +// --------------------------------------------------------------------------- +// +TInt CRTSecMgrScriptSession::MoreInfoL(CPromptData& aPromptData) + { + TInt ret(EPromptOk); + TInt stackResCnt = 0; + HBufC *msgText = NULL; + HBufC *body = NULL; + TBuf message; + RCapabilityArray Caps; + + msgText = iCoeEnv->AllocReadResourceLC (R_RTSECMGR_MORE_INFO_QUERY); + ++stackResCnt; + message.Append(msgText->Des()); + + aPromptData.Permission()->Capabilitilites(Caps); + for(TInt i = 0; i != Caps.Count(); ++i) + { + TInt textResID(MOREINFO_CAP_RESOURCEID[Caps[i]]); + body = iCoeEnv->AllocReadResourceLC (textResID); + message.Append(_L("\n")); + message.Append(body->Des()); + if(body) + CleanupStack :: PopAndDestroy(body); + } + Caps.Close(); + + CAknMessageQueryDialog* queryDialog = new(ELeave) CAknMessageQueryDialog(); + CleanupStack::PushL (queryDialog); + ++stackResCnt; + + queryDialog->PrepareLC (R_MOREINFO_MESSAGE_QUERY); + + queryDialog->SetMessageTextL(message); + + HBufC* headerText(NULL); + CAknPopupHeadingPane* heading = queryDialog->QueryHeading (); + if ( heading) + { + heading->SetLayout (CAknPopupHeadingPane::EMessageQueryHeadingPane); + + if(((aPromptData.iPermission->PermName()).Compare(_L("UserDataGroup"))) == KErrNone ) + { + headerText = iCoeEnv->AllocReadResourceLC (R_RTSECMGR_MORE_INFO_HEADER_USERDATA); + } + else if(((aPromptData.iPermission->PermName()).Compare(_L("DeviceResourcesGroup"))) == KErrNone ) + { + headerText = iCoeEnv->AllocReadResourceLC (R_RTSECMGR_MORE_INFO_HEADER_DEVICERESOURCES); + } + else if(((aPromptData.iPermission->PermName()).Compare(_L("NetworkGroup"))) == KErrNone ) + { + headerText = iCoeEnv->AllocReadResourceLC (R_RTSECMGR_MORE_INFO_HEADER_NETWORK); + } + + // headerText = iCoeEnv->AllocReadResourceLC (R_RTSECMGR_PROMPT_QUERY_HEADER); + heading->SetTextL (headerText->Des ()); + ++stackResCnt; + } + + CleanupStack::Pop(stackResCnt); + + TInt queryOk = queryDialog->RunLD (); + + if(headerText) + delete headerText; + + if(msgText) + delete msgText; + + if(iUIPromptOption!=RTPROMPTUI_ADVANCED) + ret = Prompt(&aPromptData); + + return ret; + } + + +// --------------------------------------------------------------------------- +// Pops up a new query dialog when the user clicks on more info. +// --------------------------------------------------------------------------- +// +void CRTSecMgrScriptSession::PromptCostL() + { + AddResourceFiles(); + TInt stackResCnt = 0; + HBufC *msgText = NULL; + TBuf message; + RCapabilityArray Caps; + + + msgText = iCoeEnv->AllocReadResourceLC (R_RTSECMGR_COST_INFO); + ++stackResCnt; + message.Append(msgText->Des()); + + CAknMessageQueryDialog* queryDialog = new(ELeave) CAknMessageQueryDialog(); + CleanupStack::PushL (queryDialog); + ++stackResCnt; + + queryDialog->PrepareLC (R_MOREINFO_MESSAGE_QUERY); + + queryDialog->SetMessageTextL(message); + + HBufC* headerText(NULL); + CAknPopupHeadingPane* heading = queryDialog->QueryHeading (); + if ( heading) + { + heading->SetLayout (CAknPopupHeadingPane::EMessageQueryHeadingPane); + headerText = iCoeEnv->AllocReadResourceLC (R_RTSECMGR_PROMPT_QUERY_HEADER); + heading->SetTextL (headerText->Des ()); + ++stackResCnt; + } + + CleanupStack::Pop(stackResCnt); + + TInt queryOk = queryDialog->RunLD (); + + if(headerText) + delete headerText; + + if(msgText) + delete msgText; + CloseResourceFiles(); + } +// --------------------------------------------------------------------------- +// Handles the prompt option chosen by the user through default prompt UI +// --------------------------------------------------------------------------- +// +void CRTSecMgrScriptSession::HandleGrantChosen(CPromptData* aPromptData, + TCapabilityBitSet aCapBitSet, TCapabilityBitSet& aAllowedCaps, + TBool& aIsPermGrantModified) + { + TUserPromptOption optionChosen = aPromptData->iUserSelection; + + if ( RTUserPrompt_OneShot==optionChosen) + { + _sessionInfo.AllowedCaps &= ~aCapBitSet; + aAllowedCaps = aCapBitSet; + } + else + if ( RTUserPrompt_Denied==optionChosen) //one-shot denied + { + aAllowedCaps &= ~aCapBitSet; + _sessionInfo.AllowedCaps &= ~aCapBitSet; //disable in session pattern too... + } + else + if ( RTUserPrompt_Session==optionChosen) + { + _sessionInfo.AllowedCaps |= aCapBitSet;//Enable in _sessionInfo.Allowed & allowed + aAllowedCaps = aCapBitSet; + } + else + if ( RTUserPrompt_SessionDenied==optionChosen) //session denied + { + aAllowedCaps &= ~aCapBitSet; + _sessionInfo.AllowedCaps &= ~aCapBitSet; //disable in session pattern too... + _sessionInfo.DeniedCaps |= aCapBitSet; //enable denied in session bit + } + else + if ( RTUserPrompt_Permanent==optionChosen) + { + aIsPermGrantModified = ETrue; //to commit the change to persistent store + _sessionInfo.AllowedCaps |= aCapBitSet; + aAllowedCaps = aCapBitSet; + iPermBits |= aCapBitSet; + iDeniedBits &= ~aCapBitSet; //just in case.... + } + else + if ( RTUserPrompt_PermDenied==optionChosen) //permanent denied + { + aIsPermGrantModified = ETrue; + aAllowedCaps &= ~aCapBitSet; + _sessionInfo.AllowedCaps &= ~aCapBitSet; //disable in session pattern too... + _sessionInfo.DeniedCaps |= aCapBitSet; //enable denied in session bit + iPermBits &= ~aCapBitSet; //disable in perm bits + iDeniedBits |= aCapBitSet; //enable in perm denied bit pattern + //Commit the change to persistent store... + } + } + +// --------------------------------------------------------------------------- +// Updates blanket permission data +// --------------------------------------------------------------------------- +// +void CRTSecMgrScriptSession::UpdatePermGrant() + { + (*iSubSessionProxy)->UpdatePermGrant (iScript->ScriptID (), iPermBits, + iDeniedBits); + } + +// +// Conversion utility to convert a single 32-bit value to the list of +// capabilities (RArray) +// +void CRTSecMgrScriptSession::BuildCapsL(TCapabilityBitSet aCapBitSet, + RCapabilityArray& aInOutTCapList) + { + TInt idx(KErrNotFound); + + while (++idx!=KCapabilitySize) + { + TCapabilityBitSet temp(KDefaultEnableBit); + temp = temp << idx; + if ( aCapBitSet & temp) + aInOutTCapList.AppendL ((TCapability)(idx+1)); + } + } + +// +// Conversion utility to generate a single 32-bit value from a list of +// capabilities (RArray) +// +void CRTSecMgrScriptSession::AddCapability(TCapabilityBitSet& aInOutCapBitSet, + TCapability aCapToSet) + { + if ( aCapToSet>=0) + aInOutCapBitSet = aInOutCapBitSet | (LOWBIT << aCapToSet); + } + +/* + * Closes the script sub-session + * + */ +void CRTSecMgrScriptSession::Close() + { + if ( iResourceOffset && iCoeEnv) + iCoeEnv->DeleteResourceFile (iResourceOffset); + + if ( iScript) + { + delete iScript; + iScript = NULL; + } + + if ( iSubSessionProxy) + { + delete iSubSessionProxy; + iSubSessionProxy = NULL; + } + } + +//--------------------------------------------------------------------------- +// Callback function called from moreinfo link in advanced prompt +//--------------------------------------------------------------------------- +TInt CRTSecMgrScriptSession::LinkCallback(TAny * aCallbackParam) + { + TCallbackParam *cb = (TCallbackParam*)aCallbackParam; + (cb->iRTSecMgrScriptSession)->MoreInfoL(*(cb->iPromptData)); + return KErrNone; + } diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerclient/src/rtsecmgrtrustinfo.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/rtsecuritymanagerclient/src/rtsecmgrtrustinfo.cpp Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,68 @@ +/* +* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Defines CTrustInfo class + * +*/ + + + + + + +#include + +// --------------------------------------------------------------------------- +// Defintiion of default private constructor +// --------------------------------------------------------------------------- +// +CTrustInfo::CTrustInfo() +{ +} + +// --------------------------------------------------------------------------- +// Definition of second phase constructor +// +// Constructs a CTrustInfo instance +// --------------------------------------------------------------------------- +// +EXPORT_C CTrustInfo* CTrustInfo::NewL() +{ + CTrustInfo* self = CTrustInfo::NewLC(); + CleanupStack::Pop(self); + return self; +} + +// --------------------------------------------------------------------------- +// Definition of second phase constructor +// +// Constructs a CTrustInfo instance and leaves the created instance +// on the cleanupstack +// --------------------------------------------------------------------------- +// +EXPORT_C CTrustInfo* CTrustInfo::NewLC() +{ + CTrustInfo* self = new (ELeave) CTrustInfo(); + CleanupStack::PushL(self); + return self; +} + +// --------------------------------------------------------------------------- +// Destructor +// +// --------------------------------------------------------------------------- +// +EXPORT_C CTrustInfo::~CTrustInfo() +{ +} + diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerserver/group/RTSecMgrServer.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/rtsecuritymanagerserver/group/RTSecMgrServer.mmp Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,78 @@ +/* +* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + + + +#include + +TARGET rtsecmgrserver.exe +TARGETTYPE exe + +TARGETPATH sys/bin +// Since this is an exe with no alternate implementations, +// just use same UID for both UID2 and UID3 +UID 0x1020507E 0x2000F847 +VENDORID VID_DEFAULT + +CAPABILITY CAP_SERVER + +VERSION 10.1 +paged + +SOURCEPATH ../src +SOURCE rtsecmgrserver.cpp +SOURCE rtsecmgrserverstartUp.cpp +SOURCE rtsecmgrserversession.cpp +SOURCE rtsecmgrpolicyparser.cpp +SOURCE rtsecmgrclientapi.cpp +SOURCE rtsecmgrprotectiondomain.cpp +SOURCE rtsecmgrpolicy.cpp +SOURCE rtsecmgrpolicymanager.cpp +SOURCE rtsecmgrscriptmanager.cpp +SOURCE rtsecmgrstore.cpp + +USERINCLUDE ../inc/ +USERINCLUDE ../../inc/ + +// This is a SYSTEMINCLUDE macro containing the middleware +// layer specific include directories +MW_LAYER_SYSTEMINCLUDE + +//MACRO RTSECMGR_TRACE + +LIBRARY euser.lib +LIBRARY efsrv.lib +LIBRARY xmlparser.lib +LIBRARY CharConv.lib +LIBRARY xmldom.lib +LIBRARY inetprotutil.lib +LIBRARY estor.lib +LIBRARY Flogger.lib +LIBRARY rtsecmgrutil.lib +LIBRARY edbms.lib +LIBRARY bafl.lib +//LIBRARY centralrepository.lib +LIBRARY PlatformEnv.lib + + + + + diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerserver/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/rtsecuritymanagerserver/group/bld.inf Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,28 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + + +#include +PRJ_EXPORTS +//../data/backup_registration.xml /epoc32/data/z/private/2000F847/backup_registration.xml + +PRJ_MMPFILES +rtsecmgrserver.mmp diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerserver/inc/rtsecmgrdata.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/rtsecuritymanagerserver/inc/rtsecmgrdata.h Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,36 @@ +/* +* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Defines security manager server side data strucutures + * +*/ + + + + + + +#ifndef _RTSECMGRDATA_H +#define _RTSECMGRDATA_H + +#include "rtsecmgrprotectiondomain.h" +#include "rtsecmgrpolicy.h" +#include + +typedef RPointerArray RProtectionDomains; +typedef RPointerArray RTrustArray; +typedef RPointerArray RPolicies; + +#endif //_RTSECMGRDATA_H + +// End of file diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerserver/inc/rtsecmgrpolicy.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/rtsecuritymanagerserver/inc/rtsecmgrpolicy.h Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,219 @@ +/* +* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Defines security policy data structure + * +*/ + + + + + + +#ifndef C_RTSECMGRPOLICY_H +#define C_RTSECMGRPOLICY_H + +#include +#include +#include +#include "rtsecmgrdef.h" +#include "rtsecmgrprotectiondomain.h" + +class CProtectionDomain; + +typedef RPointerArray RProtectionDomains; +typedef RPointerArray RAliasGroup; + +/* + * Represents a security and trust policy mapping. This class maps + * the policyID and its associated security and trust policies. + * + * A CPolicy instance has list of protection domains specified + * in the security access policy and list of trust information. The + * security access policy and trust policy are associated with a policy + * identifier + * + * @see CProtectionDomain + * @see CPermission + * + * @exe rtsecmgrserver.exe + */ +NONSHARABLE_CLASS(CPolicy) : public CBase + { +public: + + /** + * Two-phased constructor + * + * Constructs a CPolicy instance from an input serialization + * source + * + * @param aPolicyID TPolicyID policy identifier + * @param aSource RStoreReadStream& input source + * + * @return CPolicy * pointer to an instance of CPolicy + */ + static CPolicy* NewL(TPolicyID aPolicyID, RStoreReadStream& aSource); + + /** + * Two-phased constructor + * + * Constructs a CPolicy instance from an input serialization + * source and leaves the created instance on the cleanupstack + * + * @param aPolicyID TPolicyID policy identifier + * @param aSource RStoreReadStream& input source + * + * @return CPolicy * pointer to an instance of CPolicy + */ + static CPolicy* NewLC(TPolicyID aPolicyID, RStoreReadStream& aSource); + + /** + * Two-phased constructor + * + * Constructs a CPolicy instance and initializes the policy identifier + * and the security access policy domain data + * + * @param aPolicyID TPolicyID policy identifier + * @param aProtectionDomains RProtectionDomains& input security protection domains + * @param aAliasGroup RAliasGroup& input capability grouping + * + * @return CPolicy * pointer to an instance of CPolicy + */ + static CPolicy* NewL(TPolicyID aPolicyID, const RProtectionDomains& aProtectionDomains, RAliasGroup& aAliasGroup); + + /** + * Two-phased constructor + * + * Constructs a CPolicy instance and initializes the policy identifier + * and the security access policy domain data. This method leaves the + * created instance on the cleanupstack. + * + * @param aPolicyID TPolicyID policy identifier + * @param aProtectionDomains RProtectionDomains& input security protection domains + * @param aAliasGroup RAliasGroup& input capability grouping + * + * @return CPolicy * pointer to an instance of CPolicy + */ + static CPolicy* NewLC(TPolicyID aPolicyID, const RProtectionDomains& aProtectionDomains, RAliasGroup& aAliasGroup); + + /** + * Internalizes CPolicy data members from the input readable source + * + * @param aSource RStoreReadStream& Input readable source + * + */ + void InternalizeL(RStoreReadStream& aSource); + + /** + * Gets a protection domain instance when a valid domain + * name is passed. + * + * @param aDomainName const TDesC& name of the protection domain + * + * @return CProtectionDomain* valid protection domain instance; NULL if + * domain name is invalid or does not exist + * + */ + CProtectionDomain* ProtectionDomain(const TDesC& aDomainName) const; + + /** + * Gets policy identifier of the security and trust policy + * data + * + * @return TPolicyID policy identifier + * + */ + inline TPolicyID PolicyID() const; + + /** + * Gets the list of protection domains associated with + * the policy identifier + * + * @return const RProtectionDomains& protection domain list + * + */ + inline const RProtectionDomains& ProtectionDomain() const; + + /** + * virtual destructor + * + */ + inline ~CPolicy(); + + /** + * Gets a alias group instance when a valid alias group + * name is passed. + * + * @param aAliasName const TDesC& name of the alias group + * + * @return CPermission* valid alias group instance; NULL if + * alias group name is invalid or does not exist + * + */ + CPermission* AliasGroup(const TDesC& aAliasName) const; + + /** + * Gets the list of alias groups associated with + * the policy identifier + * + * @return const RAliasGroup& alias group list + * + */ + inline const RAliasGroup& AliasGroup() const; + +private: + /* + * private default constructor + */ + CPolicy(); + + /* + * Overloaded constructor to initialise policy identifier + * + */ + CPolicy(TPolicyID aPolicyID); + + /* + * Two-phase constructor + * + * Initializes policy identifier, security protection domains and alias groupings + * + */ + void ConstructL(const RProtectionDomains& aAccessPolicy, RAliasGroup& aAliasGroup); + +private: + /* + * Policy identifier + */ + TPolicyID iPolicyID; + + /* + * Array of protection domains + * + * Own. + */ + RProtectionDomains iAccessPolicy; + + /* + * Array of alias groupings + * + * Own. + */ + RAliasGroup iAliasGroup; + }; + +#include "rtsecmgrpolicy.inl" + +#endif //C_RTSECMGRPOLICY_H + diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerserver/inc/rtsecmgrpolicy.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/rtsecuritymanagerserver/inc/rtsecmgrpolicy.inl Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,67 @@ +/* +* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Defines security policy data structure inline functions + * +*/ + + + + + + +/** + * Gets policy identifier of the security and trust policy + * data + * + * @return TPolicyID policy identifier + * + */ +inline TPolicyID CPolicy::PolicyID() const + { + return iPolicyID; + } + +/** + * Gets the list of protection domains associated with + * the policy identifier + * + * @return const RProtectionDomains& protection domain list + * + */ +inline const RProtectionDomains& CPolicy::ProtectionDomain() const + { + return iAccessPolicy; + } + +/** + * virtual destructor + * + */ +inline CPolicy::~CPolicy() + { + iAccessPolicy.ResetAndDestroy (); + iAliasGroup.ResetAndDestroy(); + } + +/** + * Gets the list of alias group associated with + * the policy identifier + * + * @return const RAliasGroup& alias group list + * + */ +inline const RAliasGroup& CPolicy::AliasGroup() const + { + return iAliasGroup; + } diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerserver/inc/rtsecmgrpolicymanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/rtsecuritymanagerserver/inc/rtsecmgrpolicymanager.h Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,164 @@ +/* +* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Definition of policy manager class + * +*/ + + + + + + +#ifndef C_RTSECMGRPOLICYMANAGER_H +#define C_RTSECMGRPOLICYMANAGER_H + +#include +#include +#include +#include "rtsecmgrdef.h" +#include "rtsecmgrpolicy.h" +#include "rtsecmgrdata.h" +#include "rtsecmgrstore.h" + +/* + * Manages set of security and trust policies. + * + * CPolicyManager provides management functionalities to + * - register a policy + * - un-register a policy + * - restore policies from the persistent storage + * + * CPolicyManager interacts with CSecMgrStore which abstracts the + * underlying persistent storage from policy users + * + * @see CSecMgrStore + * @see CPolicy + * + * @exe rtsecmgrserver.exe + */ +NONSHARABLE_CLASS(CPolicyManager) : public CBase + { +public: + + /** + * Two-phased constructor + * + * Constructs a CPolicyManager instance + * + * @param aSecMgrDB CSecMgrStore* pointer to security manager storage type + * + * @return CPolicyManager* pointer to an instance of CPolicyManager + */ + static CPolicyManager* NewL(CSecMgrStore* aSecMgrDB); + + /** + * Two-phased constructor + * + * Constructs a CPolicyManager instance and leaves the created + * instance on the cleanupstack + * + * @param aSecMgrDB CSecMgrStore* pointer to security manager storage type + * + * @return CPolicyManager* pointer to an instance of CPolicyManager + */ + static CPolicyManager* NewLC(CSecMgrStore* aSecMgrDB); + + /** + * Destructor + * + * Cleanups the internal cache for policy data + */ + inline ~CPolicyManager(); + + /** + * Registers a new policy data. + * + * This method in turn updates the security manager + * persistent store with new policy data + * + * @param aPolicy const CPolicy& Reference to policy data + * + */ + void RegisterPolicyL(const CPolicy& aPolicy); + + /** + * Un-registers an existing policy data + * + * This method in turn removes the policy data from the + * security manager persistent store + * + * @param aPolicyID TPolicyID Policy identifier + * + * @return KErrNone if unregistration is successful; Otherwise one of + * system wide error codes + */ + TInt UnRegisterPolicy(TPolicyID aPolicyID); + + /** + * Restores policy data from security manager persistent store. + * + * The internal cache of policy data maintained by this class + * gets updated + * + */ + inline void RestorePoliciesL(); + + /** + * Gets the policy data associated with the policy + * identifier + * + * @param aPolicyID TPolicyID policy identifier + * + * @return CPolicy * pointer to an instance of CPolicy associated + * with policy identifier; Returns NULL if policy identifier is not valid + */ + CPolicy* Policy(TPolicyID aPolicyID) const; + + /** + * Checks if a policy data is stored with a policy identifier + * + * @param aPolicyID TPolicyID policy identifier + * + * @return TBool ETrue if policy associated with policy identifier + * exists; Otherwise EFalse + * + */ + TBool HasPolicy(TPolicyID aPolicyID) const; + + /** + * Gets the number of registered policy data + * + * @return TInt number of registered policy data + */ + inline TInt Count() const; +private: + + /** + * Overloaded constructor + * + */ + inline CPolicyManager(CSecMgrStore* aSecMgrDB); +private: + + //Array of policy data + RPolicies iPolicies; + + //Reference to security manager persistent storage + CSecMgrStore* iSecMgrDB; + }; + +#include "rtsecmgrpolicymanager.inl" + +#endif //C_RTSECMGRPOLICYMANAGER_H + diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerserver/inc/rtsecmgrpolicymanager.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/rtsecuritymanagerserver/inc/rtsecmgrpolicymanager.inl Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,43 @@ +/* +* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Definition of policy manager inline functions + * +*/ + + + + + + + +inline CPolicyManager::CPolicyManager(CSecMgrStore* aSecMgrDB) : + iSecMgrDB(aSecMgrDB) + { + } + +inline CPolicyManager::~CPolicyManager() + { + iPolicies.ResetAndDestroy (); + } + +inline void CPolicyManager::RestorePoliciesL() + { + if ( iSecMgrDB) + iSecMgrDB->RestorePoliciesL (iPolicies); + } + +inline TInt CPolicyManager::Count() const + { + return iPolicies.Count (); + } \ No newline at end of file diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerserver/inc/rtsecmgrpolicyparser.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/rtsecuritymanagerserver/inc/rtsecmgrpolicyparser.h Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,282 @@ +/* +* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Utility XML parser to parse trust and access policy files + * +*/ + + + + + + +#ifndef C_RTSECMGRPOLICYPARSER_H +#define C_RTSECMGRPOLICYPARSER_H + +#include +#include +#include +#include +#include "rtsecmgrdata.h" +#include "rtsecmgrcommondef.h" + +/* + * Enumerations for policy parsing status codes + * + */ +enum TParserErrCode +{ + EErrNone = 0, //zero for success , equivalent to KErrNone of symbian + EErrInvalidDocNode = KErrXMLBase, + EErrInvalidRootNode = EErrInvalidDocNode - 1, + EErrNoPolicyInfo = EErrInvalidRootNode - 1, + EErrInvalidDomainName = EErrNoPolicyInfo - 1, + EErrRepeatedDomainTag = EErrInvalidDomainName - 1, + EErrJunkContent = EErrRepeatedDomainTag - 1, + EErrNoDefaultCondition = EErrJunkContent - 1, + EErrInvalidFormat = EErrNoDefaultCondition - 1, + EErrInvalidCapability = EErrInvalidFormat - 1, + EErrInvalidPermission = EErrInvalidCapability - 1, + EErrRepeatedCaps = EErrInvalidPermission - 1, + EErrRepeatedAliasTag = EErrRepeatedCaps - 1, + EErrInvalidAliasName = EErrRepeatedAliasTag - 1, + EErrMisplacedAlias = EErrInvalidAliasName +}; + +/* + * Abstracts policy parsing logic. + * + * Security access policy and trust policy are represented in + * XML format. CPolicyParser uses native XML parser to parse + * the policy files. + * + * + * @see MMDXMLParserObserver + * @see CMDXMLParser + * @see CMDXMLElement + * @see CProtectionDomain + * @see CTrustInfo + * @see TUserPromptOption + * + * @exe rtsecmgrserver.exe + */ +NONSHARABLE_CLASS(CPolicyParser) : public CBase, public MMDXMLParserObserver +{ +public: + + /** + * Two-phased constructor + * + * Constructs a CPolicyParser instance + * + * @return CPolicyParser* pointer to an instance of CPolicyParser + */ + static CPolicyParser* NewL(); + + /** + * Two-phased constructor + * + * Constructs a CPolicyParser instance and leaves the created instance + * on the cleanupstack + * + * @return CPolicyParser* pointer to an instance of CPolicyParser + */ + static CPolicyParser* NewLC(); + + + /** + * Destructor + * + */ + ~CPolicyParser(); + + /** + * Parses the security access policy file and populates + * the input protection domain array + * + * @param aSecPolicy RFile& Handle to security policy file + * @param aPolicyInfo RProtectionDomains& input array of protection domains + * + * @return EErrSuccess if there is no parsing error; Otherwise one of + * error codes defined in TParserErrCode + * + * @see TParserErrCode + */ + TInt GetPolicyInfo(RFile& aSecPolicy, RProtectionDomains& aPolicyInfo, RAliasGroup& aAliasGroup); + + /** + * Callback offered by MMDXMLParserObserver to notify the calling client that the XML + * parsing is completed and DOM data structure is available for + * navigation + * + * @see MMDXMLParserObserver + * + * This identifies whether the policy file is in the proper format + * if not in proper format, parsing errors as defined in TParserErrCode are thrown + * @see TParserErrCode + */ + void ParseFileCompleteL(); +private: + + //private default constructor + inline CPolicyParser(); + + /** + * Gets the list of capability nodes provided the parent domain + * node + * + */ + TInt GetCapsNode(CMDXMLElement* aParentDomainNode, + RPointerArray& aCapNodes, + const TDesC& aNodeName); + + /** + * Overloaded version to get the list of capability nodes provided the parent domain + * node + * + */ + CMDXMLElement* GetCapsNode(CMDXMLElement* aParentDomainNode, const TDesC& aNodeName); + + + /** + * Populates the permission set data structure with capability + * information provided the parent capability node + * + * @return EErrSuccess if there is no parsing error; Otherwise one of these error codes + * @return EErrRepeatedCaps if there are capabilities specified more than once in same domain + * @return EErrInvalidCapability if the capability string is invalid + * + * @see TParserErrCode + * + */ + TInt GetCapabilities(CMDXMLElement* aParentNode, + CPermissionSet& aCapInfo, + TUserPromptOption aUpOpt=RTUserPrompt_UnDefined, + TBool aUGCaps=EFalse, + TUserPromptOption aDefUpOpt=RTUserPrompt_UnDefined); + + /** + * Gets the user prompt option provided the parent user node + * + * @return EErrSuccess if there is no parsing error; Otherwise one of these error codes + * @return EErrInvalidPermission if prompt sessions specified are invalid + */ + TInt GetConditions(CMDXMLElement* aParentNode, TUserPromptOption& aUserPromptOpt); + + /** + * Gets the default user prompt option provided the parent user node + * + */ + TUserPromptOption GetDefaultCondition(CMDXMLElement* aParentNode); + + /** + * Utility to convert the stringified user prompt option text to + * TCapability enumeration + * + * @see TCapability + * + */ + TCapability GetCapability(const TDesC& aUserPromptOpt); + + /** + * Utility to convert the stringified user prompt option to + * TUserPromptOption structure + * + */ + TUserPromptOption GetUserPromptOption(const TDesC& aUserPromptOpt); + + /** + * Finds out if a domain node is present with the passed domain name + * + */ + TBool isDomainPresent(const TDesC& aDomainName); + + /** + * Utility method to check if a capability is already part of + * unconditional permissions + * + */ + TBool IsPresent(const CPermissionSet& aCapInfo, TCapability aCap); + + /** + * Utility method to check if a capability is already part of user + * grantable permissions + * + */ + TBool IsUserGrantPresent(const CPermissionSet& aCapInfo, TCapability aCap); + + + /** + * Populates the permission set data structure with capability + * information provided the parent capability node + * + * @return EErrSuccess if there is no parsing error; Otherwise one of these error codes + * @return EErrRepeatedCaps if there are capabilities specified more than once in same domain + * @return EErrInvalidCapability if the capability string is invalid + * + * @see TParserErrCode + * + * This is similar to GetCapabilities method except that this retrives the capability information for the Group + */ + TInt GetCapabilitiesForGroup(CMDXMLElement* aParentNode, + CPermissionSet& aCapInfo, + CPermission& aAliasInfo, + TUserPromptOption aUpOpt=RTUserPrompt_UnDefined, + TBool aUGCaps=EFalse, + TUserPromptOption aDefUpOpt=RTUserPrompt_UnDefined); + + /** + * Finds out if the passed capability is present in alias group + * + */ + TBool IsCapsAliasPresent(const CPermission& aAliasInfo, TCapability aCap); + + /** + * Finds out if a domain node is present with the passed domain name + * + */ + TBool isAliasPresent(const TDesC& aAliasName); + + +private: + + //reference to undelying native symbian XML parser + CMDXMLParser* iDomParser; + + //Completion status of parsing request made to XML parser. + TRequestStatus* iStatus; + CActiveSchedulerWait iWaitScheduler; + + //list of domains declared in the security access policy + RProtectionDomains iPolicyInfo; + + //list of trust information specified in the trust policy file + RTrustArray iTrustInfo; + + //variable to initiate parsing for trust policy file + TBool isTrustInfo; + + //status code to store last parsing error + TInt iLastError; + + + //Array of TPermissions - used for Capability Grouping + RAliasGroup iAliasGroup; + +}; + +#endif //C_RTSECMGRPOLICYPARSER_H + +// End of file + + diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerserver/inc/rtsecmgrprotectiondomain.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/rtsecuritymanagerserver/inc/rtsecmgrprotectiondomain.h Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,176 @@ +/* +* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Definition of security protection domain + * +*/ + + + + + + +#ifndef C_RTSECMGRPROTECTIONDOMAIN_H +#define C_RTSECMGRPROTECTIONDOMAIN_H + +#include +#include +#include +#include "rtsecmgrdef.h" + +/* + * Models a protection domain. A protection domain is part of a security policy. + * A security policy could have more than one protection domain. + * + * Every protection domain has a name, list of unconditionally allowed permissions + * and set of user grantable permissions. + * + * @see CPermissionSet + * + * @exe rtsecmgrserver.exe + * + */ +NONSHARABLE_CLASS(CProtectionDomain) : public CBase + { +public: + + /** + * Two-phased constructor + * + * Constructs a CProtectionDomain instance + * + * @return CProtectionDomain* pointer to an instance of CProtectionDomain + */ + static CProtectionDomain* NewL(); + + /** + * Two-phased constructor + * + * Constructs a CProtectionDomain instance and leaves the created instance + * on the cleanupstack + * + * @return CProtectionDomain* pointer to an instance of CProtectionDomain + */ + static CProtectionDomain* NewLC(); + + /** + * Two-phased constructor + * + * Constructs a CProtectionDomain instance from the input + * read source + * + * @param aSource RStoreReadStream& Input readable source + * + * @return CProtectionDomain* pointer to an instance of CProtectionDomain + */ + static CProtectionDomain* NewL(RStoreReadStream& aSource); + + /** + * Two-phased constructor + * + * Constructs a CProtectionDomain instance from the input + * read source and leaves the created instance on the cleanup + * stack + * + * @param aSource RStoreReadStream& Input readable source + * + * @return CProtectionDomain* pointer to an instance of CProtectionDomain + */ + static CProtectionDomain* NewLC(RStoreReadStream& aSource); + + /** + * Destructor + * + * Performs clean-up of domain name descriptor and + * permission set + * + */ + ~CProtectionDomain(); + + /** + * Gets underlying permission set instance + * + * @return const CPermissionSet& permission set instance + * + */ + inline const CPermissionSet& PermSet() const; + + /** + * Gets domain name + * + * @return const TDesC& domain name + * + */ + inline const TDesC& DomainName() const; + + /** + * Sets domain name + * + * @param aDomainName const TDesC& input domain name string + */ + inline void SetDomainName(const TDesC& aDomainName); + + /** + * Sets permission set + * + * @param aPermissionSet CPermissionSet* input permission set + */ + inline void SetCapInfo(CPermissionSet* aPermissionSet); + + /** + * Externalises CProtectionDomain data to writable output stream + * + * @param aSink RStoreWriteStream& writable output stream + */ + void ExternalizeL(RStoreWriteStream& aSink) const; + + /** + * Internalises CProtectionDomain data from readble input stream + * + * @param aSource RStoreReadStream& readble input stream + */ + void InternalizeL(RStoreReadStream& aSource); + +private: + /** + * Default private constructor + * + */ + inline CProtectionDomain(); + + /** + * Two phased constructor + * + */ + inline void ConstructL(); + +private: + /* + * Domain name + * + * Own. + */ + HBufC* iDomain; + + /* + * Permissionset instance + * + * Own. + */ + CPermissionSet* iPermSet; + }; + +#include "rtsecmgrprotectiondomain.inl" + +#endif //C_RTSECMGRPROTECTIONDOMAIN_H + diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerserver/inc/rtsecmgrprotectiondomain.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/rtsecuritymanagerserver/inc/rtsecmgrprotectiondomain.inl Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,96 @@ +/* +* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Definition of security protection domain inline functions + * +*/ + + + + + + + +/** + * Default private constructor + * + */ +inline CProtectionDomain::CProtectionDomain() : + iDomain(NULL) + { + } + +/** + * Two phased constructor + * + */ +inline void CProtectionDomain::ConstructL() + { + iPermSet = CPermissionSet::NewL (); + } + +/** + * Gets underlying permission set instance + * + * @return const CPermissionSet& permission set instance + * + */ +inline const CPermissionSet& CProtectionDomain::PermSet() const + { + return *iPermSet; + } + +/** + * Gets domain name + * + * @return const TDesC& domain name + * + */ +inline const TDesC& CProtectionDomain::DomainName() const + { + if ( iDomain) + return *iDomain; + else + return KNullDesC (); + } + +/** + * Sets domain name + * + * @param aDomainName const TDesC& input domain name string + */ +inline void CProtectionDomain::SetDomainName(const TDesC& aDomain) + { + if ( iDomain) + { + delete iDomain; + iDomain = NULL; + } + + iDomain = aDomain.AllocL (); + } + +/** + * Sets permission set + * + * @param aPermissionSet CPermissionSet* input permission set + */ +inline void CProtectionDomain::SetCapInfo(CPermissionSet* aPermissionSet) + { + if ( iPermSet) + { + delete iPermSet; + } + + iPermSet = aPermissionSet; + } \ No newline at end of file diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerserver/inc/rtsecmgrscriptmanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/rtsecuritymanagerserver/inc/rtsecmgrscriptmanager.h Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,203 @@ +/* +* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Definition of script manager class + * +*/ + + + + + + +#ifndef C_RTSECMGRSCRIPTMANAGER_H +#define C_RTSECMGRSCRIPTMANAGER_H + +#include +#include +#include +#include "rtsecmgrdef.h" +#include "rtsecmgrstore.h" + +//Forward declarations +class CSecMgrStore; +class CPolicyManager; + +typedef RPointerArray RScripts; + +/* + * Models the cache to maintain the list of registered script + * data. Provides operations to register script, de-register + * script, query script related information. + * + * This class abstracts the underlying persistent storage to + * store script related data. + * + * @see CSecMgrStore + * @see CPolicyManager + * @see CScript + * + * @exe rtsecmgrserver.exe + */ +class CScriptManager : public CBase + { +public: + /** + * Two-phased constructor + * + * Constructs a CScriptManager instance + * + * @param aSecMgrDB CSecMgrStore* reference to security manager store + * @param aPolicyMgr CPolicyManager* reference to policymanager instance + * + * @return CScriptManager* pointer to an instance of CScriptManager + */ + static CScriptManager* NewL(CSecMgrStore* aSecMgrDB, + CPolicyManager* aPolicyMgr); + + /** + * Two-phased constructor + * + * Constructs a CScriptManager instance and leaves the created instance + * on the cleanupstack + * + * @param aSecMgrDB CSecMgrStore* reference to security manager store + * @param aPolicyMgr CPolicyManager* reference to policymanager instance + * + * @return CScriptManager* pointer to an instance of CScriptManager + */ + static CScriptManager* NewLC(CSecMgrStore* aSecMgrDB, + CPolicyManager* aPolicyMgr); + + /** + * Destructor + * + * Performs clean-up of transient script store cache + * + */ + virtual ~CScriptManager(); + + /** + * Registers a script based on a policy identified by + * input policy identifier with security manager + * + * @param aPolicyID TPolicyID input policy identifier of the script + * + * @return TExecutableID script identifier of the registered script + */ + TExecutableID + RegisterScript(TPolicyID aPolicyID); + + /** + * Registers a script with hashvalue based on a policy identified by + * input policy identifier with security manager. + * + * @param aPolicyID TPolicyID input policy identifier of the script + * @param aHashValue const TDesC& hashValue of the script + * + * @return TExecutableID script identifier of the registered script + */ + TExecutableID + RegisterScript(TPolicyID aPolicyID, const TDesC& aHashValue); + + /** + * Un-Registers a script + * + * @param aExecID script identifier of the registered script + * @param aPolicyID policy identifier passed while registering script + * + */ + void UnRegisterScriptL(TExecutableID aExecID, TPolicyID aPolicyID); + + /** + * Gets underlying script data + * + * @param aScriptInfo CScript& output script data + * + * @return KErrNone if script data could be returned; Otherwise one of + * system error codes + * + */ + TInt ScriptInfo(CScript& aScriptInfo); + + /** + * Updates permanently granted or denied permission data + * of the script + * + * @param aExecID TExecutableID script identifier + * @param aPermGrant TPermGrant permanently allowed permission + * @param aPermDenied TPermGrant permanently denied permission + * + */ + void UpdatePermGrantL(TExecutableID aExecID, TPermGrant aPermGrant, + TPermGrant aPermDenied); + + /** + * Gets the script file name + * + * @param aExecID TExecutableID script identifier + * @param TDes& Output file name + * + * @return KErrNone if operation is successful; Otherwise one of + * system wide error codes + * + */ + TInt GetScriptFile(TExecutableID aExecID, TDes& aScriptFile); + +private: + + /** + * Overloaded constructor to initialise internal + * state of CScriptManager + * + */ + inline CScriptManager(CSecMgrStore* aSecMgrDB, CPolicyManager* aPolicyMgr) : + iSecMgrDB(aSecMgrDB), iPolicyMgr(aPolicyMgr) + { + } + + /** + * Two-phased constructor + * + */ + void ConstructL(); + + /** + * Generates a new script identifier + * + */ + inline TExecutableID GetID() + { + if ( --iID > 0) + return iID; + + return (TExecutableID)KSecurityServerUid2Int; + } + +private: + + //list of script data structure + RScripts iScripts; + + //reference to security manager store + CSecMgrStore* iSecMgrDB; + + //reference to policymanager instance + CPolicyManager* iPolicyMgr; + + //Last generated script identifier + TExecutableID iID; + }; + +#endif //C_RTSECMGRSCRIPTMANAGER_H + diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerserver/inc/rtsecmgrserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/rtsecuritymanagerserver/inc/rtsecmgrserver.h Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,386 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Core Runtime Security Manager Server Class + * +*/ + + + + + + + +#ifndef C_CRTSECMGRSERVER_H +#define C_CRTSECMGRSERVER_H + +#include +#include "rtsecmgrserverdef.h" +#include "rtsecmgrpolicy.h" +#include "rtsecmgrstore.h" +#include "rtsecmgrpolicymanager.h" +#include "rtsecmgrscriptmanager.h" + +class CPolicyManager; +class CScriptManager; +class CSecMgrStore; + +//needed for creating server thread. +const TUint KDefaultHeapSize=0x10000; +const TUint KShutDownDelay = 200000; // Aprox 2 sec + +/* + * Shutdown timer class + * + * @exe rtsecmgrserver.exe + */ +class CShutDown : public CTimer + { +public: + inline CShutDown(); + inline void ConstructL(); + inline void Start(); + inline virtual ~CShutDown(); + +private: + inline void RunL(); + }; + +#include "rtsecmgrshutdown.inl" + +#include "rtsecmgrserverpolicy.inl" + +/* + CRTSecMgrServer class + + Represents the server. + + The server starts with the first client connect call. + Start includes setting up active scheduler, the server active object, + and the object container index which produces object object containers for each session. + */ +class CRTSecMgrServer : public CPolicyServer //CServer2 //CPolicyServer + { +public: + /* + * Creates a new session with the server; + * + * @param aVersion const TVersion& version information of security manager server + * @param aMessage const RMessage2& server's current message + * + * @return CSession2* pointer to base instance of created server session + */ + CSession2* NewSessionL(const TVersion& aVersion, const RMessage2& aMessage) const; + + /* + * Two-phased constructor. Creates a new server object. + * + * @param aActiveObjectPriority TPriority priorty of the server process + * + * @return CRTSecMgrServer* pointer to new instance of CRTSecMgrServer + */ + static CRTSecMgrServer* NewL(CActive::TPriority aActiveObjectPriority); + + /* + * Two-phased constructor. Creates a new server object and leaves + * the created instance on the cleanupstack. + * + * @param aActiveObjectPriority TPriority priorty of the server process + * + * @return CRTSecMgrServer* pointer to new instance of CRTSecMgrServer + */ + static CRTSecMgrServer* NewLC(CActive::TPriority aActiveObjectPriority); + + /* + * Utility method to panic the server + * + * @param aPanic TSecMgrServPanic Panic error code + * + */ + inline static void PanicServer(TSecMgrServPanic aPanic); + + /* + * Returns an object container, and guaranteed + * to produce object containers with unique ids + * within the server + * + * This method is called by a new session to create + * a container + * + * + * @return CObjectCon* a new object container + */ + CObjectCon* NewContainerL(); + + /* + * Adds a new server side session + * + */ + inline void AddSession(); + + /* + * Removes a server side session by decrementing + * the session count. + * + * If the session count reaches zero, this method + * initiates server shut down timer + * + */ + inline void RemoveSession(); + + /* + * Removes a container object from the container + * index + * + * @param aContainer CObjectCon* pointer to containter object + * to be removed + */ + inline void RemoveFromContainerIx(CObjectCon* aContainer); + + /* + * Generates a new script identifier + * + * @param aExecID TExecutableID& output generated script identifier + * + * @return KErrNone if generation of script identifier successful + */ + inline TInt ReadCounter(TExecutableID& aExecID); + + /* + * Registers a new policy. The actual task is performed by + * server side session. + * + * @param aPolicyID TPolicyID policy identifier + * @param aDomains const RProtectionDomains& domains to be added + * + * @return KErrNone if generation of script identifier successful + */ + inline void AddPolicyL(TPolicyID aPolicyID, const RProtectionDomains& aDomains, RAliasGroup& aAliasGroup); + + /* + * Checks whether policy with the passed policy identifier exists. + * The actual task is performed by server side session. + * + * @param aPolicyID TPolicyID policy identifier + * + * @return EFalse if policy identifier does not exist; Otherwise ETrue + */ + inline TBool IsValidPolicy(TPolicyID aPolicyID) const; + + /* + * Removes an existing policy with the passed policy identifier. + * The actual task is performed by server side session. + * + * @param aPolicyID TPolicyID policy identifier + * + * @return KErrNone if removal of policy is successful; Otherwise one + * of system wide error codes + */ + inline TInt RemovePolicy(TPolicyID aPolicyID); + + /* + * Register a runtime script with security manager. + * The actual task is performed by server side session. + * + * @param aPolicyID TPolicyID policy identifier + * @param aHashValue const TDesC& hashvalue of script + * + * @return TExecutableID valid script identifier is registration + * is successful; otherwise one of system wide error codes + * + */ + inline TExecutableID + RegisterScript(TPolicyID aPolicyID, const TDesC& aHashValue); + + /* + * Register a runtime script with security manager. + * The actual task is performed by server side session. + * + * @param aPolicyID TPolicyID policy identifier + * + * @return TExecutableID valid script identifier is registration + * is successful; otherwise one of system wide error codes + * + */ + inline TExecutableID + RegisterScript(TPolicyID aPolicyID); + + /* + * UnRegisters a runtime script from security manager. + * The actual task is performed by server side session. + * + * @param aExecID TExecutableID script identifier + * @param aPolicyID TPolicyID policy identifier + * + * + */ + inline void UnRegisterScriptL(TExecutableID aExecID, TPolicyID aPolicyID); + + /* + * Gets script data structure. The script identifier + * is specified in the input script object + * + * @param aScript CScript& Input output script object + * + * @return KErrNone if script object is successsfully internalized + * + */ + inline TInt GetCapabilityInfo(CScript& aScript); + + /* + * Gets script data structure. The script identifier + * is specified in the input script object + * + * @param aPolicyID TPolicyID policy identifier + * @param aExecID TExecutableID script identifier + * @param aScript CScript& Input output script object + * + * @return KErrNone if script object is successsfully internalized + * + */ + TInt GetCapabilityInfo(TPolicyID aPolicyID, TExecutableID aExecID, + CScript& aScript); + + /* + * Utility method to get the name of the script file + * + * @param aPolicyID TPolicyID policy identifier + * @param aScriptFile TFileName& input output name of script file + * + * @return KErrNone if script filename is successsfully fetched + * + */ + inline TInt GetScriptFile(TExecutableID aExecID, TDes& aScriptFile); + + /* + * Utility method to update the permanently allowed or denied + * permissions for the script object + * + * @param aExecID TExecutableID script identifier of script object whose + * permanent permissions are modified + * @param aPermGrant TPermGrant permanently allowed permissions + * @param aPermDenied TPermGrant permanently denied permissions + * + */ + void UpdatePermGrantL(TExecutableID aExecID, TPermGrant aPermGrant, + TPermGrant aPermDenied); + + /* + * Utility method to create a backup for the policy file + * + * @param aPolicyID TPolicyID policy identifier for the file + * getting backed up + * @return KErrNone if backupfile is successsfully created + * + */ + inline TInt BackupFile(TPolicyID aPolicyID); + + /* + * Utility method to remove the backup file created + * + * @param aPolicyID TPolicyID policy identifier for the file + * whose backup is getting removed + * @return KErrNone if backup file is successsfully removed + * + */ + inline TInt RemoveTempPolicy(TPolicyID aPolicyID); + + /* + * Utility method to restore the backup file created if update fails + * + * @param aPolicyID TPolicyID policy identifier for the file + * which is restored back + * @return KErrNone if backup file is successsfully restored + * + */ + inline TInt RestoreTempPolicy(TPolicyID aPolicyID); + + /* + * Utility method to get the policy file information + * + * @param aPolicyID TPolicyID policy identifier for the file + * which is restored back + * @return CPolicy* pointer to instance of Cpolicy stored in CPolicyManager + * + */ + inline CPolicy* ReturnPolicyInfo(TPolicyID aPolicyID); + + /* + * Utility method to store the policy file information + * + * @param aPolicy CPolicy policy information from parser + * + */ + inline void StorePolicyL(const CPolicy& aPolicy); + + +private: + /* + * Constructor + */ + inline CRTSecMgrServer(CActive::TPriority aActiveObjectPriority); + + /* + * Second phase constructor + * + */ + void ConstructL(); + + /* + * Server destructor + * + */ + ~CRTSecMgrServer(); + +private: + + /* + * shutdown timer object + * + */ + CShutDown iShutDown; + + /* + * Session counter + * + */ + TInt iSessionCount; + + /* + * Session container index + * + */ + CObjectConIx* iContainerIndex; + + /* + * Reference to policy manager + * + */ + CPolicyManager* iPolicyMgr; + + /* + * Reference to script manager + * + */ + CScriptManager* iScriptMgr; + + /* + * Reference to security manager store + * + */ + CSecMgrStore* iSecMgrDb; + }; + +#include "rtsecmgrserver.inl" + +#endif //C_CRTSECMGRSERVER_H diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerserver/inc/rtsecmgrserver.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/rtsecuritymanagerserver/inc/rtsecmgrserver.inl Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,143 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + +/* + * Constructor + */ +inline CRTSecMgrServer::CRTSecMgrServer(CActive::TPriority aActiveObjectPriority) : + //CServer2(aActiveObjectPriority) + CPolicyServer( aActiveObjectPriority, KSecMgrSrvPolicy) + { + iSessionCount = 0; + } + +/** + A utility function to panic the server. + */ +inline void CRTSecMgrServer::PanicServer(TSecMgrServPanic aPanic) + { + _LIT (KTxtSecMgrServer, "SecurityMgrServer"); + User::Panic (KTxtSecMgrServer, aPanic); + } + +inline CObjectCon* CRTSecMgrServer::NewContainerL() + { + return iContainerIndex->CreateL (); + } + +inline void CRTSecMgrServer::AddSession() + { + iShutDown.Cancel(); + ++iSessionCount; + } + +inline void CRTSecMgrServer::RemoveSession() + { + if (--iSessionCount == 0) + if(!iShutDown.IsActive()) + iShutDown.Start(); + } + +inline void CRTSecMgrServer::RemoveFromContainerIx(CObjectCon *aContainer) + { + iContainerIndex->Remove(aContainer); + } + +inline TInt CRTSecMgrServer::GetScriptFile(TExecutableID aExecID, + TDes& aScriptFile) + { + return iScriptMgr->GetScriptFile (aExecID, aScriptFile); + } + +inline TInt CRTSecMgrServer::GetCapabilityInfo(CScript& aScriptInfo) + { + return iScriptMgr->ScriptInfo (aScriptInfo); + } + +inline void CRTSecMgrServer::UpdatePermGrantL(TExecutableID aExecID, + TPermGrant aPermGrant, TPermGrant aPermDenied) + { + iScriptMgr->UpdatePermGrantL (aExecID, aPermGrant, aPermDenied); + } + +inline TInt CRTSecMgrServer::ReadCounter(TExecutableID& aExecID) + { + return iSecMgrDb->ReadCounter (aExecID); + } + +inline void CRTSecMgrServer::AddPolicyL(TPolicyID aPolicyID, + const RProtectionDomains& aPolicyInfo, RAliasGroup& aAliasInfo) + { + CPolicy* policy = CPolicy::NewLC (aPolicyID, aPolicyInfo, aAliasInfo/*,RTrustArray()*/); + iPolicyMgr->RegisterPolicyL (*policy); + CleanupStack::Pop (policy); + } + +inline TInt CRTSecMgrServer::RemovePolicy(TPolicyID aPolicyID) + { + return iPolicyMgr->UnRegisterPolicy (aPolicyID); + } + +inline TExecutableID CRTSecMgrServer::RegisterScript(TPolicyID aPolicyID/*,const CTrustInfo& aTrustInfo*/) + { + return iScriptMgr->RegisterScript (aPolicyID); + } + +inline TExecutableID CRTSecMgrServer::RegisterScript(TPolicyID aPolicyID, const TDesC& aHashValue) + { + return iScriptMgr->RegisterScript (aPolicyID, aHashValue); + } + +inline void CRTSecMgrServer::UnRegisterScriptL(TExecutableID aExecID, + TPolicyID aPolicyID) + { + iScriptMgr->UnRegisterScriptL (aExecID, aPolicyID); + } + +inline TBool CRTSecMgrServer::IsValidPolicy(TPolicyID aPolicyID) const + { + return iPolicyMgr->HasPolicy (aPolicyID); + } + +inline TInt CRTSecMgrServer::BackupFile(TPolicyID aPolicyID) + { + return iSecMgrDb->BackupFile(aPolicyID); + } + +inline TInt CRTSecMgrServer::RemoveTempPolicy(TPolicyID aPolicyID) + { + return iSecMgrDb->RemoveTempPolicy(aPolicyID); + } + +inline TInt CRTSecMgrServer::RestoreTempPolicy(TPolicyID aPolicyID) + { + return iSecMgrDb->RestoreTempPolicy(aPolicyID); + } + +inline CPolicy* CRTSecMgrServer::ReturnPolicyInfo(TPolicyID aPolicyID) + { + return iPolicyMgr->Policy(aPolicyID); + } + +inline void CRTSecMgrServer::StorePolicyL(const CPolicy& aPolicy) + { + return iSecMgrDb->StorePolicyL(aPolicy); + } diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerserver/inc/rtsecmgrserverdef.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/rtsecuritymanagerserver/inc/rtsecmgrserverdef.h Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,92 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Common server specific definitions + * +*/ + + + + + + +#ifndef _RTSECMGRSERVERDEF_H +#define _RTSECMGRSERVERDEF_H + +#include + +#define KMaxName 256 +enum TFileType + { + EPolicy = 1, + EScript + }; + +/** panic codes */ +enum TSecMgrServPanic + { + EBadRequest = 1, + EBadDescriptor, + EDescriptorNonNumeric, + EMainSchedulerError, + ESvrCreateServer, + ESvrStartServer, + ECreateTrapCleanup, + EBadCounterRemove, + EBadSubsessionHandle + }; + +const TUid KCRUIdSecMgr = + { + 0x2000F847 + }; + +const TUint32 KSecMgrScriptID = 0x2000F847; + +//Pre-defined capability strings that may be defined +//as part of metadata information +_LIT(KCapabilityTCB, "TCB"); +_LIT(KCapabilityCommDD, "CommDD"); +_LIT(KCapabilityPowerMgmt, "PowerMgmt"); +_LIT(KCapabilityMultimediaDD, "MultimediaDD"); +_LIT(KCapabilityReadDeviceData, "ReadDeviceData"); +_LIT(KCapabilityWriteDeviceData, "WriteDeviceData"); +_LIT(KCapabilityDRM, "DRM"); +_LIT(KCapabilityTrustedUI, "TrustedUI"); +_LIT(KCapabilityProtServ, "ProtServ"); +_LIT(KCapabilityDiskAdmin, "DiskAdmin"); +_LIT(KCapabilityNetworkControl, "NetworkControl"); +_LIT(KCapabilityAllFiles, "AllFiles"); +_LIT(KCapabilitySwEvent, "SwEvent"); +_LIT(KCapabilityNetworkServices, "NetworkServices"); +_LIT(KCapabilityLocalServices, "LocalServices"); +_LIT(KCapabilityReadUserData, "ReadUserData"); +_LIT(KCapabilityWriteUserData, "WriteUserData"); +_LIT(KCapabilityLocation, "Location"); +_LIT(KCapabilitySurroundingsDD, "SurroundingsDD"); +_LIT(KCapabilityUserEnvironment, "UserEnvironment"); + +//pre-defined UserPromptOption strings +_LIT(KUserPromptOneShot, "oneshot"); +_LIT(KUserPromptSession, "session"); +_LIT(KUserPromptBlanket, "blanket"); +_LIT(KNo, "no"); + +_LIT(KPolicyDir, "policy"); +_LIT(KScriptDir, "script"); +_LIT(KDirSeparator, "\\"); +_LIT(KDatExtn, ".dat"); +_LIT(KCDrive, "c:"); +_LIT(KConfigFile, "config.dat"); + +#endif diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerserver/inc/rtsecmgrserverpolicy.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/rtsecuritymanagerserver/inc/rtsecmgrserverpolicy.inl Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,64 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + +/* + * Security Manager Server's policy + * + */ + +/* + * Total number of ranges + */ +const TUint KSecMgrSrvPolicyRangeCount = 1; + +// Definition of the ranges of IPC numbers +const TInt KSecMgrSrvRanges[KSecMgrSrvPolicyRangeCount] = + { + 0 + //, + //ESecMgrSrvReqEnd // 2nd range, non implemented function end of range check; ENotSupported + }; + +// Policy to implement for each of the above ranges +const TUint8 KSecMgrSrvElementsIndex[KSecMgrSrvPolicyRangeCount] = + { + 0 + //, // Applies to 0th range + //CPolicyServer::ENotSupported // Applies to 1st range + }; + +// Specific capability checks +const CPolicyServer::TPolicyElement KSecMgrSrvElements[] = + { + { _INIT_SECURITY_POLICY_C1( ECapabilityReadUserData ), CPolicyServer::EFailClient }, // Policy "0" + //{ _INIT_SECURITY_POLICY_C1( ECapabilityWriteDeviceData ), CPolicyServer::EFailClient }, // Policy "1" + //{ _INIT_SECURITY_POLICY_S0( KSensrvTestFrameworkUid ), CPolicyServer::EPanicClient }, // Policy "2", i.e. access is allowed only for test framework + }; + +// Package all the above together into a policy +const CPolicyServer::TPolicy KSecMgrSrvPolicy = + { + CPolicyServer::EAlwaysPass, // All connect attempts to Security Manager Server pass + KSecMgrSrvPolicyRangeCount, // Number of ranges + KSecMgrSrvRanges, // Ranges array + KSecMgrSrvElementsIndex, // Elements <-> ranges index + KSecMgrSrvElements, // Array of elements + }; diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerserver/inc/rtsecmgrsession.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/rtsecuritymanagerserver/inc/rtsecmgrsession.h Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,247 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Security Manager Server Session Class + * +*/ + + + + + + +#ifndef C_CRTSECMGRSESSION_H +#define C_CRTSECMGRSESSION_H + +#include "rtsecmgrcommondef.h" +#include "rtsecmgrdata.h" + +class CSecMgrStore; +class CRepository; +class CRTSecMgrSubSession; + +/* + * Server side session class + * + * @exe rtsecmgrserver.exe + * + */ +class CRTSecMgrSession : public CSession2 + { +public: + + /* + * Destructor + * + */ + inline ~CRTSecMgrSession(); + + /** + * Two-phased constructor + * + * Constructs a CRTSecMgrSession instance + * + * @return CRTSecMgrSession* pointer to an instance of CRTSecMgrSession + */ + inline static CRTSecMgrSession* NewL(); + + /* + * Called by client/server framework after + * session has been successfully created + * + */ + virtual void CreateL(); + + /* + * Treats incoming service requests + * and disatches accordingly + * + * @param aMessage const RMessage2& Incoming message + */ + inline void ServiceL(const RMessage2& aMessage); + + /* + * Dispatches message to sub-session if the message + * is to be handled by server sub-session. Server + * session related messages are treated locally + * + * @param aMessage const RMessage2& Incoming message + */ + void DispatchMessageL(const RMessage2& aMessage); + + /* + * Creates new subsession + * + * @param aMessage const RMessage2& Incoming message + */ + void NewSubSessionL(const RMessage2& aMessage); + + /* + * Closes the subsession + * + */ + void CloseSession(); + + /* + * Delete the subsession object through its handle. + * + * @param aHandle TInt Subsession handle + */ + inline void DeleteSubSession(TInt aHandle); + + /* + * Gets The SubSession from Hnadle + * + * @param aMessage const RMessage2& Incoming message + * @param aHandle TInt Subsession handle + * + * @return CRTSecMgrSubSession* pointer to subsession object + */ + CRTSecMgrSubSession* SubSessionFromHandle(const RMessage2& aMessage, + TInt aHandle); + + /* + * Utility method to panic client + * + * @param aMessage const RMessage2& Incoming message + * @param aPanic TInt Panic error code + * + */ + inline void PanicClient(const RMessage2& aMessage, TInt aPanic) const; + + /* + * Message handler method to set policy + * + * @param aMessage const RMessage2& Incoming message + * @param aIsUpdate TBool Toggle to identify whether the incoming + * message is for setting policy or updating policy + * + */ + void SetPolicy(const RMessage2& aMessage, TBool aIsUpdate=EFalse); + + /* + * Message handler method to update policy + * + * @param aMessage const RMessage2& Incoming message + * + */ + void UpdatePolicy(const RMessage2& aMessage); + + /* + * Message handler method to unset policy + * + * @param aMessage const RMessage2& Incoming message + * + */ + void UnsetPolicy(const RMessage2& aMessage); + + /* + * Message handler method to register script + * + * @param aMessage const RMessage2& Incoming message + * @param aHashValue Toggle to indicate if script has hash value + * + */ + void RegisterScript(const RMessage2& aMessage, TBool aHashValue=EFalse); + + /* + * Message handler method to un-register script + * + * @param aMessage const RMessage2& Incoming message + * + */ + void UnregisterScript(const RMessage2& aMessage); + + /* + * Message handler method to create script sub-session + * + * @param aMessage const RMessage2& Incoming message + * + */ + void GetScriptSessionL(const RMessage2& aMessage); + + /* + * Message handler method to create script sub-session + * for trusted unregistered scripts + * + * @param aMessage const RMessage2& Incoming message + * + */ + void GetTrustedUnRegScriptSessionL(const RMessage2& aMessage); + + /* + * Utility method to find out if a script sub-session is open + * with the script having the assocaited policy identifier + * specified in the input argument + * + * @param aPolicyID TPolicyID policy identifier to be checked + * + * @return TBool EFalse if no parallel script sub-sessions are open; ETrue + * otherwise ETrue + * + */ + TBool IsScriptOpenWithPolicy(TPolicyID aPolicyID); + + /* + * Utility method to find out if a script sub-session is open + * with the script having the script identifier + * specified in the input argument + * + * @param aScriptID TExecutableID script identifier to be checked + * + * @return TBool EFalse if no parallel script sub-sessions are open; ETrue + * otherwise ETrue + * + */ + TBool IsScriptSessionOpen(TExecutableID aScriptID,CRTSecMgrSubSession* aCurrentSession=NULL); + +private: + + /* + * Default private constructor + * + * + */ + inline CRTSecMgrSession(); + +private: + /* + * Object container for this session. + * + */ + CObjectCon *iContainer; + + /* + * Object index which stores objects + * + */ + CObjectIx* iSubSessionObjectIndex; + + /* + * subsession counter + * + */ + TInt iSubSessionCount; + /* + * Security manager server instance + * + * Stored as member variable for convenient + * access + */ + CRTSecMgrServer* iSecMgrServer; + }; + +#include "rtsecmgrsession.inl" + +#endif //C_CRTSECMGRSESSION_H_ + diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerserver/inc/rtsecmgrsession.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/rtsecuritymanagerserver/inc/rtsecmgrsession.inl Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,69 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + +inline CRTSecMgrSession::CRTSecMgrSession() + { + iSecMgrServer = dynamic_cast (const_cast (Server())); + } +inline CRTSecMgrSession::~CRTSecMgrSession() + { + } + +inline CRTSecMgrSession* CRTSecMgrSession::NewL() + { + return new (ELeave) CRTSecMgrSession(); + } + +/** + * First line servicing of a client request. + + * This function dispatches requests to the appropriate handler. + * Some messages are handled by the session itself, and are + * implemented as CRTSecMgrSession member functions, while + * other messages are handled by the subsession, and are + * implemented as CRTSecMgrSubSession member functions. + */ +inline void CRTSecMgrSession::ServiceL(const RMessage2& aMessage) + { + TRAPD(err,DispatchMessageL(aMessage)); + aMessage.Complete (err); + } + +/** + * Delete a subsession object through its handle. + * + */ +inline void CRTSecMgrSession::DeleteSubSession(TInt aHandle) + { + // This will delete the SubSession object; the object is + // reference counted, and removing the handle causes the object to be closed + // [closing reduces the access count - the object is deleted if the access + // count reaches zero etc]. + iSubSessionObjectIndex->Remove (aHandle); + // decrement resource count + iSubSessionCount--; + } + +inline void CRTSecMgrSession::PanicClient(const RMessage2& aMessage, TInt aPanic) const + { + _LIT(KTxtServer,"SecurityMgr server"); + aMessage.Panic (KTxtServer, aPanic); + } diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerserver/inc/rtsecmgrshutdown.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/rtsecuritymanagerserver/inc/rtsecmgrshutdown.inl Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,45 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + + +inline CShutDown::CShutDown() : + CTimer(-1) + { + CActiveScheduler::Add (this); + } +inline void CShutDown::ConstructL() + { + CTimer::ConstructL (); + } +inline void CShutDown::Start() + { + After (KShutDownDelay); + } + +inline CShutDown::~CShutDown() + { + } + +inline void CShutDown::RunL() + { + CActiveScheduler::Stop (); + CActiveScheduler::Install (NULL); + } \ No newline at end of file diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerserver/inc/rtsecmgrstore.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/rtsecuritymanagerserver/inc/rtsecmgrstore.h Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,292 @@ +/* +* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Definition of security manager persistent store class + * +*/ + + + + + + +#ifndef C_RTSECMGRSTORE_H +#define C_RTSECMGRSTORE_H + +#include +#include +#include +#include +#include +#include "rtsecmgrcommondef.h" +#include "rtsecmgrserverdef.h" +#include "rtsecmgrdata.h" + +/* + * Abstracts the underlying security manager persistent storage + * type. + * + * Provides methods to store and retrieve security policy data + * and script related data. + * + * @see CProtectionDomain + * @see CScript + * + * @exe rtsecmgrserver.exe + */ +NONSHARABLE_CLASS(CSecMgrStore) : public CBase + { +public: + + /** + * Two-phased constructor + * + * Constructs a CSecMgrStore instance + * + * @return CSecMgrStore* pointer to an instance of CSecMgrStore + */ + static CSecMgrStore* NewL(); + + /** + * Two-phased constructor + * + * Constructs a CSecMgrStore instance and leaves the created + * instance on the cleanupstack + * + * @return CSecMgrStore* pointer to an instance of CSecMgrStore + */ + static CSecMgrStore* NewLC(); + + /** + * Destructor + * + * Closes file session connection + * + */ + inline ~CSecMgrStore(); + + /** + * Updates policy data to the stream. + * + * This method creates a new policy file with the name equivalent to + * policy identifier under security manager servers private directory. + * + * The policy data are serialized to the newly created policy file. + * + * If policy file already exists, the content will be overwritten. + * + * @param aPolicyID TPolicyID policy identifier + * @param aPolicies const RProtectionDomains& list of domains to serialize + * + */ + void StorePolicyL(const CPolicy& aPolicy); + + /** + * Removes policy file from the persistent storage. + * + * This method looks for an existing policy file with the name equivalent to + * policy identifier under security manager servers private directory. If policy + * file is found, the file will be deleted from file system. + * + * @param aPolicyID TPolicyID policy identifier of the policy to be removed + * + * @return KErrNone if policy file removal corresponding to policy identifier passed is successful; + * Otherwise, one of system wide error codes + * + */ + TInt RemovePolicy(TPolicyID aPolicyID); + + /** + * Restores policy data from the stream. + * + * This method internalizes the policy data from the persistent + * storage. + * + * @param aPolicies RPolicies& Input policy data to be internalized + * + */ + void RestorePoliciesL(RPolicies& aPolicies); + + /** + * Registers a script with security manager persistent store. + * + * This method creates a new script file externalizing the script + * data to the persistent stream. + * + * @param aExecID TExecutableID script identifier + * @param aPolicyID TPolicyID policy identifier of the script + * @param aScript const CScript& script data to be serialized + * + */ + void RegisterScriptL(TExecutableID aExecID, const CScript& aScript); + + /** + * UnRegisters a script with security manager persistent store. + * + * This method removes an existing script file from the persistent stream. + * + * @param aExecID TExecutableID script identifier to be removed + * + */ + void UnRegisterScriptL(TExecutableID aExecID); + + /** + * Internalizes the script data structure with script + * information read from the persistent store + * + * @param aExecID TExecutableID script identifier + * @param aScriptInfo CScript& script data to be internalized + * + */ + TInt ReadScriptInfo(TExecutableID aExecID, CScript& aScriptInfo); + + /** + * Utility method to get the script file name given the script identifier. + * + * @param aExecID TExecutableID script identifier + * @param aScriptFile TDes& output file name to be returned + * + * @return KErrNone if script file name is found; Otherwise one of + * system wide error codes + * + */ + TInt GetScriptFile(TExecutableID aExecID,TDes& aScriptFile); + + /** + * Externalizes the script data structure with script + * information read to the persistent store + * + * @param aExecID TExecutableID script identifier + * @param aScriptInfo CScript& script data to be externalized + * + */ + void WriteScriptInfoL(TExecutableID aExecID, CScript& aScriptInfo); + + /** + * Reads the script identifier from security manager configuration + * repository + * + * @param aExecID TExecutableID& output script identifier + * + * @return KErrNone if reading of identifier is successful; Otherwise + * one of system wide error codes + */ + TInt ReadCounter(TExecutableID& aExecID); + + /** + * Writes the script identifier to security manager configuration + * repository + * + * @param aExecID TExecutableID script identifier to be externalized + * + * @return KErrNone if writing of identifier is successful; Otherwise + * one of system wide error codes + */ + TInt WriteCounter(TExecutableID aExecID); + + /* + * Utility method to create a backup for the policy file + * + * @param aPolicyID TPolicyID policy identifier for the file + * getting backed up + * @return KErrNone if backupfile is successsfully created + * + */ + + TInt BackupFile(TPolicyID aPolicyID); + + /* + * Utility method to remove the backup file created + * + * @param aPolicyID TPolicyID policy identifier for the file + * whose backup is getting removed + * @return KErrNone if backup file is successsfully removed + * + */ + TInt RemoveTempPolicy(TPolicyID aPolicyID); + + /* + * Utility method to restore the backup file created if update fails + * + * @param aPolicyID TPolicyID policy identifier for the file + * which is restored back + * @return KErrNone if backup file is successsfully restored + * + */ + TInt RestoreTempPolicy(TPolicyID aPolicyID); + +private: + + /* + * Default private constructor + */ + inline CSecMgrStore(); + + /* + * Two-phased constructor + * + */ + inline void ConstructL(); + + /* + * Utility method to get security manager's private path + * + */ + TInt GetPrivatePath(TDes& aPrivatePath); + + /* + * Utility method to get security manager's configuration file + * + */ + TInt GetConfigFile(TDes& aPrivatePath); + + /* + * Utility method to get security manager's policy file + * name + * + */ + TInt GetPolicyPath(TDes& aFile); + + /* + * Utility method to get security manager's script file + * storage path + * + */ + TInt GetScriptPath(TDes& aFile); + + /* + * Utility method to get security manager's script file + * name given a script identifier + * + */ + TInt GetScriptFile(TDes& aFile,TExecutableID aExecID); + + + + /* + * Utility method to get security manager's policy file + * name given the policy identifier + * + */ + TInt GetPolicyFile(TDes& aFile,TPolicyID aPolicyID); + + +private: + + //underlying file session + RFs iFsSession; + }; + +#include "rtsecmgrstore.inl" + +#endif diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerserver/inc/rtsecmgrstore.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/rtsecuritymanagerserver/inc/rtsecmgrstore.inl Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,47 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + +/* + * Default private constructor + */ +inline CSecMgrStore::CSecMgrStore() + { + } + +/* + * Two-phased constructor + * + */ +inline void CSecMgrStore::ConstructL() + { + User::LeaveIfError (iFsSession.Connect ()); + } + +/** + * Destructor + * + * Closes file session connection + * + */ +inline CSecMgrStore::~CSecMgrStore() + { + iFsSession.Close (); + } diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerserver/inc/rtsecmgrsubsession.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/rtsecuritymanagerserver/inc/rtsecmgrsubsession.h Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,128 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Security Manager Server Script Sub-Session Class + * +*/ + + + + + + +#ifndef C_CRTSECMGRSUBSESSION_H +#define C_CRTSECMGRSUBSESSION_H + +#include "rtsecmgrcommondef.h" +#include "rtsecmgrdata.h" +#include "rtsecmgrserver.h" + +class CRTSecMgrSession; + +/* + * Server side script sub-session class + * + * @exe rtsecmgrserver.exe + * + */ +class CRTSecMgrSubSession : public CObject + { +public: + + /** + * Two-phased constructor + * + * Constructs a CRTSecMgrSubSession instance + * + * @return CRTSecMgrSubSession* pointer to an instance of CRTSecMgrSession + */ + inline static CRTSecMgrSubSession* NewL(CRTSecMgrSession* aSession, + CScript* aScript,CRTSecMgrServer* aSecMgrServer); + + /** + * Destructor + * + */ + inline ~CRTSecMgrSubSession(); + + /** + * Handles get script file service + * + * @param aMessage const RMessage2& Input message + * + */ + void GetScriptFile(const RMessage2& aMessage); + + /** + * Handles update permanent permission service + * + * @param aMessage const RMessage2& Input message + * + */ + void UpdatePermGrantL(const RMessage2& aMessage); + + /** + * Gets script identifier of the underlying script object + * + * @return TExecutableID script identifier of script object + * + */ + inline TExecutableID ScriptID() const; + + /** + * Gets the underlying script object + * + * @return const CScript& the script object + * + */ + inline const CScript& Script() const; +private: + + /** + * Constructor + * + */ + inline CRTSecMgrSubSession(CRTSecMgrSession* aSession, CScript* aScript,CRTSecMgrServer* aSecMgrServer); + +private: + + /* + * + * Reference to parent session object + */ + CRTSecMgrSession* iSession; // The session that owns this CRTSecMgrSession object. + + /* + * script identifier + * + */ + TExecutableID iScriptID; + + /* + * + * pointer to script object + */ + CScript* iScript; + /* + * Security manager server instance + * + * Stored as member variable for convenient + * access + */ + CRTSecMgrServer* iSecMgrServer; + }; + +#include "rtsecmgrsubsession.inl" + +#endif //C_CRTSECMGRSUBSESSION_H + diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerserver/inc/rtsecmgrsubsession.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/rtsecuritymanagerserver/inc/rtsecmgrsubsession.inl Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,53 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + + +inline CRTSecMgrSubSession::CRTSecMgrSubSession(CRTSecMgrSession* aSession, + CScript* aScriptInfo, CRTSecMgrServer* aSecMgrServer) : + iSession(aSession), iScript(aScriptInfo),iSecMgrServer(aSecMgrServer) + { + } + +inline CRTSecMgrSubSession* CRTSecMgrSubSession::NewL(CRTSecMgrSession* aSession, + CScript* aScript,CRTSecMgrServer* aSecMgrServer) + { + return new (ELeave) CRTSecMgrSubSession(aSession,aScript,aSecMgrServer); + } + +inline CRTSecMgrSubSession::~CRTSecMgrSubSession() + { + delete iScript; + } + +inline TExecutableID CRTSecMgrSubSession::ScriptID() const + { + if ( iScript) + { + return iScript->ScriptID (); + } + + return KAnonymousScript; + } + +inline const CScript& CRTSecMgrSubSession::Script() const + { + return *iScript; + } \ No newline at end of file diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerserver/src/rtsecmgrclientapi.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/rtsecuritymanagerserver/src/rtsecmgrclientapi.cpp Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,402 @@ +/* +* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Implementation file for security manager server, session and + * sub-session classes + * +*/ + + + + + + +#include +#include +#include +#include "rtsecmgrserver.h" +#include "rtsecmgrsession.h" +#include "rtsecmgrsubsession.h" +#include "rtsecmgrpolicyparser.h" +#include "rtsecmgrstore.h" +#include "rtsecmgrprotectiondomain.h" +#include "rtsecmgrpolicymanager.h" +#include "rtsecmgrscriptmanager.h" +#include "rtsecmgrmsg.h" + +_LIT(KUntrusted, "UnTrusted"); + +TInt CRTSecMgrServer::GetCapabilityInfo(TPolicyID aPolicyID, + TExecutableID aExecID, CScript& aScript) + { + if ( KAnonymousScript==aExecID) + { + CPolicy* policy = iPolicyMgr->Policy (aPolicyID); + if ( policy) + { + CProtectionDomain* domain = policy->ProtectionDomain (KUntrusted); + + if ( domain) + { + const CPermissionSet& permissionSet = domain->PermSet (); + aScript.SetPermissionSet (permissionSet); + return KErrNone; + } + } + } + + return KErrNotFound; + } + +void CRTSecMgrSession::SetPolicy(const RMessage2& aMessage, TBool aIsUpdate) + { + if(!aMessage.HasCapability(ECapabilityWriteDeviceData , "")) + { + TPckgBuf pkg(ErrAccessDenied); + aMessage.Write(EMsgArgZero , pkg); + return; + } + RFile secPolicyFile; + TPolicyID pID(ErrInvalidPolicyID); + + if ( KErrNone==secPolicyFile.AdoptFromClient (aMessage, EMsgArgOne, + EMsgArgTwo)) + { + CPolicyParser* policyParser = CPolicyParser::NewLC (); + TInt ret(KErrNone); + + RProtectionDomains policyInfo; + RAliasGroup aliasInfo; + ret=policyParser->GetPolicyInfo (secPolicyFile, policyInfo, aliasInfo); + + if (KErrNone==ret) + { + if(aIsUpdate) + { + TPckgBuf pIDPckg; + aMessage.Read(0, pIDPckg); + pID = pIDPckg(); + } + else + { + if ( KErrNone==iSecMgrServer->ReadCounter (pID)) + { + while (iSecMgrServer->IsValidPolicy(pID)) + { + --pID ; + } + } + else + { + pID = ErrServerReadConfig; + } + } + TRAPD (err, iSecMgrServer->AddPolicyL (pID, policyInfo, aliasInfo)); + + if ( KErrNone!=err) + { + pID = ErrSetPolicyFailed; + } + + } + else + { + pID = ErrInvalidPolicyFormat; + policyInfo.ResetAndDestroy (); + } + CleanupStack::PopAndDestroy (policyParser); + } + else + { + pID = ErrFileSessionNotShared; + } + + secPolicyFile.Close(); + + TPckgBuf pkg(pID); + aMessage.Write (EMsgArgZero, pkg); + } + +void CRTSecMgrSession::UpdatePolicy(const RMessage2& aMessage) + { + if(!aMessage.HasCapability(ECapabilityWriteDeviceData , "")) + { + TPckgBuf pkg(ErrAccessDenied); + aMessage.Write(EMsgArgZero , pkg); + return; + } + TPckgBuf pIDPckg; + aMessage.Read (0, pIDPckg); + + TPolicyID pID(pIDPckg ()); + + //Check if this ID already exists + if ( !iSecMgrServer->IsValidPolicy(pID)) + { + TPckgBuf pkg(ErrUpdatePolicyFailed); + aMessage.Write (EMsgArgZero, pkg); + RFile secPolicyFile; + //just to close the secPolicyFile. Else the temmporary file cannot be deleted + secPolicyFile.AdoptFromClient (aMessage, EMsgArgOne,EMsgArgTwo); + secPolicyFile.Close(); + return; + } + else + { + if ( IsScriptOpenWithPolicy (pID)) + { + TPckgBuf pkg(ErrUpdatePolicyFailed); + aMessage.Write (EMsgArgZero, pkg); + return; + } + } + + //back up the file before update (file with this policy Id) + TInt backupResult = iSecMgrServer->BackupFile(pID); + + if(KErrNone == backupResult) + { + SetPolicy (aMessage, ETrue); + + aMessage.Read(0, pIDPckg); + TInt resultSetPolicy = pIDPckg(); + + if(resultSetPolicy < KErrNone) + { + //means that the policy updation is NOT successful due to invalid policy file + //Hence retain the previous file by restoring the temp file + TInt restoreResult = iSecMgrServer->RestoreTempPolicy(pID); + + if(KErrNone != restoreResult) + { + // file backup not created due to errors + TPckgBuf pkg(ErrRestoreTempFailed); + aMessage.Write (EMsgArgZero, pkg); + return; + } + } + + //Backup file is no longer useful. + //Hence removing this temporary file using the method below + TInt rmTempResult = iSecMgrServer->RemoveTempPolicy(pID); + if(KErrNone != rmTempResult) + { + //temporary file not removed + + } + } + else + { + // file backup not created due to errors + TPckgBuf pkg(ErrBackupNotCreated); + aMessage.Write (EMsgArgZero, pkg); + return; + + } + + } + +void CRTSecMgrSession::UnsetPolicy(const RMessage2& aMessage) + { + if(!aMessage.HasCapability(ECapabilityWriteDeviceData , "")) + { + TPckgBuf pkg(ErrAccessDenied); + aMessage.Write(EMsgArgZero , pkg); + return; + } + TPolicyID pID = aMessage.Int0 (); + + TInt result = ErrUnSetPolicyFailed; + + if ( !IsScriptOpenWithPolicy(pID)) + { + result = iSecMgrServer->RemovePolicy (pID); + } + if( KErrNone>result ) + result = ErrUnSetPolicyFailed; + + TPckgBuf retVal(result); + aMessage.Write (EMsgArgOne, retVal); + } + +void CRTSecMgrSession::RegisterScript(const RMessage2& aMessage, TBool aIsHashed) + { + if( !aMessage.HasCapability(ECapabilityWriteDeviceData , "")) + { + TPckgBuf pkg(ErrAccessDenied); + aMessage.Write(EMsgArgZero , pkg); + return; + } + if ( aIsHashed) + { + HBufC8* desData = HBufC8::NewLC (KMaxMsgLength); + TPtr8 readPtr(desData->Des ()); + aMessage.ReadL (0, readPtr); + CRTSecMgrRegisterScriptMsg + * scriptMsg = CRTSecMgrRegisterScriptMsg::NewLC (*desData); + + TExecutableID scriptID = iSecMgrServer->RegisterScript (scriptMsg->PolicyID(),scriptMsg->HashValue()); + + TPckgBuf exeIDPkg(scriptID); + aMessage.Write (EMsgArgOne, exeIDPkg); + + CleanupStack::PopAndDestroy (scriptMsg); + CleanupStack::PopAndDestroy (desData); + } + else + { + TPolicyID policyID = aMessage.Int0 (); + + TExecutableID scriptID = iSecMgrServer->RegisterScript (policyID); + + if ( KErrNone>scriptID) + scriptID = ErrRegisterScriptFailed; + + TPckgBuf exeIDPkg(scriptID); + aMessage.Write (EMsgArgOne, exeIDPkg); + } + + } + +void CRTSecMgrSession::UnregisterScript(const RMessage2& aMessage) + { + if(!aMessage.HasCapability(ECapabilityWriteDeviceData , "")) + { + TPckgBuf pkg(ErrAccessDenied); + aMessage.Write(EMsgArgZero , pkg); + return; + } + TExecutableID scriptID(aMessage.Int0 ()); + TPolicyID policyID(aMessage.Int1 ()); + + TInt result = KErrNone; + + if ( !IsScriptSessionOpen(scriptID)) + { + TRAP (result, iSecMgrServer->UnRegisterScriptL (scriptID, policyID)); + if(KErrNone>result) + result = ErrUnRegisterScriptFailed; + } + else + { + result = ErrUnRegisterScriptFailed; + } + + TPckgBuf errCode(result); + aMessage.Write (EMsgArgTwo, errCode); + } + +void CRTSecMgrSession::GetScriptSessionL(const RMessage2& aMessage) + { + if(!aMessage.HasCapability(ECapabilityWriteDeviceData , "")) + { + User::Leave(ErrAccessDenied); + } + TExecutableID scriptID = (TExecutableID)aMessage.Int0(); + TPolicyID policyID = (TPolicyID)aMessage.Int1(); + + CScript* script = CScript::NewLC (policyID, scriptID); + + User::LeaveIfError (iSecMgrServer->GetCapabilityInfo (*script)); + + if(script->PolicyID() != policyID || !iSecMgrServer->IsValidPolicy(policyID)) + { + User::Leave(ErrInvalidPolicyID); + } + + CleanupStack::Pop (script); + + CRTSecMgrSubSession* counter = CRTSecMgrSubSession::NewL (this, script, iSecMgrServer); + CleanupStack::PushL (counter); + + // add the CCountSubSession object to + // this subsession's object container + // to gererate a unique id + iContainer->AddL (counter); + + // Add the object to object index; this returns + // a unique handle so that we can find the object + // again laterit later. + TInt handle=iSubSessionObjectIndex->AddL (counter); + + // Write the handle value back to the client. + // NB It's not obvious but the handle value must be passed + // back as the 4th parameter (i.e. parameter number 3 on + // a scale of 0 to 3). + // The arguments that are passed across are actually + // set up by RSubSessionBase::DoCreateSubSession(). + // If you pass your own arguments into a call + // to RSubSessionBase::CreateSubSession(), which calls DoCreateSubSession, + // then only the first three are picked up - the 4th is reserved for the + // the subsession handle. + TPckgBuf handlePckg(handle); + aMessage.Write (EMsgArgThree, handlePckg); + + CleanupStack::Pop (counter); + } + +void CRTSecMgrSession::GetTrustedUnRegScriptSessionL(const RMessage2& aMessage) + { + if(!aMessage.HasCapability(ECapabilityWriteDeviceData , "")) + { + User::Leave(ErrAccessDenied); + } + //0th parameter - ScriptID + //1st parameter - PolicyID + TExecutableID scriptID = (TExecutableID)aMessage.Int0(); //typically this is KAnonymousScript + TPolicyID policyID = (TExecutableID)aMessage.Int1(); + + CScript* script = CScript::NewLC (policyID, scriptID); + + User::LeaveIfError (iSecMgrServer->GetCapabilityInfo(policyID, scriptID, *script)); + + CleanupStack::Pop (script); + + CRTSecMgrSubSession* counter = CRTSecMgrSubSession::NewL (this, script, iSecMgrServer); + CleanupStack::PushL (counter); + + iContainer->AddL (counter); + TInt handle=iSubSessionObjectIndex->AddL (counter); + TPckgBuf handlePckg(handle); + aMessage.Write (EMsgArgThree, handlePckg); + + CleanupStack::Pop (counter); + } + +void CRTSecMgrSubSession::GetScriptFile(const RMessage2& aMessage) + { + RFile scriptFile; + + if ( KErrNone==scriptFile.AdoptFromClient (aMessage, EMsgArgOne, + EMsgArgTwo)) + { + RFileWriteStream rfws(scriptFile); + iScript->ExternalizeL (rfws); + rfws.Close (); + scriptFile.Close (); + } + } + +void CRTSecMgrSubSession::UpdatePermGrantL(const RMessage2& aMessage) + { + if ( !iSession->IsScriptSessionOpen(aMessage.Int0(),this)) + { + iSecMgrServer->UpdatePermGrantL (aMessage.Int0 (), aMessage.Int1 (), + aMessage.Int2 ()); + } + else + { + TPckgBuf pkg((TInt)ErrUpdatePermGrantFailed); + aMessage.Write (EMsgArgZero, pkg); + } + } diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerserver/src/rtsecmgrpolicy.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/rtsecuritymanagerserver/src/rtsecmgrpolicy.cpp Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,117 @@ +/* +* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Defines security policy data structure + * +*/ + + + + + + +#include +#include "rtsecmgrpolicy.h" +#include "rtsecmgrserverdef.h" + +CPolicy::CPolicy(TPolicyID aPolicyID) : + iPolicyID(aPolicyID) + { + } + +void CPolicy::ConstructL(const RProtectionDomains& aProtectionDomains, RAliasGroup& aAliasGroup) + { + iAccessPolicy.Reset(); + iAliasGroup.Reset(); + iAccessPolicy = aProtectionDomains; + iAliasGroup = aAliasGroup; + } + +CPolicy* CPolicy::NewL(TPolicyID aPolicyID, + const RProtectionDomains& aProtectionDomains, RAliasGroup& aAliasGroup) + { + CPolicy* self = CPolicy::NewLC (aPolicyID, aProtectionDomains, aAliasGroup); + CleanupStack::Pop (self); + return self; + } + +CPolicy* CPolicy::NewLC(TPolicyID aPolicyID, + const RProtectionDomains& aProtectionDomains, RAliasGroup& aAliasGroup) + { + CPolicy* self = new (ELeave) CPolicy(aPolicyID); + CleanupStack::PushL (self); + self->ConstructL (aProtectionDomains, aAliasGroup); + return self; + } + +CPolicy* CPolicy::NewL(TPolicyID aPolicyID, RStoreReadStream& aSource) + { + CPolicy* self = CPolicy::NewLC (aPolicyID, aSource); + CleanupStack::Pop (self); + return self; + } + +CPolicy* CPolicy::NewLC(TPolicyID aPolicyID, RStoreReadStream& aSource) + { + CPolicy* self = new (ELeave) CPolicy(aPolicyID); + CleanupStack::PushL (self); + self->InternalizeL (aSource); + return self; + } + +void CPolicy::InternalizeL(RStoreReadStream& aSource) + { + //Read version of the policy + TReal version(aSource.ReadReal32L()); + TInt aliasCnt(aSource.ReadInt32L()); + + for (TInt i(0); iInternalizeL(aSource); + iAliasGroup.Append (alias); + } + + TInt domainCnt(aSource.ReadInt32L ()); + for (TInt i(0); iDomainName().CompareF (aDomainName)) + { + return iAccessPolicy[idx]; + } + } + + return NULL; + } + +CPermission* CPolicy::AliasGroup(const TDesC& aAliasName) const + { + for (TInt idx(0); idxPermName().CompareF (aAliasName)) + { + return iAliasGroup[idx]; + } + } + + return NULL; + } diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerserver/src/rtsecmgrpolicymanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/rtsecuritymanagerserver/src/rtsecmgrpolicymanager.cpp Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,111 @@ +/* +* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Definition of policy manager class + * +*/ + + + + + + +#include +#include "rtsecmgrpolicymanager.h" +#include "rtsecmgrserverdef.h" + +CPolicyManager* CPolicyManager::NewL(CSecMgrStore* aSecMgrDB) + { + CPolicyManager* self = CPolicyManager::NewLC(aSecMgrDB); + CleanupStack::Pop(self); + return self; + } + +CPolicyManager* CPolicyManager::NewLC(CSecMgrStore* aSecMgrDB) + { + CPolicyManager* self = new (ELeave) CPolicyManager(aSecMgrDB); + CleanupStack::PushL (self); + return self; + } + +void CPolicyManager::RegisterPolicyL(const CPolicy& aPolicy) + { + //Remove the policy if it already exists + for (TInt idx(0); idx!=iPolicies.Count ();++idx) + { + if ( aPolicy.PolicyID ()==iPolicies[idx]->PolicyID ()) + { + delete iPolicies[idx]; + iPolicies.Remove (idx); + break; + } + } + + //update the cache + iPolicies.AppendL (&aPolicy); + + iSecMgrDB->StorePolicyL (aPolicy); + } + +TInt CPolicyManager::UnRegisterPolicy(TPolicyID aPolicyID) + { + TBool exists(EFalse); + TInt ret(KErrNone); + + for(TInt idx(0);idxPolicyID()) + { + if(KErrNone==iSecMgrDB->RemovePolicy(aPolicyID)) + { + delete iPolicies[idx]; + iPolicies.Remove(idx); + exists=ETrue; + } + } + } + + //In case if policyID does not exist in the cache... + if(!exists) + ret = iSecMgrDB->RemovePolicy(aPolicyID); + + + return ret; + } + +CPolicy* CPolicyManager::Policy(TPolicyID aPolicyID) const + { + for (TInt idx(0); idx!=iPolicies.Count ();++idx) + { + if ( aPolicyID==iPolicies[idx]->PolicyID ()) + { + return iPolicies[idx]; + } + } + + return NULL; + } + +TBool CPolicyManager::HasPolicy(TPolicyID aPolicyID) const + { + for (TInt idx(0); idx!=iPolicies.Count ();++idx) + { + if ( aPolicyID==iPolicies[idx]->PolicyID ()) + { + return ETrue; + } + } + + return EFalse; + } + diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerserver/src/rtsecmgrpolicyparser.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/rtsecuritymanagerserver/src/rtsecmgrpolicyparser.cpp Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,1158 @@ +/* +* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Utility XML parser to parse trust and access policy files + * +*/ + + + + + + +#include +#include +#include + +#include "rtsecmgrpolicyparser.h" +#include "rtsecmgrdata.h" +#include "rtsecmgrserverdef.h" + +#include +#include +#include +#include +#include + +_LIT (KPolicy, "policy"); +_LIT (KAllow, "allow"); +_LIT (KUser, "user"); +_LIT (KDomain, "domain"); +_LIT (KNameAttr, "name"); +_LIT (KCondition, "condition"); +_LIT (KCapabilities, "capabilities"); +_LIT (KDefCondition, "defaultCondition"); +_LIT (KText, "#TEXT"); +_LIT (KComment, "comment"); +_LIT (KAlias, "alias"); + +CPolicyParser::CPolicyParser() + { + } + +CPolicyParser* CPolicyParser::NewL() + { + CPolicyParser* self = CPolicyParser::NewLC (); + //nothing to construct as of now + CleanupStack::Pop (self); + return self; + } + +CPolicyParser* CPolicyParser::NewLC() + { + CPolicyParser* self = new (ELeave) CPolicyParser(); + CleanupStack::PushL (self); + //nothing to construct as of now + return self; + } + +CPolicyParser::~CPolicyParser() + { + if ( iDomParser) + { + delete iDomParser; + iDomParser = NULL; + } + } + +TInt CPolicyParser::GetPolicyInfo(RFile& aSecPolicy, + RProtectionDomains& aPolicyInfo, RAliasGroup& aAliasGroup) + { + isTrustInfo = EFalse; + + if ( iDomParser) + { + delete iDomParser; + iDomParser = NULL; + } + + iDomParser = CMDXMLParser::NewL (this); + iLastError = KErrNone; + + RFile parseHandle; + User::LeaveIfError ( parseHandle.Duplicate ( aSecPolicy)); + + iPolicyInfo.Reset (); //cleans-up the array, but doesn't delete the entries.. + iAliasGroup.Reset (); + + iLastError = iDomParser->ParseFile (parseHandle); //xml file read operation + + if ( KErrNone == iLastError) + iWaitScheduler.Start (); //actual parsing starts here asynchronously + + if ( KErrNone==iLastError) //parsing is successful + { + aPolicyInfo = iPolicyInfo; + aAliasGroup = iAliasGroup; + } + + return iLastError; + } + +// Call back function called when a parsing operation completes. +void CPolicyParser::ParseFileCompleteL() + { + iLastError = iDomParser->Error(); + + if(iLastError == KErrXMLMissingDocTypeTag) + iLastError = KErrNone; + + iWaitScheduler.AsyncStop (); + + if(iLastError!=KErrNone) + { + return; + } + else + { + if ( iDomParser && !isTrustInfo) //pre-requisite that the DOM instance is intact + { + CMDXMLDocument* documentNode = iDomParser->DetachXMLDoc (); + + if ( documentNode) + { + CleanupStack::PushL(documentNode); + //Gets the root element of the DOM tree. + CMDXMLElement* rootElemNode = documentNode->DocumentElement (); + + CMDXMLNode* rootNode = rootElemNode->FirstChild (); + + if ( !rootNode) + { + iLastError = EErrInvalidRootNode; + CleanupStack::PopAndDestroy(documentNode); + return; + } + + TBool isValid = EFalse; + + for (; rootNode;rootNode=rootNode->NextSibling ()) + { + if ( rootNode->NodeType ()==CMDXMLNode::EElementNode) + { + if ( 0==rootNode->NodeName().CompareF (KPolicy ())) + { + isValid = ETrue; + break; + } + else + continue; + } + else + { + if(KErrNone == rootNode->NodeName().CompareF(KText)) + { + iLastError = EErrJunkContent; + iPolicyInfo.ResetAndDestroy (); + iAliasGroup.ResetAndDestroy (); + CleanupStack::PopAndDestroy(documentNode); + return; + } + } + } + + if ( !isValid) + { + iLastError = EErrInvalidRootNode; + iPolicyInfo.ResetAndDestroy (); + iAliasGroup.ResetAndDestroy (); + CleanupStack::PopAndDestroy(documentNode); + return; + } + + TPtrC attrVal; + + if ( rootNode->HasChildNodes ()) + { + CMDXMLNode* childNode = rootNode->FirstChild (); + + //Now get the list of nodes + while ( childNode) + { + TPtrC nodeName = childNode->NodeName (); + + //ALIAS PARSING + if ( nodeName.CompareF (KAlias)== 0) + { + CMDXMLElement + * aliasNode = dynamic_cast(childNode); + + //store alias information in object + CPermission* aliasObj = NULL; + + {//Get the attribute "name" to get the alias name + aliasNode->GetAttribute(KNameAttr, attrVal); + + if ( attrVal.Length ()>0) + { + if ( isAliasPresent (attrVal)) + { + //invalid xml file + if(aliasObj) + delete aliasObj; + iPolicyInfo.ResetAndDestroy (); + iAliasGroup.ResetAndDestroy (); + iLastError = EErrRepeatedAliasTag; + CleanupStack::PopAndDestroy(documentNode); + return; + } + + aliasObj = CPermission::NewL(); + aliasObj->SetPermName(attrVal); + } + else + { + //alias name is invalid + //check whether TPerm / alias name should be deleted + if(aliasObj) + delete aliasObj; + iPolicyInfo.ResetAndDestroy (); + iAliasGroup.ResetAndDestroy (); + iLastError = EErrInvalidAliasName; + CleanupStack::PopAndDestroy(documentNode); + return; + } + + if ( aliasNode->HasChildNodes ()) + { + CPermissionSet *aliasCaps = CPermissionSet::NewL(); + + TBool result = GetCapabilitiesForGroup( + (CMDXMLElement*)aliasNode, + *aliasCaps, *aliasObj); //get list of uncond caps + + if(result < 0) + { + //Invalid capability string in policy file + if(aliasObj) + delete aliasObj; + if(aliasCaps) + delete aliasCaps; + iPolicyInfo.ResetAndDestroy (); + iAliasGroup.ResetAndDestroy (); + iLastError = result; //EErrInvalidCapability or EErrRepeatedCaps + CleanupStack::PopAndDestroy(documentNode); + return; + } + if(aliasCaps) + delete aliasCaps; + + } + } + + if(aliasObj) + iAliasGroup.AppendL(aliasObj); + } + + //check if the domain name is already present.. + //need to check to avoid repeated domain tags.. + if ( nodeName.CompareF (KDomain)== 0) + { + CMDXMLElement + * domainNode = dynamic_cast(childNode); + CProtectionDomain* pPolicy= NULL; + + {//Get the attribute "name" to get the domain name + domainNode->GetAttribute (KNameAttr, attrVal); + + if ( attrVal.Length ()>0) + { + if ( isDomainPresent (attrVal)) + { + //invalid xml file + //delete pPolicy; + iPolicyInfo.ResetAndDestroy (); + iAliasGroup.ResetAndDestroy (); + iLastError = EErrRepeatedDomainTag; + CleanupStack::PopAndDestroy(documentNode); + return; + } + + pPolicy = CProtectionDomain::NewL (); + pPolicy->SetDomainName (attrVal); + } + else + { + //domain name is invalid + if ( pPolicy) + delete pPolicy; + iPolicyInfo.ResetAndDestroy (); + iAliasGroup.ResetAndDestroy (); + iLastError = EErrInvalidDomainName; + CleanupStack::PopAndDestroy(documentNode); + return; + } + + if ( domainNode->HasChildNodes ()) + { + CPermissionSet* caps = CPermissionSet::NewL (); + + CMDXMLNode + * domainChildNode = domainNode->FirstChild (); + for (; domainChildNode;domainChildNode=domainChildNode->NextSibling ()) + { + if ( domainChildNode->NodeType ()==CMDXMLNode::EElementNode) + { + if ( 0==domainChildNode->NodeName().CompareF (KAllow))// unconditional node + { + TBool result = GetCapabilities( + (CMDXMLElement*)domainChildNode, + *caps); //get list of uncond caps + + if(result < 0) + { + //Invalid capability string in policy file + if ( pPolicy) + delete pPolicy; + if(caps) + delete caps; + iPolicyInfo.ResetAndDestroy (); + iAliasGroup.ResetAndDestroy (); + iLastError = result; //EErrInvalidCapability or EErrRepeatedCaps + CleanupStack::PopAndDestroy(documentNode); + return; + } + } + else if ( 0==domainChildNode->NodeName().CompareF (KUser))// Conditional node + { + //Get UGCaps + TUserPromptOption upOption(RTUserPrompt_UnDefined); + + TInt error = GetConditions ((CMDXMLElement*)domainChildNode, upOption);//Get conditions + + if(EErrInvalidPermission == error) + { + // invalid permission is specified + if ( pPolicy) + delete pPolicy; + if(caps) + delete caps; + iLastError = EErrInvalidPermission; + iPolicyInfo.ResetAndDestroy (); + iAliasGroup.ResetAndDestroy (); + CleanupStack::PopAndDestroy(documentNode); + return; + } + + TUserPromptOption + defCond = GetDefaultCondition ((CMDXMLElement*)domainChildNode); + + if(RTUserPrompt_UnDefined == defCond) + { + //default condition is not specified + if ( pPolicy) + delete pPolicy; + if(caps) + delete caps; + iLastError = EErrNoDefaultCondition; + iPolicyInfo.ResetAndDestroy (); + iAliasGroup.ResetAndDestroy (); + CleanupStack::PopAndDestroy(documentNode); + return; + } + + //default condition is specified + error = GetCapabilities ( + (CMDXMLElement*)domainChildNode, + *caps, + upOption, + ETrue, defCond); //get list of ug caps + if(error < 0) + { + //Invalid capability string in policy file + if ( pPolicy) + delete pPolicy; + if(caps) + delete caps; + iPolicyInfo.ResetAndDestroy (); + iAliasGroup.ResetAndDestroy (); + iLastError = error; //EErrInvalidCapability or EErrRepeatedCaps + CleanupStack::PopAndDestroy(documentNode); + return; + } + } + else // neither USER nor ALLOW node + { + //checking for misplaced alias tag + if((KErrNone == domainChildNode->NodeName().CompareF(KAlias))) + { + if ( pPolicy) + delete pPolicy; + if(caps) + delete caps; + iLastError = EErrMisplacedAlias; + iAliasGroup.ResetAndDestroy (); + iPolicyInfo.ResetAndDestroy (); + CleanupStack::PopAndDestroy(documentNode); + return; + } + } + } + else + { + //the node is not an element node + //hence it should be comment / junk content + if((KErrNone == domainChildNode->NodeName().CompareF(KText))) + { + if ( pPolicy) + delete pPolicy; + if (caps) + delete caps; + iLastError = EErrJunkContent; + iPolicyInfo.ResetAndDestroy (); + iAliasGroup.ResetAndDestroy (); + CleanupStack::PopAndDestroy(documentNode); + return; + } + else if(KErrNone == domainChildNode->NodeName().CompareF(KComment)) + continue; + } + } + if ( pPolicy) + pPolicy->SetCapInfo (caps); + + } + } + + if ( pPolicy) + iPolicyInfo.AppendL (pPolicy); + } + else if((KErrNone == nodeName.CompareF(KText))) + { + iLastError = EErrJunkContent; + iPolicyInfo.ResetAndDestroy (); + iAliasGroup.ResetAndDestroy (); + CleanupStack::PopAndDestroy(documentNode); + return; + } + + childNode = childNode->NextSibling (); //traverse to the next sibling node + + } + } //rootNode->HasChildNodes() + else + { + //No policy information in the xml file + //Treat this as an error + iLastError = EErrNoPolicyInfo; + iPolicyInfo.ResetAndDestroy (); + iAliasGroup.ResetAndDestroy (); + CleanupStack::PopAndDestroy(documentNode); + return; + } + + CleanupStack::PopAndDestroy(documentNode); + } + else + { + iLastError = EErrInvalidDocNode; + return; + } + } + } + } + +TInt CPolicyParser::GetCapsNode(CMDXMLElement* aParentDomainNode, + RPointerArray& aCapNodes, const TDesC& aNodeName) + { + if ( aParentDomainNode->HasChildNodes ()) + { + CMDXMLNode* childNode = aParentDomainNode->FirstChild (); + + do + { + if ( childNode) + { + if ( 0==childNode->NodeName().Compare (aNodeName)) + { + CMDXMLElement* pAllowNode = dynamic_cast(childNode); + aCapNodes.AppendL (pAllowNode); + } + + childNode = childNode->NextSibling (); + } + + } + while (NULL != childNode); + } + + return EErrNone; //No other possible return err code... + } + +CMDXMLElement* CPolicyParser::GetCapsNode(CMDXMLElement* aParentDomainNode, + const TDesC& aNodeName) + { + if ( aParentDomainNode->HasChildNodes ()) + { + CMDXMLNode* childNode = aParentDomainNode->FirstChild (); + + do + { + if ( childNode) + { + if ( 0==childNode->NodeName().Compare (aNodeName)) + { + CMDXMLElement* pAllowNode = dynamic_cast(childNode); + return pAllowNode; + } + + childNode = childNode->NextSibling (); + } + + } + while (NULL != childNode); + } + return NULL; + } + +TInt CPolicyParser::GetCapabilities(CMDXMLElement* aParentNode, + CPermissionSet& aCapInfo, TUserPromptOption aUpOpt, TBool aUGCaps, + TUserPromptOption aDefUpOpt) + { + if ( aParentNode->HasChildNodes ()) + { + CMDXMLNode* childNode = aParentNode->FirstChild (); + + do + { + if ( childNode) + { + CMDXMLNode* capabilitiesNode= NULL; + if ( 0==childNode->NodeName().CompareF (KCapabilities)) + { + capabilitiesNode = dynamic_cast(childNode); + + //traverse nodes under + if ( capabilitiesNode->HasChildNodes ()) + { + RCapabilityArray capabilities; + + for (CMDXMLNode + * capabilityNode=capabilitiesNode->FirstChild (); capabilityNode;capabilityNode=capabilityNode->NextSibling ()) + { + //Get the textnode under + if ( capabilityNode) + { + for (CMDXMLNode + * capChildNode=capabilityNode->FirstChild (); capChildNode;capChildNode=capChildNode->NextSibling ()) + { + //Get the textnode under + if ( CMDXMLNode::ETextNode==capChildNode->NodeType ()) + { + CMDXMLText + * capTextNode = dynamic_cast(capChildNode); + //Extract text out of this node + TCapability + cap = GetCapability (capTextNode->Data ()); + + if ((ECapability_None!=cap)) + { + + // Get LOGIC for the storage of Group capability + + if ( aUGCaps) + { + if ( (!IsPresent(aCapInfo,cap)) && (!IsUserGrantPresent(aCapInfo,cap))) + { + capabilities.Append(cap); + + if ( RTUserPrompt_UnDefined==aUpOpt) + { + CPermission* perm = CPermission::NewL(capabilities, aDefUpOpt,aDefUpOpt); + aCapInfo.AppendPermission (*perm); + } + + else + { + CPermission* perm = CPermission::NewL(capabilities, aDefUpOpt,aUpOpt); + aCapInfo.AppendPermission (*perm); + } + } + else + { + return EErrRepeatedCaps; + } + } + else + { + //Check before appending unconditional capability that + //whether the capability is already added or not... + if ( (!IsPresent(aCapInfo,cap)) && (!IsUserGrantPresent(aCapInfo,cap))) + { + aCapInfo.AppendUncondCap (cap); + } + else + { + //capability string given more than once.. hence invalid + return EErrRepeatedCaps; + } + } + } + else + { + TBool invalidCaps = ETrue; + + for(TInt idx = 0; idx < iAliasGroup.Count(); idx++) + { + CPermission *tempObj = iAliasGroup[idx]; + TPtrC name = tempObj->PermName(); + + if ((KErrNone == capTextNode->Data().CompareF(name))) + { + //it is not a text node. so is an alias group + + //alias group name is found. so obtain the caps + TUint32 capAlias = tempObj->PermissionData(); + invalidCaps = EFalse; + if( aUGCaps) + { + for(TInt idx1 = 0; idx1 < 20; idx1++) + { + TUint32 tempCapToCheck(KDefaultEnableBit); + tempCapToCheck = tempCapToCheck << (idx1); + + if(capAlias & tempCapToCheck) + capabilities.Append((TCapability)idx1); + + } + if ( RTUserPrompt_UnDefined==aUpOpt) + { + CPermission* perm = CPermission::NewL(capabilities, aDefUpOpt,aDefUpOpt); + perm->SetPermName(name); + aCapInfo.AppendPermission (*perm); + } + + else + { + CPermission* perm = CPermission::NewL(capabilities, aDefUpOpt,aUpOpt); + perm->SetPermName(name); + aCapInfo.AppendPermission (*perm); + } + } + else + { + TUint32 capPresent = aCapInfo.UnconditionalCaps(); + TUint32 capAfter = capAlias | capPresent; + TUint32 capRep = capAlias ^ capPresent; + TUint32 errChk = capRep & capAfter; //error if capAfter and error are different + + if(!(errChk & capAfter)) + { + //capability string given more than once.. hence invalid + return EErrRepeatedCaps; + } + + aCapInfo.AppendUncondCapabilities(capAfter); + } + } + } + + if (invalidCaps) + { + //just log the error message + RDebug::Print (_L ("CPolicyParser::GetCapabilities : Invalid capability string")); + return EErrInvalidCapability; + } + } + + } + } + } + capabilities.Close(); + } + } + else + { + RDebug::Print (_L ("CPolicyParser::GetCapabilities : No under ")); + } + + } + + childNode = childNode->NextSibling (); + } + else + { + RDebug::Print (_L ("CPolicyParser::GetCapabilities : Childnode NULL")); + } + } + while (NULL != childNode); + } + + return EErrNone; + } + +TInt CPolicyParser::GetCapabilitiesForGroup(CMDXMLElement* aParentNode, + CPermissionSet& aCapInfo, CPermission& aAliasInfo, TUserPromptOption aUpOpt, TBool aUGCaps, + TUserPromptOption aDefUpOpt) + { + if ( aParentNode->HasChildNodes ()) + { + CMDXMLNode* childNode = aParentNode->FirstChild (); + + do + { + if ( childNode) + { + CMDXMLNode* capabilitiesNode= NULL; + if ( 0==childNode->NodeName().CompareF (KCapabilities)) + { + capabilitiesNode = dynamic_cast(childNode); + + //traverse nodes under + if ( capabilitiesNode->HasChildNodes ()) + { + RCapabilityArray capabilities; + + for (CMDXMLNode + * capabilityNode=capabilitiesNode->FirstChild (); capabilityNode;capabilityNode=capabilityNode->NextSibling ()) + { + //Get the textnode under + if ( capabilityNode) + { + for (CMDXMLNode + * capChildNode=capabilityNode->FirstChild (); capChildNode;capChildNode=capChildNode->NextSibling ()) + { + //Get the textnode under + if ( CMDXMLNode::ETextNode==capChildNode->NodeType ()) + { + CMDXMLText + * capTextNode = dynamic_cast(capChildNode); + //Extract text out of this node + TCapability + cap = GetCapability (capTextNode->Data ()); + + + if ((ECapability_None!=cap)) + { + + // Get LOGIC for the storage of Group capability + + if ( aUGCaps) + { + //For ALIAS GROUP this condition is not true and foll stm are not executed + if ( (!IsPresent(aCapInfo,cap)) && (!IsUserGrantPresent(aCapInfo,cap))) + { + capabilities.Append(cap); + + if ( RTUserPrompt_UnDefined==aUpOpt) + { + CPermission* perm = CPermission::NewL(capabilities, aDefUpOpt,aDefUpOpt); + + aCapInfo.AppendPermission (*perm); + } + + else + { + CPermission* perm = CPermission::NewL(capabilities, aDefUpOpt,aUpOpt); + + aCapInfo.AppendPermission (*perm); + } + } + else + { + return EErrRepeatedCaps; + } + } + else + { + //Check before appending unconditional capability that + //whether the capability is already added or not... + if ( (!IsPresent(aCapInfo,cap) && (!IsUserGrantPresent(aCapInfo,cap))) && (!IsCapsAliasPresent(aAliasInfo,cap))) + { + aCapInfo.AppendUncondCap (cap); + aAliasInfo.AppendCapPermData(cap); + } + else + { + //capability string given more than once.. hence invalid + return EErrRepeatedCaps; + } + } + } + else + { + TBool invalidCaps = ETrue; + for(TInt idx = 0; idx < iAliasGroup.Count(); idx++) + { + CPermission *tempObj = iAliasGroup[idx]; + TPtrC name = tempObj->PermName(); + + if ((KErrNone == capTextNode->Data().CompareF(name))) + { + invalidCaps = EFalse; + //it is not a text node. so is an alias group + + //alias group name is found. so obtain the caps + TUint32 capAlias = tempObj->PermissionData(); + TUint32 capPresent = aCapInfo.UnconditionalCaps(); + TUint32 capAfter = capAlias | capPresent; + TUint32 capRep = capAlias ^ capPresent; + TUint32 errChk = capRep & capAfter; //error if capAfter and error are different + + if(!(errChk & capAfter)) + { + //capability string given more than once.. hence invalid + return EErrRepeatedCaps; + } + + aCapInfo.AppendUncondCapabilities(capAfter); + aAliasInfo.SetPermissionData(capAfter); + } + } + + if (invalidCaps) + { + //just log the error message + RDebug::Print (_L ("CPolicyParser::GetCapabilities : Invalid capability string")); + return EErrInvalidCapability; + } + } + + } + } + } + + + capabilities.Close(); + } + } + else + { + RDebug::Print (_L ("CPolicyParser::GetCapabilities : No under ")); + } + + } + + childNode = childNode->NextSibling (); + } + else + { + RDebug::Print (_L ("CPolicyParser::GetCapabilities : Childnode NULL")); + } + + } + while (NULL != childNode); + } + + return EErrNone; + } + +TInt CPolicyParser::GetConditions(CMDXMLElement* aParentNode, TUserPromptOption& aUserPromptOpt) + { + TUint32 ret(RTUserPrompt_UnDefined); + + if ( aParentNode->HasChildNodes ()) + { + CMDXMLNode* childNode = aParentNode->FirstChild (); + + do + { + if ( childNode) + { + CMDXMLNode* condNode= NULL; + if ( 0==childNode->NodeName().CompareF (KCondition)) + { + condNode = dynamic_cast(childNode); + + if ( condNode->HasChildNodes ()) + { + for (CMDXMLNode* condChildNode=condNode->FirstChild (); condChildNode;condChildNode=condChildNode->NextSibling ()) + { + //Get the textnode under + if ( CMDXMLNode::ETextNode==condChildNode->NodeType ()) + { + CMDXMLText + * condition = dynamic_cast(condChildNode); + + if ( condition) + { + TInt32 returnVal = GetUserPromptOption (condition->Data ()); + + if(RTUserPrompt_UnDefined == returnVal) + { + aUserPromptOpt = (TUserPromptOption)returnVal; + return EErrInvalidPermission; + } + + ret |= returnVal; + } + } + } + } + } + childNode = childNode->NextSibling (); + } + + } + while (NULL != childNode); + } + + aUserPromptOpt = (TUserPromptOption)ret; + return EErrNone; + } + +TBool CPolicyParser::isDomainPresent(const TDesC& aDomainName) + { + TBool isPresent(EFalse); + + for (TInt i(0); i!=iPolicyInfo.Count ();++i) + { + if ( 0==iPolicyInfo[i]->DomainName().CompareF (aDomainName)) + { + isPresent=ETrue; + break; + } + } + + return isPresent; + } + +TBool CPolicyParser::IsPresent(const CPermissionSet& aCapInfo, TCapability aCap) + { + TUint32 uncondCaps = aCapInfo.UnconditionalCaps (); + + TUint32 tempCapToCheck(KDefaultEnableBit); + tempCapToCheck = tempCapToCheck << (aCap); + + return (uncondCaps & tempCapToCheck); + } + +TBool CPolicyParser::IsCapsAliasPresent(const CPermission& aAliasInfo, TCapability aCap) + { + TUint32 uncondCaps = aAliasInfo.PermissionData (); + + TUint32 tempCapToCheck(KDefaultEnableBit); + tempCapToCheck = tempCapToCheck << (aCap); + + return (uncondCaps & tempCapToCheck); + } + +TBool CPolicyParser::IsUserGrantPresent(const CPermissionSet& aCapInfo, + TCapability aCap) + { + TUint32 perms(KDefaultNullBit); + //RPermissions tempPerms = aCapInfo.Permissions(); + for (TInt i(0); i!=(aCapInfo.Permissions()).Count ();++i) + { + TUint32 temp(KDefaultEnableBit); + RCapabilityArray capabilities; + (aCapInfo.Permissions())[i]->Capabilitilites(capabilities); + for(TInt capIdx(0);capIdx!=capabilities.Count();++capIdx) + { + temp = temp << (capabilities[capIdx]); + perms |= temp; + } + capabilities.Close(); + } + + TUint32 temp(KDefaultEnableBit); + temp = temp << (aCap); + return (perms & temp); + } + +TUserPromptOption CPolicyParser::GetDefaultCondition(CMDXMLElement* aParentNode) + { + if ( aParentNode->HasChildNodes ()) + { + CMDXMLNode* childNode = aParentNode->FirstChild (); + + do + { + if ( childNode) + { + CMDXMLNode* condNode= NULL; + if ( 0==childNode->NodeName().CompareF (KDefCondition)) + { + condNode = dynamic_cast(childNode); + + if ( condNode->HasChildNodes ()) + { + for (CMDXMLNode* condChildNode=condNode->FirstChild (); condChildNode;condChildNode=condChildNode->NextSibling ()) + { + if ( CMDXMLNode::ETextNode==condChildNode->NodeType ()) + { + CMDXMLText + * condition = dynamic_cast(condChildNode); + + if ( condition) + { + return GetUserPromptOption (condition->Data ()); + } + } + } + } + } + + childNode = childNode->NextSibling (); + } + + } + while (NULL != childNode); + } + + return RTUserPrompt_UnDefined; + } + +TCapability CPolicyParser::GetCapability(const TDesC& aUserPromptOpt) + { + TCapability cap(ECapability_None); + + if ( 0==aUserPromptOpt.CompareF (KCapabilityTCB)) + { + cap=ECapabilityTCB; + } + else + if ( 0==aUserPromptOpt.CompareF (KCapabilityCommDD)) + { + cap=ECapabilityCommDD; + } + else + if ( 0==aUserPromptOpt.CompareF (KCapabilityPowerMgmt)) + { + cap=ECapabilityPowerMgmt; + } + else + if ( 0==aUserPromptOpt.CompareF (KCapabilityMultimediaDD)) + { + cap=ECapabilityMultimediaDD; + } + else + if ( 0==aUserPromptOpt.CompareF (KCapabilityReadDeviceData)) + { + cap=ECapabilityReadDeviceData; + } + else + if ( 0==aUserPromptOpt.CompareF (KCapabilityWriteDeviceData)) + { + cap=ECapabilityWriteDeviceData; + } + else + if ( 0==aUserPromptOpt.CompareF (KCapabilityDRM)) + { + cap=ECapabilityDRM; + } + else + if ( 0==aUserPromptOpt.CompareF (KCapabilityTrustedUI)) + { + cap=ECapabilityTrustedUI; + } + else + if ( 0==aUserPromptOpt.CompareF (KCapabilityProtServ)) + { + cap=ECapabilityProtServ; + } + else + if ( 0==aUserPromptOpt.CompareF (KCapabilityDiskAdmin)) + { + cap=ECapabilityDiskAdmin; + } + else + if ( 0==aUserPromptOpt.CompareF (KCapabilityNetworkControl)) + { + cap=ECapabilityNetworkControl; + } + else + if ( 0==aUserPromptOpt.CompareF (KCapabilityAllFiles)) + { + cap=ECapabilityAllFiles; + } + else + if ( 0==aUserPromptOpt.CompareF (KCapabilitySwEvent)) + { + cap=ECapabilitySwEvent; + } + else + if ( 0==aUserPromptOpt.CompareF (KCapabilityNetworkServices)) + { + cap=ECapabilityNetworkServices; + } + else + if ( 0==aUserPromptOpt.CompareF (KCapabilityLocalServices)) + { + cap=ECapabilityLocalServices; + } + else + if ( 0==aUserPromptOpt.CompareF (KCapabilityReadUserData)) + { + cap=ECapabilityReadUserData; + } + else + if ( 0==aUserPromptOpt.CompareF (KCapabilityWriteUserData)) + { + cap=ECapabilityWriteUserData; + } + else + if ( 0==aUserPromptOpt.CompareF (KCapabilityLocation)) + { + cap=ECapabilityLocation; + } + else + if ( 0==aUserPromptOpt.CompareF (KCapabilitySurroundingsDD)) + { + cap=ECapabilitySurroundingsDD; + } + else + if ( 0==aUserPromptOpt.CompareF (KCapabilityUserEnvironment)) + { + cap=ECapabilityUserEnvironment; + } + return cap; + } + +TUserPromptOption CPolicyParser::GetUserPromptOption(const TDesC& aUserPromptOpt) + { + TUserPromptOption userPromptOpt = RTUserPrompt_UnDefined; + + if ( 0==aUserPromptOpt.CompareF (KUserPromptOneShot)) + { + userPromptOpt=RTUserPrompt_OneShot; + } + else + if ( 0==aUserPromptOpt.CompareF (KUserPromptSession)) + { + userPromptOpt=RTUserPrompt_Session; + } + else + if ( 0==aUserPromptOpt.CompareF (KUserPromptBlanket)) + { + userPromptOpt=RTUserPrompt_Permanent; + } + return userPromptOpt; + } + +TBool CPolicyParser::isAliasPresent(const TDesC& aAliasName) + { + TBool isPresent(EFalse); + + for(TInt idx = 0; idx < iAliasGroup.Count(); idx++) + { + if( KErrNone == iAliasGroup[idx]->PermName().CompareF(aAliasName)) + { + isPresent = ETrue; + break; + } + + } + + return isPresent; + } diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerserver/src/rtsecmgrprotectiondomain.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/rtsecuritymanagerserver/src/rtsecmgrprotectiondomain.cpp Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,99 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + +#include "rtsecmgrprotectiondomain.h" +#include "rtsecmgrserverdef.h" + +#include +#include + +CProtectionDomain* CProtectionDomain::NewL() + { + CProtectionDomain* self = CProtectionDomain::NewLC (); + CleanupStack::Pop (self); + return self; + } + +CProtectionDomain* CProtectionDomain::NewLC() + { + CProtectionDomain* self = new (ELeave) CProtectionDomain(); + CleanupStack::PushL (self); + self->ConstructL (); + return self; + } + +CProtectionDomain* CProtectionDomain::NewL(RStoreReadStream& aSource) + { + CProtectionDomain* self = CProtectionDomain::NewLC (aSource); + CleanupStack::Pop (self); + return self; + } + +CProtectionDomain* CProtectionDomain::NewLC(RStoreReadStream& aSource) + { + CProtectionDomain* self = CProtectionDomain::NewLC (); + self->InternalizeL (aSource); + return self; + } + +CProtectionDomain::~CProtectionDomain() + { + if ( iDomain) + { + delete iDomain; + iDomain = NULL; + } + + if ( iPermSet) + { + delete iPermSet; + iPermSet = NULL; + } + } + +void CProtectionDomain::ExternalizeL(RStoreWriteStream& aSink) const + { + //externalise policy info data + aSink.WriteInt32L (iDomain->Des().MaxLength ()); + aSink << *iDomain; + iPermSet->ExternalizeL (aSink); + } + +void CProtectionDomain::InternalizeL(RStoreReadStream& aSource) + { + TInt32 len = aSource.ReadInt32L (); + if ( iDomain) + { + delete iDomain; + iDomain = NULL; + } + + iDomain = HBufC::NewL (aSource, len); + + if ( iPermSet) + { + delete iPermSet; + iPermSet = NULL; + } + + iPermSet = CPermissionSet::NewL (); + iPermSet->InternalizeL (aSource); + } diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerserver/src/rtsecmgrscriptmanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/rtsecuritymanagerserver/src/rtsecmgrscriptmanager.cpp Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,206 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + +#include "rtsecmgrscriptmanager.h" +#include "rtsecmgrserverdef.h" + +#include "rtsecmgrstore.h" +#include "rtsecmgrpolicy.h" +#include "rtsecmgrpolicymanager.h" +#include "rtsecmgrscriptmanager.h" + +#include +//#include + +_LIT(KDefaultTrustPolicy,"UnTrusted"); + +CScriptManager* CScriptManager::NewL(CSecMgrStore* aSecMgrDB,CPolicyManager* aPolicyMgr) +{ + CScriptManager* pThis = CScriptManager::NewLC(aSecMgrDB,aPolicyMgr); + CleanupStack::Pop(pThis); + return pThis; +} + +CScriptManager* CScriptManager::NewLC(CSecMgrStore* aSecMgrDB,CPolicyManager* aPolicyMgr) +{ + CScriptManager* pThis = new (ELeave) CScriptManager(aSecMgrDB,aPolicyMgr); + CleanupStack::PushL(pThis); + pThis->ConstructL(); + return pThis; +} + +CScriptManager::~CScriptManager() +{ + if(iSecMgrDB) + { + iSecMgrDB->WriteCounter(iID); + } + + iScripts.ResetAndDestroy(); +} +void CScriptManager::ConstructL() +{ + iSecMgrDB->ReadCounter(iID); +} + +TExecutableID CScriptManager::RegisterScript(TPolicyID aPolicyID/*,const CTrustInfo& aTrustPolicy*/) +{ + TInt ret(ErrPolicyIDDoesNotExist); + + CPolicy* policy = iPolicyMgr->Policy(aPolicyID); + + if(policy) + { + CProtectionDomain* domain = policy->ProtectionDomain(KDefaultTrustPolicy); + + if(domain) + { + TExecutableID execID(GetID()); + CScript* script = CScript::NewL(aPolicyID,execID); + script->SetPermissionSet(domain->PermSet()); + iScripts.Append(script); + + TRAPD(err,iSecMgrDB->RegisterScriptL(execID,*script)); + + if(KErrNone==err) + { + return execID; + } + else + { + return ret; + } + } + + } + return ret; + +} + +TExecutableID CScriptManager::RegisterScript(TPolicyID aPolicyID,const TDesC& aHashValue/*,const CTrustInfo& aTrustPolicy*/) + { + TInt ret(ErrPolicyIDDoesNotExist); + + CPolicy* policy = iPolicyMgr->Policy(aPolicyID); + + if(policy) + { + CProtectionDomain* domain = policy->ProtectionDomain(KDefaultTrustPolicy); + + if(domain) + { + TExecutableID execID(GetID()); + CScript* script = CScript::NewLC(aPolicyID,execID); + script->SetHashMarkL(aHashValue); + script->SetPermissionSet(domain->PermSet()); + iScripts.Append(script); + + TRAPD(err,iSecMgrDB->RegisterScriptL(execID, *script)); + + if(KErrNone==err) + { + ret=execID; + } + CleanupStack::Pop(script); + } + + } + return ret; + + } + + +void CScriptManager::UnRegisterScriptL(TExecutableID aExecID,TPolicyID aPolicyID) +{ + TInt ret; + CScript *scriptInfo = CScript::NewL(KInvalidPolicyID ,aExecID); + ret = ScriptInfo(*scriptInfo); + + + if( (KErrNone<=ret) && (scriptInfo->PolicyID() != aPolicyID)) + { + ret = ErrInvalidPolicyID; + } + + delete scriptInfo; + scriptInfo = NULL; + + if(ret == KErrNone) + { + for(TInt i=0; i!=iScripts.Count();++i) + { + if(iScripts[i]->ScriptID()==aExecID) + { + delete iScripts[i]; + iScripts.Remove(i); //remove from the cache first + break; + } + } + iSecMgrDB->UnRegisterScriptL(aExecID); + } + else + User::Leave(ret); +} + +TInt CScriptManager::ScriptInfo(CScript& aScriptInfo) +{ + //Check if script info is already present in the cache (iScriptStore) + //If yes, + for(TInt i=0; i!=iScripts.Count();++i) + { + if(iScripts[i]->ScriptID()==aScriptInfo.ScriptID()) + { + { + aScriptInfo = *iScripts[i]; + return KErrNone; + } + } + } + + //Read the script file + TInt ret = iSecMgrDB->ReadScriptInfo(aScriptInfo.ScriptID(),aScriptInfo); + + if(KErrNone==ret) + { + iScripts.AppendL(&aScriptInfo); + } + + return ret; +} + +TInt CScriptManager::GetScriptFile(TExecutableID aExecID,TDes& aScriptFile) +{ + return iSecMgrDB->GetScriptFile(aExecID,aScriptFile); +} + +void CScriptManager::UpdatePermGrantL(TExecutableID aExecID,TPermGrant aPermGrant,TPermGrant aPermDenied) +{ + for(TInt i(0);i!=iScripts.Count();++i) + { + if(iScripts[i]->ScriptID()==aExecID) + { + iScripts[i]->SetPermGranted(aPermGrant); + iScripts[i]->SetPermDenied(aPermDenied); + iSecMgrDB->WriteScriptInfoL(aExecID,*iScripts[i]); + return; + } + } +} diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerserver/src/rtsecmgrserver.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/rtsecuritymanagerserver/src/rtsecmgrserver.cpp Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,100 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + +#include +#include + +#include "rtsecmgrserver.h" +#include "rtsecmgrsession.h" +#include "rtsecmgrsubSession.h" +#include "rtsecmgrcommonDef.h" +#include "rtsecmgrstore.h" +#include "rtsecmgrpolicymanager.h" +#include "rtsecmgrscriptmanager.h" + +CRTSecMgrServer* CRTSecMgrServer::NewL(CActive::TPriority aActiveObjectPriority) + { + CRTSecMgrServer* self=new (ELeave) CRTSecMgrServer(aActiveObjectPriority); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +CRTSecMgrServer* CRTSecMgrServer::NewLC(CActive::TPriority aActiveObjectPriority) + { + CRTSecMgrServer* self=new (ELeave) CRTSecMgrServer(aActiveObjectPriority); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +void CRTSecMgrServer::ConstructL() + { + StartL(KSecServerProcessName); + iContainerIndex = CObjectConIx::NewL(); + + iSecMgrDb = CSecMgrStore::NewL(); + iPolicyMgr = CPolicyManager::NewL(iSecMgrDb); + iPolicyMgr->RestorePoliciesL(); + + iScriptMgr = CScriptManager::NewL(iSecMgrDb,iPolicyMgr); + + // Start the shutDown timer + iShutDown.ConstructL(); + + iShutDown.Start (); + } + +CRTSecMgrServer::~CRTSecMgrServer() + { + if(iPolicyMgr) + { + delete iPolicyMgr; + } + + if(iScriptMgr) + { + delete iScriptMgr; + } + + if(iSecMgrDb) + { + delete iSecMgrDb; + } + + Delete(iContainerIndex); + + iShutDown.Cancel(); + } + +CSession2* CRTSecMgrServer::NewSessionL(const TVersion &aVersion,const RMessage2& /*aMessage*/) const + { + // Check that the version is OK + TVersion v(KRTSecMgrServMajorVersionNumber,KRTSecMgrServMinorVersionNumber,KRTSecMgrServBuildVersionNumber); + if (!User::QueryVersionSupported(v,aVersion)) + User::Leave(KErrNotSupported); + + return CRTSecMgrSession::NewL(); + } + + + diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerserver/src/rtsecmgrserversession.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/rtsecuritymanagerserver/src/rtsecmgrserversession.cpp Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,176 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + +#include +#include + +#include "rtsecmgrserver.h" +#include "rtsecmgrdata.h" +#include "rtsecmgrpolicyparser.h" +#include "rtsecmgrsession.h" +#include "rtsecmgrsubsession.h" + +/** + * Called by client/server framework after + * session has been successfully created. + * In effect, a second-phase constructor. + * creates: + * + * 1. the object index + * 2. the object container for this session. + * + */ +void CRTSecMgrSession::CreateL() + { + if(!iSecMgrServer) + iSecMgrServer = dynamic_cast (const_cast (Server())); + + iSecMgrServer->AddSession (); + + iSubSessionObjectIndex = CObjectIx::NewL (); + iContainer = iSecMgrServer->NewContainerL (); + } + +void CRTSecMgrSession::CloseSession() + { + //delete the object index (this stores the objects for this session) + Delete (iSubSessionObjectIndex); + //delete the object container (this provides unique ids for the objects of this session ) + + iSecMgrServer->RemoveFromContainerIx (iContainer); + iSecMgrServer->RemoveSession (); + } + +/** + * A simple utility function to return the appropriate + * CRTSecMgrSubSession object given a client's subsession handle. + */ +CRTSecMgrSubSession* CRTSecMgrSession::SubSessionFromHandle( + const RMessage2& aMessage, TInt aHandle) + { + CRTSecMgrSubSession* subSession = (CRTSecMgrSubSession*)iSubSessionObjectIndex->At(aHandle); + + if ( !subSession) + { + PanicClient (aMessage, EBadSubsessionHandle); + } + return subSession; + } + +void CRTSecMgrSession::DispatchMessageL(const RMessage2& aMessage) + { + // First check for session-relative requests + switch (aMessage.Function ()) + { + case ESetPolicy: + SetPolicy (aMessage); + return; + case EUpdatePolicy: + UpdatePolicy (aMessage); + return; + case EUnsetPolicy: + UnsetPolicy (aMessage); + return; + case ERegisterScript: + RegisterScript (aMessage); + return; + case ERegisterScriptWithHash: + RegisterScript (aMessage, ETrue); + return; + case EUnRegisterScript: + UnregisterScript (aMessage); + return; + case EGetScriptSession: + GetScriptSessionL (aMessage); + return; + case EGetTrustedUnRegScriptSession: + GetTrustedUnRegScriptSessionL (aMessage); + return; + case ESecServCloseSession: + CloseSession (); + return; + } + + // All other function codes must be subsession relative. + // We need to find the appropriate server side subsession + // i.e. the CRTSecMgrSubSession object. + // The handle value is passed as the 4th aregument. + CRTSecMgrSubSession* subSession = SubSessionFromHandle (aMessage, + aMessage.Int3 ()); + switch (aMessage.Function ()) + { + case ECloseScriptSession: + DeleteSubSession (aMessage.Int3 ()); + return; + case EUpdatePermanentGrant: + subSession->UpdatePermGrantL (aMessage); + return; + case EGetScriptFile: + subSession->GetScriptFile (aMessage); + return; + default: + PanicClient (aMessage, EBadRequest); + return; + } + } +TBool CRTSecMgrSession::IsScriptOpenWithPolicy(TPolicyID aPolicyID) + { + for (TInt i(0); i!=iSubSessionObjectIndex->Count ();++i) + { + CRTSecMgrSubSession + * subsession = ((CRTSecMgrSubSession*)iSubSessionObjectIndex->operator[](i)); + if ( subsession) + { + if ( aPolicyID==subsession->Script().PolicyID ()) + { + return ETrue; + } + } + else + { + continue; + } + + } + return EFalse; + } + +TBool CRTSecMgrSession::IsScriptSessionOpen(TExecutableID aScriptID,CRTSecMgrSubSession* aCurrentSession) + { + for (TInt i(0); i!=iSubSessionObjectIndex->Count ();++i) + { + CRTSecMgrSubSession + * subsession = ((CRTSecMgrSubSession*)iSubSessionObjectIndex->operator[](i)); + if ( subsession && ( subsession != aCurrentSession)) + { + if ( aScriptID==subsession->ScriptID ()) + { + return ETrue; + } + } + else + { + continue; + } + + } + return EFalse; + } diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerserver/src/rtsecmgrserverstartUp.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/rtsecuritymanagerserver/src/rtsecmgrserverstartUp.cpp Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,84 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + +#include +#include "rtsecmgrserver.h" +#include "rtsecmgrserverdef.h" + +TInt E32Main(); // Process entry point + +static void RunServerL() + { + // Naming the server process and thread after the startup helps to debug panics + // No error checking as names are not critical for operation + User::RenameProcess (KSecServerProcessName); + User::RenameThread (KSecSrvMainThreadName); + + // Set process priority + RProcess svrProcess; + svrProcess.SetPriority (EPriorityHigh); + svrProcess.Close (); + + // Create and install the active scheduler we need + CActiveScheduler* scheduler = new (ELeave) CActiveScheduler; + CleanupStack::PushL (scheduler); + + CActiveScheduler::Install ( scheduler); + CRTSecMgrServer* server= NULL; + server = CRTSecMgrServer::NewLC (CActive::EPriorityStandard); + + // Initialisation complete, now signal the client + RProcess::Rendezvous (KErrNone); + CActiveScheduler::Start (); + // Cleanup + CleanupStack::PopAndDestroy (server); + CleanupStack::PopAndDestroy (scheduler); + } + +/* + * Process main function + * + */ +TInt E32Main() + { + __UHEAP_MARK; + TInt i = User::CountAllocCells(); + TInt err(KErrNone); + + // Start server. + CTrapCleanup* cleanup = CTrapCleanup::New (); + err = KErrNoMemory; + + if ( cleanup) + { + TRAP(err, RunServerL()); + + delete cleanup; + cleanup = NULL; + } + i = User::CountAllocCells(); + __UHEAP_MARKEND; + + return err; + } + +// End of File + diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerserver/src/rtsecmgrstore.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/rtsecuritymanagerserver/src/rtsecmgrstore.cpp Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,593 @@ +/* +* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Definition of security manager store class + * +*/ + + + + + + +#include +#include +#include +#include +#include +#include "rtsecmgrstore.h" +#include "rtsecmgrdata.h" + +const TReal DEFAULT_VERSION(1.0); +CSecMgrStore* CSecMgrStore::NewL() + { + CSecMgrStore* self = CSecMgrStore::NewLC (); + CleanupStack::Pop (self); + return self; + } + +CSecMgrStore* CSecMgrStore::NewLC() + { + CSecMgrStore* self = new (ELeave)CSecMgrStore(); + CleanupStack::PushL (self); + self->ConstructL (); + return self; + } + +void CSecMgrStore::StorePolicyL(const CPolicy& aPolicy) + { + __UHEAP_MARK; + + HBufC *policyFile = HBufC::NewLC(KMaxName); + TPtr ptr(policyFile->Des()); + GetPolicyFile (ptr, aPolicy.PolicyID ()); + + CFileStore* store = CPermanentFileStore::ReplaceLC (iFsSession, ptr, + EFileWrite); + store->SetTypeL (KPermanentFileStoreLayoutUid); + + // Construct the output stream. + RStoreWriteStream outstream; + TStreamId id = outstream.CreateLC (*store); + //Write version of the policy + outstream.WriteReal32L (TReal(DEFAULT_VERSION)); + + TInt aliasCnt(aPolicy.AliasGroup().Count()); + outstream.WriteInt32L (aliasCnt); + RAliasGroup aliasGroups = aPolicy.AliasGroup(); + for (TInt i(0); i!=aliasCnt;++i) + { + CPermission* alias = aliasGroups[i]; + alias->ExternalizeL (outstream); + } + + TInt domainCnt(aPolicy.ProtectionDomain().Count ()); + outstream.WriteInt32L (domainCnt); + RProtectionDomains domains = aPolicy.ProtectionDomain (); + for (TInt i(0); i!=domainCnt;++i) + { + CProtectionDomain* domain = domains[i]; + domain->ExternalizeL (outstream); + } + + // Commit changes to the stream + outstream.CommitL (); + + CleanupStack::PopAndDestroy (&outstream); + + // Set this stream id as the root + store->SetRootL (id); + + // Commit changes to the store + store->CommitL (); + + CleanupStack::PopAndDestroy (store); + CleanupStack::PopAndDestroy (policyFile); + __UHEAP_MARKEND; + } + + +TInt CSecMgrStore::RemovePolicy(TPolicyID aPolicyID) + { + HBufC *policyFile = HBufC::NewLC(KMaxName); + TPtr ptr(policyFile->Des()); + TInt ret(KErrNone); + + ret = GetPolicyFile(ptr, aPolicyID); + + if(KErrNone==ret) + ret = iFsSession.Delete (ptr); + CleanupStack::PopAndDestroy(policyFile); + return ret; + } + +void CSecMgrStore::RestorePoliciesL(RPolicies& aPolicy) + { + //Fetch all the individual policy files from "epoc32\winscw\c\private\\policy" directory + //Iteratively internalise the policy files, with the policyID (PolicyID is = to filename) + HBufC *privateDir = HBufC::NewLC(KMaxName); + TPtr privateDirptr(privateDir->Des()); + GetPolicyPath (privateDirptr); + + // create search string + HBufC* searchBuf = privateDirptr.AllocLC (); + TPtr searchPtr(searchBuf->Des()); + + CDir* dir= NULL; + iFsSession.GetDir (searchPtr, KEntryAttNormal, + ESortByName | EAscending, dir); + + if ( dir) + { + CleanupStack::PushL (dir); + for (TInt i=0; i!=dir->Count ();++i) + { + TEntry entry = dir->operator[] (i); + HBufC *fileName = HBufC::NewLC(KMaxName); + TPtr ptr(fileName->Des()); + ptr = entry.iName; + + HBufC *policyFile = HBufC::NewLC(KMaxName); + TPtr policyFileptr(policyFile->Des()); + policyFileptr.Copy(privateDirptr) ; + policyFileptr.Append (ptr); + + CFileStore* store = CPermanentFileStore::OpenLC (iFsSession, + policyFileptr, EFileShareAny); + + RStoreReadStream instream; + instream.OpenLC (*store, store->Root ()); + + TLex16 lexer(ptr); + TPolicyID pID; + lexer.Val (pID); + + CPolicy* policy = CPolicy::NewL (pID, instream); + aPolicy.Append (policy); + + CleanupStack::PopAndDestroy (&instream); //instream + CleanupStack::PopAndDestroy (store); //store + CleanupStack::PopAndDestroy (policyFile); + CleanupStack::PopAndDestroy (fileName); + } + + CleanupStack::PopAndDestroy (dir); + } + + CleanupStack::PopAndDestroy (searchBuf); + CleanupStack::PopAndDestroy (privateDir); + } + +void CSecMgrStore::RegisterScriptL(TExecutableID aExecID, const CScript& aScript) + { + HBufC *scriptFile = HBufC::NewLC(KMaxName); + TPtr ptr(scriptFile->Des()); + User::LeaveIfError(GetScriptFile(ptr,aExecID)); + + CFileStore* store = CPermanentFileStore::ReplaceLC (iFsSession, ptr, + EFileWrite); + + // Must say what kind of file store. + store->SetTypeL (KPermanentFileStoreLayoutUid); + + // Construct the output stream. + RStoreWriteStream outstream; + TStreamId id = outstream.CreateLC (*store); + + aScript.ExternalizeL (outstream); + + // Commit changes to the stream + outstream.CommitL (); + + // Cleanup the stream object + CleanupStack::PopAndDestroy (&outstream); + + // Set this stream id as the root + store->SetRootL (id); + + // Commit changes to the store + store->CommitL (); + + CleanupStack::PopAndDestroy (store); + CleanupStack::PopAndDestroy (scriptFile); + + } + +void CSecMgrStore::UnRegisterScriptL(TExecutableID aExecID) + { + HBufC *scriptFile = HBufC::NewLC(KMaxName); + TPtr ptr(scriptFile->Des()); + User::LeaveIfError (GetScriptFile (ptr,aExecID)); + + if ( BaflUtils::FileExists (iFsSession, ptr)) + iFsSession.Delete (ptr); + else + { + User::Leave(ErrInvalidScriptID); + } + CleanupStack::PopAndDestroy (scriptFile); + } + +TInt CSecMgrStore::ReadScriptInfo(TExecutableID aExecID, CScript& aScriptInfo) + { + __UHEAP_MARK; + + HBufC *scriptFile = HBufC::NewLC(KMaxName); + TPtr ptr(scriptFile->Des()); + TInt ret(GetScriptFile (ptr, aExecID)); + + if ( KErrNone==ret) + { + if ( !BaflUtils::FileExists(iFsSession, ptr)) + { + return ErrInvalidScriptID; + } + + CFileStore* store= NULL; + store=CPermanentFileStore::OpenLC (iFsSession, ptr, + EFileShareAny); + + if ( KErrNone==ret) + { + RStoreReadStream instream; + instream.OpenLC (*store, store->Root ()); + + aScriptInfo.InternalizeL (instream); + + CleanupStack::PopAndDestroy (&instream); + CleanupStack::PopAndDestroy (store); + } + return ret; + } + CleanupStack::PopAndDestroy (scriptFile); + __UHEAP_MARKEND; + + return ret; + } + +TInt CSecMgrStore::GetScriptFile(TExecutableID aExecID, TDes& aScriptFile) + { + TInt ret(GetScriptFile (aScriptFile,aExecID)); + + if ( KErrNone==ret) + { + if ( !BaflUtils::FileExists(iFsSession, aScriptFile)) + { + return ErrInvalidScriptID; + } + } + + return ret; + } + +void CSecMgrStore::WriteScriptInfoL(TExecutableID aExecID, CScript& aScriptInfo) + { + __UHEAP_MARK; + + HBufC *scriptFile = HBufC::NewLC(KMaxName); + TPtr ptr(scriptFile->Des()); + User::LeaveIfError (GetScriptFile (ptr,aExecID)); + + CFileStore* store = CPermanentFileStore::ReplaceLC (iFsSession, ptr, + EFileWrite); + + // Must say what kind of file store. + store->SetTypeL (KPermanentFileStoreLayoutUid); + + // Construct the output stream. + RStoreWriteStream outstream; + TStreamId id = outstream.CreateLC (*store); + + aScriptInfo.ExternalizeL (outstream); + + // Commit changes to the stream + outstream.CommitL (); + + // Cleanup the stream object + CleanupStack::PopAndDestroy (&outstream); + + // Set this stream id as the root + store->SetRootL (id); + + // Commit changes to the store + store->CommitL (); + + CleanupStack::PopAndDestroy (store); + CleanupStack::PopAndDestroy (scriptFile); + __UHEAP_MARKEND; + } + +TInt CSecMgrStore::ReadCounter(TExecutableID& aExecID) + { + HBufC *configFile = HBufC::NewLC(KMaxName); + TPtr ptr(configFile->Des()); + TInt ret(GetConfigFile (ptr)); + + if ( KErrNone==ret) + { + if ( !BaflUtils::FileExists(iFsSession,*configFile)) + { + aExecID = (TExecutableID)KCRUIdSecMgr.iUid; + BaflUtils::EnsurePathExistsL (iFsSession, *configFile); + CleanupStack::PopAndDestroy (configFile); + return WriteCounter (aExecID); + } + + CFileStore* store = CPermanentFileStore::OpenLC (iFsSession, + *configFile, EFileRead); + + RStoreReadStream instream; + instream.OpenLC (*store, store->Root ()); + + aExecID = instream.ReadInt32L (); + + CleanupStack::PopAndDestroy (&instream); + CleanupStack::PopAndDestroy (store); + } + CleanupStack::PopAndDestroy (configFile); + return ret; + } + +TInt CSecMgrStore::WriteCounter(TExecutableID aExecID) + { + HBufC *configFile = HBufC::NewLC(KMaxName); + TPtr ptr(configFile->Des()); + TInt ret(GetConfigFile (ptr)); + + if ( KErrNone==ret) + { + CFileStore* store = CPermanentFileStore::ReplaceLC (iFsSession, + *configFile, EFileWrite); + + // Must say what kind of file store. + store->SetTypeL (KPermanentFileStoreLayoutUid); + + // Construct the output stream. + RStoreWriteStream outstream; + TStreamId id = outstream.CreateLC (*store); + + outstream.WriteInt32L (aExecID); + + // Commit changes to the stream + outstream.CommitL (); + + // Cleanup the stream object + CleanupStack::PopAndDestroy (&outstream); + + // Set this stream id as the root + store->SetRootL (id); + + // Commit changes to the store + store->CommitL (); + + CleanupStack::PopAndDestroy (store); + } + CleanupStack::PopAndDestroy (configFile); + return ret; + } + +TInt CSecMgrStore::GetPrivatePath(TDes& aPrivatePath) + { + TInt ret(KErrNone); + aPrivatePath.Append (KCDrive); + + HBufC *privateDir = HBufC::NewLC(KMaxName); + TPtr ptr(privateDir->Des()); + ret = iFsSession.PrivatePath (ptr); + + if ( KErrNone==ret) + { + aPrivatePath.Append (ptr); + } + CleanupStack::PopAndDestroy (privateDir); + return ret; + } + +TInt CSecMgrStore::GetConfigFile(TDes& aConfigFile) + { + TInt ret(KErrNone); + + aConfigFile.Append (KCDrive); + + HBufC *privateDir = HBufC::NewLC(KMaxName); + TPtr ptr(privateDir->Des()); + ret = iFsSession.PrivatePath (ptr); + + if ( KErrNone==ret) + { + aConfigFile.Append (ptr); + + ret = iFsSession.MkDirAll (ptr); + + if ( KErrAlreadyExists==ret) + ret=KErrNone; + + aConfigFile.Append (KConfigFile); + } + CleanupStack::PopAndDestroy (privateDir); + return ret; + } + +TInt CSecMgrStore::GetPolicyPath(TDes& aFile) + { + TInt ret(GetPrivatePath (aFile)); + + if ( KErrNone==ret) + { + aFile.Append (KPolicyDir); + aFile.Append (KDirSeparator); + + TRAP (ret, BaflUtils::EnsurePathExistsL (iFsSession, aFile)); + } + + return ret; + } + +TInt CSecMgrStore::GetScriptPath(TDes& aFile) + { + TInt ret(GetPrivatePath (aFile)); + + if ( KErrNone==ret) + { + aFile.Append (KScriptDir); + aFile.Append (KDirSeparator); + + TRAP (ret, BaflUtils::EnsurePathExistsL (iFsSession, aFile)); + + if ( KErrAlreadyExists==ret) + ret = KErrNone; + } + + return ret; + } + +TInt CSecMgrStore::GetScriptFile(TDes& aFile, TExecutableID aExecID) + { + TInt ret(GetScriptPath (aFile)); + + if ( (KErrNone==ret) || (KErrAlreadyExists==ret)) + { + if ( KAnonymousScript!=aExecID) + { + HBufC *fSuffix = HBufC::NewLC(KMaxName); + TPtr fSuffixPtr(fSuffix->Des()); + fSuffixPtr.Num (aExecID); + + aFile.Append (fSuffixPtr); + aFile.Append (KDatExtn); + CleanupStack::PopAndDestroy (fSuffix); + } + } + + if ( KErrAlreadyExists==ret) + ret=KErrNone; + + return ret; + } + +TInt CSecMgrStore::GetPolicyFile(TDes& aFile, TPolicyID aPolicyID) + { + TInt ret(GetPolicyPath (aFile)); + + if ( (KErrNone==ret) || (KErrAlreadyExists==ret)) + { + HBufC *fPolicyName = HBufC::NewLC(KMaxName); + TPtr policyNamePtr(fPolicyName->Des()); + policyNamePtr.Num (aPolicyID); + + aFile.Append (policyNamePtr); + aFile.Append (KDatExtn); + CleanupStack::PopAndDestroy (fPolicyName); + } + + return ret; + } + + +TInt CSecMgrStore::BackupFile(TPolicyID aPolicyID) +{ + HBufC *policyFile = HBufC::NewLC(KMaxName); + TPtr policyFilePtr(policyFile->Des()); + + HBufC *tempPolicyFile = HBufC::NewLC(KMaxName); + TPtr tempPolicyFilePtr(tempPolicyFile->Des()); + + TInt ret(GetPolicyFile(policyFilePtr, aPolicyID)); + + ret= GetPolicyPath (tempPolicyFilePtr); + + if ( (KErrNone==ret) || (KErrAlreadyExists==ret)) + { + HBufC *fPolicyName = HBufC::NewLC(KMaxName); + TPtr policyNamePtr(fPolicyName->Des()); + policyNamePtr.Num (aPolicyID); + + tempPolicyFilePtr.Append (policyNamePtr); + tempPolicyFilePtr.Append (_L("_temp")); + tempPolicyFilePtr.Append (KDatExtn); + + CleanupStack::PopAndDestroy(fPolicyName); + } + + CFileMan *fm = CFileMan::NewL(iFsSession); + TInt backupResult = fm->Copy(policyFilePtr, tempPolicyFilePtr, CFileMan::EOverWrite); + delete fm; + + CleanupStack::PopAndDestroy(tempPolicyFile); + CleanupStack::PopAndDestroy(policyFile); + + return backupResult; +} + +TInt CSecMgrStore::RemoveTempPolicy(TPolicyID aPolicyID) +{ + HBufC *tempPolicyFile = HBufC::NewLC(KMaxName); + TPtr tempPolicyFilePtr(tempPolicyFile->Des()); + + TInt ret= GetPolicyPath (tempPolicyFilePtr); + + if ( (KErrNone==ret) || (KErrAlreadyExists==ret)) + { + HBufC *fPolicyName = HBufC::NewLC(KMaxName); + TPtr policyNamePtr(fPolicyName->Des()); + policyNamePtr.Num (aPolicyID); + + tempPolicyFilePtr.Append (policyNamePtr); + tempPolicyFilePtr.Append (_L("_temp")); + tempPolicyFilePtr.Append (KDatExtn); + + CleanupStack::PopAndDestroy(fPolicyName); + } + + CFileMan *fm = CFileMan::NewL(iFsSession); + TInt rmTempResult = fm->Delete(tempPolicyFilePtr); + delete fm; + + CleanupStack::PopAndDestroy(tempPolicyFile); + + return rmTempResult; +} + +TInt CSecMgrStore::RestoreTempPolicy(TPolicyID aPolicyID) +{ + HBufC *policyFile = HBufC::NewLC(KMaxName); + TPtr policyFilePtr(policyFile->Des()); + + HBufC *tempPolicyFile = HBufC::NewLC(KMaxName); + TPtr tempPolicyFilePtr(tempPolicyFile->Des()); + + TInt ret(GetPolicyFile(policyFilePtr, aPolicyID)); + + ret= GetPolicyPath (tempPolicyFilePtr); + + if ( (KErrNone==ret) || (KErrAlreadyExists==ret)) + { + HBufC *fPolicyName = HBufC::NewLC(KMaxName); + TPtr policyNamePtr(fPolicyName->Des()); + policyNamePtr.Num (aPolicyID); + + tempPolicyFilePtr.Append (policyNamePtr); + tempPolicyFilePtr.Append (_L("_temp")); + tempPolicyFilePtr.Append (KDatExtn); + + CleanupStack::PopAndDestroy(fPolicyName); + } + + CFileMan *fm = CFileMan::NewL(iFsSession); + TInt restoreResult = fm->Copy(tempPolicyFilePtr, policyFilePtr, CFileMan::EOverWrite); + delete fm; + + CleanupStack::PopAndDestroy(tempPolicyFile); + CleanupStack::PopAndDestroy(policyFile); + return restoreResult; +} diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerutil/BWINS/RTSecMgrUtilU.DEF --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/rtsecuritymanagerutil/BWINS/RTSecMgrUtilU.DEF Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,60 @@ +EXPORTS + ??1CPermission@@UAE@XZ @ 1 NONAME ; CPermission::~CPermission(void) + ??1CPermissionSet@@UAE@XZ @ 2 NONAME ; CPermissionSet::~CPermissionSet(void) + ??1CRTSecMgrRegisterScriptMsg@@UAE@XZ @ 3 NONAME ; CRTSecMgrRegisterScriptMsg::~CRTSecMgrRegisterScriptMsg(void) + ??1CScript@@UAE@XZ @ 4 NONAME ; CScript::~CScript(void) + ??4CScript@@QAEABV0@ABV0@@Z @ 5 NONAME ; class CScript const & CScript::operator=(class CScript const &) + ?AppendCapPermData@CPermission@@QAEXW4TCapability@@@Z @ 6 NONAME ; void CPermission::AppendCapPermData(enum TCapability) + ?AppendPermission@CPermissionSet@@QAEXAAVCPermission@@@Z @ 7 NONAME ; void CPermissionSet::AppendPermission(class CPermission &) + ?AppendUncondCap@CPermissionSet@@QAEXW4TCapability@@@Z @ 8 NONAME ; void CPermissionSet::AppendUncondCap(enum TCapability) + ?AppendUncondCapabilities@CPermissionSet@@QAEXK@Z @ 9 NONAME ; void CPermissionSet::AppendUncondCapabilities(unsigned long) + ?Capabilitilites@CPermission@@QBEXAAV?$RArray@W4TCapability@@@@@Z @ 10 NONAME ; void CPermission::Capabilitilites(class RArray &) const + ?Capability@CPermission@@QBE?AW4TCapability@@XZ @ 11 NONAME ; enum TCapability CPermission::Capability(void) const + ?Condition@CPermission@@QBE?AW4TUserPromptOption@@XZ @ 12 NONAME ; enum TUserPromptOption CPermission::Condition(void) const + ?Default@CPermission@@QBE?AW4TUserPromptOption@@XZ @ 13 NONAME ; enum TUserPromptOption CPermission::Default(void) const + ?ExternalizeL@CPermission@@QBEXAAVRWriteStream@@@Z @ 14 NONAME ; void CPermission::ExternalizeL(class RWriteStream &) const + ?ExternalizeL@CPermissionSet@@QBEXAAVRWriteStream@@@Z @ 15 NONAME ; void CPermissionSet::ExternalizeL(class RWriteStream &) const + ?ExternalizeL@CScript@@QBEXAAVRWriteStream@@@Z @ 16 NONAME ; void CScript::ExternalizeL(class RWriteStream &) const + ?InternalizeL@CPermission@@QAEXAAVRReadStream@@@Z @ 17 NONAME ; void CPermission::InternalizeL(class RReadStream &) + ?InternalizeL@CPermissionSet@@QAEXAAVRReadStream@@@Z @ 18 NONAME ; void CPermissionSet::InternalizeL(class RReadStream &) + ?InternalizeL@CScript@@QAEXAAVRReadStream@@@Z @ 19 NONAME ; void CScript::InternalizeL(class RReadStream &) + ?NewL@CPermission@@SAPAV1@ABV1@@Z @ 20 NONAME ; class CPermission * CPermission::NewL(class CPermission const &) + ?NewL@CPermission@@SAPAV1@ABV?$RArray@W4TCapability@@@@@Z @ 21 NONAME ; class CPermission * CPermission::NewL(class RArray const &) + ?NewL@CPermission@@SAPAV1@ABV?$RArray@W4TCapability@@@@W4TUserPromptOption@@1@Z @ 22 NONAME ; class CPermission * CPermission::NewL(class RArray const &, enum TUserPromptOption, enum TUserPromptOption) + ?NewL@CPermission@@SAPAV1@ABV?$RArray@W4TCapability@@@@W4TUserPromptOption@@@Z @ 23 NONAME ; class CPermission * CPermission::NewL(class RArray const &, enum TUserPromptOption) + ?NewL@CPermission@@SAPAV1@XZ @ 24 NONAME ; class CPermission * CPermission::NewL(void) + ?NewL@CPermissionSet@@SAPAV1@ABV1@@Z @ 25 NONAME ; class CPermissionSet * CPermissionSet::NewL(class CPermissionSet const &) + ?NewL@CPermissionSet@@SAPAV1@XZ @ 26 NONAME ; class CPermissionSet * CPermissionSet::NewL(void) + ?NewL@CRTSecMgrRegisterScriptMsg@@SAPAV1@HABVTDesC16@@@Z @ 27 NONAME ; class CRTSecMgrRegisterScriptMsg * CRTSecMgrRegisterScriptMsg::NewL(int, class TDesC16 const &) + ?NewL@CScript@@SAPAV1@HH@Z @ 28 NONAME ; class CScript * CScript::NewL(int, int) + ?NewLC@CPermission@@SAPAV1@ABV1@@Z @ 29 NONAME ; class CPermission * CPermission::NewLC(class CPermission const &) + ?NewLC@CPermission@@SAPAV1@ABV?$RArray@W4TCapability@@@@@Z @ 30 NONAME ; class CPermission * CPermission::NewLC(class RArray const &) + ?NewLC@CPermission@@SAPAV1@ABV?$RArray@W4TCapability@@@@W4TUserPromptOption@@1@Z @ 31 NONAME ; class CPermission * CPermission::NewLC(class RArray const &, enum TUserPromptOption, enum TUserPromptOption) + ?NewLC@CPermission@@SAPAV1@ABV?$RArray@W4TCapability@@@@W4TUserPromptOption@@@Z @ 32 NONAME ; class CPermission * CPermission::NewLC(class RArray const &, enum TUserPromptOption) + ?NewLC@CPermission@@SAPAV1@XZ @ 33 NONAME ; class CPermission * CPermission::NewLC(void) + ?NewLC@CPermissionSet@@SAPAV1@ABV1@@Z @ 34 NONAME ; class CPermissionSet * CPermissionSet::NewLC(class CPermissionSet const &) + ?NewLC@CPermissionSet@@SAPAV1@XZ @ 35 NONAME ; class CPermissionSet * CPermissionSet::NewLC(void) + ?NewLC@CRTSecMgrRegisterScriptMsg@@SAPAV1@ABVTDesC8@@@Z @ 36 NONAME ; class CRTSecMgrRegisterScriptMsg * CRTSecMgrRegisterScriptMsg::NewLC(class TDesC8 const &) + ?NewLC@CRTSecMgrRegisterScriptMsg@@SAPAV1@HABVTDesC16@@@Z @ 37 NONAME ; class CRTSecMgrRegisterScriptMsg * CRTSecMgrRegisterScriptMsg::NewLC(int, class TDesC16 const &) + ?NewLC@CScript@@SAPAV1@HH@Z @ 38 NONAME ; class CScript * CScript::NewLC(int, int) + ?PackMsgL@CRTSecMgrRegisterScriptMsg@@QBEPAVHBufC8@@XZ @ 39 NONAME ; class HBufC8 * CRTSecMgrRegisterScriptMsg::PackMsgL(void) const + ?PermDenied@CScript@@QBEKXZ @ 40 NONAME ; unsigned long CScript::PermDenied(void) const + ?PermGranted@CScript@@QBEKXZ @ 41 NONAME ; unsigned long CScript::PermGranted(void) const + ?PermName@CPermission@@QBEABVTDesC16@@XZ @ 42 NONAME ; class TDesC16 const & CPermission::PermName(void) const + ?PermissionData@CPermission@@QBEKXZ @ 43 NONAME ; unsigned long CPermission::PermissionData(void) const + ?PermissionSet@CScript@@QAEAAVCPermissionSet@@XZ @ 44 NONAME ; class CPermissionSet & CScript::PermissionSet(void) + ?PermissionSet@CScript@@QBEABVCPermissionSet@@XZ @ 45 NONAME ; class CPermissionSet const & CScript::PermissionSet(void) const + ?Permissions@CPermissionSet@@QAEAAV?$RPointerArray@VCPermission@@@@XZ @ 46 NONAME ; class RPointerArray & CPermissionSet::Permissions(void) + ?Permissions@CPermissionSet@@QBEABV?$RPointerArray@VCPermission@@@@XZ @ 47 NONAME ; class RPointerArray const & CPermissionSet::Permissions(void) const + ?PolicyID@CScript@@QBEHXZ @ 48 NONAME ; int CScript::PolicyID(void) const + ?ScriptID@CScript@@QBEHXZ @ 49 NONAME ; int CScript::ScriptID(void) const + ?SetCondition@CPermission@@QAEXW4TUserPromptOption@@@Z @ 50 NONAME ; void CPermission::SetCondition(enum TUserPromptOption) + ?SetDefault@CPermission@@QAEXW4TUserPromptOption@@@Z @ 51 NONAME ; void CPermission::SetDefault(enum TUserPromptOption) + ?SetPermDenied@CScript@@QAEXK@Z @ 52 NONAME ; void CScript::SetPermDenied(unsigned long) + ?SetPermGranted@CScript@@QAEXK@Z @ 53 NONAME ; void CScript::SetPermGranted(unsigned long) + ?SetPermName@CPermission@@QAEXABVTDesC16@@@Z @ 54 NONAME ; void CPermission::SetPermName(class TDesC16 const &) + ?SetPermissionData@CPermission@@QAEXK@Z @ 55 NONAME ; void CPermission::SetPermissionData(unsigned long) + ?SetPermissionSet@CScript@@QAEXABVCPermissionSet@@@Z @ 56 NONAME ; void CScript::SetPermissionSet(class CPermissionSet const &) + ?UnconditionalCaps@CPermissionSet@@QBEKXZ @ 57 NONAME ; unsigned long CPermissionSet::UnconditionalCaps(void) const + ?UnconditionalCaps@CPermissionSet@@QBEXAAV?$RArray@W4TCapability@@@@@Z @ 58 NONAME ; void CPermissionSet::UnconditionalCaps(class RArray &) const + diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerutil/EABI/RTSecMgrUtilU.DEF --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/rtsecuritymanagerutil/EABI/RTSecMgrUtilU.DEF Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,68 @@ +EXPORTS + _ZN11CPermission10SetDefaultE17TUserPromptOption @ 1 NONAME + _ZN11CPermission11SetPermNameERK7TDesC16 @ 2 NONAME + _ZN11CPermission12InternalizeLER11RReadStream @ 3 NONAME + _ZN11CPermission12SetConditionE17TUserPromptOption @ 4 NONAME + _ZN11CPermission17AppendCapPermDataE11TCapability @ 5 NONAME + _ZN11CPermission17SetPermissionDataEm @ 6 NONAME + _ZN11CPermission4NewLERK6RArrayI11TCapabilityE @ 7 NONAME + _ZN11CPermission4NewLERK6RArrayI11TCapabilityE17TUserPromptOption @ 8 NONAME + _ZN11CPermission4NewLERK6RArrayI11TCapabilityE17TUserPromptOptionS5_ @ 9 NONAME + _ZN11CPermission4NewLERKS_ @ 10 NONAME + _ZN11CPermission4NewLEv @ 11 NONAME + _ZN11CPermission5NewLCERK6RArrayI11TCapabilityE @ 12 NONAME + _ZN11CPermission5NewLCERK6RArrayI11TCapabilityE17TUserPromptOption @ 13 NONAME + _ZN11CPermission5NewLCERK6RArrayI11TCapabilityE17TUserPromptOptionS5_ @ 14 NONAME + _ZN11CPermission5NewLCERKS_ @ 15 NONAME + _ZN11CPermission5NewLCEv @ 16 NONAME + _ZN11CPermissionD0Ev @ 17 NONAME + _ZN11CPermissionD1Ev @ 18 NONAME + _ZN11CPermissionD2Ev @ 19 NONAME + _ZN14CPermissionSet11PermissionsEv @ 20 NONAME + _ZN14CPermissionSet12InternalizeLER11RReadStream @ 21 NONAME + _ZN14CPermissionSet15AppendUncondCapE11TCapability @ 22 NONAME + _ZN14CPermissionSet16AppendPermissionER11CPermission @ 23 NONAME + _ZN14CPermissionSet24AppendUncondCapabilitiesEm @ 24 NONAME + _ZN14CPermissionSet4NewLERKS_ @ 25 NONAME + _ZN14CPermissionSet4NewLEv @ 26 NONAME + _ZN14CPermissionSet5NewLCERKS_ @ 27 NONAME + _ZN14CPermissionSet5NewLCEv @ 28 NONAME + _ZN14CPermissionSetD0Ev @ 29 NONAME + _ZN14CPermissionSetD1Ev @ 30 NONAME + _ZN14CPermissionSetD2Ev @ 31 NONAME + _ZN26CRTSecMgrRegisterScriptMsg4NewLEiRK7TDesC16 @ 32 NONAME + _ZN26CRTSecMgrRegisterScriptMsg5NewLCERK6TDesC8 @ 33 NONAME + _ZN26CRTSecMgrRegisterScriptMsg5NewLCEiRK7TDesC16 @ 34 NONAME + _ZN26CRTSecMgrRegisterScriptMsgD0Ev @ 35 NONAME + _ZN26CRTSecMgrRegisterScriptMsgD1Ev @ 36 NONAME + _ZN26CRTSecMgrRegisterScriptMsgD2Ev @ 37 NONAME + _ZN7CScript12InternalizeLER11RReadStream @ 38 NONAME + _ZN7CScript13PermissionSetEv @ 39 NONAME + _ZN7CScript13SetPermDeniedEm @ 40 NONAME + _ZN7CScript14SetPermGrantedEm @ 41 NONAME + _ZN7CScript16SetPermissionSetERK14CPermissionSet @ 42 NONAME + _ZN7CScript4NewLEii @ 43 NONAME + _ZN7CScript5NewLCEii @ 44 NONAME + _ZN7CScriptD0Ev @ 45 NONAME + _ZN7CScriptD1Ev @ 46 NONAME + _ZN7CScriptD2Ev @ 47 NONAME + _ZN7CScriptaSERKS_ @ 48 NONAME + _ZNK11CPermission10CapabilityEv @ 49 NONAME + _ZNK11CPermission12ExternalizeLER12RWriteStream @ 50 NONAME + _ZNK11CPermission14PermissionDataEv @ 51 NONAME + _ZNK11CPermission15CapabilitilitesER6RArrayI11TCapabilityE @ 52 NONAME + _ZNK11CPermission7DefaultEv @ 53 NONAME + _ZNK11CPermission8PermNameEv @ 54 NONAME + _ZNK11CPermission9ConditionEv @ 55 NONAME + _ZNK14CPermissionSet11PermissionsEv @ 56 NONAME + _ZNK14CPermissionSet12ExternalizeLER12RWriteStream @ 57 NONAME + _ZNK14CPermissionSet17UnconditionalCapsER6RArrayI11TCapabilityE @ 58 NONAME + _ZNK14CPermissionSet17UnconditionalCapsEv @ 59 NONAME + _ZNK26CRTSecMgrRegisterScriptMsg8PackMsgLEv @ 60 NONAME + _ZNK7CScript10PermDeniedEv @ 61 NONAME + _ZNK7CScript11PermGrantedEv @ 62 NONAME + _ZNK7CScript12ExternalizeLER12RWriteStream @ 63 NONAME + _ZNK7CScript13PermissionSetEv @ 64 NONAME + _ZNK7CScript8PolicyIDEv @ 65 NONAME + _ZNK7CScript8ScriptIDEv @ 66 NONAME + diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerutil/group/RTSecMgrUtil.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/rtsecuritymanagerutil/group/RTSecMgrUtil.mmp Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,61 @@ +/* +* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Project definition file for project +* +*/ + + + + + + + +#include + +TARGET RTSecMgrUtil.dll +TARGETTYPE dll +UID 0x1000008D 0x2000F849 + +CAPABILITY CAP_GENERAL_DLL +VENDORID VID_DEFAULT + +VERSION 10.1 +paged + +MW_LAYER_SYSTEMINCLUDE + +USERINCLUDE ../inc/ +USERINCLUDE ../../inc/ + +SOURCEPATH ../src/ +SOURCE rtsecmgrpermission.cpp +SOURCE rtsecmgrscript.cpp +SOURCE rtsecmgrmsg.cpp + +//MACRO RTSECMGR_TRACE + +LIBRARY euser.lib +LIBRARY efsrv.lib +LIBRARY estor.lib +LIBRARY flogger.lib + +#if defined(ARMCC) +deffile ../EABI/ +#elif defined(WINSCW) +deffile ../BWINS/ +#elif defined(WINS) +deffile ../BWINS/ +#else +deffile ../bmarm/ +#endif diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerutil/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/rtsecuritymanagerutil/group/bld.inf Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,27 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + + +#include +PRJ_EXPORTS + +PRJ_MMPFILES +RTSecMgrUtil.mmp diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerutil/src/rtsecmgrmsg.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/rtsecuritymanagerutil/src/rtsecmgrmsg.cpp Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,120 @@ +/* +* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Defines rtsecmgr common client server message types + * +*/ + + + + + + + +#include "rtsecmgrmsg.h" + +CRTSecMgrRegisterScriptMsg::CRTSecMgrRegisterScriptMsg(TPolicyID aPolicyID) : + iPolicyID(aPolicyID) + { + // No implementation required + } + +EXPORT_C CRTSecMgrRegisterScriptMsg::~CRTSecMgrRegisterScriptMsg() + { + if ( iHashMarker) + { + delete iHashMarker; + } + } + +EXPORT_C CRTSecMgrRegisterScriptMsg* CRTSecMgrRegisterScriptMsg::NewLC( + TPolicyID aPolicyID, const TDesC& aHashValue) + { + CRTSecMgrRegisterScriptMsg* self = new (ELeave)CRTSecMgrRegisterScriptMsg(aPolicyID); + CleanupStack::PushL (self); + self->ConstructL (aHashValue); + return self; + } + +EXPORT_C CRTSecMgrRegisterScriptMsg* CRTSecMgrRegisterScriptMsg::NewL( + TPolicyID aPolicyID, const TDesC& aHashValue) + { + CRTSecMgrRegisterScriptMsg* self=CRTSecMgrRegisterScriptMsg::NewLC ( + aPolicyID, aHashValue); + CleanupStack::Pop (self); // self; + return self; + } + +// Creates a CRTSecMgrRegisterScriptMsg initialized with the contents of the +// descriptor parameter +EXPORT_C CRTSecMgrRegisterScriptMsg* CRTSecMgrRegisterScriptMsg::NewLC(const TDesC8& aStreamData) + { + // Reads descriptor data from a stream + // and creates a new CRTSecMgrRegisterScriptMsg object + CRTSecMgrRegisterScriptMsg* self = new (ELeave) CRTSecMgrRegisterScriptMsg(); + CleanupStack::PushL (self); + + // Open a read stream for the descriptor + RDesReadStream stream(aStreamData); + CleanupClosePushL (stream); + self->InternalizeL (stream); + CleanupStack::PopAndDestroy (&stream); // finished with the stream + return (self); + } + +void CRTSecMgrRegisterScriptMsg::ConstructL(const TDesC& aHashValue) + { + if ( iHashMarker) + { + delete iHashMarker; + iHashMarker = NULL; + } + + iHashMarker = aHashValue.AllocL (); + } + +// Creates and returns a heap descriptor which holds contents of ’this’ +EXPORT_C HBufC8* CRTSecMgrRegisterScriptMsg::PackMsgL() const + { + // Dynamic data buffer + CBufFlat* buf = CBufFlat::NewL(KMaxMsgLength); + CleanupStack::PushL(buf); + RBufWriteStream stream(*buf); // Stream over the buffer + CleanupClosePushL(stream); + ExternalizeL(stream); + CleanupStack::PopAndDestroy(&stream); + // Create a heap descriptor from the buffer + HBufC8* des = HBufC8::NewL(buf->Size()); + TPtr8 ptr(des->Des()); + buf->Read(0, ptr, buf->Size()); + CleanupStack::PopAndDestroy(buf); // Finished with the buffer + return (des); + } + +// Writes ’this’ to aStream +void CRTSecMgrRegisterScriptMsg::ExternalizeL(RWriteStream& aStream) const + { + if ( iHashMarker) + aStream << *iHashMarker; + else + aStream << KNullDesC8; + + aStream.WriteInt32L (iPolicyID); // Write iPolicyID to the stream + } + +// Initializes ’this’ with the contents of aStream +void CRTSecMgrRegisterScriptMsg::InternalizeL(RReadStream& aStream) + { + iHashMarker = HBufC::NewL (aStream, KMaxHashValueDesLen); + iPolicyID = aStream.ReadInt32L (); // Read iPolicyID + } diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerutil/src/rtsecmgrpermission.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/rtsecuritymanagerutil/src/rtsecmgrpermission.cpp Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,585 @@ +/* +* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Defines permission data structure + * +*/ + + + + + + +#include +#include + +// --------------------------------------------------------------------------- +// Two-phased constructor +// --------------------------------------------------------------------------- +// +EXPORT_C CPermission* CPermission::NewL() + { + CPermission* self = CPermission::NewLC(); + CleanupStack::Pop(self); + return self; + } + +// --------------------------------------------------------------------------- +// Two-phased constructor +// --------------------------------------------------------------------------- +// +EXPORT_C CPermission* CPermission::NewLC() + { + CPermission* self = new (ELeave) CPermission(); + CleanupStack::PushL(self); + return self; + } + +CPermission::CPermission(const CPermission& aPermission) + { + if ( iPermName) + { + delete iPermName; + iPermName = NULL; + } + + iPermName = aPermission.PermName().Alloc(); + iPermissionData = aPermission.PermissionData(); + } +CPermission::CPermission(const RCapabilityArray& aCapabilities) :iPermName(NULL) + { + for(TInt i(0);i!=aCapabilities.Count();++i) + { + TUint32 capBit = LOWBIT << (aCapabilities[i]); + iPermissionData = KDefaultNullBit; + iPermissionData |= capBit; + } + } + +CPermission::CPermission(const RCapabilityArray& aCapabilities, TUserPromptOption aDefOpt) :iPermName(NULL) + { + iPermissionData = KDefaultNullBit; + for(TInt i(0);i!=aCapabilities.Count();++i) + { + TUint32 capBit = LOWBIT << (aCapabilities[i]); + iPermissionData |= capBit; + + if ( aDefOpt&RTUserPrompt_OneShot) + iPermissionData |= DEFAULT_ONESHOT; + else + if ( aDefOpt&RTUserPrompt_Session) + iPermissionData |= DEFAULT_SESSION; + else + if ( aDefOpt&RTUserPrompt_Permanent) + iPermissionData |= DEFAULT_BLANKET; + } + } + +CPermission::CPermission(const RCapabilityArray& aCapabilities, TUserPromptOption aDefOpt,TUserPromptOption aCondition) :iPermName(NULL) + { + iPermissionData = KDefaultNullBit; + for(TInt i(0);i!=aCapabilities.Count();++i) + { + TUint32 capBit = LOWBIT << (aCapabilities[i]); + iPermissionData |= capBit; + iPermissionData |= aCondition; + + if ( aDefOpt&RTUserPrompt_OneShot) + iPermissionData |= DEFAULT_ONESHOT; + else + if ( aDefOpt&RTUserPrompt_Session) + iPermissionData |= DEFAULT_SESSION; + else + if ( aDefOpt&RTUserPrompt_Permanent) + iPermissionData |= DEFAULT_BLANKET; + } + } + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +EXPORT_C CPermission::~CPermission() + { + if(iPermName) + { + delete iPermName; + iPermName = NULL; + } + } + +// --------------------------------------------------------------------------- +// Overloaded constructor +// --------------------------------------------------------------------------- +// +EXPORT_C CPermission* CPermission::NewL(const CPermission& aPermission) + { + CPermission* self = CPermission::NewLC(aPermission); + CleanupStack::Pop(self); + return self; + } + +EXPORT_C CPermission* CPermission::NewLC(const CPermission& aPermission) + { + CPermission* self = new (ELeave) CPermission(aPermission); + CleanupStack::PushL(self); + return self; + } +// --------------------------------------------------------------------------- +// Overloaded constructor +// --------------------------------------------------------------------------- +// +EXPORT_C CPermission* CPermission::NewL(const RCapabilityArray& aCapabilities) + { + CPermission* self = CPermission::NewLC(aCapabilities); + CleanupStack::Pop(self); + return self; + } + +// --------------------------------------------------------------------------- +// Overloaded constructor +// --------------------------------------------------------------------------- +// +EXPORT_C CPermission* CPermission::NewLC(const RCapabilityArray& aCapabilities) + { + CPermission* self = new (ELeave) CPermission(aCapabilities); + CleanupStack::PushL(self); + return self; + } + +// --------------------------------------------------------------------------- +// Overloaded constructor +// --------------------------------------------------------------------------- +// +EXPORT_C CPermission* CPermission::NewL(const RCapabilityArray& aCapabilities, TUserPromptOption aDefOpt) + { + CPermission* self = CPermission::NewLC(aCapabilities, aDefOpt); + CleanupStack::Pop(self); + return self; + } + +// --------------------------------------------------------------------------- +// Overloaded constructor +// --------------------------------------------------------------------------- +// +EXPORT_C CPermission* CPermission::NewLC(const RCapabilityArray& aCapabilities, TUserPromptOption aDefOpt) + { + CPermission* self = new (ELeave) CPermission(aCapabilities ,aDefOpt); + CleanupStack::PushL(self); + return self; + } + +// --------------------------------------------------------------------------- +// Overloaded constructor +// --------------------------------------------------------------------------- +// +EXPORT_C CPermission* CPermission::NewL(const RCapabilityArray& aCapabilities, TUserPromptOption aDefOpt, + TUserPromptOption aCondition) + { + CPermission* self = CPermission::NewLC(aCapabilities, aDefOpt, aCondition); + CleanupStack::Pop(self); + return self; + } + +// --------------------------------------------------------------------------- +// Overloaded constructor +// --------------------------------------------------------------------------- +// +EXPORT_C CPermission* CPermission::NewLC(const RCapabilityArray& aCapabilities, TUserPromptOption aDefOpt, + TUserPromptOption aCondition) + { + CPermission* self = new (ELeave) CPermission(aCapabilities, aDefOpt, aCondition); + CleanupStack::PushL(self); + return self; + } + +// --------------------------------------------------------------------------- +// Returns default condition +// --------------------------------------------------------------------------- +// +EXPORT_C TUserPromptOption CPermission::Default() const + { + TUint32 ret(iPermissionData & DEFAULT_ALL); + if(DEFAULT_ONESHOT&ret) + { + return RTUserPrompt_OneShot; + } + else if(DEFAULT_SESSION&ret) + { + return RTUserPrompt_Session; + } + else if(DEFAULT_BLANKET&ret) + { + return RTUserPrompt_Permanent; + } + return (TUserPromptOption)ret; + } + +// --------------------------------------------------------------------------- +// Returns condition set of the permission +// --------------------------------------------------------------------------- +// +EXPORT_C TUserPromptOption CPermission::Condition() const + { + return (TUserPromptOption)(iPermissionData & CONDITION_ALL); + } + +// --------------------------------------------------------------------------- +// Returns capability of the permission +// --------------------------------------------------------------------------- +// +EXPORT_C TCapability CPermission::Capability() const + { + TCapability retValue = (TCapability)(iPermissionData & CAPABILITY_ALL); + + for(TInt i(ECapabilityTCB);i<=ECapabilityUserEnvironment;++i) + { + TUint32 temp = LOWBIT << i; + if(retValue & temp) + { + return (TCapability)i; + } + } + return ECapability_None; + } + +// --------------------------------------------------------------------------- +// Returns capability of the permission +// --------------------------------------------------------------------------- +// +EXPORT_C void CPermission::Capabilitilites(RCapabilityArray& aCapabilities) const + { + TCapability retValue = (TCapability)(iPermissionData & CAPABILITY_ALL); + + for(TInt i(ECapabilityTCB) ;i <= ECapabilityUserEnvironment ;i++) + { + TUint32 temp = LOWBIT << i; + if(retValue & temp) + { + aCapabilities.Append((TCapability)i); + } + } + } + +// --------------------------------------------------------------------------- +// Sets default condition of the permission +// --------------------------------------------------------------------------- +// +EXPORT_C void CPermission::SetDefault(TUserPromptOption aDefOpt) + { + if ( RTUserPrompt_OneShot==aDefOpt) + { + iPermissionData |= DEFAULT_ONESHOT; + iPermissionData |= CONDITION_ONESHOT; + } + else + if ( RTUserPrompt_Session==aDefOpt) + { + iPermissionData |= DEFAULT_SESSION; + iPermissionData |= CONDITION_SESSION; + } + else + if ( RTUserPrompt_Permanent==aDefOpt) + { + iPermissionData |= DEFAULT_BLANKET; + iPermissionData |= CONDITION_BLANKET; + } + } + +// --------------------------------------------------------------------------- +// Sets condition of the permission +// --------------------------------------------------------------------------- +// +EXPORT_C void CPermission::SetCondition(TUserPromptOption aCondition) + { + iPermissionData |= aCondition; + } + +// --------------------------------------------------------------------------- +// Sets name of the permission +// --------------------------------------------------------------------------- +// +EXPORT_C void CPermission::SetPermName(const TDesC& aPermName) + { + if ( iPermName) + { + delete iPermName; + iPermName = NULL; + } + + iPermName = aPermName.AllocL (); + } + +// --------------------------------------------------------------------------- +// Returns name of the permission +// --------------------------------------------------------------------------- +// +EXPORT_C const TDesC& CPermission::PermName() const + { + if ( iPermName) + return *iPermName; + else + return KNullDesC (); + } + +// --------------------------------------------------------------------------- +// Adds an unconditional capability +// --------------------------------------------------------------------------- +// +EXPORT_C void CPermission::AppendCapPermData(TCapability aCap) + { + if ( (aCap>=ECapabilityTCB)&&(aCap<=ECapabilityUserEnvironment)) + { + iPermissionData = iPermissionData | (LOWBIT << aCap); + } + } + +// --------------------------------------------------------------------------- +// Sets the permission data +// --------------------------------------------------------------------------- +// +EXPORT_C void CPermission::SetPermissionData(TPermissionData aPermData) + { + iPermissionData = aPermData; + } + +// --------------------------------------------------------------------------- +// Returns PermissionData of the permission +// --------------------------------------------------------------------------- +// +EXPORT_C TPermissionData CPermission::PermissionData() const + { + return iPermissionData; + } + +// --------------------------------------------------------------------------- +// Internalizes permission data from stream +// --------------------------------------------------------------------------- +// +EXPORT_C void CPermission::InternalizeL(RReadStream& aInStream) + { + TInt32 len = aInStream.ReadInt32L (); + if ( iPermName) + { + delete iPermName; + iPermName = NULL; + } + + iPermName = HBufC::NewL (aInStream, len); + + iPermissionData = aInStream.ReadUint32L (); + } + +// --------------------------------------------------------------------------- +// ExternalizeLs permission data to stream +// --------------------------------------------------------------------------- +// +EXPORT_C void CPermission::ExternalizeL(RWriteStream& aOutStream) const + { + if(iPermName) + { + aOutStream.WriteInt32L (iPermName->Des().MaxLength ()); + aOutStream << *iPermName; + } + else + { + aOutStream.WriteInt32L (0); + aOutStream << KNullDesC; + } + + aOutStream.WriteUint32L (iPermissionData); + } + +// --------------------------------------------------------------------------- +// Copy constructor +// --------------------------------------------------------------------------- +// +CPermissionSet::CPermissionSet(const CPermissionSet& aPermSet) + { + iUncondCapSet = aPermSet.iUncondCapSet; + } + +void CPermissionSet::ConstructL(const CPermissionSet& aPermSet) + { + iPermissions.ResetAndDestroy (); + //iPermissions.Close(); + + for (TInt idx(0); idx!=aPermSet.iPermissions.Count ();++idx) + { + CPermission *temp = CPermission::NewL(*(aPermSet.iPermissions[idx])); + iPermissions.Append (temp); + } + + } + +// --------------------------------------------------------------------------- +// Two-phased constructor +// --------------------------------------------------------------------------- +// +EXPORT_C CPermissionSet* CPermissionSet::NewL() + { + CPermissionSet* self = CPermissionSet::NewLC(); + CleanupStack::Pop(self); + return self; + } + +// --------------------------------------------------------------------------- +// Two-phased constructor +// --------------------------------------------------------------------------- +// +EXPORT_C CPermissionSet* CPermissionSet::NewLC() + { + CPermissionSet* self = new (ELeave) CPermissionSet(); + CleanupStack::PushL(self); + return self; + } + +// --------------------------------------------------------------------------- +// Two-phased constructor +// --------------------------------------------------------------------------- +// +EXPORT_C CPermissionSet* CPermissionSet::NewL(const CPermissionSet& aPermSet) + { + CPermissionSet* self = CPermissionSet::NewLC(aPermSet); + CleanupStack::Pop(self); + return self; + } + +// --------------------------------------------------------------------------- +// Two-phased constructor +// --------------------------------------------------------------------------- +// +EXPORT_C CPermissionSet* CPermissionSet::NewLC(const CPermissionSet& aPermSet) + { + CPermissionSet* self = new (ELeave) CPermissionSet(aPermSet); + CleanupStack::PushL(self); + self->ConstructL(aPermSet); + return self; + } + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +EXPORT_C CPermissionSet::~CPermissionSet() +{ + iPermissions.ResetAndDestroy(); +} + +// --------------------------------------------------------------------------- +// Adds an unconditional capability +// --------------------------------------------------------------------------- +// +EXPORT_C void CPermissionSet::AppendUncondCap(TCapability aCap) + { + if ( (aCap>=ECapabilityTCB)&&(aCap<=ECapabilityUserEnvironment)) + { + iUncondCapSet = iUncondCapSet | (LOWBIT << aCap); + } + } + +// --------------------------------------------------------------------------- +// Adds an unconditional capability +// --------------------------------------------------------------------------- +// +EXPORT_C void CPermissionSet::AppendUncondCapabilities(TUnConditionalPermission aUnConditionals) + { + iUncondCapSet = aUnConditionals; + } + +// --------------------------------------------------------------------------- +// Returns unconditional capabilities of thhe permissionset +// --------------------------------------------------------------------------- +// +EXPORT_C TUnConditionalPermission CPermissionSet::UnconditionalCaps() const + { + return iUncondCapSet; + } +// --------------------------------------------------------------------------- +// Returns unconditional capabilities of thhe permissionset +// --------------------------------------------------------------------------- +// +EXPORT_C void CPermissionSet::UnconditionalCaps(RUnConditionals& aUnConditionals) const + { + for (TInt i(ECapabilityTCB); i!=ECapability_Limit;++i) + { + TUint32 capBitToCheck(KDefaultEnableBit); + capBitToCheck = capBitToCheck << i; + + if ( capBitToCheck&iUncondCapSet) + { + aUnConditionals.Append ((TCapability)i); + } + } + } + +// --------------------------------------------------------------------------- +// ExternalizeLs permissionset data to stream +// --------------------------------------------------------------------------- +// +EXPORT_C void CPermissionSet::ExternalizeL(RWriteStream& aSink) const + { + aSink.WriteInt32L (iPermissions.Count ()); + for (TInt idx(0); idx!=iPermissions.Count ();++idx) + { + iPermissions[idx]->ExternalizeL (aSink); + } + + aSink.WriteUint32L (iUncondCapSet); + } + +// --------------------------------------------------------------------------- +// InternalizeL permissionset data from stream +// --------------------------------------------------------------------------- +// +EXPORT_C void CPermissionSet::InternalizeL(RReadStream& aSource) + { + iPermissions.Reset (); + TInt cnt(aSource.ReadInt32L ()); + + for (TInt idx(0); idx!=cnt;++idx) + { + CPermission* permission = CPermission::NewL(); + permission->InternalizeL (aSource); + iPermissions.Append (permission); + } + + iUncondCapSet = aSource.ReadUint32L (); + } + +// --------------------------------------------------------------------------- +// Adds a permission data to the permissionset +// --------------------------------------------------------------------------- +// +EXPORT_C void CPermissionSet::AppendPermission(CPermission& aPermission) + { + iPermissions.Append (&aPermission); + } + +// --------------------------------------------------------------------------- +// Returns permission data +// --------------------------------------------------------------------------- +// +EXPORT_C const RPermissions& CPermissionSet::Permissions() const + { + return iPermissions; + } + +// --------------------------------------------------------------------------- +// Returns permission data +// --------------------------------------------------------------------------- +// +EXPORT_C RPermissions& CPermissionSet::Permissions() + { + return iPermissions; + } diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerutil/src/rtsecmgrscript.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/rtsecuritymanagerutil/src/rtsecmgrscript.cpp Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,240 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + +#include +#include +#include + +const TReal DEFAULT_VERSION(1.0); +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +EXPORT_C CScript::~CScript() + { + delete iPermissionSet; + if(iHashMark) + delete iHashMark; + } + +// --------------------------------------------------------------------------- +// Two-phased constructor +// --------------------------------------------------------------------------- +// +EXPORT_C CScript* CScript::NewL(TPolicyID aPolicyID,TExecutableID aScriptID) + { + CScript* self = CScript::NewLC(aPolicyID,aScriptID); + CleanupStack::Pop(self); + return self; + } + +// --------------------------------------------------------------------------- +// Two-phased constructor +// --------------------------------------------------------------------------- +// +EXPORT_C CScript* CScript::NewLC(TPolicyID aPolicyID,TExecutableID aScriptID) + { + CScript* self = new (ELeave) CScript(aPolicyID,aScriptID); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +// --------------------------------------------------------------------------- +// Two-phased constructor +// --------------------------------------------------------------------------- +// +void CScript::ConstructL() + { + iPermissionSet = CPermissionSet::NewL (); + } + +// --------------------------------------------------------------------------- +// Overloaded assignment operator +// --------------------------------------------------------------------------- +// +EXPORT_C const CScript& CScript::operator=(const CScript& aRhs) + { + if(iPermissionSet ) + { + delete iPermissionSet; + iPermissionSet = NULL; + } + + iPermissionSet = CPermissionSet::NewL(*aRhs.iPermissionSet); + iScriptID = aRhs.iScriptID; + iPolicyID = aRhs.iPolicyID; + iPermGrant = aRhs.iPermGrant; + iPermDenied = aRhs.iPermDenied; + + if(iHashMark) + { + delete iHashMark; + iHashMark = NULL; + } + + if(aRhs.iHashMark) + { + iHashMark = aRhs.iHashMark->AllocLC(); + CleanupStack::Pop(iHashMark); + } + return *this; + } + +// --------------------------------------------------------------------------- +// Gets script identifier +// --------------------------------------------------------------------------- +// +EXPORT_C TExecutableID CScript::ScriptID() const + { + return iScriptID; + } + +// --------------------------------------------------------------------------- +// Gets policy identifier +// --------------------------------------------------------------------------- +// +EXPORT_C TPolicyID CScript::PolicyID() const + { + return iPolicyID; + } + +// --------------------------------------------------------------------------- +// Sets permission set data of the script +// --------------------------------------------------------------------------- +// +EXPORT_C void CScript::SetPermissionSet(const CPermissionSet& aPermSet) + { + if ( iPermissionSet) + { + delete iPermissionSet; + iPermissionSet=NULL; + } + + iPermissionSet = CPermissionSet::NewL (aPermSet); + } + +// --------------------------------------------------------------------------- +// Gets permission set data of the script +// --------------------------------------------------------------------------- +// +EXPORT_C const CPermissionSet& CScript::PermissionSet() const + { + return *iPermissionSet; + } +// --------------------------------------------------------------------------- +// Gets permission set data of the script +// --------------------------------------------------------------------------- +// +EXPORT_C CPermissionSet& CScript::PermissionSet() + { + return *iPermissionSet; + } + +// --------------------------------------------------------------------------- +// Gets permanently granted permissions of the script +// --------------------------------------------------------------------------- +// +EXPORT_C TPermGrant CScript::PermGranted() const + { + return iPermGrant; + } + +// --------------------------------------------------------------------------- +// Gets permanently denied permissions of the script +// --------------------------------------------------------------------------- +// +EXPORT_C TPermGrant CScript::PermDenied() const + { + return iPermDenied; + } + +// --------------------------------------------------------------------------- +// ExternalizeLs script data to stream +// --------------------------------------------------------------------------- +// +EXPORT_C void CScript::ExternalizeL(RWriteStream& aSink) const + { + aSink.WriteReal32L(DEFAULT_VERSION); + iPermissionSet->ExternalizeL (aSink); + aSink.WriteInt32L (iScriptID); + aSink.WriteInt32L (iPolicyID); + aSink.WriteUint32L (iPermGrant); + aSink.WriteUint32L (iPermDenied); + if(iHashMark) + { + aSink.WriteUint32L(iHashMark->Length()); + aSink.WriteL(*iHashMark,iHashMark->Length()); + } + else + aSink.WriteInt32L(0); + } + +// --------------------------------------------------------------------------- +// InternalizeLs script data from stream +// --------------------------------------------------------------------------- +// +EXPORT_C void CScript::InternalizeL(RReadStream& aSource) + { + if ( iPermissionSet) + { + delete iPermissionSet; + iPermissionSet=NULL; + iPermissionSet = CPermissionSet::NewL (); + } + TReal version(aSource.ReadReal32L()); + iPermissionSet->InternalizeL (aSource); + iScriptID = aSource.ReadInt32L (); + iPolicyID = aSource.ReadInt32L (); + iPermGrant = aSource.ReadUint32L (); + iPermDenied = aSource.ReadUint32L (); + TInt hashMarkLen(aSource.ReadUint32L()); + if(iHashMark) + { + delete iHashMark; + iHashMark = NULL; + } + + if(hashMarkLen) + { + iHashMark = HBufC::NewL(hashMarkLen); + TPtr ptr(iHashMark->Des()); + aSource.ReadL(ptr,hashMarkLen); + } + } + +// --------------------------------------------------------------------------- +// Sets permanently granted permissions of the script +// --------------------------------------------------------------------------- +// +EXPORT_C void CScript::SetPermGranted(TPermGrant aPermGrant) + { + iPermGrant = aPermGrant; + } + +// --------------------------------------------------------------------------- +// Sets permanently denied permissions of the script +// --------------------------------------------------------------------------- +// +EXPORT_C void CScript::SetPermDenied(TPermGrant aPermDenied) + { + iPermDenied = aPermDenied; + } diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/group/bld.inf Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,31 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + + +#include "../rtsecuritymanager_common_api/group/bld.inf" +#include "../rtsecuritymanager_utility_api/group/bld.inf" +#include "../rtsecuritymanager_client_api/group/bld.inf" +#include "../liw_provider_utility_api/group/bld.inf" +#include "../liw_service_interface_base_api/group/bld.inf" +#include "../liw_service_interface_menu_api/group/bld.inf" +#include "../liw_criteria_api/group/bld.inf" +#include "../liw_generic_parameter_api/group/bld.inf" +#include "../liw_service_handler_api/group/bld.inf" diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/liw_criteria_api/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/liw_criteria_api/group/bld.inf Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,34 @@ +/* +* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: File that exports the files belonging to +: LIW Criteria API +* +*/ + + + + + + + +#include + +PRJ_PLATFORMS +DEFAULT + +PRJ_EXPORTS + +../inc/LiwCommon.hrh MW_LAYER_PLATFORM_EXPORT_PATH(LiwCommon.hrh) +../inc/LiwCommon.rh MW_LAYER_PLATFORM_EXPORT_PATH(LiwCommon.rh) +../inc/LiwCommon.h MW_LAYER_PLATFORM_EXPORT_PATH(LiwCommon.h) diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/liw_criteria_api/inc/liwcommon.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/liw_criteria_api/inc/liwcommon.h Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,368 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Declares common constants, types, classes etc. to be used both +* consumer and provider side. +* +*/ + + + + + + + +#ifndef LIW_COMMON_H +#define LIW_COMMON_H + +// INCLUDES +#include +#include +#include + +// CONSTANTS + +// MACROS + +// FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS +class CEikMenuPane; +class CLiwGenericParamList; + +// CLASS DECLARATION + +/** + * Criteria item data. + * This class encapsulates an LIW criteria item. Criteria items are building + * blocks for LIW interests, i.e. an interest is a list of criteria items. + * A criteria item can be defined dynamically (by using this class) or + * in a resource file. + * + * @lib ServiceHandler.lib + * @since Series 60 2.6 + */ +class CLiwCriteriaItem : public CBase + { + public: // Constructors and destructor + /** + * Constructs a criteria item instance with null items. + * + * @return A pointer to the new object. + */ + IMPORT_C static CLiwCriteriaItem* NewL(); + + /** + * Constructs a criteria item instance with null items. Leaves the + * pointer to the cleanup stack. + * + * @return A pointer to the new object. + */ + IMPORT_C static CLiwCriteriaItem* NewLC(); + + /** + * Constructs a criteria item instance. + * + * @param aCriteriaId The criteria ID. + * @param aServiceCmd The service command. + * @param aContentType The content type. + * @return A pointer to the new object. + */ + IMPORT_C static CLiwCriteriaItem* NewL( + TInt aCriteriaId, + TInt aServiceCmd, + const TDesC8& aContentType); + + /** + * Constructs a criteria item instance. Leaves the pointer to the + * cleanup stack. + * + * @param aCriteriaId The criteria ID. + * @param aServiceCmd The service command. + * @param aContentType The content type. + * @return A pointer to the new object. + */ + IMPORT_C static CLiwCriteriaItem* NewLC( + TInt aCriteriaId, + TInt aServiceCmd, + const TDesC8& aContentType); + + /** + * Constructs a criteria item instance. + * + * @param aCriteriaId The criteria ID. + * @param aServiceCmd The service command. + * @param aContentType Content type. + * @return A pointer to the new object. + */ + IMPORT_C static CLiwCriteriaItem* NewL( + TInt aCriteriaId, + const TDesC8& aServiceCmd, + const TDesC8& aContentType); + + /** + * Constructs a criteria item instance. + * + * @param aCriteriaId The criteria ID. + * @param aServiceCmd The service command. + * @param aContentType Content type. + * @return A pointer to the new object. + */ + IMPORT_C static CLiwCriteriaItem* NewLC( + TInt aCriteriaId, + const TDesC8& aServiceCmd, + const TDesC8& aContentType); + + /** + * Destructor. + */ + IMPORT_C virtual ~CLiwCriteriaItem(); + + public: // New functions + /** + * Sets the criteria ID. + * + * @param aId The criteria ID. + */ + IMPORT_C void SetId(TInt aId); + + /** + * Sets the service class. + * + * @param aServiceUid The service class, see TLiwServiceClass. + */ + IMPORT_C void SetServiceClass(const TUid& aServiceUid); + + /** + * Sets the service command UID. + * + * @param aServiceCmd The LIW service command, see TLiwServiceCommands. + */ + IMPORT_C void SetServiceCmd(TInt aServiceCmd); + + /** + * Sets the service command name. + * + * @param aServiceCmd The LIW service command. + */ + IMPORT_C void SetServiceCmdL(const TDesC8& aServiceCmd); + + /** + * Sets the content type. Makes a copy of the string data. + * + * @param aContentType Content MIME type, event type or any agreed one. + */ + IMPORT_C void SetContentTypeL(const TDesC8& aContentType); + + /** + * Gets the criteria ID, 0 if not defined. + * + * @return The criteria ID. + */ + IMPORT_C TInt Id() const; + + /** + * Gets the service class UID. + * + * @return The service class UID, see TLiwServiceClass. + */ + IMPORT_C const TUid& ServiceClass() const; + + /** + * Gets the service command UID. KNullUid, if not defined. + * + * @return The service command UID, see TLiwServiceCommands. + */ + IMPORT_C TInt ServiceCmd() const; + + /** + * Gets the service command name. + * + * @return The service command name. + */ + IMPORT_C const TDesC8& ServiceCmdStr() const; + + /** + * Gets the content type. + * + * @return The content type. + */ + IMPORT_C const TDesC8& ContentType() const; + + /** + * Sets the options. + * + * @param aOptions Options. + */ + IMPORT_C void SetOptions(TUint aOptions); + + /** + * Gets the options. + * + * @return Options. + */ + IMPORT_C TUint Options() const; + + /** + * Maximum number of providers allowed for this criteria item. + * + * @return Maximum number of providers allowed for this criteria item. + */ + IMPORT_C TInt MaxProviders() const; + + /** + * Reads a criteria item from a resource. + * + * @param aReader A resource reader pointing to a criteria item. + */ + IMPORT_C void ReadFromResoureL(TResourceReader& aReader); + + /** + * Returns the default provider. + * + * @return The default provider UID. + */ + IMPORT_C TUid DefaultProvider() const; + + /** + * Sets the default provider. + * + * @param aDefault The UID of a default provider. + */ + IMPORT_C void SetDefaultProvider(TInt aDefault); + + /** + * Equality operator. Two criteria items are considered equal only if all + * parameters match. The parameters are: criteria id, service command, + * content type, service class, default provider, max providers and options). + * + * @param aItem Criteria item to compare. + * @return ETrue if criteria items are equal, EFalse otherwise. + */ + IMPORT_C TBool operator==(const CLiwCriteriaItem& aItem); + + /** + * Sets the maximum number of providers. + * + * @param aMaxProviders The maximum number of providers. + */ + IMPORT_C void SetMaxProviders(TInt aMaxProviders); + + public: + /** + * If set, only ROM based providers can be attached to this criteria. + * + * @return ETrue if LIW_OPTIONS_ROM_ONLY bit is set, EFalse otherwise. + */ + inline TBool RomOnly() const; + + IMPORT_C void SetMetaDataOptions(const TLiwVariant& aMetaDataOptions); + + IMPORT_C void GetMetaDataOptions(TLiwVariant& aMetaDataOptions) const; + + private: + /** + * C++ default constructor. + */ + CLiwCriteriaItem(); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL( + TInt aCriteriaId, + TInt aServiceCmd, + const TDesC8& aContentType); + + void ConstructL( + TInt aCriteriaId, + const TDesC8& aServiceCmd, + const TDesC8& aContentType); + + private: + // Criteria ID. + TInt iCriteriaId; + // Service class UID + TUid iServiceClass; + // Service command UID + TInt iServiceCmd; + // Content type (MIME type). + HBufC8* iContentType; + // Additional options for ROM + TLiwVariant iOptions; + //Default provider implementation uid + TUid iDefaultProvider; + // Reserved member + TLiwVariant iReserved; + // Max providers + TInt iMaxProviders; + // Metadata Options + TLiwVariant iMetadataOptions; + }; + + +inline TBool CLiwCriteriaItem::RomOnly() const + { + return (Options() & LIW_OPTIONS_ROM_ONLY) != 0; + } + + +/** +* Interest is an array of criteria items. +*/ +typedef RPointerArray RCriteriaArray; + +/** +* Abstact callback interface to handle callbacks or events +* from providers. This callback is needed when +* - Consumer wants to pre-check output parameters before returning +* synchronous Handle*Cmd. +* - Asynchronous Handle*Cmd is used. +* - An asynchronous event occurs in the system. +* +* @lib ServiceHandler.lib +* @since Series 60 2.6 +*/ +class MLiwNotifyCallback // needs to handle this as well? + { + public: + /** + * Handles notifications caused by an asynchronous Execute*CmdL call + * or an event. + * + * @param aCmdId The service command associated to the event. + * @param aEventId Occured event, see LiwCommon.hrh. + * @param aEventParamList Event parameters, if any, as defined per + * each event. + * @param aInParamList Input parameters, if any, given in the + * related HandleCommmandL. + * @return Error code for the callback. + */ + virtual TInt HandleNotifyL( + TInt aCmdId, + TInt aEventId, + CLiwGenericParamList& aEventParamList, + const CLiwGenericParamList& aInParamList) = 0; + IMPORT_C static TInt32 GetTransactionID(); + }; + +#endif // LIW_COMMON_H + +// End of File + + diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/liw_criteria_api/inc/liwcommon.hrh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/liw_criteria_api/inc/liwcommon.hrh Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,418 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Declares common constants to be used in both resources and +* C++ code of consumers and providers. +* +*/ + + + + + + + +#ifndef LIW_COMMON_HRH +#define LIW_COMMON_HRH + +// DATA TYPES + +// CONSTANTS + +/** +* Predefined service commands (UIDs). +*/ +enum TLiwServiceCommands + { + /** Null value. */ + KLiwCmdNone = 0, + + /** String Based command */ + KLiwCmdAsStr = 1, + + /** Create new content. */ + KLiwCmdNew = 0x101F864C, + + /** Edit existing content. */ + KLiwCmdEdit = 0x101F864D, + + /** Select content. */ + KLiwCmdSelect = 0x101F864E, + + /** View content. */ + KLiwCmdView = 0x101F864F, + + /** Create call. */ + KLiwCmdCall = 0x101F86B0, + + /** Send content. */ + KLiwCmdSend = 0x101F86B3, + + /** Print content. */ + KLiwCmdPrint = 0x101F8666, + + /** Assign content. */ + KLiwCmdAssign = 0x101F8716, + + /** Share content. */ + KLiwCmdShare = 0x101F871E, + + /** Synchronize content. */ + KLiwCmdSynchronize = 0x101F8724, + + /** Synchronize selected. */ + KLiwCmdSynchronizeSelected = 0x1020720C, + + /** Search content. */ + KLiwCmdSearch = 0x101F87DF, + + /** Copy content. */ + KLiwCmdCopy = 0x101F87DE, + + /** Show print preview. */ + KLiwCmdPrintPreview = 0x101FD656, + + /** Push to talk. */ + KLiwCmdPoC = 0x101FD657, + + /** View content in online store. */ + KLiwCmdViewOnline = 0x102072EA, + + /** Upload content. */ + KLiwCmdUpload = 0x102072EB, + + /** Transfer a range of media files to a remote storage device. */ + KLiwCmdXpressTransfer = 0x10207430, + + /** UPnP copy content. */ + KLiwCmdUPnPCopy = 0x10207431, + + /** UPnP move content. */ + KLiwCmdUPnPMove = 0x10207432, + + /** UPnP play content. */ + KLiwCmdUPnPPlay = 0x10207433, + + /** UPnP open content. */ + KLiwCmdUPnPOpen = 0x10207434, + + /** UPnP enable external. */ + KLiwCmdUPnPEnableExternal = 0x10207435, + + /** Show help content. */ + KLiwCmdHelp = 0x10275075, + + /** Add or remove items from intent. (Should be used as a menu service command). */ + KLiwCmdIntent = 0x10275114, + + /** Add items to intent. (Should be used as a base service command). */ + KLiwCmdAddToIntent = 0x10275115, + + /** Remove items from intent. (Should be used as a base service command). */ + KLiwCmdRemoveFromIntent = 0x10275116, + + /** Client can request that map should be displayed on screen. */ + KLiwCmdMnShowMap = 0x10206904, + + /** Allows to start navigation to desired destination. */ + KLiwCmdMnNavigateTo = 0x10206905, + + /** Starts reverse geocoding request: finding address for given coordinate. */ + KLiwCmdMnAddrByCoord = 0x10206906, + + /** Starts geocoding request: finding coordinate by given address. */ + KLiwCmdMnCoordByAddr = 0x10206907, + + /** Allows client to request that user shall select a location from map. */ + KLiwCmdMnSelectFromMap = 0x10206908, + + /** Send via Bluetooth. */ + KLiwCmdSendViaBT = 0x10281894, + + /** Send via Irda. */ + KLiwCmdSendViaIR = 0x10281895, + + /** Enterprise telephony. */ + KLiwCmdEnterpriseTel = 0x20001FC6, + + /** Rotate image etc. */ + KLiwCmdRotate = 0x10281F96, + + /** Rotate device screen. */ + KLiwCmdRotateScreen = 0x10281F97, + + /** Set call image. */ + KLiwCmdCallImage = 0x1028245E, + + /** Give different objects to another device using Near Field Communications. */ + KLiwCmdNFCGive = 0x1028245F, + + /** SettingWizard Email view activation. */ + KLiwCmdSettingWizardEmailView = 0x10281C95, + + /** In-device search. */ + KLiwCmdContentSearch = 0x10282844, + + /** A special service command enabling consumer to attach for all relevant + LIW services for a certain object. */ + KLiwCmdAnyCmdForObject = 0x102823F1, + + /** To support VoIP settings provisioning with plugins **/ + KLiwCmdEasyVoIPProvisioning = 0x10283099, + + /** Assign Screensaver*/ + KLiwCmdAssignScreenSaver = 0x1028309A, + + /** Converged service plugin and UI extension plugin*/ + KLiwCmdCSCServicePlugins = 0x1020E56F, + KLiwCmdCSCUiExtensionPlugins = 0x10282EF7 + }; + +enum TLiwBufferType +{ + KLiwBufferNone = 0, + KLiwBufferBitmap = 1, + KLiwBufferFile = 2 +}; + + +// Service command strings. These strings are used in service provider's +// opaque data field to specify what service command(s) the provider implements. + +#define KLiwCmdNoneStr "00000000" +#define KLiwCmdAsStrStr "00000001" +#define KLiwCmdNewStr "101F864C" +#define KLiwCmdEditStr "101F864D" +#define KLiwCmdSelectStr "101F864E" +#define KLiwCmdViewStr "101F864F" +#define KLiwCmdPrintStr "101F8666" +#define KLiwCmdCallStr "101F86B0" +#define KLiwCmdSendStr "101F86B3" +#define KLiwCmdAssignStr "101F8716" +#define KLiwCmdShareStr "101F871E" +#define KLiwCmdSynchronizeStr "101F8724" +#define KLiwCmdSearchStr "101F87DF" +#define KLiwCmdCopy "101F87DE" +#define KLiwCmdPrintPreviewStr "101FD656" +#define KLiwCmdPoCStr "101FD657" +#define KLiwCmdSynchronizeSelectedStr "1020720C" +#define KLiwCmdViewOnlineStr "102072EA" +#define KLiwCmdUploadStr "102072EB" +#define KLiwCmdXpressTransferStr "10207430" +#define KLiwCmdUPnPCopyStr "10207431" +#define KLiwCmdUPnPMoveStr "10207432" +#define KLiwCmdUPnPPlayStr "10207433" +#define KLiwCmdUPnPOpenStr "10207434" +#define KLiwCmdUPnPEnableExternalStr "10207435" +#define KLiwCmdHelpStr "10275075" +#define KLiwCmdIntentStr "10275114" +#define KLiwCmdAddToIntentStr "10275115" +#define KLiwCmdRemoveFromIntentStr "10275116" +#define KLiwCmdMnShowMapStr "10206904" +#define KLiwCmdMnNavigateToStr "10206905" +#define KLiwCmdMnAddrByCoordStr "10206906" +#define KLiwCmdMnCoordByAddrStr "10206907" +#define KLiwCmdMnSelectFromMapStr "10206908" +#define KLiwCmdSendViaBTStr "10281894" +#define KLiwCmdSendViaIRStr "10281895" +#define KLiwCmdEnterpriseTelStr "20001FC6" +#define KLiwCmdRotateStr "10281F96" +#define KLiwCmdRotateScreenStr "10281F97" +#define KLiwCmdCallImageStr "1028245E" +#define KLiwCmdNFCGiveStr "1028245F" +#define KLiwCmdSettingWizardEmailViewStr "10281C95" +#define KLiwCmdContentSearchStr "10282844" +#define KLiwCmdAnyCmdForObjectStr "102823F1" +#define KLiwCmdEasyVoIPProvisioningStr "10283099" +#define KLiwCmdAssignScreenSaverStr "1028309A" +#define KLiwCmdCSCServicePluginsStr "1020E56F" +#define KLiwCmdCSCUiExtensionPluginsStr "10282EF7" + +/** +* Service command options (bits) to alter command handling behaviour. +*/ +enum TLiwServiceCmdOptions + { + /** + * Consumer wants asynchronous command handling. + * The default is synchronous command handling. + * In asynchronous case consumer needs to pass a callback to provider. + */ + KLiwOptASyncronous = 0x0001, + + /** + * Consumer wants provider to make a callback to check coming output + * parameters prior returning from service command handling. + * Consumer needs to pass a callback to provider. + */ + KLiwOptOutParamCheck = 0x0002, + + /** + * Consumer tells provider that it is prepared to handle + * callback events for possibly incomplete/wrong parameter list. + */ + KLiwOptInParamCheck = 0x0004, + + /** + * Consumer wants to cancel an asynchronous LIW service. + * When a consumer wants to cancel the asynchronous service that a provider + * is executing, it should call ExecuteMenuCmdL() or ExecuteServiceCmdL() + * with the same parameters as when requesting the service, but set this + * cancel bit on. The cancel operation itself is synchronous, i.e. the + * provider must call the consumer's callback with KLiwEventCanceled before + * the Execute*CmdL() returns. + */ + KLiwOptCancel = 0x0008 + }; + + +/** +* Service classes (UID). Technically these are same as service interface UIDs. +*/ +enum TLiwServiceClass + { + /** + * None. + */ + KLiwClassNone = 0x0, + + /** + * Base service (no UI expected). + * Every other class must implement this always! + */ + KLiwClassBase = 0x200159f5, + + /** + * Filter service class. + */ + KLiwClassFilter = 0x101F8651, + + /** + * Menu service class (offers menu based services). + */ + KLiwClassMenu = 0x101F8652, + + /** + * Stub service class. + */ + KLiwClassStub = 0x101F8653, + + /** + * View service class (offers view based services). + */ + KLiwClassView = 0x101F8654, + + /** + * This class is for R&D purposes. + */ + KLiwClassDebug = 0x101F866B + }; + + +/** +* Event codes. To be used with HandleNotifyL method. +*/ +enum + { + /** + * Asynchronous service informs consumer to prepare itself for + * action. + */ + KLiwEventStarted = 1, + + /** + * Asynchronous service request completed. + */ + KLiwEventCompleted = 2, + + /** + * Asynchronous service request canceled. + */ + KLiwEventCanceled = 3, + + /** + * Error during asynchronous service request. + */ + KLiwEventError = 4, + + /** + * Relates to KLiwOptOutParamCheck. + */ + KLiwEventOutParamCheck = 5, + + /** + * Relates to KLiwOptInParamCheck. + */ + KLiwEventInParamCheck = 6, + + /** + * Provider informs consumer that service is no longer available or + * has stopped. + */ + KLiwEventStopped = 7, + + /** + * Provider asks consumer whether Exit can be done (needed at least in + * embedded use cases where server application offers Exit possibility + * to end user, but consumer can not allow Exit due to fact that for + * example network connections owned by consumer are open and they need + * to be kept alive). + */ + KLiwEventQueryExit = 8, + + /** + * Provider informs consumer about the ongoing asynchronous + * service execution. + */ + KLiwEventInProgress = 9 + }; + +// ============================================================================ +// Menu item flags for LIW consumers. +// ============================================================================ +/** + * Always keep the provider menu items in a submenu. + */ +#define LIW_CASCADE_ID 0x01010001 + +/** + * Menu item is placed intelligently either to the main level or a submenu. + */ +#define LIW_INTELLIGENT_CASCADE_ID 0x01010010 + +/** + * Consumer defines the menu title. + */ +#define LIW_LOCK_SUBMENU_TITLE 0x00000020 + +// ============================================================================ +// Criteria item flags for LIW consumers. +// ============================================================================ +/** + * Criteria item loadOptions bit, only providers in ROM are accepted. + */ +#define LIW_OPTIONS_ROM_ONLY 0x01 + +// ============================================================================ +// Menu item flags for LIW providers. +// ============================================================================ +/** + * For providers only: Provider suggests the submenu title. + */ +#define LIW_SUBMENU_TITLE 0x0ff11012 + +#endif // LIW_COMMON_HRH + +// End of file + + diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/liw_criteria_api/inc/liwcommon.rh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/liw_criteria_api/inc/liwcommon.rh Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,119 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Contains common resource declarations for the LIWFW. +* +*/ + + + + + + + +// INCLUDES +#include + +// MACROS + +// STRUCTURE DEFINITIONS + +// ----------------------------------------------------------------------------- +// Option item for a criteria. +// ----------------------------------------------------------------------------- +STRUCT LIW_CRITERIA_OPTION + { + } + +// ----------------------------------------------------------------------------- +// Criteria item. +// Resource structure to define criteria item consumer. +// ----------------------------------------------------------------------------- +// +// Criteria item +// +STRUCT LIW_CRITERIA_ITEM + { + // Criteria ID to be used in UI elements referring to this criteria + // By default the ID should be same as the serviceCmd, but it can be + // different as well e.g. for mapping old menu items to use LIW + // This can be consumer defined or predefined, if common interest + // is allocated. + LONG id; + + // -------------------------------------------------------------- + // Actual criteria data used when resolving providers from which + // a consumer is interested in. + // -------------------------------------------------------------- + + // Command ID for service command, mandatory. + LONG serviceCmd = KLiwCmdNone; + + // Content MIME type, event type or any agreed one. + LTEXT8 contentType = ""; + + // Services class tells what kind of service is expected from + // provider. See TLiwServiceClass enum for allowed values. + // Optional, if not defined the default (KLiwClassMenu) is used. + LONG serviceClass = KLiwClassMenu; + + // -------------------------------------------------------------- + // Additional options, if any. + // -------------------------------------------------------------- + + // Defines UID for default provider. If provider for this + // UID exists, all the setup calls will be forwarded to it + // first (eg. if default provider implements 'menu' service class, it will + // be the first provider to insert its menu items to the consumer menu). + LONG defaultProvider = 0; + + // The maximum number of providers allowed for the criteria item. + // There might be cases to limit the number of providers, e.g. for + // limiting the number of menu items. Maximum is 255 providers per interest. + BYTE maxProviders = 0xff; + + // Other options bits (8 bits reserved). + BYTE loadOptions=0; + + // Reserved for extensions. + LLINK reserved = 0; + } + +// +// Criteria item with command name as string +// +STRUCT LIW_CRITERIA_ITEM_2 + { + LONG id; + LONG serviceCmd = KLiwCmdAsStr; + // Service name. + LTEXT8 serviceName = ""; + LTEXT8 contentType = ""; + LONG serviceClass = KLiwClassMenu; + + LONG defaultProvider = 0; + BYTE maxProviders = 0xff; + BYTE loadOptions=0; + + LLINK reserved = 0; + } + +// +// Interest is an array of criteria items. +// +STRUCT LIW_INTEREST + { + STRUCT items[]; // LIW_CRITERIA_ITEM's + } + +// End of File diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/liw_criteria_api/liw_criteria_api.metaxml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/liw_criteria_api/liw_criteria_api.metaxml Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,14 @@ + + +liw_criteria_api +Criteria API offers access to a criteria element, which contains command ID, MIME type etc. of data items. +c++ +languageinterworkingfw + + + + +yes +no + + diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/liw_criteria_api/tsrc/bmarm/liwtestcasesu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/liw_criteria_api/tsrc/bmarm/liwtestcasesu.def Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,3 @@ +EXPORTS + LibEntryL__FR13CTestModuleIf @ 1 NONAME R3UNUSED ; LibEntryL(CTestModuleIf &) + diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/liw_criteria_api/tsrc/bwins/liwtestcasesu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/liw_criteria_api/tsrc/bwins/liwtestcasesu.def Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,3 @@ +EXPORTS + ?LibEntryL@@YAPAVCScriptBase@@AAVCTestModuleIf@@@Z @ 1 NONAME ; class CScriptBase * __cdecl LibEntryL(class CTestModuleIf &) + diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/liw_criteria_api/tsrc/conf/tliwtestcases.cfg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/liw_criteria_api/tsrc/conf/tliwtestcases.cfg Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,379 @@ +[Test] +title LIW_DATA_TYPES_001 +create liwtestcases foobar +foobar LIW_DATA_TYPES_001 +delete foobar +[Endtest] + +[Test] +title LIW_DATA_TYPES_002 +create liwtestcases foobar +foobar LIW_DATA_TYPES_002 +delete foobar +[Endtest] + +[Test] +title LIW_DATA_TYPES_003 +create liwtestcases foobar +foobar LIW_DATA_TYPES_003 +delete foobar +[Endtest] + +[Test] +title LIW_DATA_TYPES_004 +create liwtestcases foobar +foobar LIW_DATA_TYPES_004 +delete foobar +[Endtest] + +[Test] +title LIW_DATA_TYPES_005 +create liwtestcases foobar +foobar LIW_DATA_TYPES_005 +delete foobar +[Endtest] + +[Test] +title LIW_DATA_TYPES_006 +create liwtestcases foobar +foobar LIW_DATA_TYPES_006 +delete foobar +[Endtest] + +[Test] +title LIW_DATA_TYPES_007 +create liwtestcases foobar +foobar LIW_DATA_TYPES_007 +delete foobar +[Endtest] + +[Test] +title LIW_DATA_TYPES_008 +create liwtestcases foobar +foobar LIW_DATA_TYPES_008 +delete foobar +[Endtest] + +[Test] +title LIW_DATA_TYPES_009 +create liwtestcases foobar +foobar LIW_DATA_TYPES_009 +delete foobar +[Endtest] + +[Test] +title LIW_Map_AtLNew +create liwtestcases foobar +foobar LIW_Map_AtL_New +delete foobar +[Endtest] + + +[Test] +title LIW_DATA_TYPES_0010 +create liwtestcases foobar +foobar LIW_DATA_TYPES_010 +delete foobar +[Endtest] + +[Test] +title LIW_DATA_TYPES_011 +create liwtestcases foobar +foobar LIW_DATA_TYPES_011 +delete foobar +[Endtest] + +[Test] +title LIW_DATA_TYPES_012 +create liwtestcases foobar +foobar LIW_DATA_TYPES_012 +delete foobar +[Endtest] + +[Test] +title LIW_DATA_TYPES_013 +create liwtestcases foobar +foobar LIW_DATA_TYPES_013 +delete foobar +[Endtest] + +[Test] +title LIW_DATA_TYPES_014 +create liwtestcases foobar +foobar LIW_DATA_TYPES_014 +delete foobar +[Endtest] + +[Test] +title LIW_DATA_TYPES_016 +create liwtestcases foobar +foobar LIW_DATA_TYPES_016 +delete foobar +[Endtest] + +[Test] +title LIW_DATA_TYPES_017 +create liwtestcases foobar +foobar LIW_DATA_TYPES_017 +delete foobar +[Endtest] + +[Test] +title LIW_DATA_TYPES_018 +create liwtestcases foobar +foobar LIW_DATA_TYPES_018 +delete foobar +[Endtest] + +[Test] +title LIW_DATA_TYPES_020 +create liwtestcases foobar +foobar LIW_DATA_TYPES_020 +delete foobar +[Endtest] + + +[Test] +title LIW_DATA_TYPES_021 +create liwtestcases foobar +foobar LIW_DATA_TYPES_021 +delete foobar +[Endtest] + +[Test] +title LIW_DATA_TYPES_022 +create liwtestcases foobar +foobar LIW_DATA_TYPES_022 +delete foobar +[Endtest] + +[Test] +title LIW_DATA_TYPES_023 +create liwtestcases foobar +foobar LIW_DATA_TYPES_023 +delete foobar +[Endtest] + +[Test] +title LIW_DATA_TYPES_024 +create liwtestcases foobar +foobar LIW_DATA_TYPES_024 +delete foobar +[Endtest] + +[Test] +title LIW_DATA_TYPES_025 +create liwtestcases foobar +foobar LIW_DATA_TYPES_025 +delete foobar +[Endtest] + +[Test] +title LIW_DATA_TYPES_026 +create liwtestcases foobar +foobar LIW_DATA_TYPES_026 +delete foobar +[Endtest] + +[Test] +title LIW_DATA_TYPES_029 +create liwtestcases foobar +foobar LIW_DATA_TYPES_029 +delete foobar +[Endtest] + +[Test] +title LIW_DATA_TYPES_030 +create liwtestcases foobar +foobar LIW_DATA_TYPES_030 +delete foobar +[Endtest] + +[Test] +title LIW_DATA_TYPES_033 +create liwtestcases foobar +foobar LIW_DATA_TYPES_033 +delete foobar +[Endtest] + +[Test] +title LIW_DATA_TYPES_034 +create liwtestcases foobar +foobar LIW_DATA_TYPES_034 +delete foobar +[Endtest] + +[Test] +title LIW_DATA_TYPES_037 +create liwtestcases foobar +foobar LIW_DATA_TYPES_037 +delete foobar +[Endtest] + +[Test] +title LIW_DATA_TYPES_038 +create liwtestcases foobar +foobar LIW_DATA_TYPES_038 +delete foobar +[Endtest] + +[Test] +title LIW_DATA_TYPES_039 +create liwtestcases foobar +foobar LIW_DATA_TYPES_039 +delete foobar +[Endtest] + +[Test] +title LIW_DATA_TYPES_041 +create liwtestcases foobar +foobar LIW_DATA_TYPES_041 +delete foobar +[Endtest] + +[Test] +title LIW_DATA_TYPES_042 +create liwtestcases foobar +foobar LIW_DATA_TYPES_042 +delete foobar +[Endtest] + +[Test] +title LIW_DATA_TYPES_043 +create liwtestcases foobar +foobar LIW_DATA_TYPES_043 +delete foobar +[Endtest] + +[Test] +title LIW_DATA_TYPES_045 +create liwtestcases foobar +foobar LIW_DATA_TYPES_045 +delete foobar +[Endtest] + +[Test] +title LIW_DATA_TYPES_046 +create liwtestcases foobar +foobar LIW_DATA_TYPES_046 +delete foobar +[Endtest] + +[Test] +title LIW_DATA_TYPES_047 +create liwtestcases foobar +foobar LIW_DATA_TYPES_047 +delete foobar +[Endtest] + +[Test] +title LIW_DATA_TYPES_048 +create liwtestcases foobar +foobar LIW_DATA_TYPES_048 +delete foobar +[Endtest] + +[Test] +title LIW_DATA_TYPES_049 +create liwtestcases foobar +foobar LIW_DATA_TYPES_049 +delete foobar +[Endtest] + +[Test] +title LIW_MDAT_VER1 +create liwtestcases foobar +foobar LIW_MDAT_VER1 +delete foobar +[Endtest] + +[Test] +title LIW_MDAT_VER2 +create liwtestcases foobar +foobar LIW_MDAT_VER2 +delete foobar +[Endtest] + +[Test] +title LIW_MDAT_VER3 +create liwtestcases foobar +foobar LIW_MDAT_VER3 +delete foobar +[Endtest] + +[Test] +title LIW_MDAT_VER4 +create liwtestcases foobar +foobar LIW_MDAT_VER4 +delete foobar +[Endtest] + +[Test] +title LIW_MDAT_VER5 +create liwtestcases foobar +foobar LIW_MDAT_VER5 +delete foobar +[Endtest] + +[Test] +title LIW_MDAT_CAP1 +create liwtestcases foobar +foobar LIW_MDAT_CAP1 +delete foobar +[Endtest] + + +[Test] +title LIW_ContainerCleanup +create liwtestcases foobar +foobar LIW_ContainerCleanup +delete foobar +[Endtest] + + +[Test] +title LIW_ParamCleanup +create liwtestcases foobar +foobar LIW_ParamCleanup +delete foobar +[Endtest] + + +[Test] +title LIW_VariantCleanup +create liwtestcases foobar +foobar LIW_VariantCleanup +delete foobar +[Endtest] + + +[Test] +title LIW_ASYNC_001 +create liwtestcases foobar +foobar LIW_ASYNC_001 +delete foobar +[Endtest] + + +[Test] +title LIW_ASYNC_002 +create liwtestcases foobar +foobar LIW_ASYNC_002 +delete foobar +[Endtest] + + +[Test] +title LIW_ASYNC_003 +create liwtestcases foobar +foobar LIW_ASYNC_003 +delete foobar +[Endtest] + + +[Test] +title LIW_ASYNC_004 +create liwtestcases foobar +foobar LIW_ASYNC_004 +delete foobar +[Endtest] \ No newline at end of file diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/liw_criteria_api/tsrc/data/liwaccesspolicy.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/liw_criteria_api/tsrc/data/liwaccesspolicy.xml Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,56 @@ + + + + + + + + + ReadUserData + WriteUserData + + + + + + oneshot + oneshot + + DRM + + + + + session + session + + ReadDeviceData + WriteDeviceData + Location + + + + + + + + + + + ReadUserData + + + + + + session + session + + WriteUserData + + + + + + + diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/liw_criteria_api/tsrc/eabi/liwtestcasesu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/liw_criteria_api/tsrc/eabi/liwtestcasesu.def Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,5 @@ +EXPORTS + _Z9LibEntryLR13CTestModuleIf @ 1 NONAME + _ZTI12CLiw_AsyncTC @ 2 NONAME ; ## + _ZTV12CLiw_AsyncTC @ 3 NONAME ; ## + diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/liw_criteria_api/tsrc/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/liw_criteria_api/tsrc/group/bld.inf Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,61 @@ +/* +* Copyright (c) 2002 - 2007 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: ?Description +* +*/ + + + + + + + + +PRJ_PLATFORMS +// specify the platforms your component needs to be built for here +// defaults to WINS MARM so you can ignore this if you just build these +DEFAULT + +PRJ_TESTEXPORTS +// NOTE: If using ARS requirements all export operations should be done under this. +// 'abld test export' + +PRJ_EXPORTS +PRJ_EXPORTS +../data/liwaccesspolicy.xml /epoc32/winscw/c/data/others/liwaccesspolicy.xml +//../init/testframework.ini /epoc32/WINSCW/C/TestFramework/testframework.ini +../conf/tliwtestcases.cfg /epoc32/WINSCW/C/TestFramework/tliwtestcases.cfg + + +PRJ_TESTMMPFILES +// NOTE: If using ARS requirements .mmp file operation should be done under this. +// 'abld test build' + +PRJ_MMPFILES +// Specify the .mmp files required for building the important component +// releasables. +// +// Specify "tidy" if the component you need to build doesn't need to be +// released. Specify "ignore" if the MMP file exists but should be +// ignored. +// Example: +/* +/agnmodel/group/agnmodel.mmp +#if defined(MARM) +/agnmodel/group/agsvexe.mmp +#endif +*/ +liwtestcases.mmp + +// End of File \ No newline at end of file diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/liw_criteria_api/tsrc/group/liwtestcases.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/liw_criteria_api/tsrc/group/liwtestcases.mmp Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,102 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + +/*TYPE TESTCLASS*//* +* Copyright (c) 2002 - 2007 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: ?Description +* +*/ + + +#include + +TARGET liwtestcases.dll +TARGETTYPE dll +UID 0x1000008D 0x101FB3E3 + +CAPABILITY ALL -TCB +/* Remove comments and replace 0x00000000 with correct vendor id */ +VENDORID VID_DEFAULT +/* Remove comments and replace 0x00000000 with correct secure id */ +// SECUREID 0x00000000 + +//TARGETPATH ?target_path +DEFFILE liwtestcases.def + +USERINCLUDE ../inc + + +MW_LAYER_SYSTEMINCLUDE + +SOURCEPATH ../src +SOURCE liwtestcases.cpp +SOURCE liwtestcasesBlocks.cpp +SOURCE liwtestcasesasync.cpp + +//RESOURCE resource_file +//RESOURCE resource_file2 + +LIBRARY euser.lib +LIBRARY stiftestinterface.lib +LIBRARY stiftestengine.lib +LIBRARY liwServiceHandler.lib +LIBRARY RTSecMgrClient.lib +LIBRARY RTSecMgrUtil.lib +LIBRARY estor.lib +LIBRARY efsrv.lib + +EPOCALLOWDLLDATA + +LANG SC + +/* +START WINS +?wins_specific_information +END + +START MARM +?marm_specific_information +END +*/ +// Other possible keywords: + +// DOCUMENT ?file, that is not compiled, but added to MSVC project workspace (i.e. release notes) +/* +START BITMAP ?target +TARGETPATH ?emulated_path_on_target_machine +HEADER +SOURCE ?color_depth ?source_bitmap +END +*/ +// DEFFILE ?filename +// AIF ?filename + +// End of File diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/liw_criteria_api/tsrc/inc/liw_async_testcase.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/liw_criteria_api/tsrc/inc/liw_async_testcase.h Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,101 @@ +/* +* Copyright (c) 2002-2006 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + + +#ifndef LIWTC_ASYNC_H +#define LIWTC_ASYNC_H + +// INCLUDES +#include +#include +#include + +// FORWARD DECLARATIONS +class CLiwServiceHandler; + +// CLASS DECLARATION + +/** +* CLiwTC2 class. +* +*/ +class CLiw_AsyncTC : public CActive, public MLiwNotifyCallback/*, public MLiwTest*/ + { + public: + enum TRequestType {ECount, EStop=1000} ; + + public: // Constructors and destructor + /** + * Symbian default constructor. + */ + // void ConstructL(CLiwTestLogHandler& aLogger, CLiwTestAppContainer& aContainer); + + /** + * Constructor. + */ + CLiw_AsyncTC( CLiwServiceHandler *iServiceHandler, TRequestType aRequest = ECount, TInt aPriority = EPriorityStandard); + + /** + * Destructor. + */ + ~CLiw_AsyncTC(); + + TUid Id() const; + + public: + void DoCancel(); + void RunL(); + void RequestFunction( TRequestType aRequest ); + void ReadyToGo(); + void SetIncrementCounter( TInt aCount = 1 ); + TUint CountValue () const; + TRequestType iRequest; + TInt iCmdID; + + TInt HandleNotifyL( + TInt aCmdId, + TInt aEventId, + CLiwGenericParamList& aEventParamList, + const CLiwGenericParamList& aInParamList); + + public: // MLiwTest + TInt AsyncCase(TInt aTcNo); + + /*Test Items*/ + void LIW_ASYNC_001(); + void LIW_ASYNC_002(); + void LIW_ASYNC_003(TInt aEventState=0); + void LIW_ASYNC_004(); + + private: // Data + CLiwServiceHandler* iServiceHandler; + TInt iTransID; + TInt iAsyncCount; + TInt tcNo; + TInt iResult; + TUint iCount; + TUint iIncrementCount; + + }; + +#endif + +// End of File diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/liw_criteria_api/tsrc/inc/liwtestapplit.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/liw_criteria_api/tsrc/inc/liwtestapplit.h Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,65 @@ +/* +* Copyright (c) 2002-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: This file contains literal macros of TestCases in LiwTestApp. +* The file can be included in C++ or resource file. +* +*/ + + + + + + + +#ifndef LIWTESTAPPLIT_H +#define LIWTESTAPPLIT_H + +_LIT8(KContentTypeTxt, "text/str"); +_LIT8(KWild, "*"); + +_LIT8(KTestCommandTC1,"S60.Messaging"); +_LIT8(KContact,"Contact %d"); +_LIT8(KTestPARAMNanmeTC1,"TestResult"); +_LIT8(KTestCommandTC2,"S60.Messaging"); +_LIT8(KContentTypeTxt2, "text/str"); + +_LIT8(KTestParamKey, "Testi"); +_LIT8(KTestParamName, "hello_name"); +_LIT8(KTestParamValue, "hello_val"); + +_LIT8(KLIW_DATA_TYPES_001,"LIW_DATA_TYPES_001"); +_LIT8(KLIW_DATA_TYPES_002,"LIW_DATA_TYPES_002"); +_LIT8(KLIW_DATA_TYPES_003,"LIW_DATA_TYPES_003"); +_LIT8(KLIW_DATA_TYPES_004,"LIW_DATA_TYPES_004"); +_LIT8(KLIW_DATA_TYPES_005,"LIW_DATA_TYPES_005"); +_LIT8(KLIW_DATA_TYPES_006,"LIW_DATA_TYPES_006"); +_LIT8(KLIW_DATA_TYPES_007,"LIW_DATA_TYPES_007"); +_LIT8(KLIW_DATA_TYPES_008,"LIW_DATA_TYPES_008"); +_LIT8(KLIW_DATA_TYPES_009,"LIW_DATA_TYPES_009"); +_LIT8(KLIW_DATA_TYPES_010,"LIW_DATA_TYPES_010"); +_LIT8(KLIW_DATA_TYPES_011,"LIW_DATA_TYPES_011"); +_LIT8(KLIW_DATA_TYPES_012,"LIW_DATA_TYPES_012"); +_LIT8(KLIW_DATA_TYPES_013,"LIW_DATA_TYPES_013"); +_LIT8(KLIW_DATA_TYPES_014,"LIW_DATA_TYPES_014"); + +_LIT8(KLIW_DATA_TYPES_019,"LIW_DATA_TYPES_019"); +_LIT8(KLIW_DATA_TYPES_023,"LIW_DATA_TYPES_023"); + +_LIT8(KLIW_MDAT_VER1,"LIW_MDAT_VER1"); +_LIT8(KLIW_MDAT_VER2,"LIW_MDAT_VER2"); +_LIT8(KLIW_MDAT_VER3,"LIW_MDAT_VER3"); +_LIT8(KLIW_MDAT_VER4,"LIW_MDAT_VER4"); +_LIT8(KLIW_MDAT_VER5,"LIW_MDAT_VER5"); + +#endif // LIWTESTAPPLIT_H diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/liw_criteria_api/tsrc/inc/liwtestcases.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/liw_criteria_api/tsrc/inc/liwtestcases.h Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,358 @@ +/* +* Copyright (c) 2002 - 2007 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: ?Description +* +*/ + + + + + + + + +#ifndef LIWTESTCASES_H +#define LIWTESTCASES_H + +// INCLUDES +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "liw_async_testcase.h" + + +// CONSTANTS +//const ?type ?constant_var = ?constant; + +// MACROS +//#define ?macro ?macro_def +#define TEST_CLASS_VERSION_MAJOR 0 +#define TEST_CLASS_VERSION_MINOR 0 +#define TEST_CLASS_VERSION_BUILD 0 + +// Logging path +_LIT( KliwtestcasesLogPath, "\\logs\\testframework\\liwtestcases\\" ); +// Log file +_LIT( KliwtestcasesLogFile, "liwtestcases.txt" ); +_LIT( KliwtestcasesLogFileWithTitle, "liwtestcases_[%S].txt" ); + +// FUNCTION PROTOTYPES +//?type ?function_name(?arg_list); + +// FORWARD DECLARATIONS +//class ?FORWARD_CLASSNAME; +class Cliwtestcases; + +// DATA TYPES +//enum ?declaration +//typedef ?declaration +//extern ?data_type; + +// CLASS DECLARATION + +/** +* Cliwtestcases test class for STIF Test Framework TestScripter. +* ?other_description_lines +* +* @lib ?library +* @since ?Series60_version +*/ +NONSHARABLE_CLASS(Cliwtestcases) : public CScriptBase, public MLiwNotifyCallback, public MSecMgrPromptHandler + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + */ + static Cliwtestcases* NewL( CTestModuleIf& aTestModuleIf ); + + /** + * Destructor. + */ + virtual ~Cliwtestcases(); + + public: // New functions + + /** + * ?member_description. + * @since ?Series60_version + * @param ?arg1 ?description + * @return ?description + */ + //?type ?member_function( ?type ?arg1 ); + + public: // Functions from base classes + + /** + * From CScriptBase Runs a script line. + * @since ?Series60_version + * @param aItem Script line containing method name and parameters + * @return Symbian OS error code + */ + virtual TInt RunMethodL( CStifItemParser& aItem ); + + public: // Functions from base classes + + TInt Prompt(const RCapabilityArray& /*aCapsToCheck*/,CScript& /*aScript*/) + { + return EAccessNok; + } + + TInt Prompt(const RCapabilityArray& /*aCapsToCheck*/,RCapabilityArray& /*aCapsNotMatching*/, CScript& /*aScript*/) + { + return EAccessNok; + } + + TInt Prompt(RPromptDataList& aPromptDataList , TExecutableID /*aExecID = KAnonymousScript*/) + { + // CEikonEnv::Static()->InfoMsg(_L("Custom Prompt")); + + for(TInt i(0);i!=aPromptDataList.Count();++i) + { + aPromptDataList[i]->SetUserSelection(RTUserPrompt_OneShot); + //aPromptDataList[i]->iUserSelection = RTUserPrompt_OneShot; + } + + return EAccessOk; + } + + void SetPromptOption(TSecMgrPromptUIOption) + { + + } + + TSecMgrPromptUIOption PromptOption() const + { + return RTPROMPTUI_DEFAULT; + } + + TInt HandleNotifyL( + TInt aCmdId, + TInt aEventId, + CLiwGenericParamList& aEventParamList, + const CLiwGenericParamList& aInParamList); + + protected: // New functions + + /** + * ?member_description. + * @since ?Series60_version + * @param ?arg1 ?description + * @return ?description + */ + //?type ?member_function( ?type ?arg1 ); + + protected: // Functions from base classes + + /** + * From ?base_class ?member_description + */ + //?type ?member_function(); + + private: + + /** + * C++ default constructor. + */ + Cliwtestcases( CTestModuleIf& aTestModuleIf ); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + // Prohibit copy constructor if not deriving from CBase. + // ?classname( const ?classname& ); + // Prohibit assigment operator if not deriving from CBase. + // ?classname& operator=( const ?classname& ); + + /** + * Frees all resources allocated from test methods. + * @since ?Series60_version + */ + void Delete(); + + /** + * Test methods are listed below. + */ + + /** + * Example test method. + * @since ?Series60_version + * @param aItem Script line containing parameters. + * @return Symbian OS error code. + */ + virtual TInt ExampleL( CStifItemParser& aItem ); + virtual TBool LIW_DATA_TYPES_001(); + virtual TBool LIW_DATA_TYPES_002(); + virtual TBool LIW_DATA_TYPES_003(); + virtual TBool LIW_DATA_TYPES_004(); + virtual TBool LIW_DATA_TYPES_005(); + virtual TBool LIW_DATA_TYPES_006(); + virtual TBool LIW_DATA_TYPES_007(); + virtual TBool LIW_DATA_TYPES_008(); + virtual TBool LIW_DATA_TYPES_009(); + virtual TBool LIW_DATA_TYPES_010(); + + virtual TBool LIW_DATA_TYPES_011(); + virtual TBool LIW_DATA_TYPES_012(); + + //List comparision + virtual TBool LIW_DATA_TYPES_013(); + + //Map comparison + virtual TBool LIW_DATA_TYPES_014(); + + //Negative case for TLiwVariant::Get + virtual TBool LIW_DATA_TYPES_015(); + + //Negative case for TLiwVariant::AsXYZ interfaces + virtual TBool LIW_DATA_TYPES_016(); + + //ServiceCmdStr on integeral service commmand ID + virtual TBool LIW_DATA_TYPES_017(); + virtual TBool LIW_DATA_TYPES_018(); + + //HasCriteria check + virtual TBool LIW_DATA_TYPES_019(); + + //TLiwVariant::operator == check + virtual TBool LIW_DATA_TYPES_020(); + + //CLiwGenericParamList::FindFirst and FindNext + virtual TBool LIW_DATA_TYPES_021(); + + //CLiwGenericParamList::FindFirst and FindNext and AppendL(CLiwGenericParamList&) + virtual TBool LIW_DATA_TYPES_022(); + + //CLiwContainer::ExternalizeL + virtual TBool LIW_DATA_TYPES_023(); + + //TLiwVariant::Dump // only for debug version + virtual TBool LIW_DATA_TYPES_024(); + + //Should be called as the last case + virtual TBool LIW_CLEANUP_LIW_001(); + + //for conversion utilities + virtual TBool LIW_DATA_TYPES_025(); + virtual TBool LIW_DATA_TYPES_026(); + //virtual TBool LIW_DATA_TYPES_027(); + //virtual TBool LIW_DATA_TYPES_028(); + virtual TBool LIW_DATA_TYPES_029(); + virtual TBool LIW_DATA_TYPES_030(); + //virtual TBool LIW_DATA_TYPES_031(); + //virtual TBool LIW_DATA_TYPES_032(); + virtual TBool LIW_DATA_TYPES_033(); + virtual TBool LIW_DATA_TYPES_034(); + //virtual TBool LIW_DATA_TYPES_035(); + //virtual TBool LIW_DATA_TYPES_036(); + virtual TBool LIW_DATA_TYPES_037(); + virtual TBool LIW_DATA_TYPES_038(); + virtual TBool LIW_DATA_TYPES_039(); + //virtual TBool LIW_DATA_TYPES_040(); + virtual TBool LIW_DATA_TYPES_041(); + virtual TBool LIW_DATA_TYPES_042(); + virtual TBool LIW_DATA_TYPES_043(); + //virtual TBool LIW_DATA_TYPES_044(); + + //QueryImplementation TestCases + virtual TBool LIW_DATA_TYPES_045(); + virtual TBool LIW_DATA_TYPES_046(); + virtual TBool LIW_DATA_TYPES_047(); + virtual TBool LIW_DATA_TYPES_048(); + virtual TBool LIW_DATA_TYPES_049(); + + //Versioning TestCases + virtual TBool LIW_MDAT_VER1(); + virtual TBool LIW_MDAT_VER2(); + virtual TBool LIW_MDAT_VER3(); + virtual TBool LIW_MDAT_VER4(); + virtual TBool LIW_MDAT_VER5(); + + //Generic Metadata TestCases + virtual TBool LIW_MDAT_CAP1(); + virtual TBool LIW_MDAT_CAP2(); + + //Test case for Data Type - Map AtL returning const TDesC8& + virtual TBool LIW_Map_AtL_New(); + + //Test case for Data Type - Cleanup check + virtual TBool LIW_ContainerCleanup(); + virtual TBool LIW_ParamCleanup(); + virtual TBool LIW_VariantCleanup(); + + //Checking TInt64 datatype & conversion utilities + virtual TBool LIW_DATA_TYPES_050(); + + virtual void TestL(CLiwMap *map); + virtual void TestParamL(CLiwGenericParamList *param); + virtual void TestVariantL(CLiwMap* map); + + virtual TInt LIW_ASYNC_001(); + virtual TInt LIW_ASYNC_002(); + virtual TInt LIW_ASYNC_003(); + virtual TInt LIW_ASYNC_004(); + + /** + * Method used to log version of test class + */ + void SendTestClassVersion(); + TInt LoadL(); + + //ADD NEW METHOD DEC HERE + //[TestMethods] - Do not remove + + public: // Data + // ?one_line_short_description_of_data + //?data_declaration; + + protected: // Data + // ?one_line_short_description_of_data + //?data_declaration; + + private: // Data + CLiwServiceHandler *iServiceHandler; + CLiw_AsyncTC *asyObj; + // ?one_line_short_description_of_data + //?data_declaration; + + // Reserved pointer for future extension + //TAny* iReserved; + + public: // Friend classes + //?friend_class_declaration; + protected: // Friend classes + //?friend_class_declaration; + private: // Friend classes + //?friend_class_declaration; + + }; + +#endif // LIWTESTCASES_H + +// End of File diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/liw_criteria_api/tsrc/init/testframework.ini --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/liw_criteria_api/tsrc/init/testframework.ini Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,181 @@ +# +# This is STIFTestFramework initialization file +# Comment lines start with '#'-character. +# See STIF TestFramework users guide.doc for instructions + +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- +# Set following test engine settings: +# - Set Test Reporting mode. TestReportMode's possible values are: +# + 'Summary': Summary of the tested test cases. +# + 'Environment': Hardware and software info. +# + 'TestCases': Test case report. +# + 'FullReport': Set of all above ones. +# + Example 'TestReportMode= Summary TestCases' +# +# - CreateTestReport setting controls report creation mode +# + YES, Test report will created. +# + NO, No Test report. +# +# - File path indicates the base path of the test report. +# - File name indicates the name of the test report. +# +# - File format indicates the type of the test report. +# + TXT, Test report file will be txt type, for example 'TestReport.txt'. +# + HTML, Test report will be html type, for example 'TestReport.html'. +# +# - File output indicates output source of the test report. +# + FILE, Test report logging to file. +# + RDEBUG, Test report logging to using rdebug. +# +# - File Creation Mode indicates test report overwriting if file exist. +# + OVERWRITE, Overwrites if the Test report file exist. +# + APPEND, Continue logging after the old Test report information if +# report exist. +# - Sets a device reset module's dll name(Reboot). +# + If Nokia specific reset module is not available or it is not correct one +# StifHWResetStub module may use as a template for user specific reset +# module. + +[Engine_Defaults] + +TestReportMode= FullReport # Possible values are: 'Empty', 'Summary', 'Environment', + 'TestCases' or 'FullReport' + +CreateTestReport= YES # Possible values: YES or NO + +TestReportFilePath= C:\LOGS\TestFramework\ +TestReportFileName= TestReport + +TestReportFormat= TXT # Possible values: TXT or HTML +TestReportOutput= FILE # Possible values: FILE or RDEBUG +TestReportFileCreationMode= OVERWRITE # Possible values: OVERWRITE or APPEND + +DeviceResetDllName= StifResetForNokia.dll # e.g. 'StifHWResetStub.dll' for user specific reseting + +[End_Defaults] +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + + + +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- +# Module configurations start +# Modules are added between module tags +# tags. Module name is specified after ModuleName= tag, like +# ModuleName= XXXXXXXXX +# Modules might have initialisation file, specified as +# IniFile= c:\testframework\YYYYYY +# Modules might have several configuration files, like +# TestCaseFile= c:\testframework\NormalCases.txt +# TestCaseFile= c:\testframework\SmokeCases.txt +# TestCaseFile= c:\testframework\ManualCases.txt + +# (TestCaseFile is synonym for old term ConfigFile) + +# Following case specifies demo module settings. Demo module +# does not read any settings from file, so tags +# IniFile and TestCaseFile are not used. +# In the simplest case it is enough to specify only the +# name of the test module when adding new test module + +#[New_Module] +#ModuleName= demomodule +#[End_Module] + + +UITestingSupport= YES +SeparateProcesses= YES + +# Load testmoduleXXX, optionally with initialization file and/or test case files +[New_Module] +ModuleName= testscripter + +#TestModuleXXX used initialization file +IniFile= c:\testframework\Testframework.ini + + + +TestCaseFile= c:\testframework\tliwtestcases.cfg + + +[End_Module] +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + + + +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- +# Set STIFTestFramework logging overwrite parameters for Logger. +# Hardware and emulator environment logging path and styles can +# be configured from here to overwrite the Logger's implemented values. +# +# Settings description: +# - Indicates option for creation log directory/directories. If log directory/directories +# is/are not created by user they will make by software. +# + YES, Create log directory/directories if not allready exist. +# + NO, Log directory/directories not created. Only created one is used. +# +# - Overwrite emulator path setting. +# + Example: If 'EmulatorBasePath= C:\LOGS\TestFramework\' and in code is defined +# Logger's path 'D:\\LOGS\\Module\\' with those definition the path +# will be 'C:\LOGS\TestFramework\LOGS\Module\' +# +# - Overwrite emulator's logging format. +# + TXT, Log file(s) will be txt type(s), for example 'Module.txt'. +# + HTML, Log file(s) will be html type(s), for example 'Module.html'. +# +# - Overwrited emulator logging output source. +# + FILE, Logging to file(s). +# + RDEBUG, Logging to using rdebug(s). +# +# - Overwrite hardware path setting (Same description as above in emulator path). +# - Overwrite hardware's logging format(Same description as above in emulator format). +# - Overwrite hardware's logging output source(Same description as above in emulator output). +# +# - File Creation Mode indicates file overwriting if file exist. +# + OVERWRITE, Overwrites if file(s) exist. +# + APPEND, Continue logging after the old logging information if file(s) exist. +# +# - Will thread id include to the log filename. +# + YES, Thread id to log file(s) name, Example filename 'Module_b9.txt'. +# + NO, No thread id to log file(s), Example filename 'Module.txt'. +# +# - Will time stamps include the to log file. +# + YES, Time stamp added to each line in log file(s). Time stamp is +# for example'12.Nov.2003 115958 LOGGING INFO' +# + NO, No time stamp(s). +# +# - Will line breaks include to the log file. +# + YES, Each logging event includes line break and next log event is in own line. +# + NO, No line break(s). +# +# - Will event ranking include to the log file. +# + YES, Event ranking number added to each line in log file(s). Ranking number +# depends on environment's tics, for example(includes time stamp also) +# '012 12.Nov.2003 115958 LOGGING INFO' +# + NO, No event ranking. +# + +[Logger_Defaults] + +#NOTE: If you want to set Logger using next setting(s) remove comment(s)'#' + +#CreateLogDirectories= YES # Possible values: YES or NO + +#EmulatorBasePath= C:\LOGS\TestFramework\ +#EmulatorFormat= HTML # Possible values: TXT or HTML +#EmulatorOutput= FILE # Possible values: FILE or RDEBUG + +#HardwareBasePath= D:\LOGS\TestFramework\ +#HardwareFormat= HTML # Possible values: TXT or HTML +#HardwareOutput= FILE # Possible values: FILE or RDEBUG + +#FileCreationMode= OVERWRITE # Possible values: OVERWRITE or APPEND + +#ThreadIdToLogFile= YES # Possible values: YES or NO +#WithTimeStamp= YES # Possible values: YES or NO +#WithLineBreak= YES # Possible values: YES or NO +#WithEventRanking= YES # Possible values: YES or NO + +[End_Logger_Defaults] +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + +# End of file \ No newline at end of file diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/liw_criteria_api/tsrc/liwtestcases.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/liw_criteria_api/tsrc/liwtestcases.pkg Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,40 @@ +; +; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +; All rights reserved. +; This component and the accompanying materials are made available +; under the terms of the License "Eclipse Public License v1.0" +; which accompanies this distribution, and is available +; at the URL "http://www.eclipse.org/legal/epl-v10.html". +; +; Initial Contributors: +; Nokia Corporation - initial contribution. +; +; Contributors: +; +; Description: +; +&EN +; +; UID is the app's UID +; +#{"Liwtestcases"},(0x2000B5D4),1,0,0 + +; +; List of localised vendor names +%{"Vendor-EN"} + +; The non-localised, globally unique vendor name (mandatory) +:"Nokia OY" +;Supports Series 60 v 3.x +;This line indicates that this installation is for the Series 60 platform v3.x +;This line must appear _exactly_ as shown below in the sis file +;If this line is missing or incorrect, the sis file will not be able +;to be installed on Series 60 v3.x platforms +(0x101F7961), 0, 0, 0, {"Series60ProductID"} +; +; Two files to install +; +"\epoc32\release\armv5\urel\liwtestcases.dll" -"!:\sys\bin\liwtestcases.dll" +"\epoc32\winscw\c\data\others\liwaccesspolicy.xml" -"!:\data\others\liwaccesspolicy.xml" +"\epoc32\WINSCW\C\TestFramework\testframework.ini" -"!:\TestFramework\testframework.ini" +"\epoc32\WINSCW\C\TestFramework\tliwtestcases.cfg" -"!:\TestFramework\tliwtestcases.cfg" diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/liw_criteria_api/tsrc/src/liwtestcases.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/liw_criteria_api/tsrc/src/liwtestcases.cpp Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,212 @@ +/* +* Copyright (c) 2002 - 2007 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: ?Description +* +*/ + + + + + + + + +// INCLUDE FILES +#include +#include "liwtestcases.h" +#include + +// EXTERNAL DATA STRUCTURES +//extern ?external_data; + +// EXTERNAL FUNCTION PROTOTYPES +//extern ?external_function( ?arg_type,?arg_type ); + +// CONSTANTS +//const ?type ?constant_var = ?constant; + +// MACROS +//#define ?macro ?macro_def + +// LOCAL CONSTANTS AND MACROS +//const ?type ?constant_var = ?constant; +//#define ?macro_name ?macro_def + +// MODULE DATA STRUCTURES +//enum ?declaration +//typedef ?declaration + +// LOCAL FUNCTION PROTOTYPES +//?type ?function_name( ?arg_type, ?arg_type ); + +// FORWARD DECLARATIONS +//class ?FORWARD_CLASSNAME; + +// ============================= LOCAL FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// ?function_name ?description. +// ?description +// Returns: ?value_1: ?description +// ?value_n: ?description_line1 +// ?description_line2 +// ----------------------------------------------------------------------------- +// +/* +?type ?function_name( + ?arg_type arg, // ?description + ?arg_type arg) // ?description + { + + ?code // ?comment + + // ?comment + ?code + } +*/ + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// Cliwtestcases::Cliwtestcases +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +Cliwtestcases::Cliwtestcases( + CTestModuleIf& aTestModuleIf ): + CScriptBase( aTestModuleIf ) + { + } + +// ----------------------------------------------------------------------------- +// Cliwtestcases::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void Cliwtestcases::ConstructL() + { + //Read logger settings to check whether test case name is to be + //appended to log file name. + RSettingServer settingServer; + TInt ret = settingServer.Connect(); + if(ret != KErrNone) + { + User::Leave(ret); + } + // Struct to StifLogger settigs. + TLoggerSettings loggerSettings; + // Parse StifLogger defaults from STIF initialization file. + ret = settingServer.GetLoggerSettings(loggerSettings); + if(ret != KErrNone) + { + User::Leave(ret); + } + // Close Setting server session + settingServer.Close(); + + TFileName logFileName; + + if(loggerSettings.iAddTestCaseTitle) + { + TName title; + TestModuleIf().GetTestCaseTitleL(title); + logFileName.Format(KliwtestcasesLogFileWithTitle, &title); + } + else + { + logFileName.Copy(KliwtestcasesLogFile); + } + + iLog = CStifLogger::NewL( KliwtestcasesLogPath, + logFileName, + CStifLogger::ETxt, + CStifLogger::EFile, + EFalse ); + + iServiceHandler = CLiwServiceHandler::NewL(); + + asyObj = new (ELeave) CLiw_AsyncTC(iServiceHandler); + + LoadL(); + + SendTestClassVersion(); + } + +// ----------------------------------------------------------------------------- +// Cliwtestcases::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +Cliwtestcases* Cliwtestcases::NewL( + CTestModuleIf& aTestModuleIf ) + { + Cliwtestcases* self = new (ELeave) Cliwtestcases( aTestModuleIf ); + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + + return self; + + } + +// Destructor +Cliwtestcases::~Cliwtestcases() + { + + // Delete resources allocated from test methods + Delete(); + + // Delete logger + delete iLog; + + } + +//----------------------------------------------------------------------------- +// Cliwtestcases::SendTestClassVersion +// Method used to send version of test class +//----------------------------------------------------------------------------- +// +void Cliwtestcases::SendTestClassVersion() + { + TVersion moduleVersion; + moduleVersion.iMajor = TEST_CLASS_VERSION_MAJOR; + moduleVersion.iMinor = TEST_CLASS_VERSION_MINOR; + moduleVersion.iBuild = TEST_CLASS_VERSION_BUILD; + + TFileName moduleName; + moduleName = _L("liwtestcases.dll"); + + TBool newVersionOfMethod = ETrue; + TestModuleIf().SendTestModuleVersion(moduleVersion, moduleName, newVersionOfMethod); + } + +// ========================== OTHER EXPORTED FUNCTIONS ========================= + +// ----------------------------------------------------------------------------- +// LibEntryL is a polymorphic Dll entry point. +// Returns: CScriptBase: New CScriptBase derived object +// ----------------------------------------------------------------------------- +// +EXPORT_C CScriptBase* LibEntryL( + CTestModuleIf& aTestModuleIf ) // Backpointer to STIF Test Framework + { + + return ( CScriptBase* ) Cliwtestcases::NewL( aTestModuleIf ); + + } + + +// End of File diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/liw_criteria_api/tsrc/src/liwtestcasesasync.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/liw_criteria_api/tsrc/src/liwtestcasesasync.cpp Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,649 @@ +/* +* Copyright (c) 2002-2006 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + + + +// INCLUDE FILES +#include +#include +#include "liw_async_testcase.h" +//#include "liwtestapp.hrh" +//#include + +TInt success; + +using namespace LIW; + +//_LIT8(KAsyncService,"S60.MultiMetaData"); +//_LIT8(KSyncService,"S60.SyncServices"); +//_LIT8(KInvalidService,"S60.InvalidService"); +//_LIT8(KSecurityService,"S60.SecurityServices"); +//_LIT8(KInvalidSecurityService,"S60.InvalidSecurityServices"); + +_LIT8(KAsyncSrv,"Test.AsyncServices"); +_LIT8(KAsyncContent,"Test/Data"); + +//_LIT8(KTestPARAMNanmeTC2,"TestResult"); +//_LIT8(KSecurityParameter,"SecurityParam"); + +//_LIT8(KResult_Pass, "Test Provider replied with EGenericParamError = KErrorNone"); +//_LIT8(KResult_Fail,"Test Provider replied with Error : KErrNotFound"); + +//_LIT8(KAsyn_TestCmt, "These Test cases are designed to test LIW support for Asynchronous Invocation.\ +

Test:-
\ +
  • Attaching and Detaching service providers through string based service command
  • \ +
  • Execute the service with callback
  • \ +
  • After checking the event state, next Test Case is invoked
  • \ +
    Check -
    \ + Appropriate State of the event in the HandleNotify Method"); + +TInt IncomingEventCmdID=1000; +TInt XmlDataReaderCmdID=2000; + +const TInt32 LIWASYNC001=100; +//const TInt32 LIWASYNC002=200; +const TInt32 LIWASYNC003=300; +const TInt32 LIWASYNC004=400; +//const TInt32 LIWASYNC005=500; +//const TInt32 LIWASYNC006=600; + +const TInt32 KAsyncMaxCount=10; + +const TUid KViewId4 = {4}; + +// --------------------------------------------------------- +// TUid CLiwtcbase::Id() +// ?implementation_description +// --------------------------------------------------------- +// +TUid CLiw_AsyncTC::Id() const + { + return KViewId4; + } + +//Async event states. New state could be added +enum TAsyncState +{ + eAsyncStarted=0, + eAsyncStopped +}; + +// ================= MEMBER FUNCTIONS ======================= + +// ----------------------------------------------------------------------------- +// CLiw_AsyncTC::CLiw_AsyncTC +// Description: CLiw_AsyncTC constructer +// ----------------------------------------------------------------------------- +// +CLiw_AsyncTC::CLiw_AsyncTC( CLiwServiceHandler *aServiceHandler, TRequestType aRequest, TInt aPriority): CActive(aPriority) + { + iCount = 0; + iResult = 1; + iIncrementCount = 1; + iRequest = aRequest; + iServiceHandler = aServiceHandler; + iAsyncCount = 0; + tcNo = -1; + CActiveScheduler::Add( this ); + } + +TInt CLiw_AsyncTC::AsyncCase(TInt aTcNo) +{ + tcNo = aTcNo; + //setactive, user::requestcomplete + + SetActive(); + + iStatus=KRequestPending; + TRequestStatus* temp=&iStatus; + User::RequestComplete(temp,KErrNone); + + //wait + CActiveScheduler::Start(); + + return iResult; +} + +// +//----------------------------------------------------------------------------- +// CLiw_AsyncTC::RequestFunction +// Description: Request Function for CLiw_AsyncTC +// ---------------------------------------------------------------------------- +// +void CLiw_AsyncTC::RequestFunction( TRequestType aRequest ) +{ + iRequest = aRequest; + iStatus = KRequestPending; + if( !IsActive() ) + SetActive(); +} + +// +//----------------------------------------------------------------------------- +// CLiw_AsyncTC::ReadyToGo +// Description: This calls CLiw_AsyncTC's RunL +//----------------------------------------------------------------------------- +// +void CLiw_AsyncTC::ReadyToGo() +{ + TRequestStatus* status = &iStatus; + User::RequestComplete( status, KErrNone ); +} + + +// +//----------------------------------------------------------------------------- +// CLiw_AsyncTC::DoCancel +// Description: This calls CActive's Cancel +//----------------------------------------------------------------------------- +// +void CLiw_AsyncTC::DoCancel() +{ +} + +// +//----------------------------------------------------------------------------- +// CLiw_AsyncTC::SetIncrementCounter +// Description: Sets Increment Counter of CLiw_AsyncTC +//----------------------------------------------------------------------------- +// +void CLiw_AsyncTC::SetIncrementCounter( TInt aCount) +{ +iIncrementCount = aCount; +} + +// +//----------------------------------------------------------------------------- +// CLiw_AsyncTC::CountValue +// Description: Returns Count Value of CLiw_AsyncTC +//----------------------------------------------------------------------------- +// +TUint CLiw_AsyncTC::CountValue () const +{ +return iCount; +} + +// --------------------------------------------------------- +// CLiw_AsyncTC::ConstructL(const TRect& aRect) +// EPOC two-phased constructor +// --------------------------------------------------------- +// +/*void CLiw_AsyncTC::ConstructL(CLiwTestLogHandler& aLogger, CLiwTestAppContainer& aContainer) + { + iLogger = &aLogger; + iContainer = &aContainer; + + // Create service handler instance. + CLiwServiceHandler* serviceHandler = CLiwServiceHandler::NewLC(); + iServiceHandler = serviceHandler; + CleanupStack::Pop(serviceHandler); + } +*/ + +// --------------------------------------------------------- +// CLiw_AsyncTC::~CLiw_AsyncTC() +// ?implementation_description +// --------------------------------------------------------- +// +CLiw_AsyncTC::~CLiw_AsyncTC() + { + delete iServiceHandler; + iServiceHandler = NULL; + + Cancel(); + } + +void CLiw_AsyncTC::RunL() + { + switch(tcNo) + { + case 1: + LIW_ASYNC_001(); + break; + case 2: + LIW_ASYNC_002(); + break; + case 3: + LIW_ASYNC_003(); + break; + case 4: + LIW_ASYNC_004(); + break; + default: + break; + } + } + + +// --------------------------------------------------------- +// CLiw_AsyncTC::HandleCommandL +// From MLiwNotifyCallback +// --------------------------------------------------------- +// +TInt CLiw_AsyncTC::HandleNotifyL( + TInt aCmdId, + TInt aEventId, + CLiwGenericParamList& /*aEventParamList*/, + const CLiwGenericParamList& /*aInParamList*/) + { + + if(LIWASYNC001==aCmdId) + { + if( (KLiwEventCompleted==aEventId) || + (KLiwEventCanceled==aEventId) || + (KLiwEventStopped==aEventId) || + (KLiwEventError==aEventId) ) + { + //_LIT8(testCmt,"LIW_ASYNC_001:
    Create a CLiwCriteriaItem with string command \ + The provider with the same command must be attached with LIW FW.\ + and call ExecuteServiceCmdL.
    \ +
    Test -
  • Attaching provider Programmatically
  • string based serviceName
  • \ +
    Check -
    Provider returns asynchronously : LiwEventCompleted"); + + if(KLiwEventCompleted==aEventId) + { + iResult = 0; + //iLogger->AddTestItem(testCmt,KResult_Pass,ETrue, EFalse); + //Venkat : return true as testcase passed + } + else + { + iResult = 1; + //iLogger->AddTestItem(testCmt,KResult_Fail,ETrue, EFalse); + //Venkat : Test fails + } + + CActiveScheduler::Stop(); + //LIW_ASYNC_002(); + } + } + else if(LIWASYNC003==aCmdId) + { + //if the counter reaches + //event notification should be cancelled + ++iAsyncCount; + + if( (KLiwEventCompleted==aEventId) || + (KLiwEventCanceled==aEventId) || + (KLiwEventStopped==aEventId) || + (KLiwEventError==aEventId) ) + { + //_LIT8(testCmt,"LIW_ASYNC_003:
    Create a CLiwCriteriaItem with string command \ + The provider with the same command must be attached with LIW FW.\ + and call ExecuteServiceCmdL.
    \ +
    Test -
  • Attaching provider Programmatically
  • string based serviceName
  • \ +
    Check -
    Provider returns asynchronously : LiwEventStopped"); + + if(KLiwEventStopped==aEventId) + { + iResult = 0; + //iLogger->AddTestItem(testCmt,KResult_Pass,ETrue, EFalse); + } + else + { + iResult = 1; + //iLogger->AddTestItem(testCmt,KResult_Fail,EFalse, EFalse); + } + + //LIW_ASYNC_003((TInt32)eAsyncStopped); + iAsyncCount=0; + iTransID=0; + + return KErrNone; + } + + if(iAsyncCount >= KAsyncMaxCount) + { + LIW_ASYNC_003((TInt32)eAsyncStopped); + iAsyncCount=0; + iTransID=0; + //LIW_ASYNC_004(); + + CActiveScheduler::Stop(); + } + } + else if(LIWASYNC004==aCmdId) + { + if( (KLiwEventCanceled==aEventId) || + (KLiwEventStopped==aEventId) || + (KLiwEventError==aEventId) ) + { + //_LIT8(testCmt,"LIW_ASYNC_004:
    Create a CLiwCriteriaItem with string command \ + The provider with the same command must be attached with LIW FW.\ + and call ExecuteServiceCmdL.
    \ +
    Test -
  • Attaching provider Programmatically
  • string based serviceName
  • \ +
    Check -
    Provider returns asynchronously : LiwEventError"); + + if(KLiwEventError==aEventId) + { + iResult = 0; + //iLogger->AddTestItem(testCmt,KResult_Pass,ETrue, EFalse); + } + else + { + iResult = 1; + //iLogger->AddTestItem(testCmt,KResult_Fail,EFalse, EFalse); + } + + CActiveScheduler::Stop(); + } + } + return KErrNone; + } + +// --------------------------------------------------------- +/*LIW Asynchronous service Test Cases are Defined here*/ +// --------------------------------------------------------- + +void CLiw_AsyncTC::LIW_ASYNC_004() +{ + + /*Detached all the service provider and reset all the Entries of previous test case*/ + iServiceHandler->Reset(); + + RCriteriaArray interest; + CleanupClosePushL(interest); + + const TDesC8* cmd = &KAsyncSrv; + + //Define Criteria Item Dynamically with string based command + CLiwCriteriaItem* criteria1 = CLiwCriteriaItem::NewLC(1, *cmd, KAsyncContent); + criteria1->SetServiceClass(TUid::Uid(KLiwClassBase)); + interest.AppendL(criteria1); + + /*Attach the base provider*/ + iServiceHandler->AttachL(interest); + CleanupStack::PopAndDestroy(criteria1); + CleanupStack::PopAndDestroy(&interest); + + TLiwGenericParam asyncSrvCmdIDParam; + TLiwGenericParam asyncStateParam; + TLiwGenericParam asyncTransIDParam; + TLiwGenericParam testCaseIDParam; + + _LIT8(KAsyncCmdID, "AsyncCmdID"); +// _LIT8(KAsyncCmdName, "IncomingEvents"); + _LIT8(KAsyncEventState, "AsyncEventState"); + //_LIT8(KAsyncTransID, "TransactionID"); + _LIT8(KTestCaseID, "TestCaseID"); + + //_LIT8(KLIW_ASYNC_001, "LIW_ASYNC_001"); + TInt32 testCaseID=LIWASYNC004; + + CLiwGenericParamList* inps = &(iServiceHandler->InParamListL()); + inps->Reset(); + + asyncSrvCmdIDParam.SetNameAndValueL(KAsyncCmdID, TLiwVariant((TInt32)XmlDataReaderCmdID)); + asyncStateParam.SetNameAndValueL(KAsyncEventState, TLiwVariant((TInt32)eAsyncStarted)); + testCaseIDParam.SetNameAndValueL(KTestCaseID, TLiwVariant((TInt32)testCaseID)); + + inps->AppendL(asyncSrvCmdIDParam); + inps->AppendL(asyncStateParam); + inps->AppendL(testCaseIDParam); + + CLiwCriteriaItem* crit = CLiwCriteriaItem::NewLC(1, *cmd, KAsyncContent); + crit->SetServiceClass(TUid::Uid(KLiwClassBase)); + + CLiwGenericParamList* outps = &(iServiceHandler->OutParamListL()); + + iServiceHandler->ExecuteServiceCmdL(*crit, *inps, *outps,KLiwOptASyncronous,this); + + asyncSrvCmdIDParam.Reset(); + asyncStateParam.Reset(); + asyncTransIDParam.Reset(); + testCaseIDParam.Reset(); + CleanupStack::PopAndDestroy(crit); // crit +} + +void CLiw_AsyncTC::LIW_ASYNC_003(TInt aEventState) +{ + + const TDesC8* cmd = &KAsyncSrv; + + if(eAsyncStarted==aEventState) + { + /*Detached all the service provider and reset all the Entries of previous test case*/ + iServiceHandler->Reset(); + + RCriteriaArray interest; + CleanupClosePushL(interest); + + + + //Define Criteria Item Dynamically with string based command + CLiwCriteriaItem* criteria1 = CLiwCriteriaItem::NewLC(1, *cmd, KAsyncContent); + criteria1->SetServiceClass(TUid::Uid(KLiwClassBase)); + interest.AppendL(criteria1); + + /*Attach the base provider*/ + iServiceHandler->AttachL(interest); + CleanupStack::PopAndDestroy(criteria1); + CleanupStack::PopAndDestroy(&interest); + } + + + TLiwGenericParam asyncSrvCmdIDParam; + TLiwGenericParam asyncStateParam; + TLiwGenericParam asyncTransIDParam; + TLiwGenericParam testCaseIDParam; + + _LIT8(KAsyncCmdID, "AsyncCmdID"); +// _LIT8(KAsyncCmdName, "IncomingEvents"); + _LIT8(KAsyncEventState, "AsyncEventState"); + //_LIT8(KAsyncTransID, "TransactionID"); + _LIT8(KTestCaseID, "TestCaseID"); + + TInt32 testCaseID=LIWASYNC003; + + CLiwGenericParamList* inps = &(iServiceHandler->InParamListL()); + inps->Reset(); + + asyncSrvCmdIDParam.SetNameAndValueL(KAsyncCmdID, TLiwVariant((TInt32)IncomingEventCmdID)); + asyncStateParam.SetNameAndValueL(KAsyncEventState, TLiwVariant((TInt32)aEventState)); + testCaseIDParam.SetNameAndValueL(KTestCaseID, TLiwVariant((TInt32)testCaseID)); + + inps->AppendL(asyncSrvCmdIDParam); + inps->AppendL(asyncStateParam); + inps->AppendL(testCaseIDParam); + + if(eAsyncStopped==aEventState) + { + TLiwGenericParam asyncTransIDParam; + _LIT8(KAsyncTransID, "TransactionID"); + asyncTransIDParam.SetNameAndValueL(KAsyncTransID, TLiwVariant((TInt32)iTransID)); + inps->AppendL(asyncTransIDParam); + asyncTransIDParam.Reset(); + } + + CLiwCriteriaItem* crit = CLiwCriteriaItem::NewLC(1, *cmd, KAsyncContent); + crit->SetServiceClass(TUid::Uid(KLiwClassBase)); + + CLiwGenericParamList* outps = &(iServiceHandler->OutParamListL()); + + iServiceHandler->ExecuteServiceCmdL(*crit, *inps, *outps,KLiwOptASyncronous,this); + + asyncSrvCmdIDParam.Reset(); + asyncStateParam.Reset(); + asyncTransIDParam.Reset(); + testCaseIDParam.Reset(); + CleanupStack::PopAndDestroy(crit); // crit + + if(eAsyncStarted==aEventState) + { + TInt pos = 0; + _LIT8(KAsyncTransID, "TransactionID"); + outps->FindFirst(pos, KAsyncTransID); + + TLiwGenericParam transIDParam = outps->operator[](pos); + iTransID = transIDParam.Value().AsTInt32(); + } + + //LIW_ASYNC_004(); +} + +void CLiw_AsyncTC::LIW_ASYNC_002() +{ + + /*Detached all the service provider and reset all the Entries of previous test case*/ + iServiceHandler->Reset(); + + RCriteriaArray interest; + CleanupClosePushL(interest); + + const TDesC8* cmd = &KAsyncSrv; + + //Define Criteria Item Dynamically with string based command + CLiwCriteriaItem* criteria1 = CLiwCriteriaItem::NewLC(1, *cmd, KAsyncContent); + criteria1->SetServiceClass(TUid::Uid(KLiwClassBase)); + interest.AppendL(criteria1); + + /*Attach the base provider*/ + iServiceHandler->AttachL(interest); + CleanupStack::PopAndDestroy(criteria1); + CleanupStack::PopAndDestroy(&interest); + + TLiwGenericParam asyncSrvCmdIDParam; + TLiwGenericParam asyncStateParam; + TLiwGenericParam asyncTransIDParam; + TLiwGenericParam testCaseIDParam; + + _LIT8(KAsyncCmdID, "AsyncCmdID"); +// _LIT8(KAsyncCmdName, "IncomingEvents"); + _LIT8(KAsyncEventState, "AsyncEventState"); + //_LIT8(KAsyncTransID, "TransactionID"); + _LIT8(KTestCaseID, "TestCaseID"); + + //_LIT8(KLIW_ASYNC_001, "LIW_ASYNC_001"); + TInt32 testCaseID=LIWASYNC001; + + CLiwGenericParamList* inps = &(iServiceHandler->InParamListL()); + inps->Reset(); + + asyncSrvCmdIDParam.SetNameAndValueL(KAsyncCmdID, TLiwVariant((TInt32)XmlDataReaderCmdID)); + asyncStateParam.SetNameAndValueL(KAsyncEventState, TLiwVariant((TInt32)eAsyncStarted)); + testCaseIDParam.SetNameAndValueL(KTestCaseID, TLiwVariant((TInt32)testCaseID)); + + inps->AppendL(asyncSrvCmdIDParam); + inps->AppendL(asyncStateParam); + inps->AppendL(testCaseIDParam); + + CLiwCriteriaItem* crit = CLiwCriteriaItem::NewLC(1, *cmd, KAsyncContent); + crit->SetServiceClass(TUid::Uid(KLiwClassBase)); + + CLiwGenericParamList* outps = &(iServiceHandler->OutParamListL()); + + iServiceHandler->ExecuteServiceCmdL(*crit, *inps, *outps,KLiwOptASyncronous); + + //Since there is no callback, the control returns here + //Checking for the success of this testcase + + TInt pos=0; + + outps->FindFirst(pos, EGenericParamError); + + if(pos != KErrNotFound) + { + //_LIT8(testCmt,"LIW_ASYNC_001:
    Create a CLiwCriteriaItem with string command \ + The provider with the same command must be attached with LIW FW.\ + and call ExecuteServiceCmdL.
    \ +
    Test -
  • Attaching provider Programmatically
  • string based serviceName
  • \ +
  • No CallBack is mentioned

  • Check -
    \ + Provider returns control immediately (Synchronous) EGenericParamError = KErrCancel"); + + if ((*outps)[pos].Value().AsTInt32() == KErrCancel) + { + iResult = 0; + //iLogger->AddTestItem(testCmt,KResult_Pass,ETrue, EFalse); + } + else + { + iResult = 1; + //iLogger->AddTestItem(testCmt,KResult_Fail,ETrue, EFalse); + } + } + asyncSrvCmdIDParam.Reset(); + asyncStateParam.Reset(); + asyncTransIDParam.Reset(); + testCaseIDParam.Reset(); + CleanupStack::PopAndDestroy(crit); // crit + + CActiveScheduler::Stop(); + //LIW_ASYNC_003(); +} + + +void CLiw_AsyncTC::LIW_ASYNC_001() +{ + /*Detached all the service provider and reset all the Entries of previous test case*/ + iServiceHandler->Reset(); + + RCriteriaArray interest; + CleanupClosePushL(interest); + + //Define Criteria Item Dynamically with string based command + CLiwCriteriaItem* criteria1 = CLiwCriteriaItem::NewLC(1, KAsyncSrv, KAsyncContent); + criteria1->SetServiceClass(TUid::Uid(KLiwClassBase)); + interest.AppendL(criteria1); + + /*Attach the base provider*/ + TInt status = iServiceHandler->AttachL(interest); + CleanupStack::PopAndDestroy(criteria1); + CleanupStack::PopAndDestroy(&interest); + + TLiwGenericParam asyncSrvCmdIDParam; + TLiwGenericParam asyncStateParam; + TLiwGenericParam asyncTransIDParam; + TLiwGenericParam testCaseIDParam; + + _LIT8(KAsyncCmdID, "AsyncCmdID"); + //_LIT8(KAsyncCmdName, "IncomingEvents"); + _LIT8(KAsyncEventState, "AsyncEventState"); + //_LIT8(KAsyncTransID, "TransactionID"); + _LIT8(KTestCaseID, "TestCaseID"); + + //_LIT8(KLIW_ASYNC_001, "LIW_ASYNC_001"); + TInt32 testCaseID=LIWASYNC001; + + CLiwGenericParamList* inps = &(iServiceHandler->InParamListL()); + inps->Reset(); + + asyncSrvCmdIDParam.SetNameAndValueL(KAsyncCmdID, TLiwVariant((TInt32)XmlDataReaderCmdID)); + asyncStateParam.SetNameAndValueL(KAsyncEventState, TLiwVariant((TInt32)eAsyncStarted)); + testCaseIDParam.SetNameAndValueL(KTestCaseID, TLiwVariant((TInt32)testCaseID)); + + inps->AppendL(asyncSrvCmdIDParam); + inps->AppendL(asyncStateParam); + inps->AppendL(testCaseIDParam); + + CLiwCriteriaItem* crit = CLiwCriteriaItem::NewLC(1, KAsyncSrv, KAsyncContent); + crit->SetServiceClass(TUid::Uid(KLiwClassBase)); + + CLiwGenericParamList* outps = &(iServiceHandler->OutParamListL()); + + iServiceHandler->ExecuteServiceCmdL(*crit, *inps, *outps,KLiwOptASyncronous,this); + + asyncSrvCmdIDParam.Reset(); + asyncStateParam.Reset(); + asyncTransIDParam.Reset(); + testCaseIDParam.Reset(); + + CleanupStack::PopAndDestroy(crit); // crit +} diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/liw_criteria_api/tsrc/src/liwtestcasesblocks.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/liw_criteria_api/tsrc/src/liwtestcasesblocks.cpp Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,2992 @@ +/* +* Copyright (c) 2002 - 2007 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: ?Description +* +*/ + + + + + + + + +// [INCLUDE FILES] - do not remove +#include +#include +#include +#include "liwtestcases.h" + +#include +#include +//#include "liwTC1.h" +//#include "liwtestapp.hrh" +//#include +#include // for read write stream + +#include +#include +#include +#include +#include "liwtestapplit.h" + +#include "liw_async_testcase.h" + +using namespace LIW; + +// EXTERNAL DATA STRUCTURES +//extern ?external_data; + +// EXTERNAL FUNCTION PROTOTYPES +//extern ?external_function( ?arg_type,?arg_type ); + +// CONSTANTS +//const ?type ?constant_var = ?constant; + +// MACROS +//#define ?macro ?macro_def + +// LOCAL CONSTANTS AND MACROS +//const ?type ?constant_var = ?constant; +//#define ?macro_name ?macro_def + +// MODULE DATA STRUCTURES +//enum ?declaration +//typedef ?declaration + +// LOCAL FUNCTION PROTOTYPES +//?type ?function_name( ?arg_type, ?arg_type ); + +// FORWARD DECLARATIONS +//class ?FORWARD_CLASSNAME; + +// ============================= LOCAL FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// ?function_name ?description. +// ?description +// Returns: ?value_1: ?description +// ?value_n: ?description_line1 +// ?description_line2 +// ----------------------------------------------------------------------------- +// +/* +?type ?function_name( + ?arg_type arg, // ?description + ?arg_type arg) // ?description + { + + ?code // ?comment + + // ?comment + ?code + } +*/ + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// Cliwtestcases::Delete +// Delete here all resources allocated and opened from test methods. +// Called from destructor. +// ----------------------------------------------------------------------------- +// +void Cliwtestcases::Delete() + { + if(iServiceHandler) + { + iServiceHandler->Reset(); + delete iServiceHandler; + iServiceHandler = NULL; + } + + } + +// --------------------------------------------------------- +// CLiwtcbase::HandleNotifyL +// From - MLiwNotifyCallback +// --------------------------------------------------------- +TInt Cliwtestcases::HandleNotifyL + ( + TInt /*aCmdId*/, + TInt /*aEventId*/, + CLiwGenericParamList& /*aEventParamList*/, + const CLiwGenericParamList& /*aInParamList*/) + { + return KErrNone; + } + + +TInt Cliwtestcases::LoadL( ) + { + RCriteriaArray interest; + CleanupClosePushL(interest); + + CLiwCriteriaItem* criteria = CLiwCriteriaItem::NewLC(1, KTestCommandTC1, KContentTypeTxt); + criteria->SetServiceClass(TUid::Uid(KLiwClassBase)); + + interest.AppendL(criteria); + + // Attach the MyServiceName provider to the LIW framework. + TInt status = iServiceHandler->AttachL(interest); + + // Detach The MyServiceName Provider + //iServiceHandler->DetachL(interest); + CleanupStack::PopAndDestroy(criteria); + CleanupStack::PopAndDestroy(&interest); + return status; + } + +// ----------------------------------------------------------------------------- +// Cliwtestcases::RunMethodL +// Run specified method. Contains also table of test mothods and their names. +// ----------------------------------------------------------------------------- +// +TInt Cliwtestcases::RunMethodL( + CStifItemParser& aItem ) + { + TestModuleIf().SetBehavior( CTestModuleIf::ETestLeaksHandles ); + + static TStifFunctionInfo const KFunctions[] = + { + // Copy this line for every implemented function. + // First string is the function name used in TestScripter script file. + // Second is the actual implementation member function. + ENTRY( "LIW_DATA_TYPES_001", Cliwtestcases::LIW_DATA_TYPES_001 ), + ENTRY( "LIW_DATA_TYPES_002", Cliwtestcases::LIW_DATA_TYPES_002 ), + ENTRY( "LIW_DATA_TYPES_003", Cliwtestcases::LIW_DATA_TYPES_003 ), + ENTRY( "LIW_DATA_TYPES_004", Cliwtestcases::LIW_DATA_TYPES_004 ), + ENTRY( "LIW_DATA_TYPES_005", Cliwtestcases::LIW_DATA_TYPES_005 ), + ENTRY( "LIW_DATA_TYPES_006", Cliwtestcases::LIW_DATA_TYPES_006 ), + ENTRY( "LIW_DATA_TYPES_007", Cliwtestcases::LIW_DATA_TYPES_007 ), + ENTRY( "LIW_DATA_TYPES_008", Cliwtestcases::LIW_DATA_TYPES_008 ), + ENTRY( "LIW_DATA_TYPES_009", Cliwtestcases::LIW_DATA_TYPES_009 ), + ENTRY( "LIW_Map_AtL_New", Cliwtestcases::LIW_Map_AtL_New ), + ENTRY( "LIW_DATA_TYPES_010", Cliwtestcases::LIW_DATA_TYPES_010 ), + ENTRY( "LIW_DATA_TYPES_011", Cliwtestcases::LIW_DATA_TYPES_011 ), + ENTRY( "LIW_DATA_TYPES_012", Cliwtestcases::LIW_DATA_TYPES_012 ), + ENTRY( "LIW_DATA_TYPES_013", Cliwtestcases::LIW_DATA_TYPES_013 ), + ENTRY( "LIW_DATA_TYPES_014", Cliwtestcases::LIW_DATA_TYPES_014 ), + ENTRY( "LIW_DATA_TYPES_016", Cliwtestcases::LIW_DATA_TYPES_016 ), + ENTRY( "LIW_DATA_TYPES_017", Cliwtestcases::LIW_DATA_TYPES_017 ), + ENTRY( "LIW_DATA_TYPES_018", Cliwtestcases::LIW_DATA_TYPES_018 ), + ENTRY( "LIW_DATA_TYPES_020", Cliwtestcases::LIW_DATA_TYPES_020 ), + ENTRY( "LIW_DATA_TYPES_021", Cliwtestcases::LIW_DATA_TYPES_021 ), + ENTRY( "LIW_DATA_TYPES_022", Cliwtestcases::LIW_DATA_TYPES_022 ), + ENTRY( "LIW_DATA_TYPES_023", Cliwtestcases::LIW_DATA_TYPES_023 ), + ENTRY( "LIW_DATA_TYPES_024", Cliwtestcases::LIW_DATA_TYPES_024 ), + ENTRY( "LIW_DATA_TYPES_025", Cliwtestcases::LIW_DATA_TYPES_025 ), + ENTRY( "LIW_DATA_TYPES_026", Cliwtestcases::LIW_DATA_TYPES_026 ), + ENTRY( "LIW_DATA_TYPES_029", Cliwtestcases::LIW_DATA_TYPES_029 ), + ENTRY( "LIW_DATA_TYPES_030", Cliwtestcases::LIW_DATA_TYPES_030 ), + ENTRY( "LIW_DATA_TYPES_033", Cliwtestcases::LIW_DATA_TYPES_033 ), + ENTRY( "LIW_DATA_TYPES_034", Cliwtestcases::LIW_DATA_TYPES_034 ), + ENTRY( "LIW_DATA_TYPES_037", Cliwtestcases::LIW_DATA_TYPES_037 ), + ENTRY( "LIW_DATA_TYPES_038", Cliwtestcases::LIW_DATA_TYPES_038 ), + ENTRY( "LIW_DATA_TYPES_039", Cliwtestcases::LIW_DATA_TYPES_039 ), + ENTRY( "LIW_DATA_TYPES_041", Cliwtestcases::LIW_DATA_TYPES_041 ), + ENTRY( "LIW_DATA_TYPES_042", Cliwtestcases::LIW_DATA_TYPES_042 ), + ENTRY( "LIW_DATA_TYPES_043", Cliwtestcases::LIW_DATA_TYPES_043 ), + ENTRY( "LIW_DATA_TYPES_045", Cliwtestcases::LIW_DATA_TYPES_045 ), + ENTRY( "LIW_DATA_TYPES_046", Cliwtestcases::LIW_DATA_TYPES_046 ), + ENTRY( "LIW_DATA_TYPES_047", Cliwtestcases::LIW_DATA_TYPES_047 ), + ENTRY( "LIW_DATA_TYPES_048", Cliwtestcases::LIW_DATA_TYPES_048 ), + ENTRY( "LIW_DATA_TYPES_049", Cliwtestcases::LIW_DATA_TYPES_049 ), + ENTRY( "LIW_MDAT_VER1", Cliwtestcases::LIW_MDAT_VER1 ), + ENTRY( "LIW_MDAT_VER2", Cliwtestcases::LIW_MDAT_VER2 ), + ENTRY( "LIW_MDAT_VER3", Cliwtestcases::LIW_MDAT_VER3 ), + ENTRY( "LIW_MDAT_VER4", Cliwtestcases::LIW_MDAT_VER4 ), + ENTRY( "LIW_MDAT_VER5", Cliwtestcases::LIW_MDAT_VER5 ), + ENTRY( "LIW_MDAT_CAP1", Cliwtestcases::LIW_MDAT_CAP1 ), + ENTRY( "LIW_ContainerCleanup", Cliwtestcases::LIW_ContainerCleanup ), + ENTRY( "LIW_ParamCleanup", Cliwtestcases::LIW_ParamCleanup ), + ENTRY( "LIW_VariantCleanup", Cliwtestcases::LIW_VariantCleanup ), + ENTRY( "LIW_ASYNC_001", Cliwtestcases::LIW_ASYNC_001 ), + ENTRY( "LIW_ASYNC_002", Cliwtestcases::LIW_ASYNC_002 ), + ENTRY( "LIW_ASYNC_003", Cliwtestcases::LIW_ASYNC_003 ), + ENTRY( "LIW_ASYNC_004", Cliwtestcases::LIW_ASYNC_004 ), + + //ADD NEW ENTRY HERE + // [test cases entries] - Do not remove + + }; + + const TInt count = sizeof( KFunctions ) / + sizeof( TStifFunctionInfo ); + + return RunInternalL( KFunctions, count, aItem ); + + } + +// ----------------------------------------------------------------------------- +// Cliwtestcases::ExampleL +// Example test method function. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt Cliwtestcases::ExampleL( CStifItemParser& aItem ) + { + + // Print to UI + _LIT( Kliwtestcases, "liwtestcases" ); + _LIT( KExample, "In Example" ); + TestModuleIf().Printf( 0, Kliwtestcases, KExample ); + // Print to log file + iLog->Log( KExample ); + + TInt i = 0; + TPtrC string; + _LIT( KParam, "Param[%i]: %S" ); + while ( aItem.GetNextString ( string ) == KErrNone ) + { + TestModuleIf().Printf( i, Kliwtestcases, + KParam, i, &string ); + i++; + } + + return KErrNone; + + } + +// --------------------------------------------------------- +// Test Case Deffinition for LIW Data Types +// +// --------------------------------------------------------- +TBool Cliwtestcases::LIW_DATA_TYPES_001() + { + TBool flag = 0; + /*Testing String Based Command*/ + //LoadL(); + TLiwGenericParam param; + param.Value().Set(KLIW_DATA_TYPES_001); + param.SetNameL(KTestPARAMNanmeTC1); + CLiwGenericParamList* inps = &(iServiceHandler->InParamListL()); + CLiwGenericParamList* outps = &(iServiceHandler->OutParamListL()); + inps->AppendL(param); + param.Reset(); + + // Get the Test result from MyServiceName provider "ExecuteServiceCmdL" + CLiwCriteriaItem* crit = CLiwCriteriaItem::NewLC(1, KTestCommandTC1, KContentTypeTxt); + crit->SetServiceClass(TUid::Uid(KLiwClassBase)); + iServiceHandler->ExecuteServiceCmdL(*crit, *inps, *outps); + CleanupStack::PopAndDestroy(crit); // crit + + TInt pos = 0; + outps->FindFirst(pos, EGenericParamError); + if(pos != KErrNotFound) + if ((*outps)[pos].Value().AsTInt32() == KErrNone) + { + flag = 1; + } + else + { + flag = 0; + } + else + { + flag = 0; + } + + // Detach The MyServiceName Provider + //iServiceHandler->DetachL(interest); + //CleanupStack::PopAndDestroy(criteria); + //CleanupStack::PopAndDestroy(&interest); + return !flag; + } + +TBool Cliwtestcases::LIW_DATA_TYPES_002() + { + TBool flag = 0; + /*Testing Boolean data Type*/ + + //LoadL(); + + TLiwGenericParam param; + param.Value().Set(KLIW_DATA_TYPES_002); + param.SetNameL(KTestPARAMNanmeTC1); + CLiwGenericParamList* inps = &(iServiceHandler->InParamListL()); + CLiwGenericParamList* outps = &(iServiceHandler->OutParamListL()); + inps->AppendL(param); + param.Reset(); + + // Set up Tbool varient and append TBool parameter (EGenericParamError). + // One Argument constructer + TLiwVariant boolVarient(ETrue); + // Test TLiwVariant::SetL(TLiwVariant&) + TLiwGenericParam boolParam(EGenericParamError); + boolParam.Value().SetL(boolVarient); + + inps->AppendL(boolParam); + + boolVarient.Reset(); + boolParam.Reset(); + + // Call ExecuteServiceCmdL TO GET THE RESULT + CLiwCriteriaItem* crit = CLiwCriteriaItem::NewLC(1, KTestCommandTC1, KContentTypeTxt); + crit->SetServiceClass(TUid::Uid(KLiwClassBase)); + iServiceHandler->ExecuteServiceCmdL(*crit, *inps, *outps); + CleanupStack::PopAndDestroy(crit); // crit + + // CHECK RESULT + TInt pos = 0; + outps->FindFirst(pos, EGenericParamError); + + if(pos != KErrNotFound) + if ((*outps)[pos].Value().AsTInt32() == KErrNone) + flag = 1; + else + flag = 0; + else + flag = 0; + + return !flag; + } + +TBool Cliwtestcases::LIW_DATA_TYPES_003( ) + { + TBool flag = 0; + CLiwGenericParamList* inps = &(iServiceHandler->InParamListL()); + CLiwGenericParamList* outps = &(iServiceHandler->OutParamListL()); + + //LoadL(); + + /*Testing List Data Type for TLiwVariant interface and container interface*/ + TLiwGenericParam param; + param.Value().Set(KLIW_DATA_TYPES_003); + param.SetNameL(KTestPARAMNanmeTC1); + inps->AppendL(param); + param.Reset(); + /*Checks Default constructer "CLiwDefaultList" Creation*/ + CLiwList* listType = CLiwDefaultList::NewL(); + + /*Create list of 10 integer Varient Checks CLiwList::AppendL*/ + TLiwVariant intVairent; + for (TInt32 index = 100; index < 110; index++) + { + intVairent.Set(index); + listType->AppendL(intVairent); + } + + /*Checks CLiwList::TLiwVariant.Set(CLiwList*)*/ + param.Value().Set(listType); + param.SetNameL(_L8("IntegerList")); + inps->AppendL(param); + + intVairent.Reset(); + param.Reset(); + + CLiwCriteriaItem* crit = CLiwCriteriaItem::NewLC(1, KTestCommandTC1, KContentTypeTxt); + crit->SetServiceClass(TUid::Uid(KLiwClassBase)); + iServiceHandler->ExecuteServiceCmdL(*crit, *inps, *outps); + CleanupStack::PopAndDestroy(crit); // crit + + TInt pos = 0; + TBool result = FALSE; + listType->Remove(listType->Count() - 1); + outps->FindFirst(pos, _L8("IntegerList")); + if(pos != KErrNotFound) + { + const CLiwList* resultList = (*outps)[pos].Value().AsList(); + if(resultList != NULL ) + { + if(resultList->Count() == listType->Count() && listType->Size() == resultList->Size()) + { + result = TRUE; + } + } + } + /*Decrement count to delete the instance of list its self managed memory allocation*/ + if (listType) listType->DecRef(); + pos = 0; + outps->FindFirst(pos, EGenericParamError); + + if(pos != KErrNotFound) + if ((*outps)[pos].Value().AsTInt32() == KErrNone && result) + flag = 1; + else + flag = 0; + else + flag = 0; + + // Detach The MyServiceName Provider + //iServiceHandler->DetachL(interest); + //CleanupStack::PopAndDestroy(criteria); + //CleanupStack::PopAndDestroy(&interest); + + return !flag; + } + +TBool Cliwtestcases::LIW_DATA_TYPES_004( ) + { + TBool flag = 0; + CLiwGenericParamList* inps = &(iServiceHandler->InParamListL()); + CLiwGenericParamList* outps = &(iServiceHandler->OutParamListL()); + + /*Testing List Data Type for TLiwVariant interface and container interface*/ + TLiwGenericParam param; + param.Value().Set(KLIW_DATA_TYPES_004); + param.SetNameL(KTestPARAMNanmeTC1); + inps->AppendL(param); + param.Reset(); + /*Checks Default constructer "CLiwDefaultMap" Creation*/ + CLiwMap* mapType = CLiwDefaultMap::NewL(); + + /*Create Map of 10 integer Varient Checks CLiwMap::InsertL*/ + TLiwVariant contactNbr; + TBuf8<32> contactName; + for (TInt32 index = 100; index < 110; index++) + { + contactName.Format(KContact, index - 99); + contactNbr.Set(index); + mapType->InsertL(contactName, contactNbr); + } + + /*Checks CLiwList::TLiwVariant.Set(CLiwMap*)*/ + param.Value().Set(mapType); + param.SetNameL(_L8("ContactNumbers")); + inps->AppendL(param); + + contactNbr.Reset(); + param.Reset(); + + CLiwCriteriaItem* crit = CLiwCriteriaItem::NewLC(1, KTestCommandTC1, KContentTypeTxt); + crit->SetServiceClass(TUid::Uid(KLiwClassBase)); + iServiceHandler->ExecuteServiceCmdL(*crit, *inps, *outps); + CleanupStack::PopAndDestroy(crit); // crit + + TInt pos = 0; + TBool result = FALSE; + mapType->Remove(_L8("Contact 10")); + outps->FindFirst(pos, _L8("ContactNumbers")); + if(pos != KErrNotFound) + { + const CLiwMap* resultMap = (*outps)[pos].Value().AsMap(); + if(resultMap != NULL ) + { + if( resultMap->Count() == mapType->Count() && mapType->Size() == resultMap->Size()) + { + result = TRUE; + } + } + } + /*Decrement count to delete the instance of Map its self managed memory allocation*/ + if (mapType) mapType->DecRef(); + + pos = 0; + outps->FindFirst(pos, EGenericParamError); + + if(pos != KErrNotFound) + if ((*outps)[pos].Value().AsTInt32() == KErrNone && result) + flag = 1; + else + flag = 0; + else + flag = 0; + + return !flag; + } + +TBool Cliwtestcases::LIW_DATA_TYPES_005( ) + { + TBool flag = 0; + CLiwGenericParamList* inps = &(iServiceHandler->InParamListL()); + CLiwGenericParamList* outps = &(iServiceHandler->OutParamListL()); + + /*Testing List Data Type for TLiwVariant interface and container interface*/ + TLiwGenericParam param; + param.Value().Set(KLIW_DATA_TYPES_005); + param.SetNameL(KTestPARAMNanmeTC1); + inps->AppendL(param); + param.Reset(); + + /*Checks Default constructer "CLiwDefaultMap" and "CLiwDefaultMap" Creation*/ + CLiwMap* mapType = CLiwDefaultMap::NewL(); + CLiwList* listType = CLiwDefaultList::NewL(); + + /*Create list of 10 integer Varient Checks CLiwList::AppendL*/ + TLiwVariant intVairent; + for (TInt32 index2 = 100; index2 < 110; index2++) + { + intVairent.Set(index2); + listType->AppendL(intVairent); + } + + TBuf8<32> listName; + TLiwVariant listVarient; + listVarient.Set(listType); + + for (TInt32 index = 1; index < 11; index++) + { + listName.Format(KContact, index); + mapType->InsertL(listName, listVarient); + } + + listVarient.Reset(); + /*Checks CLiwList::TLiwVariant.Set(CLiwMap*)*/ + param.Value().Set(mapType); + param.SetNameL(_L8("MapOfLists")); + + inps->AppendL(param); + + param.Reset(); + + + CLiwCriteriaItem* crit = CLiwCriteriaItem::NewLC(1, KTestCommandTC1, KContentTypeTxt); + crit->SetServiceClass(TUid::Uid(KLiwClassBase)); + iServiceHandler->ExecuteServiceCmdL(*crit, *inps, *outps); + CleanupStack::PopAndDestroy(crit); // crit + + //remove the last list (10) and remove the last entry (9)in first List (0) + mapType->Remove(_L8("Contact 10")); + mapType->FindL(_L8("Contact 1"), listVarient); + listVarient.Get(*listType); + listType->Remove(9); + + listVarient.Reset(); + + TInt pos = 0; + TBool result = FALSE; + outps->FindFirst(pos, _L8("MapOfLists")); + if(pos != KErrNotFound) + { + const CLiwMap* resultMap = (*outps)[pos].Value().AsMap(); + if(resultMap != NULL && resultMap->Count() == mapType->Count() && mapType->Size() == resultMap->Size()) + { + TBuf8<32> mapKey; + resultMap->AtL(0, mapKey); + resultMap->FindL(mapKey, listVarient); + if(listVarient.AsList() != NULL ) + { + if (listVarient.AsList()->Count() == listType->Count() && listType->Size() == listVarient.AsList()->Size()) + { + result = TRUE; + } + } + } + listVarient.Reset(); + } + + + pos = 0; + outps->FindFirst(pos, EGenericParamError); + + if(pos != KErrNotFound) + if ((*outps)[pos].Value().AsTInt32() == KErrNone && result) + flag = 1; + else + flag = 0; + else + flag = 0; + + //Decrement count to delete the instance of Map its self managed memory allocation + inps->Reset(); + outps->Reset(); + if (mapType) mapType->DecRef(); + if (listType) listType->DecRef(); + + return !flag; + } + +TBool Cliwtestcases::LIW_DATA_TYPES_006( ) + { + TBool flag = 0; + CLiwGenericParamList* inps = &(iServiceHandler->InParamListL()); + CLiwGenericParamList* outps = &(iServiceHandler->OutParamListL()); + TLiwGenericParam param; + param.Value().Set(KLIW_DATA_TYPES_006); + param.SetNameL(KTestPARAMNanmeTC1); + inps->AppendL(param); + param.Reset(); + + CLiwCriteriaItem* crit = CLiwCriteriaItem::NewLC(1, KTestCommandTC1, KContentTypeTxt); + crit->SetServiceClass(TUid::Uid(KLiwClassBase)); + iServiceHandler->ExecuteServiceCmdL(*crit, *inps, *outps); + CleanupStack::PopAndDestroy(crit); // crit + + TInt pos = 0; + MLiwInterface* ifp = NULL; + outps->FindFirst(pos, KLIW_DATA_TYPES_006); + if(pos != KErrNotFound) + { + ifp = (*outps)[pos].Value().AsInterface(); + outps->Reset(); + ifp->ExecuteCmdL(KLIW_DATA_TYPES_006, *inps, *outps); + } + else + { + flag = 0; + } + pos = 0; + outps->FindFirst(pos, EGenericParamError); + if(pos != KErrNotFound) + if ((*outps)[pos].Value().AsTInt32() == KErrNone) + flag = 1; + else + flag = 0; + else + flag = 0; + + if(ifp) ifp->Close(); + inps->Reset(); + outps->Reset(); + return !flag; + } + +TBool Cliwtestcases::LIW_DATA_TYPES_007( ) + { + TBool flag = 0; + CLiwGenericParamList* inps = &(iServiceHandler->InParamListL()); + TLiwGenericParam param; + CLiwList* listType = CLiwDefaultList::NewL(); + CLiwMap* mapType = CLiwDefaultMap::NewL(); + listType->AppendL(TLiwVariant(_L8("Testing Stream Operations"))); + mapType->InsertL(KLIW_DATA_TYPES_007, TLiwVariant(listType)); + param.Value().Set(mapType); + param.SetNameL(KTestPARAMNanmeTC1); + inps->AppendL(param); + + param.Reset(); + if (listType) listType->DecRef(); + if (mapType) mapType->DecRef(); + + TInt sz = inps->Size(); + TAny* buf = User::AllocL(sz); + RMemWriteStream ws(buf, sz); + inps->ExternalizeL(ws); + RMemReadStream rs(buf, sz); + CLiwGenericParamList* ltmp = &(iServiceHandler->OutParamListL()); + ltmp->InternalizeL(rs); + if ((ltmp->Count() == inps->Count()) && ((*inps)[0] == (*ltmp)[0])) + flag = 1; + else + flag = 0; + User::Free(buf); + return !flag; + } + +TBool Cliwtestcases::LIW_DATA_TYPES_008( ) + { + TBool flag = 0; + /*Checks Default constructer "CLiwDefaultList" Creation*/ + CLiwList* listType = CLiwDefaultList::NewL(); + CLiwList* resultList; + + /*Create list of 10 integer Varient Checks CLiwList::AppendL*/ + TLiwVariant intVairent; + for (TInt32 index = 100; index < 110; index++) + { + intVairent.Set(index); + listType->AppendL(intVairent); + } + + intVairent.Reset(); + TBool result = TRUE; + + // Checking Bound conditions + resultList = listType; + resultList->Remove(listType->Count() + 1); + resultList->Remove(-1); + if (resultList != listType) + result = FALSE; + result ? result = !(listType->AtL(listType->Count() + 1, intVairent)): result = FALSE; + result ? result = !(listType->AtL(-1, intVairent)) : result = FALSE; + + if(result == TRUE) + { + flag = 1; + } + else + { + flag = 0; + } + /*Decrement count to delete the instance of list its self managed memory allocation*/ + if (listType) listType->DecRef(); + return !flag; + } + +TBool Cliwtestcases::LIW_DATA_TYPES_009( ) + { + TBool flag = 0; + /*Checks Default constructer "CLiwDefaultMap" Creation*/ + CLiwMap* mapType = CLiwDefaultMap::NewL(); + CLiwMap* resultMap; + + /*Create Map of 10 integer Varient Checks CLiwMap::InsertL*/ + TLiwVariant contactNbr; + TBuf8<32> contactName; + for (TInt32 index = 100; index < 110; index++) + { + contactName.Format(KContact, index - 99); + contactNbr.Set(index); + mapType->InsertL(contactName, contactNbr); + } + + /*Checks CLiwList::TLiwVariant.Set(CLiwMap*)*/ + + contactNbr.Reset(); + contactName.FillZ(); + contactName.Zero(); + TBool result = TRUE; + + // Checking Bound conditions + resultMap = mapType; + resultMap->Remove(_L8("Contact 11")); + if (resultMap != mapType) + result = FALSE; + result ? result = !(mapType->AtL(mapType->Count() + 1, contactName)) : result = FALSE; + result ? result = !(mapType->AtL(-1, contactName) ): result = FALSE; + + + if(result == TRUE) + { + flag = 1; + } + else + { + flag = 0; + } + /*Decrement count to delete the instance of list its self managed memory allocation*/ + if (mapType) mapType->DecRef(); + return !flag; + } + +TBool Cliwtestcases::LIW_Map_AtL_New( ) + { + TBool flag = 0; + /*Checks Default constructer "CLiwDefaultMap" Creation*/ + CLiwDefaultMap* mapType = CLiwDefaultMap::NewL(); + CLiwDefaultMap* resultMap; + + /*Create Map of 10 integer Varient Checks CLiwMap::InsertL*/ + TLiwVariant contactNbr; + TBuf8<32> contactName; + for (TInt32 index = 100; index < 110; index++) + { + contactName.Format(KContact, index - 99); + contactNbr.Set(index); + mapType->InsertL(contactName, contactNbr); + } + + /*Checks CLiwList::TLiwVariant.Set(CLiwMap*)*/ + + contactNbr.Reset(); + contactName.FillZ(); + contactName.Zero(); + TBool result = TRUE; + + // Checking Bound conditions + resultMap = mapType; + resultMap->Remove(_L8("Contact 11")); + if (resultMap != mapType) + result = FALSE; + + TRAPD(err1, contactName = mapType->AtL(mapType->Count() + 1)); + + //result ? result = !(contactName.operator==(KNullDesC8)) : result = FALSE; + + TRAPD(err2, contactName = mapType->AtL(-1)); + + //result ? result = !(contactName.operator==(KNullDesC8)): result = FALSE; + + if(err1 && err2) + flag = 1; + else + flag = 0; + + + /* + if(err) + flag = 0; + + if(result == TRUE) + { + flag = 1; + } + else + { + flag = 0; + } + */ + + //Decrement count to delete the instance of list its self managed memory allocation + if (mapType) mapType->DecRef(); + return !flag; + } + +TBool Cliwtestcases::LIW_DATA_TYPES_010() + { + TBool flag = 0; + /*Testing Unsigned Integer data Type*/ + TLiwGenericParam param; + param.Value().Set(KLIW_DATA_TYPES_010); + param.SetNameL(KTestPARAMNanmeTC1); + CLiwGenericParamList* inps = &(iServiceHandler->InParamListL()); + CLiwGenericParamList* outps = &(iServiceHandler->OutParamListL()); + inps->AppendL(param); + param.Reset(); + + // Set up Tbool varient and append Unsigned Integer parameter (EGenericParamError). + // One Argument constructer + TUint arg = 10; + TLiwVariant uIntVarient(arg); + // Test TLiwVariant::SetL(TLiwVariant&) + TLiwGenericParam uIntParam(EGenericParamError); + uIntParam.Value().SetL(uIntVarient); + + inps->AppendL(uIntParam); + + uIntVarient.Reset(); + uIntParam.Reset(); + + // Call ExecuteServiceCmdL TO GET THE RESULT + CLiwCriteriaItem* crit = CLiwCriteriaItem::NewLC(1, KTestCommandTC1, KContentTypeTxt); + crit->SetServiceClass(TUid::Uid(KLiwClassBase)); + iServiceHandler->ExecuteServiceCmdL(*crit, *inps, *outps); + CleanupStack::PopAndDestroy(crit); // crit + + // CHECK RESULT + TInt pos = 0; + outps->FindFirst(pos, EGenericParamError); + + if(pos != KErrNotFound) + { + if ((*outps)[pos].Value().AsTInt32() == KErrNone) + { + flag = 1; + } + else + { + + flag = 0; + } + } + else + { + + flag = 0; + } + return !flag; + } + +//CHECK FROM HERE + +TBool Cliwtestcases::LIW_DATA_TYPES_011() + { + TBool flag = 0; + TLiwGenericParam param; + param.Value().Set(KLIW_DATA_TYPES_011); + param.SetNameL(KTestPARAMNanmeTC1); + CLiwGenericParamList* inps = &(iServiceHandler->InParamListL()); + CLiwGenericParamList* outps = &(iServiceHandler->OutParamListL()); + inps->AppendL(param); + param.Reset(); + + // Call ExecuteServiceCmdL TO GET THE RESULT + CLiwCriteriaItem* crit = CLiwCriteriaItem::NewLC(1, KTestCommandTC1, KContentTypeTxt); + crit->SetServiceClass(TUid::Uid(KLiwClassBase)); + iServiceHandler->ExecuteServiceCmdL(*crit, *inps, *outps); + CleanupStack::PopAndDestroy(crit); // crit + + // CHECK RESULT + TInt pos = 0; + outps->FindFirst(pos, EGenericParamError); + + if(pos != KErrNotFound) + { + if ((*outps)[pos].Value().AsTInt32() == KErrNone) + { + + _LIT8(KIter,"Iterator"); + TInt iterPos=0; + outps->FindFirst(iterPos, KIter); + if(pos != KErrNotFound) + { + CLiwIterable* pIter=(*outps)[iterPos].Value().AsIterable(); + + //Iterate over the list + TLiwVariant var; + + while(EFalse != pIter->NextL(var)) + { + TPtrC8 entry; + var.Get(entry); + + if(0==entry.Length()) + { + flag = 0; + } + } + + var.Reset(); + + } + else + { + flag = 0; + } + + flag = 1; + } + else + { + flag = 0; + } + } + else + { + + flag = 0; + } + return !flag; + } + + TBool Cliwtestcases::LIW_DATA_TYPES_012() + { + TBool flag = 0; + TLiwGenericParam param; + param.Value().Set(KLIW_DATA_TYPES_012); + param.SetNameL(KTestPARAMNanmeTC1); + CLiwGenericParamList* inps = &(iServiceHandler->InParamListL()); + CLiwGenericParamList* outps = &(iServiceHandler->OutParamListL()); + inps->AppendL(param); + param.Reset(); + + // Call ExecuteServiceCmdL TO GET THE RESULT + CLiwCriteriaItem* crit = CLiwCriteriaItem::NewLC(1, KTestCommandTC1, KContentTypeTxt); + crit->SetServiceClass(TUid::Uid(KLiwClassBase)); + iServiceHandler->ExecuteServiceCmdL(*crit, *inps, *outps); + CleanupStack::PopAndDestroy(crit); // crit + + // CHECK RESULT + TInt pos = 0; + outps->FindFirst(pos, EGenericParamError); + + if(pos != KErrNotFound) + { + if ((*outps)[pos].Value().AsTInt32() == KErrNone) + { + flag = 1; + } + else + { + flag = 0; + } + } + else + { + + flag = 0; + } + return !flag; + } + + + TBool Cliwtestcases::LIW_DATA_TYPES_013() + { + TBool flag = 0; + CLiwList* pList = CLiwDefaultList::NewL(); + + { + TLiwVariant intVairent; + for (TInt32 index = 100; index < 110; index++) + { + intVairent.Set(index); + pList->AppendL(intVairent); + } + } + + if(EFalse == (pList->operator==(*pList))) + { + flag = 0; + } + + CLiwList* pAnotherList = CLiwDefaultList::NewL(); + + { + TLiwVariant intVairent; + for (TInt32 index = 100; index < 110; index++) + { + intVairent.Set(index); + pAnotherList->AppendL(intVairent); + } + } + + + if(EFalse == (pList->operator==(*pAnotherList))) + { + flag = 0; + } + + pAnotherList->Remove(0); + + if(EFalse == (pList->operator==(*pAnotherList))) + { + flag = 1; + } + else + { + flag = 0; + } + if(pList) pList->DecRef(); + if(pAnotherList) pAnotherList->DecRef(); + return !flag; + } + +TBool Cliwtestcases::LIW_DATA_TYPES_014() + { + TBool flag = 0; + CLiwMap* pMap = CLiwDefaultMap::NewL(); + + { + /*Create Map of 10 integer Varient Checks CLiwMap::InsertL*/ + TLiwVariant contactNbr; + TBuf8<32> contactName; + for (TInt32 index = 100; index < 110; index++) + { + contactName.Format(KContact, index - 99); + contactNbr.Set(index); + pMap->InsertL(contactName, contactNbr); + } + } + + if(EFalse == (pMap->operator==(*pMap))) + { + flag = 0; + } + + CLiwMap* pAnotherMap = CLiwDefaultMap::NewL(); + TBuf8<32> keyToRem; + + { + /*Create Map of 10 integer Varient Checks CLiwMap::InsertL*/ + TLiwVariant contactNbr; + TBuf8<32> contactName; + for (TInt32 index = 100; index < 110; index++) + { + contactName.Format(KContact, index - 99); + contactNbr.Set(index); + pAnotherMap->InsertL(contactName, contactNbr); + + if(100==index) + keyToRem.Copy(contactName); + } + } + + if(EFalse == (pMap->operator==(*pAnotherMap))) + { + flag = 0; + } + + pAnotherMap->Remove(keyToRem); + + if(EFalse == (pMap->operator==(*pAnotherMap))) + { + flag = 1; + } + else + { + flag = 0; + } + if(pMap) pMap->DecRef(); + if(pAnotherMap) pAnotherMap->DecRef(); + return !flag; + } + +TBool Cliwtestcases::LIW_DATA_TYPES_015() + { + + TBool flag = 1; + TInt32 intVal=10; + TLiwVariant intVar((TInt32)intVal); + + {//integer check + TInt32 intRet; + intVar.Get(intRet); + + Dump(intVar); + + if(intRet!=intVal) + { + flag = 0; + } + + } + + {//RFile check + RFile fileRet; + if(EFalse!=intVar.Get(fileRet)) + { + flag = 0; + } + fileRet.Close(); + } + + {//Uid check + TUid uidRet; + if(EFalse!=intVar.Get(uidRet)) + { + flag = 0; + } + } + + {//TUint check + TUint uintRet; + if(EFalse!=intVar.Get(uintRet)) + { + flag = 0; + } + } + + {//TBool check + TBool boolRet=EFalse; + if(EFalse!=intVar.Get(boolRet)) + { + flag = 0; + } + } + + {//TPtrC check + TPtrC ptrcRet; + if(EFalse!=intVar.Get(ptrcRet)) + { + flag = 0; + } + } + + {//TTime check + TTime timeRet; + if(EFalse!=intVar.Get(timeRet)) + { + flag = 0; + } + } + + {//TPtrC8 check + TPtrC8 ptrcRet; + if(EFalse!=intVar.Get(ptrcRet)) + { + flag = 0; + } + } + + { + TLiwVariant boolVar((TBool)EFalse); + + /*TInt32 intRet; + if(EFalse!=boolVar.Get((TInt32)intRet)) + { + flag = 0; + }*/ + } + + return !flag; + } + +TBool Cliwtestcases::LIW_DATA_TYPES_016() +{ + TBool flag = 1; + TInt32 intVal=10; + TLiwVariant intVar((TInt32)intVal); + + {//AsList check + const CLiwList* pRetList=intVar.AsList(); + + if(NULL!=pRetList) + { + flag = 0; + } + } + + {//AsMap check + const CLiwMap* pRetMap=intVar.AsMap(); + + if(NULL!=pRetMap) + { + flag = 0; + } + } + + {//AsIterable check + CLiwIterable* pRet=intVar.AsIterable(); + + if(NULL!=pRet) + { + flag = 0; + } + } + + {//AsInterface check + MLiwInterface* pRet=intVar.AsInterface(); + + if(NULL!=pRet) + { + flag = 0; + } + } + + {//AsFileHandle check + RFile pRet=intVar.AsFileHandle(); + + //Don't check pRet for RFile + } + return !flag; +} + +TBool Cliwtestcases::LIW_DATA_TYPES_017() +{ + TBool flag = 0; + TInt intServiceCmd=100; + CLiwCriteriaItem* criteria = CLiwCriteriaItem::NewLC(1, intServiceCmd, KContentTypeTxt); + + TBuf8<8> retStr=criteria->ServiceCmdStr(); + if(0!=retStr.Length()) + { + CleanupStack::PopAndDestroy(criteria); + flag = 0; + } + + if(intServiceCmd==criteria->ServiceCmd()) + { + CleanupStack::PopAndDestroy(criteria); + flag = 1; + } + return !flag; +} + +TBool Cliwtestcases::LIW_DATA_TYPES_018() +{ + TBool flag = 1; + CLiwCriteriaItem* criteria = CLiwCriteriaItem::NewL(); + CleanupStack::PushL(criteria); + + + TBuf8<8> retStr=criteria->ServiceCmdStr(); + if(0!=retStr.Length()) + { + flag = 0; + } + + if(0!=criteria->ServiceCmd()) + { + flag = 0; + } + + CleanupStack::PopAndDestroy(criteria); + + return !flag; +} + +TBool Cliwtestcases::LIW_DATA_TYPES_019() +{ + TBool flag = 0; + /*Testing String Based Command*/ + RCriteriaArray interest; + CleanupClosePushL(interest); + + CLiwCriteriaItem* criteria = CLiwCriteriaItem::NewLC(1, KTestCommandTC1, KContentTypeTxt); + + criteria->SetServiceClass(TUid::Uid(KLiwClassBase)); + + interest.AppendL(criteria); + + // Attach the MyServiceName provider to the LIW framework. + TInt status = iServiceHandler->AttachL(interest); + + TLiwGenericParam param; + param.Value().Set(KLIW_DATA_TYPES_019); + param.SetNameL(KTestPARAMNanmeTC1); + CLiwGenericParamList* inps = &(iServiceHandler->InParamListL()); + CLiwGenericParamList* outps = &(iServiceHandler->OutParamListL()); + inps->AppendL(param); + param.Reset(); + + // Get the Test result from MyServiceName provider "ExecuteServiceCmdL" + CLiwCriteriaItem* crit = CLiwCriteriaItem::NewLC(1, KTestCommandTC1, KContentTypeTxt); + crit->SetServiceClass(TUid::Uid(KLiwClassBase)); + iServiceHandler->ExecuteServiceCmdL(*crit, *inps, *outps); + CleanupStack::PopAndDestroy(crit); // crit + + + TInt pos = 0; + outps->FindFirst(pos, EGenericParamError); + + if(pos != KErrNotFound) + { + if ((*outps)[pos].Value().AsTInt32() == KErrNone) + { + flag = 1; + } + else + { + + flag = 0; + } + } + else + { + flag = 0; + } + + // Detach The MyServiceName Provider + iServiceHandler->DetachL(interest); + + CleanupStack::PopAndDestroy(criteria); + CleanupStack::PopAndDestroy(&interest); + return !flag; +} + +TBool Cliwtestcases::LIW_DATA_TYPES_020() +{ + TBool flag = 1; + TLiwVariant lhsVar; + TLiwVariant rhsVar; + + if(EFalse == (lhsVar==rhsVar)) + { + //Not matching - test case fails + flag = 0; + } + + + {//For TUint check + lhsVar.Set(TUint(10)); + rhsVar.Set(TUint(0)); + + if(EFalse != (lhsVar==rhsVar)) + { + //Not matching - test case fails + flag = 0; + } + + rhsVar.Set(TUint(10)); + + //should match this time + if(EFalse == (lhsVar==rhsVar)) + { + flag = 0; + } + + } + + {//For TInt32 check + lhsVar.Set(TInt32(10)); + rhsVar.Set(TInt32(0)); + + if(EFalse != (lhsVar==rhsVar)) + { + //Not matching - test case fails + flag = 0; + } + + rhsVar.Set(TInt32(10)); + + //should match this time + if(EFalse == (lhsVar==rhsVar)) + { + //Not matching - test case fails + flag = 0; + } + + } + + {//For TBool check + lhsVar.Set(TBool(EFalse)); + rhsVar.Set(TBool(ETrue)); + + if(EFalse != (lhsVar==rhsVar)) + { + //Not matching - test case fails + flag = 0; + } + + rhsVar.Set(TBool(EFalse)); + + //should match this time + if(EFalse == (lhsVar==rhsVar)) + { + //Not matching - test case fails + flag = 0; + } + + } + + {//For TTime check + lhsVar.Set(TTime(100)); + rhsVar.Set(TTime(200)); + + if(EFalse != (lhsVar==rhsVar)) + { + //Not matching - test case fails + flag = 0; + } + + rhsVar.Set(TTime(100)); + + //should match this time + if(EFalse == (lhsVar==rhsVar)) + { + //Not matching - test case fails + flag = 0; + } + + } + return !flag; +} + +TBool Cliwtestcases::LIW_DATA_TYPES_021() +{ + TBool flag = 1; + /* + TLiwGenericParam param; + param.Value().Set(KLIW_DATA_TYPES_001); + param.SetNameL(KTestPARAMNanmeTC1); + */ + + //CLiwGenericParamList* inps = &(iServiceHandler->InParamListL()); + CLiwGenericParamList* outps = &(iServiceHandler->OutParamListL()); + + //inps->AppendL(param); + //param.Reset(); + + TInt pos = -1; + outps->FindFirst(pos, EGenericParamError); + + + if(pos != KErrNotFound) + { + flag = 0; + } + + pos = 0; + outps->FindFirst(pos, EGenericParamError); + if(pos != KErrNotFound) + { + flag = 0; + } + + pos = -1; + outps->FindNext(pos, EGenericParamError); + + if(pos != KErrNotFound) + { + flag = 0; + } + + pos = 0; + outps->FindNext(pos, EGenericParamError); + if(pos != KErrNotFound) + { + flag = 0; + } + return !flag; +} + +TBool Cliwtestcases::LIW_DATA_TYPES_022() +{ + TBool flag = 0; + TLiwGenericParam param; + param.Value().Set(TInt32(100)); + + Dump(param.Value()); + + param.SetNameL(KTestPARAMNanmeTC1); + + CLiwGenericParamList* pParamList = CLiwGenericParamList::NewLC(); + pParamList->AppendL(param); + + CLiwGenericParamList* inps = &(iServiceHandler->InParamListL()); + + inps->AppendL(*pParamList); + + TInt cnt = inps->Count(); + + if(cnt != 0) + { + flag = 1; + } + else + { + flag = 0; + } + + param.Reset(); + inps->Reset(); + CleanupStack::PopAndDestroy(pParamList); + return !flag; +} + +TBool Cliwtestcases::LIW_DATA_TYPES_023() +{ + TBool flag = 0; + //Reusing LIW_DATA_TYPES_011 test case + TLiwGenericParam param; + param.Value().Set(KLIW_DATA_TYPES_011); + + Dump(param.Value()); + + param.SetNameL(KTestPARAMNanmeTC1); + CLiwGenericParamList* inps = &(iServiceHandler->InParamListL()); + CLiwGenericParamList* outps = &(iServiceHandler->OutParamListL()); + inps->AppendL(param); + param.Reset(); + + // Call ExecuteServiceCmdL TO GET THE RESULT + CLiwCriteriaItem* crit = CLiwCriteriaItem::NewLC(1, KTestCommandTC1, KContentTypeTxt); + crit->SetServiceClass(TUid::Uid(KLiwClassBase)); + iServiceHandler->ExecuteServiceCmdL(*crit, *inps, *outps); + CleanupStack::PopAndDestroy(crit); // crit + + // CHECK RESULT + TInt pos = 0; + outps->FindFirst(pos, EGenericParamError); + + if(pos != KErrNotFound) + { + if ((*outps)[pos].Value().AsTInt32() == KErrNone) + { + + _LIT8(KIter,"Iterator"); + TInt iterPos=0; + outps->FindFirst(iterPos, KIter); + if(pos != KErrNotFound) + { + CLiwIterable* pIter=(*outps)[iterPos].Value().AsIterable(); + + RWriteStream wstream; + TRAPD(err,pIter->ExternalizeL(wstream)); + + if(KErrNotSupported!=err) + { + flag = 0; + } + else + { + flag = 1; + } + } + else + { + flag = 0; + } + } + else + { + flag = 0; + } + } + else + { + flag = 0; + } + return !flag; +} + +TBool Cliwtestcases::LIW_DATA_TYPES_024() +{ + TBool flag = 1; + TLiwVariant intVar(TInt32(100)); + Dump(intVar); + + TLiwVariant nullVar; + Dump(nullVar); + + Dump(TLiwVariant(TBool(ETrue))); + + TLiwVariant uintVar(TUint(200)); + Dump(uintVar); + + Dump(TLiwVariant(TUid::Uid(0x00))); + + TLiwVariant timeVar(TTime(100)); + Dump(timeVar); + + RFile fHdl; + TLiwVariant fHdlVar; + fHdlVar.Set(fHdl); + + Dump(fHdlVar); + + TBuf8<16> buff(_L8("Hello")); + TLiwVariant bufVar(buff); + + Dump(bufVar); + + CLiwList* listType = CLiwDefaultList::NewL(); + + /*Create list of 10 integer Varient Checks CLiwList::AppendL*/ + TLiwVariant intVairent; + for (TInt32 index = 100; index < 110; index++) + { + intVairent.Set(index); + listType->AppendL(intVairent); + } + + Dump(TLiwVariant(listType)); + + listType->DecRef(); + + CLiwMap* mapType = CLiwDefaultMap::NewL(); + + /*Create Map of 10 integer Varient Checks CLiwMap::InsertL*/ + TLiwVariant contactNbr; + TBuf8<32> contactName; + for (TInt32 index = 100; index < 110; index++) + { + contactName.Format(KContact, index - 99); + contactNbr.Set(index); + mapType->InsertL(contactName, contactNbr); + } + + Dump(TLiwVariant(mapType)); + mapType->DecRef(); + return !flag; +} + +TBool Cliwtestcases::LIW_CLEANUP_LIW_001() +{ + TBool flag = 1; + iServiceHandler->Reset(); + delete iServiceHandler; + iServiceHandler=NULL; + return !flag; +} + +//for conversion utils +TBool Cliwtestcases::LIW_DATA_TYPES_025() +{ + TLiwVariant a1; + TUint varUint; + TInt32 varInt; + TBool flag = 0; + + //conversion check + //set variant for one type and get it in other types + varUint = 45; + a1.Set(varUint); //set TUint + + varInt = a1.AsTInt32(); + + if(varUint == varInt) + flag = 1; + + a1.Reset(); return !flag; + +} + +TBool Cliwtestcases::LIW_DATA_TYPES_026() +{ + TLiwVariant a1; + TUint varUint; + TReal varReal; + TBool flag = 0; + + //conversion check + //set variant for one type and get it in other types + varUint = 45; + a1.Set(varUint); //set TUint + + varReal = a1.AsTReal(); + + if(varUint == varReal) + flag = 1; + + a1.Reset(); return !flag; +} + +/*TBool Cliwtestcases::LIW_DATA_TYPES_027() +{ + TLiwVariant a1; + TUint varUint; + TBuf<255> varBuf; + _LIT(KResult, "45"); + TBool flag = 0; + + //conversion check + //set variant for one type and get it in other types + varUint = 45; + a1.Set(varUint); //set TUint + + //varBuf = a1.AsDes(); //Does not work. Use Get method + a1.Get(varBuf); + + if(0 == varBuf.Compare(KResult)) + flag = 1; + + a1.Reset(); return !flag; +} + +TBool Cliwtestcases::LIW_DATA_TYPES_028() +{ + TLiwVariant a1; + TUint varUint; + TBuf8<255> varBuf8; + _LIT8(KResult, "45"); + TBool flag = 0; + + //conversion check + //set variant for one type and get it in other types + varUint = 45; + a1.Set(varUint); //set TUint + + //varBuf8 = a1.AsData(); + a1.Get(varBuf8 ); + + if(0 == varBuf8.Compare(KResult)) + flag = 1; + + a1.Reset(); return !flag; +} +*/ + +TBool Cliwtestcases::LIW_DATA_TYPES_029() +{ + TLiwVariant a1; + TBool flag = 0; + TUint varUint; + TInt32 varInt; + + //conversion check + //set variant for one type and get it in other types + varInt = 55; + a1.Set(varInt); //set TInt + + varUint = a1.AsTUint(); + + if(varUint == varInt) + flag = 1; + + a1.Reset(); return !flag; +} + +TBool Cliwtestcases::LIW_DATA_TYPES_030() +{ + TLiwVariant a1; + TInt32 varInt; + TReal varReal; + TBool flag = 0; + + //conversion check + //set variant for one type and get it in other types + varInt = 55; + a1.Set(varInt); //set TInt + varReal = a1.AsTReal(); + + if(varInt == varReal) + flag = 1; + + a1.Reset(); return !flag; +} + +/* +TBool Cliwtestcases::LIW_DATA_TYPES_031() +{ + TLiwVariant a1; + TInt32 varInt; + TBuf<255> varBuf; + + _LIT(KResult, "55"); + TBool flag = 0; + + //conversion check + //set variant for one type and get it in other types + varInt = 55; + a1.Set(varInt); //set TInt + + //varBuf = a1.AsDes(); //Does not work. Use Get method + a1.Get(varBuf); + + if(0 == varBuf.Compare(KResult)) + flag = 1; + + a1.Reset(); return !flag; +} + +TBool Cliwtestcases::LIW_DATA_TYPES_032() +{ + TLiwVariant a1; + TInt32 varInt; + TBuf8<255> varBuf8; + _LIT8(KResult, "55"); + TBool flag = 0; + + //conversion check + //set variant for one type and get it in other types + varInt = 55; + a1.Set(varInt); //set TInt + + //varBuf8 = a1.AsData(); + a1.Get(varBuf8 ); a1.Get(varBuf8 ); + + if(0 == varBuf8.Compare(KResult)) + flag = 1; + + a1.Reset(); return !flag; +} +*/ + +TBool Cliwtestcases::LIW_DATA_TYPES_033() +{ + TLiwVariant a1; + TUint varUint; + TReal varReal; + TBool flag = 0; + + //conversion check + //set variant for one type and get it in other types + varReal = 65.2345; + a1.Set(varReal); //set TReal + varUint = a1.AsTUint(); + + if(65 == varUint) + flag = 1; + + a1.Reset(); return !flag; +} + +TBool Cliwtestcases::LIW_DATA_TYPES_034() +{ + TLiwVariant a1; + TInt32 varInt; + TReal varReal; + TBool flag = 0; + + //conversion check + //set variant for one type and get it in other types + varReal = 65.2345; + a1.Set(varReal); //set TReal + varInt = a1.AsTInt32(); + + if(65 == varInt) + flag = 1; + + a1.Reset(); return !flag; +} + +/* +TBool Cliwtestcases::LIW_DATA_TYPES_035() +{ + TLiwVariant a1; + TReal varReal; + TBuf<255> varBuf; + _LIT(KResult, "65.2345"); + TBool flag = 0; + + //conversion check + //set variant for one type and get it in other types + varReal = 65.2345; + a1.Set(varReal); //set TReal + + //varBuf = a1.AsDes(); //Does not work. Use Get method + a1.Get(varBuf); + + if(0 == varBuf.Compare(KResult)) + flag = 1; + + a1.Reset(); return !flag; +} + +TBool Cliwtestcases::LIW_DATA_TYPES_036() +{ + TLiwVariant a1; + TReal varReal; + TBuf8<255> varBuf8; + _LIT8(KResult, "65.2345"); + TBool flag = 0; + + //conversion check + //set variant for one type and get it in other types + varReal = 65.2345; + a1.Set(varReal); //set TReal + //varBuf8 = a1.AsData(); + a1.Get(varBuf8 ); + + if(0 == varBuf8.Compare(KResult)) + flag = 1; + + a1.Reset(); return !flag; +} +*/ + +TBool Cliwtestcases::LIW_DATA_TYPES_037() +{ + TLiwVariant a1; + TReal varUint; + TBuf8<255> varBuf8; + _LIT8(KTest, "75"); + TBool flag = 0; + varBuf8 = KTest; + + //conversion check + //set variant for one type and get it in other types + a1.Set(varBuf8); //set TDes8 + varUint = a1.AsTUint(); + + if(75 == varUint) + flag = 1; + + a1.Reset(); return !flag; +} + +TBool Cliwtestcases::LIW_DATA_TYPES_038() +{ + TLiwVariant a1; + TInt32 varInt; + TBuf8<255> varBuf8; + _LIT8(KTest, "75"); + TBool flag = 0; + varBuf8 = KTest; + + //conversion check + //set variant for one type and get it in other types + a1.Set(varBuf8); //set TDes8 + varInt = a1.AsTInt32(); + + if(75 == varInt) + flag = 1; + + a1.Reset(); return !flag; +} + +TBool Cliwtestcases::LIW_DATA_TYPES_039() +{ + TLiwVariant a1; + TReal varReal; + TBuf8<255> varBuf8; + _LIT8(KTest, "75.897"); + TBool flag = 0; + varBuf8 = KTest; + + //conversion check + //set variant for one type and get it in other types + a1.Set(varBuf8); //set TDes8 + varReal = a1.AsTReal(); + + if(75.897 == varReal) + flag = 1; + + a1.Reset(); return !flag; +} + +/* +TBool Cliwtestcases::LIW_DATA_TYPES_040() +{ + TLiwVariant a1; + TBuf<255> varBuf; + TBuf8<255> varBuf8; + _LIT8(KTest, "test"); + _LIT(KResult, "test"); + TBool flag = 0; + + varBuf8 = KTest; + //conversion check + //set variant for one type and get it in other types + a1.Set(varBuf8); //set TDes8 + //varBuf = a1.AsDes(); //Does not work. Use Get method + a1.Get(varBuf); + + if(0 == varBuf.Compare(KResult)) + flag = 1; + + a1.Reset(); return !flag; +} +*/ + +TBool Cliwtestcases::LIW_DATA_TYPES_041() +{ + TLiwVariant a1; + TReal varUint; + TBuf<255> varBuf; + _LIT(KTest, "75"); + TBool flag = 0; + varBuf = KTest; + + //conversion check + //set variant for one type and get it in other types + a1.Set(varBuf); //set TDes + varUint = a1.AsTUint(); + + if(75 == varUint) + flag = 1; + + a1.Reset(); return !flag; +} + +TBool Cliwtestcases::LIW_DATA_TYPES_042() +{ + TLiwVariant a1; + TInt32 varInt; + TBuf<255> varBuf; + _LIT(KTest, "75"); + TBool flag = 0; + varBuf = KTest; + + //conversion check + //set variant for one type and get it in other types + a1.Set(varBuf); //set TDes + varInt = a1.AsTInt32(); + + if(75 == varInt) + flag = 1; + + a1.Reset(); return !flag; +} + +TBool Cliwtestcases::LIW_DATA_TYPES_043() +{ + TLiwVariant a1; + TReal varReal; + TBuf<255> varBuf; + _LIT(KTest, "75.897"); + TBool flag = 0; + varBuf = KTest; + + //conversion check + //set variant for one type and get it in other types + a1.Set(varBuf); //set TDes + varReal = a1.AsTReal(); + + if(75.897 == varReal) + flag = 1; + + a1.Reset(); return !flag; +} + +/* +TBool Cliwtestcases::LIW_DATA_TYPES_044() +{ + TLiwVariant a1; + TBuf<255> varBuf; + TBuf8<255> varBuf8; + _LIT(KTest, "test"); + _LIT8(KResult, "test"); + TBool flag = 0; + varBuf = KTest; + + //conversion check + //set variant for one type and get it in other types + a1.Set(varBuf); //set TDes + //varBuf8 = a1.AsData(); + a1.Get(varBuf8 ); + + if(0 == varBuf8.Compare(KResult)) + flag = 1; + + a1.Reset(); return !flag; +} +*/ + +TBool Cliwtestcases::LIW_DATA_TYPES_045() +{ + TBool flag = 0; + /*Testing String Based Command*/ + RCriteriaArray interest, providerList; + + CLiwCriteriaItem* criteria = CLiwCriteriaItem::NewL(1, KTestCommandTC1, KContentTypeTxt); + criteria->SetServiceClass(TUid::Uid(KLiwClassBase)); + + interest.AppendL(criteria); + + iServiceHandler->QueryImplementationL(interest, providerList); + + if(providerList.Count()) + { + if(0 == ((*(providerList[0])).ServiceCmdStr().Compare((*criteria).ServiceCmdStr()))) + { + if(0 == ((*(providerList[0])).ContentType().Compare((*criteria).ContentType()))) + { + providerList.ResetAndDestroy(); + interest.ResetAndDestroy(); + flag = 1; + } + + } + } + else + { + providerList.ResetAndDestroy(); + interest.ResetAndDestroy(); + flag = 0; + } + + return !flag; +} + +TBool Cliwtestcases::LIW_DATA_TYPES_046() +{ + TBool flag = 0; + /*Testing String Based Command*/ + RCriteriaArray interest, providerList; + _LIT8(KJunkContentTypeTxt, "text"); + + CLiwCriteriaItem* criteria = CLiwCriteriaItem::NewL(1, KTestCommandTC1, KJunkContentTypeTxt); + criteria->SetServiceClass(TUid::Uid(KLiwClassBase)); + + interest.AppendL(criteria); + + iServiceHandler->QueryImplementationL(interest, providerList); + + + + + if(!providerList.Count()) + { + flag = 1; + } + else + { + flag = 0; + } + + providerList.ResetAndDestroy(); + interest.ResetAndDestroy(); + return !flag; +} + +TBool Cliwtestcases::LIW_DATA_TYPES_047() +{ + TBool flag = 0; + /*Testing String Based Command*/ + RCriteriaArray interest, providerList; + + CLiwCriteriaItem* criteria = CLiwCriteriaItem::NewL(1, KWild, KContentTypeTxt); + criteria->SetServiceClass(TUid::Uid(KLiwClassBase)); + + interest.AppendL(criteria); + + iServiceHandler->QueryImplementationL(interest, providerList); + + + + + if(providerList.Count()) + { + if(0 == ((*(providerList[0])).ContentType().Compare((*criteria).ContentType()))) + { + providerList.ResetAndDestroy(); + interest.ResetAndDestroy(); + flag = 1; + } + } + else + { + providerList.ResetAndDestroy(); + interest.ResetAndDestroy(); + flag = 0; + } + + return !flag; +} + +TBool Cliwtestcases::LIW_DATA_TYPES_048() +{ + TBool flag = 0; + /*Testing String Based Command*/ + RCriteriaArray interest, providerList; + + CLiwCriteriaItem* criteria = CLiwCriteriaItem::NewL(1, KTestCommandTC1, KWild); + criteria->SetServiceClass(TUid::Uid(KLiwClassBase)); + + interest.AppendL(criteria); + + iServiceHandler->QueryImplementationL(interest, providerList); + + + + + if(providerList.Count()) + { + if(0 == ((*(providerList[0])).ServiceCmdStr().Compare((*criteria).ServiceCmdStr()))) + { + providerList.ResetAndDestroy(); + interest.ResetAndDestroy(); + flag = 1; + } + } + else + { + providerList.ResetAndDestroy(); + interest.ResetAndDestroy(); + flag = 0; + } + return !flag; +} + +TBool Cliwtestcases::LIW_DATA_TYPES_049() +{ + TBool flag = 0; + /*Testing String Based Command*/ + RCriteriaArray interest, providerList; + + CLiwCriteriaItem* criteria = CLiwCriteriaItem::NewL(1, KWild, KWild); //Queries for a list of all the LIW providers present + criteria->SetServiceClass(TUid::Uid(KLiwClassBase)); //Presently this value is changed to differentiate LIW Providers from other Ecom plug-ins + + TReal mini = 2.0; + TReal maxi = 3.0; + TLiwVariant mdOption; + CLiwMap* pMetaDataMap = CLiwDefaultMap::NewL(); + CLiwList* pRangeList = CLiwDefaultList::NewL(); + _LIT8(KVersion,"ver"); + _LIT8(KRange,"range"); + + pRangeList->AppendL(TLiwVariant(KVersion)); + pRangeList->AppendL(TLiwVariant(TReal(mini))); + pRangeList->AppendL(TLiwVariant(TReal(maxi))); + + pMetaDataMap->InsertL(KRange,pRangeList); + mdOption.Set(pMetaDataMap); + criteria->SetMetaDataOptions(mdOption); + + pRangeList->DecRef(); + pMetaDataMap->DecRef(); + mdOption.Reset(); + + interest.AppendL(criteria); + + iServiceHandler->QueryImplementationL(interest, providerList); //providerList contains the list of all the LIW providers with metadata information being loaded for each + + RCriteriaArray loadCritArray; + + for(TInt idx = 0; idx < providerList.Count(); ++idx) // for each provider + { + CLiwCriteriaItem* provInfo = providerList[idx]; + + TUid interfaceId = provInfo->ServiceClass(); //retrieving the service class (interface Id) of the provider + TPtrC8 intfName = provInfo->ServiceCmdStr(); //retrieving the content type or the interface name of the provider (e.g IDataSource) + TPtrC8 servName = provInfo->ContentType(); //retrieving the service command name of the provider (e.g s60.Messaging) + TReal provVersion = 1.0; //since Default version is 1.0 for all the providers + + //Creating a criteria using the above extracted information + CLiwCriteriaItem* item = CLiwCriteriaItem::NewL(1, intfName, servName); + item->SetServiceClass(interfaceId); + + TLiwVariant provMetadata; + provInfo->GetMetaDataOptions(provMetadata); //getting metadata from the provider (contains version information) + + const CLiwMap* metaDataMap = provMetadata.AsMap(); + + if(metaDataMap) + { + _LIT8(KVersionKey,"ver"); //Key name in the metadata map is "ver" (as specified in the provider RSS File) + TLiwVariant versionVar; + + if(metaDataMap->FindL(KVersionKey, versionVar)) //This should be true. If false this means that there is no version information in the provider metadata + { + /* ------------------------------------ + | key | value | + | | | + | ver | (List) 2.2 | + ------------------------------------- + + */ + const CLiwList* pVersionList = versionVar.AsList(); + if(pVersionList) + { + TLiwVariant verCheck; + for(TInt idx=0; idx < pVersionList->Count(); ++idx) //the count is always ZERO. But to be on safer side, I have given the loop + { + if(pVersionList->AtL(idx,verCheck)) //Ideally the index should only be Zero. But the version, if exists in any index will be returned now + { + provVersion = verCheck.AsTReal(); //The provider version is retrieved from the metadata + + //using switch case or if stmts further. This implementation is left to the Consumer's logic. But just a sample is shown below + if(2.5 == provVersion || 2.4 == provVersion) + { + TLiwVariant mdOption1; //Setting the metadata option with the version information. + CLiwMap* pMetaDataMap = CLiwDefaultMap::NewL(); + CLiwList* pRangeList = CLiwDefaultList::NewL(); + _LIT8(KVersion,"ver"); //Key in metadata for version is "version" + _LIT8(KRange,"range"); //Since this is an exact version match done in AttachL, hence the key "exact" + + pRangeList->AppendL(TLiwVariant(KVersion)); + pRangeList->AppendL(TLiwVariant(provVersion)); + pRangeList->AppendL(TLiwVariant(provVersion)); + + pMetaDataMap->InsertL(KRange,pRangeList); + mdOption1.Set(pMetaDataMap); + item->SetMetaDataOptions(mdOption1); //metadata is set with the version information + + pRangeList->DecRef(); + pMetaDataMap->DecRef(); + mdOption1.Reset(); + + loadCritArray.AppendL(item); + + iServiceHandler->DetachL(loadCritArray); + + TInt retVal = iServiceHandler->AttachL(loadCritArray); // This just loads the provider sent as input. No version range is to be sent here, + + if(retVal >= 0) + { + flag = 1; + } + + iServiceHandler->DetachL(loadCritArray); + } + else if(2.6 == provVersion) + { + // statements + } + } + + verCheck.Reset(); + } + } + } + versionVar.Reset(); + } + provMetadata.Reset(); + } + + loadCritArray.ResetAndDestroy(); + providerList.ResetAndDestroy(); + interest.ResetAndDestroy(); + + return !flag; +} + +TBool Cliwtestcases::LIW_MDAT_VER1() +{ + TBool flag = 0; + CLiwCriteriaItem* item1 = CLiwCriteriaItem::NewLC(1, KTestCommandTC1, KContentTypeTxt); + item1->SetServiceClass(TUid::Uid(KLiwClassBase)); + + TReal mini = 2.0; + TReal maxi = 3.0; + TLiwVariant mdOption1; + CLiwMap* pMetaDataMap = CLiwDefaultMap::NewL(); + CLiwList* pRangeList = CLiwDefaultList::NewL(); + _LIT8(KVersion,"ver"); + _LIT8(KRange,"range"); + + pRangeList->AppendL(TLiwVariant(KVersion)); + pRangeList->AppendL(TLiwVariant(TReal(mini))); + pRangeList->AppendL(TLiwVariant(TReal(maxi))); + + pMetaDataMap->InsertL(KRange,pRangeList); + mdOption1.Set(pMetaDataMap); + item1->SetMetaDataOptions(mdOption1); + + pRangeList->DecRef(); + pMetaDataMap->DecRef(); + mdOption1.Reset(); + + RCriteriaArray critArray, providerList; + + critArray.AppendL(item1); + + iServiceHandler->QueryImplementationL(critArray, providerList); + + TInt status = iServiceHandler->AttachL(providerList); + + + if(status > 0) + { + flag = 1; + } + else + { + flag = 0; + } + + CleanupStack::Pop(); + iServiceHandler->DetachL(providerList); + critArray.ResetAndDestroy(); + providerList.ResetAndDestroy(); + return !flag; +} + + +TBool Cliwtestcases::LIW_MDAT_VER2() +{ + TBool flag = 0; + CLiwCriteriaItem* item2 = CLiwCriteriaItem::NewLC(2, KTestCommandTC1, KContentTypeTxt); + item2->SetServiceClass(TUid::Uid(KLiwClassBase)); + + TReal mini = 0.0; + TReal maxi = 3.0; + CLiwMap* pMetaDataMap = CLiwDefaultMap::NewL(); + CLiwList* pRangeList = CLiwDefaultList::NewL(); + TLiwVariant mdOption1; + _LIT8(KVersion,"ver"); + _LIT8(KRange,"range"); + + pRangeList->AppendL(TLiwVariant(KVersion)); + pRangeList->AppendL(TLiwVariant(TReal(mini))); + pRangeList->AppendL(TLiwVariant(TReal(maxi))); + + pMetaDataMap->InsertL(KRange,pRangeList); + mdOption1.Set(pMetaDataMap); + item2->SetMetaDataOptions(mdOption1); + + pRangeList->DecRef(); + pMetaDataMap->DecRef(); + mdOption1.Reset(); + + RCriteriaArray critArray, providerList; + + critArray.AppendL(item2); + + iServiceHandler->QueryImplementationL(critArray, providerList); + + iServiceHandler->AttachL(providerList); + + + if(providerList.Count() >= 0) + { + flag = 1; + } + else + { + flag = 0; + } + + CleanupStack::Pop(); + iServiceHandler->DetachL(providerList); + critArray.ResetAndDestroy(); + providerList.ResetAndDestroy(); + return !flag; +} + + +TBool Cliwtestcases::LIW_MDAT_VER3() +{ + TBool flag = 0; + CLiwCriteriaItem* item3 = CLiwCriteriaItem::NewLC(3, KTestCommandTC1, KContentTypeTxt); + item3->SetServiceClass(TUid::Uid(KLiwClassBase)); + + TReal mini = 2.0; + TReal maxi = 0.0; + CLiwMap* pMetaDataMap = CLiwDefaultMap::NewL(); + CLiwList* pRangeList = CLiwDefaultList::NewL(); + TLiwVariant mdOption1; + _LIT8(KVersion,"ver"); + _LIT8(KRange,"range"); + + pRangeList->AppendL(TLiwVariant(KVersion)); + pRangeList->AppendL(TLiwVariant(TReal(mini))); + pRangeList->AppendL(TLiwVariant(TReal(maxi))); + + pMetaDataMap->InsertL(KRange,pRangeList); + mdOption1.Set(pMetaDataMap); + item3->SetMetaDataOptions(mdOption1); + + pRangeList->DecRef(); + pMetaDataMap->DecRef(); + mdOption1.Reset(); + + RCriteriaArray critArray, providerList; + + critArray.AppendL(item3); + + iServiceHandler->QueryImplementationL(critArray, providerList); + + iServiceHandler->AttachL(providerList); + + if(providerList.Count() >= 0) + { + flag = 1; + } + else + { + flag = 0; + } + + CleanupStack::Pop(); + iServiceHandler->DetachL(providerList); + critArray.ResetAndDestroy(); + providerList.ResetAndDestroy(); + return !flag; +} + + +TBool Cliwtestcases::LIW_MDAT_VER4() +{ + TBool flag = 0; + CLiwCriteriaItem* item4 = CLiwCriteriaItem::NewLC(4, KTestCommandTC1, KContentTypeTxt); + item4->SetServiceClass(TUid::Uid(KLiwClassBase)); + + TReal mini = 0.0; + TReal maxi = 0.0; + CLiwMap* pMetaDataMap = CLiwDefaultMap::NewL(); + CLiwList* pRangeList = CLiwDefaultList::NewL(); + TLiwVariant mdOption1; + _LIT8(KVersion,"ver"); + _LIT8(KRange,"range"); + + pRangeList->AppendL(TLiwVariant(KVersion)); + pRangeList->AppendL(TLiwVariant(TReal(mini))); + pRangeList->AppendL(TLiwVariant(TReal(maxi))); + + pMetaDataMap->InsertL(KRange,pRangeList); + mdOption1.Set(pMetaDataMap); + item4->SetMetaDataOptions(mdOption1); + + pRangeList->DecRef(); + pMetaDataMap->DecRef(); + mdOption1.Reset(); + + RCriteriaArray critArray, providerList; + + critArray.AppendL(item4); + + iServiceHandler->QueryImplementationL(critArray, providerList); + + iServiceHandler->AttachL(providerList); + + + if(providerList.Count() >= 0) + { + flag = 1; + } + else + { + flag = 0; + } + + CleanupStack::Pop(); + iServiceHandler->DetachL(providerList); + critArray.ResetAndDestroy(); + providerList.ResetAndDestroy(); + return !flag; +} + +TBool Cliwtestcases::LIW_MDAT_VER5() +{ + TBool flag = 0; + CLiwCriteriaItem* item5 = CLiwCriteriaItem::NewL(); + item5->SetId(5); + item5->SetServiceCmdL(KTestCommandTC1); + item5->SetContentTypeL(KContentTypeTxt); + item5->SetServiceClass(TUid::Uid(KLiwClassBase)); + + TReal mini = 3.0; + TReal maxi = 2.0; + CLiwMap* pMetaDataMap = CLiwDefaultMap::NewL(); + CLiwList* pRangeList = CLiwDefaultList::NewL(); + TLiwVariant mdOption1; + _LIT8(KVersion,"ver"); + _LIT8(KRange,"range"); + + pRangeList->AppendL(TLiwVariant(KVersion)); + pRangeList->AppendL(TLiwVariant(TReal(mini))); + pRangeList->AppendL(TLiwVariant(TReal(maxi))); + + pMetaDataMap->InsertL(KRange,pRangeList); + mdOption1.Set(pMetaDataMap); + item5->SetMetaDataOptions(mdOption1); + + pRangeList->DecRef(); + pMetaDataMap->DecRef(); + mdOption1.Reset(); + + RCriteriaArray critArray, providerList; + + critArray.AppendL(item5); + + iServiceHandler->QueryImplementationL(critArray, providerList); + + iServiceHandler->AttachL(providerList); + + if(providerList.Count() >= 0) + { + flag = 1; + } + else + { + flag = 0; + } + + iServiceHandler->DetachL(providerList); + critArray.ResetAndDestroy(); + providerList.ResetAndDestroy(); + return !flag; +} + +TBool Cliwtestcases::LIW_MDAT_CAP1() +{ + TBool flag = 1; + //TInt status = 0; + iServiceHandler->Reset(); + CLiwCriteriaItem* item1 = CLiwCriteriaItem::NewLC(1, KTestCommandTC1, KContentTypeTxt); + item1->SetServiceClass(TUid::Uid(KLiwClassBase)); + + TReal mini = 2.0; + TReal maxi = 5.0; + TLiwVariant mdOption1; + CLiwMap* pMetaDataMap = CLiwDefaultMap::NewL(); + CLiwList* pRangeList = CLiwDefaultList::NewL(); + _LIT8(KVersion,"ver"); + _LIT8(KRange,"range"); + + pRangeList->AppendL(TLiwVariant(KVersion)); + pRangeList->AppendL(TLiwVariant(TReal(mini))); + pRangeList->AppendL(TLiwVariant(TReal(maxi))); + + pMetaDataMap->InsertL(KRange,pRangeList); + mdOption1.Set(pMetaDataMap); + item1->SetMetaDataOptions(mdOption1); + + pRangeList->DecRef(); + pMetaDataMap->DecRef(); + mdOption1.Reset(); + + RCriteriaArray critArray, providerList; + + critArray.AppendL(item1); + iServiceHandler->QueryImplementationL(critArray, providerList); + + + // beginning of securitymanager code + + CRTSecManager* iSession = CRTSecManager::NewL(); + CTrustInfo* iTrust = CTrustInfo::NewL(); + + RFs fileSession; + if(KErrNone==fileSession.Connect()) + { + CleanupClosePushL(fileSession); + if(KErrNone==fileSession.ShareProtected()) + { + RFile secPolicyFile; + if(KErrNone == secPolicyFile.Open(fileSession, _L("c:\\data\\others\\liwaccesspolicy.xml"), EFileShareAny )) + { + CleanupClosePushL(secPolicyFile); + TPolicyID iPolicyId = iSession->SetPolicy(secPolicyFile); + + if(iPolicyId>KErrNone) + { + TInt32 exId = iSession->RegisterScript(iPolicyId, *iTrust); + + CRTSecMgrScriptSession* scriptSession = NULL; + + //#ifdef AUTO_TESTING + scriptSession = iSession->GetScriptSessionL(iPolicyId, exId, this); + //#else + // scriptSession = iSession->GetScriptSessionL(iPolicyId, exId); + //#endif + + //CRTSecMgrScriptSession* scriptSession = iSession->GetScriptSession(iPolicyId,exId); + + TInt status = iServiceHandler->AttachL(critArray,*scriptSession); + + delete scriptSession; + + } + + CleanupStack::PopAndDestroy();//secPolicyFile + } + } + + CleanupStack::PopAndDestroy();//fileSession + + } + + delete iTrust; + delete iSession; + // end of securitymanager code + + + if(providerList.Count()) + { + flag = 1; + } + else + { + flag = 0; + } + + CleanupStack::Pop(item1); + critArray.ResetAndDestroy(); + providerList.ResetAndDestroy(); + return !flag; +} + +TBool Cliwtestcases::LIW_MDAT_CAP2() +{ + TBool flag = 0; + TInt status = 0; + iServiceHandler->Reset(); + CLiwCriteriaItem* item1 = CLiwCriteriaItem::NewLC(1, KTestCommandTC1, KContentTypeTxt); + item1->SetServiceClass(TUid::Uid(KLiwClassBase)); + + TReal mini = 5.0; + TReal maxi = 7.0; + TLiwVariant mdOption1; + CLiwMap* pMetaDataMap = CLiwDefaultMap::NewL(); + CLiwList* pRangeList = CLiwDefaultList::NewL(); + _LIT8(KVersion,"ver"); + _LIT8(KRange,"range"); + + pRangeList->AppendL(TLiwVariant(KVersion)); + pRangeList->AppendL(TLiwVariant(TReal(mini))); + pRangeList->AppendL(TLiwVariant(TReal(maxi))); + + pMetaDataMap->InsertL(KRange,pRangeList); + mdOption1.Set(pMetaDataMap); + item1->SetMetaDataOptions(mdOption1); + + pRangeList->DecRef(); + pMetaDataMap->DecRef(); + mdOption1.Reset(); + + RCriteriaArray critArray, providerList; + + critArray.AppendL(item1); + + // beginning of securitymanager code + + CRTSecManager* iSession = CRTSecManager::NewL(); + CTrustInfo* iTrust = CTrustInfo::NewL(); + + RFs fileSession; + if(KErrNone==fileSession.Connect()) + { + CleanupClosePushL(fileSession); + if(KErrNone==fileSession.ShareProtected()) + { + RFile secPolicyFile; + if(KErrNone == secPolicyFile.Open(fileSession, _L("c:\\data\\Others\\AccessPolicy_V1.xml"), EFileShareAny )) + { + CleanupClosePushL(secPolicyFile); + TPolicyID iPolicyId = iSession->SetPolicy(secPolicyFile); + + if(iPolicyId>KErrNone) + { + TInt32 exId = iSession->RegisterScript(iPolicyId, *iTrust); + CRTSecMgrScriptSession* scriptSession = iSession->GetScriptSessionL(iPolicyId,exId); + + iServiceHandler->QueryImplementationL(critArray, providerList); + + status = iServiceHandler->AttachL(critArray,*scriptSession); + + delete scriptSession; + } + + CleanupStack::PopAndDestroy();//secPolicyFile + } + } + + CleanupStack::PopAndDestroy();//fileSession + } + + delete iTrust; + delete iSession; + // end of securitymanager code + + if(!status > 0) + { + flag = 1; + } + else + { + flag = 0; + } + + CleanupStack::Pop(item1); + critArray.ResetAndDestroy(); + providerList.ResetAndDestroy(); + return !flag; +} + +TBool Cliwtestcases::LIW_ContainerCleanup() +{ + + __UHEAP_MARK; + _LIT(KName,"Name"); + TLiwVariant variant(KName()); + CLiwMap* map = CLiwDefaultMap::NewL(); + CLiwList *listTemp = CLiwDefaultList::NewL(); + map->PushL(); + listTemp->PushL(); + //CleanupClosePushL(*map); + //CleanupClosePushL(*listTemp); + map->InsertL(KNullDesC8,variant); + TRAP_IGNORE(TestL(map)); + CleanupStack::PopAndDestroy(listTemp); + CleanupStack::PopAndDestroy(map); + __UHEAP_MARKEND; + + return KErrNone; +} + +void Cliwtestcases::TestL(CLiwMap *map) +{ + CLiwGenericParamList* param = CLiwGenericParamList::NewLC(); + param->AppendL(TLiwGenericParam(KNullDesC8,TLiwVariant(map))); + User::Leave(KErrGeneral); + param->Reset(); + CleanupStack::Pop(param); +} + +TBool Cliwtestcases::LIW_ParamCleanup() +{ + __UHEAP_MARK; + CLiwGenericParamList* param = CLiwGenericParamList::NewLC(); + //CLiwMap* map = CLiwDefaultMap::NewL(); + //CleanupClosePushL(*map); + //map->InsertL(KNullDesC8,variant); + TLiwGenericParam par; + TLiwVariant var; + par.SetNameAndValueL(KNullDesC8, var); + //param->AppendL(TLiwGenericParam(KNullDesC8,TLiwVariant(map))); + param->AppendL(par); + //CleanupStack::PopAndDestroy(map); + + TRAP_IGNORE(TestParamL(param)); + + par.Reset(); + CleanupStack::PopAndDestroy(param); + __UHEAP_MARKEND; + + return KErrNone; +} + +void Cliwtestcases::TestParamL(CLiwGenericParamList *param) +{ + TLiwGenericParam outParam; + outParam.PushL(); + //Pushing the TLiwGenericParam into the CleanupStack + //CleanupStack::PushL( TCleanupItem( TLiwGenericParam::ParamCleanup , &outParam ) ); + + param->AtL(0,outParam); + const CLiwMap* outMap = outParam.Value().AsMap(); + + //Leaves before CleanupStack::Pop and reset is called + User::Leave(KErrGeneral); + + //CleanupStack::Pop(&outParam); + outParam.Reset(); +} + +TBool Cliwtestcases::LIW_VariantCleanup() +{ + + __UHEAP_MARK; + _LIT(KName,"Name"); + TLiwVariant variant(KName()); + CLiwMap* map = CLiwDefaultMap::NewL(); + map->PushL(); + //CleanupClosePushL(*map); + //map->InsertL(KNullDesC8,variant); + + TRAP_IGNORE(TestVariantL(map)); + + CleanupStack::Pop(map); + map->DecRef(); //map is destroyed + __UHEAP_MARKEND; //There is no memory Leak since the TLiwVariant "var" is destroyed by the CleanupStack during User::Leave + + + return KErrNone; +} + +void Cliwtestcases::TestVariantL(CLiwMap* map) +{ + + TLiwVariant var; + var.PushL(); + //CleanupStack::PushL( TCleanupItem( TLiwVariant::VariantCleanup , &var) ); + + map->FindL(KNullDesC8,var); //This makes a copy of TLiwVariant "variant" to "var" + User::Leave(KErrNoMemory); //The TLiwVariant "var" is popped from the CleanupStack and VariantCleanup method is called + + CleanupStack::Pop(&var); //These statements are not executed + var.Reset(); //This statement is not executed resulting in memory leak +} + + +TBool Cliwtestcases::LIW_DATA_TYPES_050() +{ + TLiwVariant a1; + TInt32 varInt32; + TInt64 varInt64 = 0xaaaaaaa; + TBool flag = 0; + + //First checking the TInt64 datatype + a1.Set(varInt64); + + Dump(a1); + //conversion check + //set variant for TInt64 and get it in TInt32 + varInt32 = a1.AsTInt32(); //get TInt32 + + if(varInt32 == varInt64) + flag = 0; + + TUint varUint; + varUint = a1.AsTUint(); //get TUint + + if(varUint == varInt64) + flag = 0; + + TReal varReal; + varReal = a1.AsTReal(); //get TReal + + if(varReal == varInt64) + flag = 0; + + TBuf<20> varBuf; + //varBuf = a1.AsDes(); //Does not work. Use Get method + a1.Get(varBuf); //get TDes + + TBuf8<20> varBuf8; + //varBuf8 = a1.AsData(); + a1.Get(varBuf8 ); //get TDes8 + + a1.Reset(); + + flag = 1; + return !flag; +} + +TInt Cliwtestcases::LIW_ASYNC_001() + { + return asyObj->AsyncCase(1); + } + +TInt Cliwtestcases::LIW_ASYNC_002() + { + return asyObj->AsyncCase(2); + } + +TInt Cliwtestcases::LIW_ASYNC_003() + { + return asyObj->AsyncCase(3); + } + +TInt Cliwtestcases::LIW_ASYNC_004() + { + return asyObj->AsyncCase(4); + } + +// ----------------------------------------------------------------------------- +// Cliwtestcases::?member_function +// ?implementation_description +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +/* +TInt Cliwtestcases::?member_function( + CItemParser& aItem ) + { + + ?code + + } +*/ + +// ========================== OTHER EXPORTED FUNCTIONS ========================= +// None + +// [End of File] - Do not remove + diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/liw_generic_parameter_api/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/liw_generic_parameter_api/group/bld.inf Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,38 @@ +/* +* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: File that exports the files belonging to +: LIW Generic Parameter API +* +*/ + + + + + + + +#include + +PRJ_PLATFORMS +DEFAULT + +PRJ_EXPORTS + +../inc/LiwGenericParam.h MW_LAYER_PLATFORM_EXPORT_PATH(LiwGenericParam.h) +../inc/LiwVariantType.hrh MW_LAYER_PLATFORM_EXPORT_PATH(LiwVariantType.hrh) +../inc/LiwVariant.h MW_LAYER_PLATFORM_EXPORT_PATH(LiwVariant.h) +../inc/LiwGenericParam.inl MW_LAYER_PLATFORM_EXPORT_PATH(LiwGenericParam.inl) +../inc/LiwGenericParam.hrh MW_LAYER_PLATFORM_EXPORT_PATH(LiwGenericParam.hrh) +../inc/LiwVariant.inl MW_LAYER_PLATFORM_EXPORT_PATH(LiwVariant.inl) +../inc/LiwBufferExtension.h MW_LAYER_PLATFORM_EXPORT_PATH(LiwBufferExtension.h) diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/liw_generic_parameter_api/inc/liwbufferextension.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/liw_generic_parameter_api/inc/liwbufferextension.h Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,58 @@ +#ifndef LIW_BUFFEREXTENSION_H +#define LIW_BUFFEREXTENSION_H/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Abstract bitmap buffer representation. +* +*/ + + + + + + + +#include + +#include "LiwVariant.h" +class CFbsBitmap; + +class CLiwBitmapBuffer : public CLiwBuffer + { + public: + /* + * The concrete implementation of buffer types should perform equality operation + * check. This is a platform specifc extension class to support bitmap + * buffer to abstract CFbsBitmap type. + + * + * @return platform specific bitmap representation. By default, this method + * returns NULL + */ + virtual CFbsBitmap* AsBitmap() + { + return NULL; // return NULL by default + } + }; + +/** + * Abstract file buffer representation. + * +**/ +class CLiwFileBuffer : public CLiwBuffer +{ + public: + virtual RFile& AsFile() = 0; +}; + +#endif \ No newline at end of file diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/liw_generic_parameter_api/inc/liwgenericparam.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/liw_generic_parameter_api/inc/liwgenericparam.h Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,525 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: A generic parameter class. +* +*/ + + + + + + + +#ifndef LIW_GENERIC_PARAM_H +#define LIW_GENERIC_PARAM_H + +// INCLUDES +#include +#include "liwgenericparam.hrh" +#include "liwvariant.h" + +namespace LIW +{ + /* + * LIW generic parameter id. This data type should always be used when dealing + * with LIW generic parameters. UIDs can be used as LIW generic parameter IDs. + * However, values from 0 to 131071 are reserved. + * @see TLiwGenericParam + * @see TGenericParamIdValue + */ +typedef TInt TGenericParamId; +} +// CLASS DECLARATION + +/** +* Generic parameter class for passing data between applications. +* A generic parameter is a pair of semantic ID and +* variant value. The semantic ID tells the purpose of the parameter, +* for example a file name, URL or phone number. The variant value contains +* the data format and actual value. This class does not implement any +* consistency checks between the semantic ID and value's data format. +* So one semantic ID can be expressed as alternative data formats. +* +* @lib ServiceHandler.lib +* @since Series 60 2.6 +* @see TLiwVariant +* @see CLiwGenericParamList +*/ +class TLiwGenericParam + { + public: // Constructors and destructor + /** + * Constructs a generic parameter. + */ + inline TLiwGenericParam(); + + /** + * Constructs a generic parameter. + * + * @param aSemanticId The semantic ID of the parameter, one of TGenericParamId values. + */ + inline TLiwGenericParam(LIW::TGenericParamId aSemanticId); + + /** + * Constructs a generic parameter. + * + * @param aSemanticId The semantic ID of the parameter, one of TGenericParamId values. + * @param aValue The parameter value. + */ + inline TLiwGenericParam(LIW::TGenericParamId aSemanticId, const TLiwVariant& aValue); + + /** + * Constructs a generic parameter. + * + * @param aName Name of the generic parameter + * @param aValue The parameter value. + */ + inline TLiwGenericParam(const TDesC8& aName, const TLiwVariant& aValue); + + public: // Interface + /** + * Sets the semantic ID. Possibly set previous ID is overwritten. + * + * @param aSemanticId The semantic ID of the parameter. + */ + inline void SetSemanticId(LIW::TGenericParamId aSemanticId); + + /** + * Set name. Possibly set previous name is overwritten. + * + * @param aName Parameter name. + */ + inline void SetNameL(const TDesC8& aName); + + /** + * Set name and value. Possibly set previous name and value is overwritten. + * + * @param aName the parameter name. + * + * @param aValue the parameter value + */ + inline void SetNameAndValueL(const TDesC8& aName, const TLiwVariant& aValue); + + /** + * Returns the semantic ID of this parameter. + * + * @return The semantic ID. + */ + inline LIW::TGenericParamId SemanticId() const; + + /** + * Returns the name of this parameter. + * + * @return The name of the parameter. + */ + inline const TDesC8& Name() const; + + /** + * Returns the value of this parameter. + * + * @return The value of the parameter. + */ + inline TLiwVariant& Value(); + + /** + * Returns the const value of this parameter. + * + * @return The const value of the parameter. + */ + inline const TLiwVariant& Value() const; + + /** + * Resets the semantic ID and the value of this parameter. + */ + inline void Reset(); + + /** + * TLiwGenericParam cleanup method + * + * !!!!!!!!!!!!!!!!!!!!!!!!!!!! IMPORTANT NOTE !!!!!!!!!!!!!!!!!!!!!!!!!!!! + * + * Parameters can be pushed into the CleanupStack using this method + * along with TCleanupItem + * + * @ param aObj - TLiwGenericParam Object but of type TAny* for usage with TCleanupItem + * + * Example 1: Here the client explicitly pushes the parameter into the CleanupStack using TCleanupItem + * + * @code + * TLiwGenericParam param; + * CleanupStack::PushL( TCleanupItem( TLiwGenericParam::ParamCleanup , ¶m ) ); + * User::Leave(KErrGeneral); //This calls the ParamCleanup method which cleans up TLiwGenericParam + * CleanupStack::Pop(¶m); + * param.Reset(); + * @endcode + * + * Example 2: Here the client calls the PushL method of TLiwGenericParam which pushes the object into + * the CleanupStack using TCleanupItem + * + * @code + * TLiwGenericParam param; + * param.PushL(); + * User::Leave(KErrGeneral); //This calls the ParamCleanup method which cleans up TLiwGenericParam + * CleanupStack::Pop(¶m); + * param.Reset(); + * @endcode + * + * The clients can use the convenient PushL method which is recommended (as shown in e.g 2) rather than + * explicitly pushing the parameter object into the CleanupStack using TCleanupItem and ParamCleanup. + * + * @ see PushL() method + */ + IMPORT_C static void ParamCleanup(TAny* aObj); + + /** + * A friendly and convenient method to push the TLiwGenericParam Object into the CleanupStack + * + * !!!!!!!!!!!!!!!!!!!!!!!!!!!! IMPORTANT NOTE !!!!!!!!!!!!!!!!!!!!!!!!!!!! + * + * This method informs the CleanupStack that ParamCleanup method should be called incase of any Leave + * + * Example: + * + * @code + * TLiwGenericParam param; + * param.PushL(); //This pushes the parameter object "param" into the CleanupStack using TCleanupItem and ParamCleanup. + * User::Leave(KErrGeneral); //This calls the ParamCleanup method which cleans up TLiwGenericParam + * CleanupStack::Pop(¶m); //These statements are not executed + * param.Reset(); + * @endcode + * + * This method is recommended than explicitly pushing the parameter object into the CleanupStack + * using TCleanupItem and ParamCleanup. + * + * @see ParamCleanup() method + */ + IMPORT_C void PushL(); + + private: // Interface for friend classes + void Destroy(); + void CopyLC(const TLiwGenericParam& aParam); + static void CleanupDestroy(TAny* aObj); + operator TCleanupItem(); + void InternalizeL(RReadStream& aStream); + void ExternalizeL(RWriteStream& aStream) const; + TInt Size() const; + + private: // Data + /// Own: semantic ID of this parameter + LIW::TGenericParamId iSemanticId; + /// Own: value of this parameter + TLiwVariant iValue; + /// Reserved member + TAny* iReserved; + + private: // friend declarations + friend class CLiwGenericParamList; + friend class CLiwDefaultList; + friend class CLiwDefaultMap; + }; + + +// FUNCTIONS + +/** +* Returns ETrue if two generic params are equal. +* +* @param aLhs Left hand side. +* @param aRhs Right hand side. +* @return ETrue if equal, EFalse otherwise. +*/ +IMPORT_C TBool operator==(const TLiwGenericParam& aLhs, const TLiwGenericParam& aRhs); + +/** +* Returns ETrue if two generic params are not equal. +* +* @param aLhs Left hand side. +* @param aRhs Right hand side. +* @return ETrue if not equal, EFalse otherwise. +*/ +inline TBool operator!=(const TLiwGenericParam& aLhs, const TLiwGenericParam& aRhs); + + +/** + * Generic parameter list. + * A list containing TLiwGenericParam objects. Used for passing parameters + * between consumers and providers. + * + * @lib ServiceHandler.lib + * @since Series 60 2.6 + */ +NONSHARABLE_CLASS(CLiwGenericParamList): public CBase + { + public: // Constructors and destructor + /** + * Creates an instance of this class. + * + * @return A pointer to the new instance. + */ + IMPORT_C static CLiwGenericParamList* NewL(); + + /** + * Creates an instance of this class. + * + * @param aReadStream A stream to initialize this parameter list from. + * @return A pointer to the new instance. + */ + IMPORT_C static CLiwGenericParamList* NewL(RReadStream& aReadStream); + + /** + * Creates an instance of this class. Leaves the created instance on the + * cleanup stack. + * + * @return A pointer to the new instance. + */ + IMPORT_C static CLiwGenericParamList* NewLC(); + + /** + * Creates an instance of this class. Leaves the created instance on the + * cleanup stack. + * + * @param aReadStream A stream to initialize this parameter list from. + * @return A pointer to the new instance. + */ + IMPORT_C static CLiwGenericParamList* NewLC(RReadStream& aReadStream); + + /** + * Destructor. + */ + virtual ~CLiwGenericParamList(); + + public: // Interface + /** + * Returns the number of parameters in the list. + * + * @return The number of parameters in the list. + */ + IMPORT_C TInt Count() const; + + /** + * Returns the number of the parameters in the list by semantic id and datatype. + * + * @param aSemanticId The semantic ID of the parameter. + * @param aDataType The type id of data. Default is any type. + * @return The number of parameters in the list by semantic id and datatype. + */ + IMPORT_C TInt Count(LIW::TGenericParamId aSemanticId, + LIW::TVariantTypeId aDataType = LIW::EVariantTypeAny) const; + + /** + * Returns a parameter from this list. + * + * @param aIndex Index of the parameter. + * @return The parameter at the aIndex position. + * @pre aIndex>=0 && aIndexAtL(0,outParam); + * //This fills the "outParam" with the parameter value present in the 0th position of parameter list, but + * //if there is any Leave in AtL, then ParamCleanup method is called for proper cleanup + * + * CleanupStack::Pop(&outParam); + * outParam.Reset(); + * CleanupStack::PopAndDestroy(param); + * @endcode + * + * @return false if no element is found at the passed index; + * true if an element is found + * + * @see CLiwDefaultList::AtL + * @see TLiwGenericParam::PushL + */ + IMPORT_C void AtL(TInt aIndex, TLiwGenericParam& aParam) const; + + /** + * Appends a parameter to this list. + * + * @param aParam The parameter to append to this list. This object takes + * an own copy of the data in aParam. + */ + IMPORT_C void AppendL(const TLiwGenericParam& aParam); + + /** + * Copies the given list and appends it to end of this list. + * + * @since Series 60 2.8 + * @param aList A list to be copied and appended. + */ + IMPORT_C void AppendL(const CLiwGenericParamList& aList); + + /** + * Removes the first found item with given semantic id from the list. + * + * @param aSemanticId Semantic id for the item to be removed. + * @return ETrue if an item for the given semantic id was found and removed. + * EFalse otherwise. + */ + IMPORT_C TBool Remove(TInt aSemanticId); + + /** + * Removes the first found item with given string based semantic id from the list. + * + * @param aSemanticId Semantic id for the item to be removed. + * @return ETrue if an item for the given semantic id was found and removed. + * EFalse otherwise. + */ + IMPORT_C void Remove(const TDesC8& aName); + + /** + * Deletes all parameters in the list and resets the list. + */ + IMPORT_C void Reset(); + + /** + * Returns the first item matching the given semantic ID. + * + * @param aIndex Position in which to start searching. On return it contains + * the position of the found parameter. It is set to KErrNotFound, + * if no matching items were found. + * @param aSemanticId The semantic ID of the parameter. + * @param aDataType The type id of data. Default is any type. + * @return The first matching item. + */ + IMPORT_C const TLiwGenericParam* FindFirst( + TInt& aIndex, + LIW::TGenericParamId aSemanticId, + LIW::TVariantTypeId aDataType = LIW::EVariantTypeAny) const; + /** + * Returns the next item matching the given semantic ID. + * + * @param aIndex Position after which to start searching. On return it contains + * the position of the found parameter. It is set to KErrNotFound, + * if no matching items were found. + * @param aSemanticId The semantic ID of the parameter. + * @param aDataType The type id of data. Default is any type. + * @return The next matching item. + */ + IMPORT_C const TLiwGenericParam* FindNext( + TInt& aIndex, + LIW::TGenericParamId aSemanticId, + LIW::TVariantTypeId aDataType = LIW::EVariantTypeAny) const; + + /** + * Returns item matching the given name. + * + * @param aIndex Position in which to start searching, on return contains + * position of the found parameter. Is set to KErrNotFound, + * if no matching items were found. + * @param aName Parameter name. + * @param aDataType The type id of data. Default is any type. + * @return The first matching item. + */ + IMPORT_C const TLiwGenericParam* FindFirst( + TInt& aIndex, + const TDesC8& aName, + LIW::TVariantTypeId aDataType = LIW::EVariantTypeAny) const; + + /** + * Returns item matching the given name. + * + * @param aIndex Position in which to start searching, on return contains + * position of the found parameter. Is set to KErrNotFound, + * if no matching items were found. + * @param aName Parameter name. + * @param aDataType The type id of data. Default is any type. + * @return The first matching item. + */ + IMPORT_C const TLiwGenericParam* FindNext( + TInt& aIndex, + const TDesC8& aName, + LIW::TVariantTypeId aDataType = LIW::EVariantTypeAny) const; + + /** + * Externalizes this parameter list to a stream. + * + * @param aStream The stream. + * @see NewL(RReadStream& aStream) + * @see NewLC(RReadStream& aStream) + */ + IMPORT_C void ExternalizeL(RWriteStream& aStream) const; + + /** + * Returns the externalized size of the parameter list in bytes. + * + * @return The size. + */ + IMPORT_C TInt Size() const; + + /** + * Internalizes the parameter list from a stream. + * + * @since Series60 2.8 + * @param aStream The stream. + */ + IMPORT_C void InternalizeL(RReadStream& aStream); + + /** + * Packs the parameter list to TIpcArgs structure for + * passing the generic param list to server over process boundary. + * Only one RFile handle parameter can be passed over process boundary. + * + * @since Series60 3.0 + * @param aArgs Inter process call arguments. + * @return Packed parameter list. + */ + IMPORT_C HBufC8* PackForServerL(TIpcArgs& aArgs); + + /** + * Unpacks the list from client message structure. + * + * @since Series60 3.0 + * @param aArgs The list to be unpacked. + */ + IMPORT_C void UnpackFromClientL(const RMessage2& aArgs); + + private: // Implementation + CLiwGenericParamList(); + void ConstructL(); + void AppendL(RReadStream& aReadStream); + + private: // Data + /// Own: the parameter list + RArray iParameters; + friend class CLiwDefaultList; + friend class CLiwDefaultMap; + }; + + +// INLINE FUNCTIONS +#include "liwgenericparam.inl" + +#endif // LIW_GENERIC_PARAM_H + +// End of File diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/liw_generic_parameter_api/inc/liwgenericparam.hrh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/liw_generic_parameter_api/inc/liwgenericparam.hrh Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,303 @@ +/* +* Copyright (c) 2003-2006 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: LIW generic parameter definitions. +* +*/ + + + + + + + +#ifndef LIW_GENERIC_PARAM_HRH +#define LIW_GENERIC_PARAM_HRH +namespace LIW +{ + +/** + * Pre-defined sematic IDs for generic parameters (TLiwGenericParam). + * The data type of the parameter specifies the representation of the parameter. + * Use TGenericParamId instead of using TGenericParamIdValue directly. + * Additional generic param definitions are possible besides this list. + * @see TLiwGenericParam. + */ +enum TGenericParamIdValue + { + EGenericParamUnspecified = 0, + + // General parameters + EGenericParamError = 1, // Any error parameter + EGenericParamDir = 2, // Any directory + EGenericParamFile = 3, // Any file + EGenericParamURL = 4, // Any URL + EGenericParamApplication = 5, // Application + EGenericParamInstallPackage = 6, // Install package + EGenericParamDRMFile = 7, + EGenericParamMIMEType = 8, + EGenericParamCharSet = 9, + + // NOTE: Next id is a special semantic id reserved for LIW framework. + // A consumer application should never add it to parameter list. + EGenericParamServiceCommand = 10, + + // NOTE: Next id is to be used only internally by DocumentHandler. + // Do not not use it for anything else. + EGenericParamInternalFile = 11, + + + EGenericParamNameAsString = 12, + EGenericParamNameAsStringTransient = 13, + + // Application services + EGenericParamContactItem = 20, + EGenericParamCalendarItem = 21, + EGenericParamMessageItem = 22, + EGenericParamNoteItem = 23, + EGenericParamHelpItem = 24, + EGenericParamAlarmItem = 25, + EGenericParamLogItem = 26, + EGenericParamPhoneNumber = 27, + EGenericParamAccessPoint = 28, + EGenericParamSIPAddress = 29, + + EGenericParamMessageItemSMS = 30, + EGenericParamMessageItemEMail = 31, + EGenericParamMessageItemMMS = 32, + + EGenericParamEmailAddress = 33, + EGenericParamWVID = 34, + EGenericParamDateTime = 35, + + EGenericParamMessageItemMbox = 36, + + // SIM items + EGenericParamSIMContactItem = 40, + EGenericParamSIMAppItem = 41, + + // Browser items + EGenericParamReferringURI = 50, + + // Music Player items + EGenericParamPlayerInitMode = 60, + EGenericParamAlbumItems = 61, + EGenericParamAlbumName = 62, + + // Print parameters + EGenericParamPrintXMLFile = 70, + + // Call parameters + //EGenericParamCallDialDataV1 = 80, // CR JKON-6ZNGMS + EGenericParamCallDialData = 81, + + // Sprint media gallery provider specific + EGenricParamMGItemType = 90, + EGeneriParamMGMediaType = 91, + EGeneriParamMGViewType = 92, + EGenericParamMGSubviewtype = 93, + EGenericParamMGMarked = 94, + EGenericParamCdmaExtendedAMSData = 95, + EGenericParamCdmaExtendedLightSurfData = 96, + + EGenericParamSilentDownload = 110, + EGenericParamSuppressLaunch = 111, + EGenericParamSuppressNextUrl = 112, + + EGenericParamPoCData = 120, + EGenericParamPoCLaunchView = 121, + + EGenericParamAllowMove = 130, + EGenericParamAllowSave = 131, + + EGenericParamFileSaved = 140, + + EGenericParamLocation = 150, + + EGenericParamFotaPkgId = 160, + + EGenericParamMMSSizeLimit = 170, + EGenericParamResolution = 171, + + EGenericParamSuppressDownloadConfirmation = 180, + EGenericParamDownloadId = 181, + + EGenericParamPassword = 190, + EGenericParamUserName = 191, + EGenericParamBookmarkName = 192, + + EGenericParamContactSelectionData = 200, + EGenericParamContactLinkArray = 201, + EGenericParamContactStoreUriArray = 202, + EGenericParamSelectedCount = 203, + EGenericParamContactAssignData = 204, + + EGenericParamLandmark = 210, + EGenericParamLandmarkDatabase = 211, + EGenericParamLandmarkId = 212, + EGenericParamLandmarkIdList = 213, + EGenericParamMnCommonOptions = 214, + EGenericParamMnMapViewOptions = 215, + EGenericParamMnGeocodingOptions = 216, + EGenericParamRequestText = 217, + + // Enterprise telephony parameters + EGenericParamModeActivation = 220, + EGenericParamDisplayString = 221, + + EGenericParamSpeedDialIndex = 230, + + // In-device search parameters + EGenericParamKeywords = 240, + EGenericParamCallAppLocName = 241, + EGenericParamStartOption = 242, + EGenericParamSearchContent = 243, + + EGenericParamTerminate = 250, + + //For Image viewer slideshow support + EGenericParamSlideshow = 251, + + //For Search functionality + EGenericParamSearchDomain = 260, + EGenericParamSearchSubject = 261, + EGenericParamSearchProvider = 262, + EGenericParamSearchOptions = 263, + EGenericParamTransactionID = 264 + + }; + + +// String constants for above sematic ids to be used in content matching. + +#define EGenericParamUnspecifiedStr "0" +#define EGenericParamErrorStr "1" +#define EGenericParamDirStr "2" +#define EGenericParamFileStr "3" +#define EGenericParamURLStr "4" +#define EGenericParamApplicationStr "5" +#define EGenericParamInstallPackageStr "6" +#define EGenericParamDRMFileStr "7" +#define EGenericParamMIMETypeStr "8" +#define EGenericParamCharSetStr "9" +#define EGenericParamServiceCommandStr "10" +#define EGenericParamInternalFileStr "11" +#define EGenericParamNameAsStringStr "12" + +#define EGenericParamContactItemStr "20" +#define EGenericParamCalendarItemStr "21" +#define EGenericParamMessageItemStr "22" +#define EGenericParamNoteItemStr "23" +#define EGenericParamHelpItemStr "24" +#define EGenericParamAlarmItemStr "25" +#define EGenericParamLogItemStr "26" +#define EGenericParamPhoneNumberStr "27" +#define EGenericParamAccessPointStr "28" +#define EGenericParamSIPAddressStr "29" + +#define EGenericParamMessageItemSMSStr "30" +#define EGenericParamMessageItemEMailStr "31" +#define EGenericParamMessageItemMMSStr "32" + +#define EGenericParamEmailAddressStr "33" +#define EGenericParamWVIDStr "34" +#define EGenericParamDateTimeStr "35" + +#define EGenericParamMessageItemMboxStr "36" + +#define EGenericParamSIMContactItemStr "40" +#define EGenericParamSIMAppItemStr "41" + +#define EGenericParamReferringURIStr "50" + +#define EGenericParamPlayerInitModeStr "60" +#define EGenericParamAlbumItemsStr "61" +#define EGenericParamAlbumNameStr "62" + +#define EGenericParamPrintXMLFileStr "70" + +#define EGenericParamCallDialDataV1Str "80" +#define EGenericParamCallDialDataStr "81" + +#define EGenricParamMGItemTypeStr "90" +#define EGeneriParamMGMediaTypeStr "91" +#define EGeneriParamMGViewTypeStr "92" +#define EGenericParamMGSubviewtypeStr "93" +#define EGenericParamMGMarkedStr "94" +#define EGenericParamCdmaExtendedAMSDataStr "95" +#define EGenericParamCdmaExtendedLightSurfDataStr "96" + +#define EGenericParamSilentDownloadStr "110" +#define EGenericParamSuppressLaunchStr "111" +#define EGenericParamSuppressNextUrlStr "112" + +#define EGenericParamPoCDataStr "120" +#define EGenericParamPoCLaunchViewStr "121" + +#define EGenericParamAllowMoveStr "130" +#define EGenericParamAllowSaveStr "131" + +#define EGenericParamFileSavedStr "140" + +#define EGenericParamLocationStr "150" + +#define EGenericParamFotaPkgIdStr "160" + +#define EGenericParamMMSSizeLimitStr "170" +#define EGenericParamResolutionStr "171" + +#define EGenericParamSuppressDownloadConfirmationStr "180" +#define EGenericParamDownloadIdStr "181" + +#define EGenericParamPasswordStr "190" +#define EGenericParamUserNameStr "191" +#define EGenericParamBookmarkNameStr "192" + +#define EGenericParamContactSelectionDataStr "200" +#define EGenericParamContactLinkArrayStr "201" +#define EGenericParamContactStoreUriArrayStr "202" +#define EGenericParamSelectedCountStr "203" +#define EGenericParamContactAssignDataStr "204" + +#define EGenericParamLandmarkStr "210" +#define EGenericParamLandmarkDatabaseStr "211" +#define EGenericParamLandmarkIdStr "212" +#define EGenericParamLandmarkIdListStr "213" +#define EGenericParamMnCommonOptionsStr "214" +#define EGenericParamMnMapViewOptionsStr "215" +#define EGenericParamMnGeocodingOptionsStr "216" +#define EGenericParamRequestTextStr "217" + +#define EGenericParamModeActivationStr "220" +#define EGenericParamDisplayStringStr "221" + +#define EGenericParamSpeedDialIndexStr "230" + +#define EGenericParamKeywordsStr "240" +#define EGenericParamCallAppLocNameStr "241" +#define EGenericParamStartOptionStr "242" +#define EGenericParamSearchContentStr "243" + +#define EGenericParamTerminateStr "250" +#define EGenericParamSlideshowStr "251" + +#define EGenericParamSearchDomainStr "260" +#define EGenericParamSearchSubjectStr "261" +#define EGenericParamSearchProviderStr "262" +#define EGenericParamSearchOptionsStr "263" +#define EGenericParamTransactionIDStr "264" +} +#endif // LIW_GENERIC_PARAM_HRH + +// End of file + diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/liw_generic_parameter_api/inc/liwgenericparam.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/liw_generic_parameter_api/inc/liwgenericparam.inl Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,107 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Inline function implementations of class TLiwGenericParam. +* +*/ + + + + + + + +inline TLiwGenericParam::TLiwGenericParam() : + iSemanticId(LIW::EGenericParamUnspecified), iValue(), iReserved(NULL) + { + } + +inline TLiwGenericParam::TLiwGenericParam(LIW::TGenericParamId aSemanticId) : + iSemanticId(aSemanticId), iValue(), iReserved(NULL) + { + } + +inline TLiwGenericParam::TLiwGenericParam(LIW::TGenericParamId aSemanticId, + const TLiwVariant& aValue) : + iSemanticId(aSemanticId), iValue(aValue), iReserved(NULL) + { + } + + +inline TLiwGenericParam::TLiwGenericParam(const TDesC8& aName, const TLiwVariant& aValue) + { + iSemanticId = LIW::EGenericParamNameAsStringTransient; + iReserved = (TAny*)&aName; + iValue = aValue; + } + +inline void TLiwGenericParam::SetSemanticId(LIW::TGenericParamId aSemanticId) + { + iSemanticId = aSemanticId; + } + +inline void TLiwGenericParam::SetNameL(const TDesC8& aName) + { + iSemanticId = LIW::EGenericParamNameAsString; + delete iReserved; + iReserved = (TAny*)aName.AllocL(); + } + +inline void TLiwGenericParam::SetNameAndValueL(const TDesC8& aName, const TLiwVariant& aValue) + { + delete iReserved; + iValue.Reset(); + iSemanticId = LIW::EGenericParamNameAsString; + iReserved = (TAny*)aName.AllocL(); + iValue = aValue; + } + +inline LIW::TGenericParamId TLiwGenericParam::SemanticId() const + { + return iSemanticId; + } + +inline const TDesC8& TLiwGenericParam::Name() const + { + if (iSemanticId == LIW::EGenericParamNameAsStringTransient) + return *((TDesC8*)iReserved); + else + return ((iReserved) ? *((HBufC8*)iReserved) : KNullDesC8()); + } + +inline TLiwVariant& TLiwGenericParam::Value() + { + return iValue; + } + +inline const TLiwVariant& TLiwGenericParam::Value() const + { + return iValue; + } + +inline void TLiwGenericParam::Reset() + { + if (iSemanticId != LIW::EGenericParamNameAsStringTransient) delete iReserved; + iReserved = NULL; + iSemanticId = LIW::EGenericParamUnspecified; + iValue.Reset(); + } + +inline TBool operator!=(const TLiwGenericParam& aLhs, + const TLiwGenericParam& aRhs) + { + return !(aLhs == aRhs); + } + +// End of file + diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/liw_generic_parameter_api/inc/liwvariant.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/liw_generic_parameter_api/inc/liwvariant.h Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,2029 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Variant data type for LIW generic parameters. +* +*/ + + + + + + + +#ifndef LIW_VARIANT_H +#define LIW_VARIANT_H + +// INCLUDES +#include +#include +#include +#include "liwvarianttype.hrh" + +// FORWARD DECLARATIONS + +class CLiwGenericParamList; +class MLiwNotifyCallback; + +// New variant types +class CLiwContainer; +class CLiwIterable; +class CLiwList; +class CLiwMap; +class MLiwInterface; +class CLiwBuffer; + + +// CLASS DECLARATION + +/** +* Variant data class to hold a value of a TLiwGenericParam instance. +* The variant contains a data type and a value. This class is attached to +* TLiwGenericParam instance which holds the semantic type of the value. +* +* @lib ServiceHandler.lib +* @since Series 60 2.6 +* @see TLiwGenericParam +*/ +class TLiwVariant + { + public: // Constructors + /** + * Default constructor. Initializes this variant to be empty. + * + * @post IsEmpty() + */ + inline TLiwVariant(); + + /** + * Constructor from a value. + * + * @param aValue The value to set for this variant object. + */ + inline TLiwVariant(TInt32 aValue); + + + /** + * Constructor from a value. + * + * @param aValue The value to set for this variant object. + */ + inline TLiwVariant(TInt64 aValue); + + + /** + * Constructor from a value. + * + * @param aValue The value to set for this variant object. + */ + inline TLiwVariant(TUint aValue); + + /** + * Constructor from a value. + * + * @param aValue The value to set for this variant object. + */ + inline TLiwVariant(TBool aValue); + + /** + * Constructor from a value. + * + * @param aValue The value to set for this variant object. + */ + inline TLiwVariant(const TUid& aValue); + + /** + * Constructor from a value. + * + * @param aValue The value to set for this variant object. + */ + inline TLiwVariant(const TTime& aValue); + + /** + * Constructor from a value. + * + * @param aValue The value to set for this variant object. + */ + inline TLiwVariant(const TDesC& aValue); + + /** + * Constructor from a value. + * + * @param aValue The value to set for this variant object. + */ + inline TLiwVariant(const HBufC* aValue); + + /** + * Constructor from a value. + * + * @param aValue The value to set for this variant object. + */ + inline TLiwVariant(const TDesC8& aValue); + + /** + * Constructor from a value. + * + * @param aValue The value to set for this variant object. + */ + inline TLiwVariant(const RFile& aValue); + + /** + * Constructor from a value. + * + * @param aValue The value to set for this variant object. + */ + inline TLiwVariant(const CLiwList* aValue); + + /** + * Constructor from a value. + * + * @param aValue The value to set for this variant object. + */ + inline TLiwVariant(const CLiwMap* aValue); + + /** + * Constructor from a value. + * + * @param aValue The value to set for this variant object. + */ + inline TLiwVariant(const MLiwInterface* aValue); + + /** + * Constructor from a value. + * + * @param aValue The value to set for this variant object. + */ + inline TLiwVariant(const CLiwIterable* aValue); + + /** + * Constructor from a value. + * + * @param aValue The value to set for this variant object. + */ + inline TLiwVariant(TReal aValue); + + /** + * Constructor from a value. + * + * @param aValue The value to set for this variant object. + */ + inline TLiwVariant(const CLiwBuffer* aValue); + + /** + * Copy constructor. Does not take ownership of data. + * + * @param aSrc The source object. + */ + IMPORT_C TLiwVariant(const TLiwVariant& aSrc); + + /** + * Assignment operator. Does not take ownership of data. + * + * @param aValue The source object. + */ + IMPORT_C TLiwVariant& TLiwVariant::operator=(const TLiwVariant& aValue); + + // This class does not need a destructor because memory allocation + // policy for variant class has been implemented by TLiwGenericParam + // class. + + public: // Interface + /** + * Returns the type id of data this variant object is holding. + */ + inline LIW::TVariantTypeId TypeId() const; + + /** + * Returns ETrue if this variant is empty (it does not hold any value). + */ + inline TBool IsEmpty() const; + + /** + * Retrieves the value held by this variant. + * + * @param aValue If this variant's type does not match the + * parameter type, the parameter will not be modified. + * @return ETrue if aValue was set, EFalse if types did not match. + */ + IMPORT_C TBool Get(TInt32& aValue) const; + + /** + * Retrieves the value held by this variant. + * + * @param aValue If this variant's type does not match the + * parameter type, the parameter will not be modified. + * @return ETrue if aValue was set, EFalse if types did not match. + */ + IMPORT_C TBool Get(TInt64& aValue) const; + + /** + * Retrieves the value held by this variant. + * + * @param aValue If this variant's type does not match the + * parameter type, the parameter will not be modified. + * @return ETrue if aValue was set, EFalse if types did not match. + */ + IMPORT_C TBool Get(TUid& aValue) const; + + /** + * Retrieves the boolean value held by this variant. + * + * @param aValue If this variant's type does not match the + * parameter type, the parameter will not be modified. + * @return ETrue if aValue was set, EFalse if types did not match. + */ + + IMPORT_C TBool Get(TUint& aValue) const; + /** + * Retrieves the boolean value held by this variant. + * + * @param aValue If this variant's type does not match the + * parameter type, the parameter will not be modified. + * @return ETrue if aValue was set, EFalse if types did not match. + */ + IMPORT_C TBool Get(TBool& aValue) const; + + + /** + * Retrieves the value held by this variant. + * + * @param aValue If this variant's type does not match the + * parameter type, the parameter will not be modified. + * @return ETrue if aValue was set, EFalse if types did not match. + */ + IMPORT_C TBool Get(TPtrC& aValue) const; + + //needed at least temporarily for data binding integration... + //inline TBool Get(const TPtrC** aValue) const; + + /** + * Retrieves the value held by this variant. + * + * @param aValue If this variant's type does not match the + * parameter type, the parameter will not be modified. + * @return ETrue if aValue was set, EFalse if types did not match. + */ + IMPORT_C TBool Get(TTime& aValue) const; + + /** + * Retrieves the value held by this variant. + * + * @param aValue If this variant's type does not match the + * parameter type, the parameter will not be modified. + * @return ETrue if aValue was set, EFalse if types did not match. + */ + IMPORT_C TBool Get(TPtrC8& aValue) const; + + /** + * Retrieves the value held by this variant. + * + * @param aValue If this variant's type does not match the + * parameter type, the parameter will not be modified. + * @return ETrue if aValue was set, EFalse if types did not match. + */ + IMPORT_C TBool Get(RFile& aValue) const; + + /** + * Retrieves the value held by this variant. + * + * @param aValue If this variant's type does not match the + * parameter type, the parameter will not be modified. + * @return ETrue if aValue was set, EFalse if types did not match. + */ + IMPORT_C TBool Get(CLiwList& aValue) const; + + /** + * Retrieves the value held by this variant. + * + * @param aValue If this variant's type does not match the + * parameter type, the parameter will not be modified. + * @return ETrue if aValue was set, EFalse if types did not match. + */ + IMPORT_C TBool Get(CLiwMap& aValue) const; + + /** + * Returns the value held by this variant. + * + * @return The value held by this variant. If the data type does not + * match the function, the default initialized data is returned. + */ + IMPORT_C TInt32 AsTInt32() const; + + /** + * Returns the value held by this variant. + * + * @return The value held by this variant. If the data type does not + * match the function, the default initialized data is returned. + */ + IMPORT_C TInt64 AsTInt64() const; + + /** + * Returns the value held by this variant. + * + * @return The value held by this variant. If the data type does not + * match the function, the default initialized data is returned. + */ + IMPORT_C TBool AsTBool() const; + + /** + * Returns the value held by this variant. + * + * @return The value held by this variant. If the data type does not + * match the function, the default initialized data is returned. + */ + IMPORT_C TBool AsTUint() const; + + /** + * Returns the value held by this variant. + * + * @return The value held by this variant. If the data type does not + * match the function, the default initialized data is returned. + */ + IMPORT_C TUid AsTUid() const; + + /** + * Returns the value held by this variant. + * + * @return The value held by this variant. If the data type does not + * match the function, the default initialized data is returned. + */ + IMPORT_C TPtrC AsDes() const; + + /** + * Returns the value held by this variant. + * + * @return The value held by this variant. If the data type does not + * match the function, the default initialized data is returned. + */ + IMPORT_C TTime AsTTime() const; + + /** + * Returns the value held by this variant. + * + * @return The value held by this variant. If the data type does not + * match the function, the default initialized data is returned. + */ + IMPORT_C TPtrC8 AsData() const; + + /** + * Returns the value held by this variant. + * + * @return The value held by this variant. If the data type does not + * match the function, the default initialized data is returned. + */ + IMPORT_C RFile AsFileHandle() const; + + /** + * Returns the value held by this variant. + * + * @return The value held by this variant. If the data type does not + * match the function default initialized data is returned. + */ + IMPORT_C const CLiwList* AsList() const; + /** + * Returns the value held by this variant. + * + * @return The value held by this variant. If the data type does not + * match the function default initialized data is returned. + */ + IMPORT_C const CLiwMap* AsMap() const; + /** + * Returns the value held by this variant. + * + * @return The value held by this variant. If the data type does not + * match the function default initialized data is returned. + */ + IMPORT_C MLiwInterface* AsInterface() const; + + /** + * Returns the value held by this variant. + * + * @return The value held by this variant. If the data type does not + * match the function default initialized data is returned. + */ + IMPORT_C CLiwIterable* AsIterable() const; + + /** + * Deletes possibly set value and resets this variant to empty. + * + * @post IsEmpty() + */ + IMPORT_C void Reset(); + + /** + * Sets integer value to this variant. The previous value is overwritten. + * + * @param aValue Value for this variant object to hold. + * @post *this == aValue + */ + IMPORT_C void Set(TInt32 aValue); + + /** + * Sets integer value to this variant. The previous value is overwritten. + * + * @param aValue Value for this variant object to hold. + * @post *this == aValue + */ + IMPORT_C void Set(TInt64 aValue); + + /** + * Sets Boolean value to this variant. The previous value is overwritten. + * + * @param aValue Value for this variant object to hold. + * @post *this == aValue + */ + IMPORT_C void Set(TBool aValue); + + /** + * Sets Boolean value to this variant. The previous value is overwritten. + * + * @param aValue Value for this variant object to hold. + * @post *this == aValue + */ + IMPORT_C void Set(TUint aValue); + /** + * Sets unique ID value to this variant. The previous value is overwritten. + * + * @param aValue Value for this variant object to hold. + * @post *this == aValue + */ + IMPORT_C void Set(const TUid& aValue); + + /** + * Sets date and time value to this variant. The previous value is overwritten. + * + * @param aValue Value for this variant object to hold. + * @post *this == aValue + */ + IMPORT_C void Set(const TTime& aValue); + + /** + * Sets constant text reference to this variant. + * + * @param aValue Text value for this variant object to hold. + * @post *this == aValue + */ + IMPORT_C void Set(const TDesC& aValue); + + /** + * Sets constant text reference to this variant. + * + * @param aValue Text value for this variant object to hold. + * Ownership is not taken. + */ + inline void Set(const HBufC* aValue); + + /** + * Sets constant 8-bit text reference to this variant. + * + * @param aValue Text value for this variant object to hold. + * @post *this == aValue + */ + IMPORT_C void Set(const TDesC8& aValue); + + /** + * Sets RFile file handle to this variant. + * + * @param aValue File handle for this variant object to hold. + * @post *this == aValue + */ + IMPORT_C void Set(const RFile& aValue); + + /** + * Sets list of variants to this variant. + * + * @param aValue Array of variants for this variant object to hold. + * @postcond *this == aValue + */ + IMPORT_C void Set(const CLiwList* aValue); + + /** + * Sets map of variants to this variant. + * + * @param aValue Dictionary of variants for this variant object to hold. + * @postcond *this == aValue + */ + IMPORT_C void Set(const CLiwMap* aValue); + + /** + * Sets interface pointer to this variant. + * + * @param aValue Interface pointer for this variant object to hold. + * @postcond *this == aValue + */ + IMPORT_C void Set(const MLiwInterface* aValue); + + /** + * Sets list of variants to this variant. + * + * @param aValue Sequence of variants for this variant object to hold. + * @postcond *this == aValue + */ + IMPORT_C void Set(const CLiwIterable* aValue); + + /** + * Retrieves the value held by this variant. + * + * @param aValue If this variant's type does not match the + * parameter type, the parameter will not be modified. + * @return ETrue if aValue was set, EFalse if types did not match. + */ + IMPORT_C TBool Get(TDes& aValue) const; + + /** + * Sets the value held by this variant. + * + * @param aValue If this variant's type does not match the + * parameter type, the parameter will not be modified. + * @return ETrue if aValue was set, EFalse if types did not match. + */ + IMPORT_C TBool Get(TDes8& aValue) const; + /** + * Assignment operator for the variant. + * + * @param aValue The source object. + */ + inline TLiwVariant& operator=(const TTime& aValue); + + /** + * Assignment operator for the variant. + * + * @param aValue The source object. + */ + inline TLiwVariant& operator=(const TUid& aValue); + + /** + * Assignment operator for the variant. + * + * @param aValue The source object. + */ + inline TLiwVariant& operator=(TInt32 aValue); + + /** + * Assignment operator for the variant. + * + * @param aValue The source object. + */ + inline TLiwVariant& operator=(TInt64 aValue); + + /** + * Assignment operator for the variant. + * + * @param aValue The source object. + */ + inline TLiwVariant& operator=(TBool aValue); + + /** + * Assignment operator for the variant. + * + * @param aValue The source object. + */ + inline TLiwVariant& operator=(TUint aValue); + /** + * Assignment operator for the variant. + * + * @param aValue The source object. + */ + inline TLiwVariant& operator=(const TDesC& aValue); + + /** + * Assignment operator for the variant. + * + * @param aValue The source object. + */ + inline TLiwVariant& operator=(const HBufC* aValue); + + /** + * Assignment operator for the variant. + * + * @param aValue The source object. + */ + inline TLiwVariant& operator=(const TDesC8& aValue); + + /** + * Assignment operator for the variant. + * + * @param aValue The source object. + */ + inline TLiwVariant& operator=(const RFile& aValue); + + /** + * Assignment operator for the variant. + * + * @param aValue The source. + */ + inline TLiwVariant& operator=(const CLiwList* aValue); + + /** + * Assignment operator for the variant. + * + * @param aValue The source. + */ + inline TLiwVariant& operator=(const CLiwMap* aValue); + + /** + * Assignment operator for the variant. + * + * @param aValue The source. + */ + inline TLiwVariant& operator=(const MLiwInterface* aValue); + + /** + * Assignment operator for the variant. + * + * @param aValue The source. + */ + inline TLiwVariant& operator=(const CLiwIterable* aValue); + + public: + /** + * Data copying support for TLiwGenericParam. + * Sets the copy of given variant value to this variant + * @param aValue variant value for this variant object to hold. + * @post *this == aValue + */ + IMPORT_C void SetL(const TLiwVariant& aValue); + /** + * Retrieves the value held by this variant. + * + * @param aValue If this variant's type does not match the + * parameter type, the parameter will not be modified. + * @return ETrue if aValue was set, EFalse if types did not match. + */ + IMPORT_C TBool Get(TReal& aValue) const; + + /** + * Sets integer value to this variant. The previous value is overwritten. + * + * @param aValue Value for this variant object to hold. + * @post *this == aValue + */ + IMPORT_C void Set(TReal aValue); + + /** + * Returns the value held by this variant. + * + * @return The value held by this variant. If the data type does not + * match the function, the default initialized data is returned. + */ + IMPORT_C TReal AsTReal() const; + + /** + * Assignment operator for the variant. + * + * @param aValue The source object. + */ + inline TLiwVariant& operator=(TReal aValue); + + /** + * Sets integer value to this variant. The previous value is overwritten. + * + * @param aValue Value for this variant object to hold. + * @post *this == aValue + */ + IMPORT_C void Set(const CLiwBuffer* aValue); + + /** + * Returns the value held by this variant. + * + * @return The value held by this variant. If the data type does not + * match the function, the default initialized data is returned. + */ + IMPORT_C CLiwBuffer* AsBuffer() const; + + /** + * Assignment operator for the variant. + * + * @param aValue The source object. + */ + inline TLiwVariant& operator=(const CLiwBuffer* aValue); + + /** + * TLiwVariant cleanup method + * + * !!!!!!!!!!!!!!!!!!!!!!!!!!!! IMPORTANT NOTE !!!!!!!!!!!!!!!!!!!!!!!!!!!! + * + * Variants can be pushed into the CleanupStack using this method + * along with TCleanupItem + * + * @ param aObj - TLiwVariant Object but of type TAny* for usage with TCleanupItem + * + * Example 1: Here the client explicitly pushes the variant into the CleanupStack using + * TCleanupItem + * + * @code + * TLiwVariant var; + * + * //The below statement pushes the variant object "var" into the CleanupStack using TCleanupItem and VariantCleanup. + * CleanupStack::PushL( TCleanupItem( TLiwVariant::VariantCleanup , &var ) ); + * + * User::Leave(KErrGeneral); //This calls the VariantCleanup method which cleans up TLiwVariant + * CleanupStack::Pop(&var); //These statements are not executed due to "Leave" + * var.Reset(); + * @endcode + * + * + * Example 2: Here the client calls the PushL method of TLiwVariant which pushes the object into + * the CleanupStack using TCleanupItem + * + * @code + * TLiwVariant var; + * var.PushL(); //This pushes the variant object "var" into the CleanupStack using TCleanupItem and VariantCleanup. + * User::Leave(KErrGeneral); //This calls the VariantCleanup method which cleans up TLiwVariant + * CleanupStack::Pop(&var); //These statements are not executed due to "Leave" + * var.Reset(); + * @endcode + * + * The clients can use the convenient PushL method which is recommended (as shown in e.g 2) rather than + * explicitly pushing the variant object into the CleanupStack using TCleanupItem and VariantCleanup. + * + * @ see PushL() method + */ + IMPORT_C static void VariantCleanup( TAny* aObj ); + + + /** + * A friendly and convenient method to push the TLiwVariant Object into the CleanupStack + * + * !!!!!!!!!!!!!!!!!!!!!!!!!!!! IMPORTANT NOTE !!!!!!!!!!!!!!!!!!!!!!!!!!!! + * + * This method informs the CleanupStack that VariantCleanup method should be called incase of + * any Leave + * + * @code + * TLiwVariant var; + * var.PushL(); //This pushes the variant object "var" into the CleanupStack using TCleanupItem and VariantCleanup. + * User::Leave(KErrGeneral); //This calls the VariantCleanup method which cleans up TLiwVariant + * CleanupStack::Pop(&var); //These statements are not executed + * var.Reset(); + * @endcode + * + * This method is recommended than explicitly pushing the parameter object into the CleanupStack + * using TCleanupItem and VariantCleanup. + * + * @see VariantCleanup() method + */ + IMPORT_C void PushL(); + + private: + /** + * Streaming support for TLiwGenericParam. + * Internalizes this variant from a stream. + */ + void InternalizeL(RReadStream& aStream); + + /** + * Streaming support for TLiwGenericParam. + * Externalizes this variant to a stream. + */ + void ExternalizeL(RWriteStream& aStream) const; + + /** + * Streaming support for TLiwGenericParam. + * Returns the maximum externalized size of this variant in bytes. + */ + TInt Size() const; + + /** + * Destroys any dynamic resource owned by this variant. + */ + void Destroy(); + + /// Debug invariant + void __DbgTestInvariant() const; + + static void CleanupDestroy(TAny* aObj); + + operator TCleanupItem(); + + private: // Data + /// Type of the data this variant is holding + TUint8 iTypeId; + + /// POD storage for a 64-bit integer + struct SInt64 + { + TInt32 iLow; + TInt32 iHigh; + void InternalizeL(RReadStream& aStream); + void ExternalizeL(RWriteStream& aStream) const; + void Set(const TInt64& aTInt64); + operator TInt64() const; + TBool operator==(const SInt64& aRhs) const; + }; + + // Data value stored in this variant. + // One of these are effective at a time depending on the iTypeId + // + union UData + { + TInt32 iInt32; // 32-bit integer + TInt64 iLong; // 64-bit integer + SInt64 iInt64; // 64-bit integer + HBufC* iBufC; // owned string pointer + HBufC8* iBufC8; // owned 8-bit data pointer + CLiwList* iList; // List + CLiwMap* iMap; // Map + MLiwInterface* iSession; // Interface Type + CLiwIterable* iIterable; // Iterator + CLiwBuffer* iBuffer; + TBool iBool; //boolean + TUint iUint; //Unsinged Integer + TReal iReal; + }; + + UData iData; // Data union + TPtrC iPtrC; // Pointer to string + TPtrC8 iPtrC8; // Pointer to 8-bit data + + private: // friend declarations + friend IMPORT_C TBool operator==(const TLiwVariant& aLhs, const TLiwVariant& aRhs); + /// TLiwGenericParam needs access to private streaming and copying methods. + friend class TLiwGenericParam; + friend class CLiwCriteriaItem; + + }; + +//definitions of new variant types + +// CLASS DECLARATION +/** +* A type of variant class to execute a set of service command operations +* on an interface. The service provider should implement MLiwInterface to group +* set of related operations and offer them as service commands to the consumers. +* +* To maintain its internal state across the execution of service commands and +* enable invocation of operations directly on the interface, service providers +* may offer an interface. +* +* @lib ServiceHandler.lib +* +* @see TLiwVariant +*/ +class MLiwInterface +{ + public: + + /** + * The consumer application should call this method to execute a service + * command directly on the interface. The service provider should + * provide a concrete implementation for the supported service + * command aCmdName. The consumer application should fill in the necessary + * parameters in \em aInParamList. + * + * @param aCmdName the name of the service command which the consumer wants to invoke + * @param aInParamList the input parameter list, can be empty list + * @param [in,out] aOutParamList the output parameter list, can be empty lis. The + * service provider can use the output parameter list to fill in necessary return values + * @param aCmdOptions Options for the command, see TLiwServiceCmdOptions in LiwCommon.hrh. + * @param aCallback callback to be registered by consumer application + * + * + * + * @see TLiwServiceCmdOptions + * @see CLiwGenericParamList + * @see MLiwNotifyCallback + * + */ + virtual void ExecuteCmdL(const TDesC8& aCmdName, + const CLiwGenericParamList& aInParamList, + CLiwGenericParamList& aOutParamList, + TUint aCmdOptions = 0, + MLiwNotifyCallback* aCallback = 0) = 0; + + + /** + * The service provider should provide a concrete implementation + * for this method. The internal state of the service provider + * implemeting \c MLiwInterface can be reset within this method. + * The consumer application should call this method if there + * are no more service commands to be executed on the interface. + * + * + * + *

    + * + */ + virtual void Close() = 0; +}; + +/** +* Base class for the framework supported container types. +* \c CLiwContainer is a self managing, reference counted container. +* This class offers minimal interface to manage the reference counter +* and to serialize the container data into the stream. +* +* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! IMPORTANT NOTE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +* +* Since container objects are reference counted, they cannot go with CleanupStack::PushL. +* The issue is solved by using CleanupClosePushL for pushing the container objects into the CleanupStack. +* Hence CLiwContainer::Close method is introduced common to all container objects +* +* All the container data types supported by the framework are +* derived from \c CLiwContainer. +* +* @lib ServiceHandler.lib +* +* @see CLiwContainer::Close +* @see CLiwContainer::PushL +* +* @see CLiwList +* @see CLiwMap +* @see CLiwIterable +*/ +class CLiwContainer : public CBase +{ + public: + + /** + * Serializes the collection entries to an output stream. + * The derving container types from \c CLiwContainer + * should provide a concrete implementation to serialize the collection + * data. The default implementation of this method just leaves with + * an error code \c KErrNotSupported. + * + * @param aOutputStream the output stream to which the data will be streamed + * + * @leave KErrNotSupported whenever this method is called instead + * of a dervied class implementation of this method + * + * @see RWiteStream + * + */ + IMPORT_C virtual void ExternalizeL(RWriteStream& aOutputStream) const; + + /** + * Returns the size of collection data values. This default implementation of + * this method leaves with an error code \c KErrNotSupported. Typically, the size + * is calculated based on the size of data type(s) the container holds and the total + * number of entries present in the collection. + * + * @return the size of collection data values + * + * @leave KErrNotSupported whenever this method is called instead + * of derived class implementation of this method + */ + IMPORT_C virtual TInt Size() const; + + /** + * Increments the container reference count by one. The reference + * count gets incremented whenever a copy of the data values + * is made. + * + */ + inline void IncRef(); + + /** + * Decrements the container reference count by one. If there + * are no more references to the container type, this container + * instance will be deleted. + * + */ + inline void DecRef(); + + /** + * !!!!!!!!!!!!!!!!!!!!!!!!!!!! IMPORTANT NOTE !!!!!!!!!!!!!!!!!!!!!!!!!!!! + * + * Since reference counting does not work with CleanupStack directly, + * CleanupStack::PushL cannot be used for container objects which are reference counted + * + * So CleanupClosePushL method is used for container objects. Hence the need for this method + * + * This method informs the CleanupStack that Close method should be called incase of any Leave + * + * Close() inturn calls DecRef which ensures proper cleanup of container objects + * + * + * Example 1: //Using PushL to push the container object into the CleanupStack using CleanupClosePushL + * + * @code + * CLiwMap* map = CLiwDefaultMap::NewL(); + * map->PushL(); + * map->InsertL(KNullDesC8,variant); //incase of any leave, CLiwContainer::Close is called + * CleanupStack::PopAndDestroy(map); //CLiwContainer::Close() is called + * @endcode + * + * Example 2: //Using NewLC to push the container object into the CleanupStack using CleanupClosePushL + * + * @code + * CLiwMap* map = CLiwDefaultMap::NewLC(); + * map->InsertL(KNullDesC8,variant); //incase of any leave, CLiwContainer::Close is called + * CleanupStack::PopAndDestroy(map); //CLiwContainer::Close() is called + * @endcode + * + * @ see CLiwContainer::NewLC (pushes the container object using CleanupClosePushL) + * @ see CLiwContainer::PushL (pushes the container object using CleanupClosePushL) + */ + IMPORT_C void Close(); + + /** + * !!!!!!!!!!!!!!!!!!!!!!!!!!!! IMPORTANT NOTE !!!!!!!!!!!!!!!!!!!!!!!!!!!! + * + * A Friendly method to push the CLiwContainer Object into the CleanupStack using CleanupClosePushL + * + * This method informs the CleanupStack that Close method should be called incase of any Leave + * + * @code + * CLiwMap* map = CLiwDefaultMap::NewL(); + * map->PushL(); + * map->InsertL(KNullDesC8,variant); //incase of any leave, CLiwContainer::Close is called + * CleanupStack::PopAndDestroy(map); //CLiwContainer::Close() is called + * @endcode + * + * @ see CLiwContainer::Close + */ + IMPORT_C void PushL(); + + protected: + + /** + * Protected default constructor. This method is available + * only for the derived container types. The reference + * count is set to its default vale. + * + */ + CLiwContainer() : iRefCount(1) {} + + /** + * Destructor. + * + */ + IMPORT_C virtual ~CLiwContainer(); + + private: + + /* Reference counter of the container datatype. + * During the construction, the counter is set to its + * default value of 1. When the counter reaches the value + * of zero (meaning that there are no more references to + * the container data type), the container instance is deleted. + */ + TInt iRefCount; +}; + +/** +* Abstract interface to iterate over the collection entries. +* The service provider should provide a concrete implementation +* for the iterator. +* +* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! IMPORTANT NOTE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +* Since container objects are reference counted, they cannot go with CleanupStack::PushL. +* The issue is solved by using CleanupClosePushL for pushing the container objects into the CleanupStack. +* Hence CLiwContainer::Close method is introduced common to all container objects +* +* This implies that the object of this concrete implementation class being created should be pushed into the +* CleanupStack using CLiwContainer::PushL. +* +* @lib ServiceHandler.lib +* +* @see CLiwContainer +* +* @see CLiwContainer::Close +* @see CLiwContainer::PushL +* +*/ +class CLiwIterable : public CLiwContainer +{ + public: + + /** + * Resets the iterator. The service provider should provide a concrete + * implementation to reset the iterator. + * + */ + virtual void Reset() = 0; + + /** + * Iterates over the collection entries to fetch the next data element. + * The service provider should provide a concrete implementation + * for this method. + * + * @param aEntry contains the next data element and its corresponding data type + * + * @return false if there are no more data elements to be fetched; + * true otherwise + * + */ + virtual TBool NextL(TLiwVariant& aEntry) = 0; + + /** + * Default equality operator implementation + * + * @param aIterable the iterator instance to be compared + * + */ + IMPORT_C virtual TBool operator==(CLiwIterable& aIterable); +}; + +/** +* Abstract interface for an ordered collection or sequence. Typically, +* the collection entries are of type \c TLiwVariant instances. +* \c CLiwList offers abstract methods to: +*
      +*
    • access elements based on an index
    • +*
    • remove an element from the collection
    • +*
    • append to an element to the collection
    • +*
    • remove a key-value pair based on a key
    • +*
    • get the total number of stored key-value pairs
    • +*
    +* A default concrete implementation is provided in the form of specialized class +* \c CLiwDefaultList +* +* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! IMPORTANT NOTE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +* Since container objects are reference counted, they cannot go with CleanupStack::PushL. +* The issue is solved by using CleanupClosePushL for pushing the container objects into the CleanupStack. +* Hence CLiwContainer::Close method is introduced common to all container objects. +* +* This implies that the object of this concrete implementation class being created should be pushed into the +* CleanupStack using CLiwContainer::PushL. +* +* @lib ServiceHandler.lib +* +* @see CLiwContainer +* +* @see CLiwContainer::Close +* @see CLiwContainer::PushL +* +* @see CLiwDefaultList +* +*/ +class CLiwList : public CLiwContainer +{ + public: + + /** + * Appends an entry to the end of the collection. This is an abstract + * method. + * + * @param aEntry an Element to be added to the end of the collection + * + * @see CLiwDefaultList::AppendL + */ + virtual void AppendL(const TLiwVariant& aEntry) = 0; + + /** + * Gets an entry from the collection based on an integeral index. + * + * @param aIndex an index to get an entry from the collection + * @param aEntry the returned element from the collection + * + * !!!!!!!!!!!!!!!!!!!!!!!!!! IMPORTANT NOTE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + * + * This is a copy of the value present in the list at the particular index. To ensure proper cleanup + * TLiwVariant::PushL method should be called beforehand. + * + * @return false if no element is found at the passed index; + * true if an element is found + * + * @see CLiwDefaultList::AtL + * @see TLiwVariant::PushL + */ + virtual TBool AtL(TInt aIndex, TLiwVariant& aEntry) const = 0; + + /** + * Returns the number of elements present in the collection. This + * is an abstract method. + * + * @return the number of elements; Zero if there are no elements stored + * + * @see CLiwDefaultList::Count + */ + virtual TInt Count() const = 0; + + /** + * Removes an element located at the passed index from the collection. This + * is an abstract method. + * + * @param aIndex the index of the element to be removed from the collection + * + * @see CLiwDefaultList::Remove + */ + virtual void Remove(TInt aIndex) = 0; + + /** + * Equality operator implementation for collection container. + * + * @param aList the list container to be compared + * + * @return true if the compared list collections are the same; false otherwise + * + * @see CLiwDefaultList::operator== + */ + IMPORT_C virtual TBool operator==(const CLiwList& aList) const; +}; + +/** +* Abstract interface for an associative array. The collection +* key entries are of type string (Descriptor type) and their +* associated values can be an variant type (\c TLiwVariant). +* +* \c CLiwMap offers abstract methods to: +*
      +*
    • insert a key-value pair
    • +*
    • find a stored value based on a key
    • +*
    • get a key based on an index
    • +*
    • remove a key-value pair based on a key
    • +*
    • get the total number of stored key-value pairs
    • +*
    +* +* A default concrete implementation is provided in the form of specialized class +* \c CLiwDefaultMap +* +* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! IMPORTANT NOTE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +* Since container objects are reference counted, they cannot go with CleanupStack::PushL. +* The issue is solved by using CleanupClosePushL for pushing the container objects into the CleanupStack. +* Hence CLiwContainer::Close method is introduced common to all container objects. +* +* This implies that the object of this concrete implementation class being created should be pushed into the +* CleanupStack using CLiwContainer::PushL. +* +* @lib ServiceHandler.lib +* +* @see CLiwContainer +* +* @see CLiwContainer::Close +* @see CLiwContainer::PushL +* +* @see TLiwVariant +* @see CLiwDefaultMap +* +*/ +class CLiwMap : public CLiwContainer +{ + public: + + /** + * Inserts a key-value pair element to the map collection. A default + * implementation is provided in \c CLiwDefaultMap. + * + * @param aKey the key to be stored + * @param aValue the value associated with the key to be stored + * + * @see CLiwDefaultMap::InsertL + */ + virtual void InsertL(const TDesC8& aKey, const TLiwVariant& aValue) = 0; + + /** + * Finds a value stored in the map collection based on the key. A default + * implementation is provided in \c CLiwDefaultMap. + * + * @param aKey the key to be searched + * @param aFndValue the value associated with the found key + * + * !!!!!!!!!!!!!!!!!!!!!!!!!! IMPORTANT NOTE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + * + * This is a copy of the value present in the map for the particular key. To ensure proper cleanup + * TLiwVariant::PushL method should be called beforehand. + * + * @return false if there is no key stored; true otherwise + * + * @see CLiwDefaultMap::FindL + * @see TLiwVariant::PushL + */ + virtual TBool FindL(const TDesC8& aKey, TLiwVariant& aFndValue) const = 0; + + /** + * Returns the number of key-value pair stored in the map collection. A default + * implementation is provided in \c CLiwDefaultMap. + * + * @return the number of key-value pair stored in the map collection + * + * @see CLiwDefaultMap::Count + */ + virtual TInt Count() const = 0; + + /** + * Returns the key stored at the passed index. A default + * implementation is provided in \c CLiwDefaultMap. + * + * @param aIndex the index of the key to be found + * @param aFndKey the key found at the passed index + * + * @return true if a key-value entry is found at the passed index; + * false otherwise + * + * @see CLiwDefaultMap::AtL + * + */ + virtual TBool AtL(TInt aIndex, TDes8& aFndKey) const = 0; + + /** + * Returns the key stored at the passed index. A default + * implementation is provided in \c CLiwDefaultMap. + * + * @param aIndex the index of the key to be found + * + * @return the key if a key-value entry is found at the passed index; + * Leaves otherwise + * + * @see CLiwDefaultMap::AtL + * + */ + // virtual const TDesC8& AtL(TInt aIndex) const = 0; + + /** + * Removes a key from the map collection. A default + * implementation is provided in \c CLiwDefaultMap. + * + * @param aKey the key to be removed from the map + * + * @see CLiwDefaultMap::Remove + */ + virtual void Remove(const TDesC8& aKey) = 0; + + /** + * Default implementation of equality operator. + * + * @param aMap the map to be compared + * + * @see CLiwDefaultMap::operator== + * + */ + IMPORT_C virtual TBool operator==(const CLiwMap& aMap) const; +}; + +/** +* An ordered collection or sequence. \c CLiwDefaultList providers +* a default implementation for \c CLiwList. The collection entries are typically +* of type \c TLiwVarian. +* +* This class provides concrete implementation to: +*
      +*
    • access elements based on index
    • +*
    • remove an element
    • +*
    • append an element to the end of the list collection
    • +*
    • get the total number of elements stored in the list collection
    • +*
    +* +* +* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! IMPORTANT NOTE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +* Since container objects are reference counted, they cannot go with CleanupStack::PushL. +* The issue is solved by using CleanupClosePushL for pushing the container objects into the CleanupStack. +* Hence CLiwContainer::Close method is introduced common to all container objects. +* +* This implies that the object of this concrete implementation class being created should be pushed into the +* CleanupStack using CLiwContainer::PushL. +* +* @lib ServiceHandler.lib +* +* @see CLiwContainer +* +* @see CLiwContainer::Close +* @see CLiwContainer::PushL +* +* @see CLiwList +* @see TLiwVariant +* +*/ +class CLiwDefaultList : public CLiwList +{ + public: + + /** + * Creates and returns a new instace of \c CLiwDefaultList + * + * @code + * void CreateListL() + * { + * CLiwDefaultList* pList = CLiwDefaultList::NewL(); + * pList->PushL(); //pushes the List into cleanupstack using CleanupClosePushL + * + * CleanupStack::Pop(pList); + * pList->DecRef(); + * } + * + * @endcode + * + * @return an instance of \c CLiwDefaultMap + * + * @ see PushL + * @ see Close + */ + IMPORT_C static CLiwDefaultList* NewL(); + + /** + * Creates and returns a new instace of \c CLiwDefaultList + * + * @code + * void CreateListL() + * { + * CLiwDefaultList* pList = CLiwDefaultList::NewLC(); //pushes the List into cleanupstack using CleanupClosePushL + * + * CleanupStack::Pop(pList); + * pList->DecRef(); + * } + * + * @endcode + * + * @return an instance of \c CLiwDefaultMap + * + * @ see PushL + * @ see Close + */ + IMPORT_C static CLiwDefaultList* NewLC(); + + /** + * Creates and returns a new instace of \c CLiwDefaultList. The + * collection elements will be generated from the data + * values read from the input stream. This method leaves + * the created instance in the cleanup stack. + * + * @param aInputStream the input stream containing the data + * values to append to the list collection + * + * @return an instance of \c CLiwDefaultList + */ + static CLiwDefaultList* NewLC(RReadStream& aInputStream); + + /** + * Appends an entry to the end of the collection. The entry to be + * added is of type \c TLiwVariant. + * + * @param aEntry an Element to be added to the end of the collection + * + * + * A string content being added to the end of the collection + * + * @code + * _LIT8(KLitPbkService,"PhoneBookService"); + * CLiwDefaultList* pList = CLiwDefaultList::NewL(); + * pList->PushL(); + * pList->AppendL(TLiwVariant(KLitPbkService)); + * CleanupStack::Pop(pList); + * pList->DecRef(); + * @endcode + * + * An integer value being added to the end of the collection + * + * @code + * CLiwDefaultList* pList = CLiwDefaultList::NewL(); + * pList->PushL(); + * TInt intVal=0; + * pList->AppendL(TLiwVariant(intVal)); + * CleanupStack::Pop(pList); + * pList->DecRef(); + * @endcode + * + */ + IMPORT_C void AppendL(const TLiwVariant& aEntry); + + /** + * Gets an entry from the collection based on an integeral index. + * + * @param aIndex to get an entry from the collection + * @param aEntry the returned element from the collection + * + * @return false if no element is found at the passed index; + * true if an element is found + * + * !!!!!!!!!!!!!!!!!!!!!!!!!! IMPORTANT NOTE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + * + * This is a copy of the value present in the list at the particular index. To ensure proper cleanup + * TLiwVariant::PushL method should be called beforehand. + * + * + * An integral value being retrieved from the collection + * + * @code + * CLiwDefaultList* pList = CLiwDefaultList::NewL(); + * pList->PushL(); + * TInt intVal=1100; //some magic number + * pList->AppendL(TLiwVariant(intVal)); + * + * TInt nIndex=0; //only one entry is stored.. + * TLiwVariant valFnd; + * valFnd.PushL(); //Pushes the TLiwVariant into the CleanupStack using TCleanupItem + * if(EFalse!=pList->AtL(nIndex,valFnd)) + * { + * TInt intValFnd=-1; + * valFnd.Get(intValFnd); + * } + * + * CleanupStack::PopAndDestroy(valFnd); //Pops and Destroys the TLiwVariant object + * CleanupStack::Pop(pList); + * pList->DecRef(); + * @endcode + * + * @see TLiwVariant::PushL + */ + IMPORT_C TBool AtL(TInt aIndex, TLiwVariant& aEntry) const; + + /** + * Returns the number of elements present in the collection. + * + * @return the number of elements; Zero if there are no elements stored + * + */ + IMPORT_C TInt Count() const; + + /** + * Removes an element located at the passed index from the collection. + * + * @param aIndex the index of the element to be removed from the collection + * + * + * An element being removed from the collection + * + * @code + * CLiwDefaultList* pList = CLiwDefaultList::NewL(); + * pList->PushL(); + * TInt intVal=1100; //some magic number + * pList->AppendL(TLiwVariant(intVal)); + * + * TInt nIndex=0; //only one entry is stored.. + * pList->Remove(nIndex); + * + * if(0==pList->Count()) + * { + * //should be zero + * } + * + * CleanupStack::Pop(pList); + * pList->DecRef(); + * @endcode + * + */ + IMPORT_C void Remove(TInt aIndex); + + /** + * Serializes the collection data entries to an output stream. + * + * @param aOutputStream the output stream to which the data will be streamed + * + * @see RWiteStream + */ + IMPORT_C void ExternalizeL(RWriteStream& aOutputStream) const; + + /** + * Returns the size of the collection. The size is + * calculated based on the total numer of elements + * and the size of each element in the collection + * + * @return the size of the collection + */ + IMPORT_C TInt Size() const; + + private: + + /* + * Constructor + */ + CLiwDefaultList(CLiwGenericParamList* aList) : iList(aList) {} + + /* + * Destructor + */ + IMPORT_C virtual ~CLiwDefaultList(); + + /* + * the underlying generic parameter list + */ + CLiwGenericParamList* iList; +}; + +/** +* An associative array or dictionary class. The collection +* key entries are of type string (Descriptor type) and their +* associated values can be an variant type. +* +* \c CLiwDefaultMap provides default map implementation to +*
      +*
    • insert a key-value pair
    • +*
    • find a stored value based on a key
    • +*
    • get a key based on an index
    • +*
    • remove a key-value pair based on a key
    • +*
    • get the total number of stored key-value pairs
    • +*
    +* +* +* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! IMPORTANT NOTE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +* Since container objects are reference counted, they cannot go with CleanupStack::PushL. +* The issue is solved by using CleanupClosePushL for pushing the container objects into the CleanupStack. +* Hence CLiwContainer::Close method is introduced common to all container objects. +* +* This implies that the object of this concrete implementation class being created should be pushed into the +* CleanupStack using CLiwContainer::PushL. +* +* @lib ServiceHandler.lib +* +* @see CLiwContainer +* +* @see CLiwContainer::Close +* @see CLiwContainer::PushL +* +* @see TLiwVariant +* @see CLiwMap +* +*/ +class CLiwDefaultMap : public CLiwMap +{ + public: + + /* + * Creates an instance of \c CLiwDefaultMap + * + * Instance of the map created, can be pushed into the CleanupStack using PushL() + * to ensure proper cleanup of this container object + * + * @code + * void CreateMapL() + * { + * CLiwDefaultMap* pMap = CLiwDefaultMap::NewL(); + * pMap->PushL(); //pushes the map into cleanupstack using CleanupClosePushL + * + * CleanupStack::Pop(pMap); + * pMap->DecRef(); + * } + * + * @endcode + * + * @return an instance of \c CLiwDefaultMap + * + * @ see PushL + * @ see Close + */ + IMPORT_C static CLiwDefaultMap* NewL(); + + /* + * Creates an instance of \c CLiwDefaultMap + * + * Pushes the map into the CleanupStack using CleanupClosePushL + * + * @code + * void CreateMapL() + * { + * CLiwDefaultMap* pMap = CLiwDefaultMap::NewLC(); //pushes the map into cleanupstack using CleanupClosePushL + * + * CleanupStack::Pop(pMap); + * pMap->DecRef(); + * } + * + * @endcode + * @return an instance of \c CLiwDefaultMap + * + * @ see Close + */ + IMPORT_C static CLiwDefaultMap* NewLC(); + + /* + * Creates an instance of \c CLiwDefaultMap and + * fills up the collection entries from the input stream. + * The created instance is left in the cleanupstack. + * + * @return an instance of \c CLiwDefaultMap + */ + static CLiwDefaultMap* NewLC(RReadStream& aInputStream); + + /** + * Inserts a key-value pair element to the map collection. If + * the specified key already exists, it will be removed from + * the collection and the new key-value pair will be added to the + * map. + * + * @param aKey the key to be stored + * @param aValue the value associated with the key to be stored + * + * + * @code + * void AddMapEntryL(const TDesC* ptrFirstNameVal) + * { + * _LIT8(KKey,"firstName"); + * TBuf8<128> pbkFieldKey(KKey); + * + * CLiwDefaultMap* pMap = CLiwDefaultMap::NewL(); + * pMap->PushL(); //pushes the map into cleanupstack using CleanupClosePushL + * pMap->InsertL(pbkFieldKey, TLiwVariant(*ptrFirstNameVal)); + * CleanupStack::Pop(pMap); + * pMap->DecRef(); + * } + *@endcode + * + */ + IMPORT_C void InsertL(const TDesC8& aKey, const TLiwVariant& aValue); + + /** + * Finds a value stored in the map collection based on the key. + * + * @param aKey the key to be searched + * @param aFndValue the value associated with the found key + * + * !!!!!!!!!!!!!!!!!!!!!!!!!! IMPORTANT NOTE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + * + * This is a copy of the value present in the map for the particular key. To ensure proper cleanup + * TLiwVariant::PushL method should be called beforehand. + * + * @return false if there is no key stored; true otherwise + * + * + * + * @code + * void FindAnEntryL() + * { + * _LIT8(KKey,"firstName"); + * TBuf8<128> pbkFieldKey(KKey); + * TLiwVariant firstNameVal; + * firstNameVal.PushL(); + * + * CLiwDefaultMap* pMap = CLiwDefaultMap::NewL(); + * pMap->PushL(); + * if(EFalse!=pMap->FindL(pbkFieldKey, firstNameVal)) + * { + * //key value has been found + * } + * + * CleanupStack::PopAndDestroy(pMap); + * CleanupStack::PopAndDestroy(firstNameVal); + * } + * @endcode + * + * @see TLiwVariant::PushL + */ + IMPORT_C TBool FindL(const TDesC8& aKey, TLiwVariant& aValue) const; + + /** + * Returns the number of key-value pair stored in the map collection. + * + * @return the number of key-value pair stored in the map collection + */ + IMPORT_C TInt Count() const; + + /** + * Returns the key stored at a specified index. + * + * @param aIndex the index of the key to be found + * @param aFndKey the key found at the passed index + * + * @return true if a key-value entry is found at the passed index; + * false otherwise + * + * + * + * @code + * void FindAnEntryL() + * { + * _LIT8(KKey,"firstName"); + * TBuf8<128> pbkFieldKeyVal(KKey); + * + * TInt nIndex=0; + * CLiwDefaultMap* pMap = CLiwDefaultMap::NewL(); + * pMap->PushL(); + * + * if(EFalse!=pMap->AtL(nIndex, pbkFieldKeyVal)) + * { + * //key value has been found + * } + * + * CleanupStack::Pop(pMap); + * pMap->DecRef(); + * } + * @endcode + * + */ + IMPORT_C TBool AtL(TInt aIndex, TDes8& aFndKey) const; + + /** + * Returns the key stored at a specified index. + * + * @param aIndex the index of the key to be found + * @param aFndKey the key found at the passed index + * + * + * @return the key if a key-value entry is found at the passed index; + * Leaves otherwise + * + * + * + * @code + * void FindAnEntryL() + * { + * _LIT8(KKey,"firstName"); + * TBuf8<128> pbkFieldKeyVal(KKey); + * + * TInt nIndex=0; + * CLiwDefaultMap* pMap = CLiwDefaultMap::NewL(); + * pMap->PushL(); + * + * pbkFieldKeyVal = pMap->AtL(nIndex); + * if(pbkFieldKeyVal) + * { + * //key value has been found + * } + * + * CleanupStack::Pop(pMap); + * pMap->DecRef(); + * } + * @endcode + * + */ + IMPORT_C const TDesC8& AtL(TInt aIndex) const; + + /** + * Removes a key from the map collection. + * + * @param aKey the key to be removed from the map + * + * + * + * @code + * void RemoveMapEntryL(const TDesC* ptrFirstNameVal) + * { + * _LIT8(KKey,"firstName"); + * TBuf8<128> pbkFieldKey(KKey); + * CLiwDefaultMap* pMap = CLiwDefaultMap::NewL(); + * pMap->PushL(); + * + * pMap->InsertL(pbkFieldKey, TLiwVariant(*ptrFirstNameVal)); + * pMap->Remove(pbkFieldKey); + * + * if(0==pMap->Count()) + * { + * //no entries stored; removal successful + * } + * + * CleanupStack::Pop(pMap); + * pMap->DecRef(); + * } + * @endcode + * + */ + IMPORT_C void Remove(const TDesC8& aKey); + + /** + * The container managed data values can be serialized to an output + * stream. + * + * @param aOutputStream the output stream to which the data will be streamed + * + * + * + * @see RWiteStream + * + */ + void ExternalizeL(RWriteStream& aOutputStream) const; + + /** + * Returns the size of the collection. The size is + * calculated based on the total numer of key-value elements + * and the size of each pair in the collection + * + * @return the size of the collection + */ + IMPORT_C TInt Size() const; + + private: + + /* + * Constructor + */ + CLiwDefaultMap(CLiwGenericParamList* aMap) : iMap(aMap) {} + + /* + * Destructor + */ + IMPORT_C virtual ~CLiwDefaultMap(); + + /* + * the underlying generic parameter list + */ + CLiwGenericParamList* iMap; +}; + +/** +* Abstract generic buffer representation. Class used for passing generic buffer data between +* service provider and the consumers. + +* The class offers APIs for the consumers to access the buffer data in a generic manner. Depending on +* the data agreement between the service provider and its consumers, one +* or more of the API operations may be inappropriate e.g. a service provider may not +* support write operation on the buffer +* +* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! IMPORTANT NOTE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +* Since container objects are reference counted, they cannot go with CleanupStack::PushL. +* The issue is solved by using CleanupClosePushL for pushing the container objects into the CleanupStack. +* Hence CLiwContainer::Close method is introduced common to all container objects. +* +* This implies that the object of this concrete implementation class being created should be pushed into the +* CleanupStack using CLiwContainer::PushL. +* +* @lib ServiceHandler.lib +* +* @see CLiwContainer +* +* @see CLiwContainer::Close +* @see CLiwContainer::PushL +* +*/ +class CLiwBuffer : public CLiwContainer +{ + public: + enum TLiwBufferAccess + { + KLiwBufferNonReadable = 0, + KLiwBufferReadOnly = 1 + }; + + + /* + * Returns the pointer to the underlying buffer + * + * @return the pointer to the underlying buffer + */ + virtual TUint8* Buf() const =0; + + /* + * Returns the length of the buffer data + * + * @return the length of the buffer data + */ + virtual TInt Len() =0; + + /* + * Reads the specified number of bytes of buffer data + * + * @param aPtr the pointer to the area into which buffer data is read + * @param aLength the number of bytes to be read from the buffer + * + * @return KErrNone if the operation is successful; Otherwise + * TLiwBufferAccess::KLiwBufferNonReadable + * + */ + inline virtual TInt Read(TUint8* /*aPtr*/,TInt /*aLength*/) + { + return KLiwBufferNonReadable; + } + + /* + * Writes the specified number of bytes into the buffer + * + * @param aPtr the pointer to the data to be written into buffer + * @param aLength the number of bytes to be written into buffer + * + * @return KErrNone if the operation is successful; Otherwise + * TLiwBufferAccess::KLiwBufferReadOnly if writing is not supported + * + */ + inline virtual TInt Write(const TUint8 * /*aPtr*/, TInt /*aLength*/) + { + return KLiwBufferReadOnly; + } + + /* + * Releases the buffer. The service provider implementing concrete buffer + * type should provide appropriate implementation + */ + virtual void Release() =0; + + /* + * Returns the appropriate type of buffer. + */ + virtual TInt TypeID()=0; + + /* + * The concrete implementation of buffer types should perform equality operation + * check + */ + virtual TBool operator==(CLiwBuffer& aBuffer) =0; +}; + +/** +* Returns ETrue if two variants are equal. +* +* @param aLhs Left hand side. +* @param aRhs Right hand side. +* @return ETrue if equal, EFalse otherwise. +*/ +IMPORT_C TBool operator==(const TLiwVariant& aLhs, const TLiwVariant& aRhs); + +/** +* Returns ETrue if two variants are not equal. +* +* @param aLhs Left hand side. +* @param aRhs Right hand side. +* @return ETrue if not equal, EFalse otherwise. +*/ +inline TBool operator!=(const TLiwVariant& aLhs, const TLiwVariant& aRhs); + +/** +* Dumps the contents of aVariant to debug output. Available only in debug builds. +* +* @param aVariant The object to be dumped. +*/ +IMPORT_C void Dump(const TLiwVariant& aVariant); + + +// INLINE FUNCTIONS +#include "liwvariant.inl" + +#endif // LIW_VARIANT_H + +// End of File diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/liw_generic_parameter_api/inc/liwvariant.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/liw_generic_parameter_api/inc/liwvariant.inl Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,247 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Inline function implementations of class TLiwVariant. +* +*/ + + + + + + + + +inline TLiwVariant::TLiwVariant() : iTypeId(LIW::EVariantTypeNull), iPtrC(), iPtrC8() + { + iData.iBufC = NULL; + iData.iBufC8 = NULL; + Reset(); + } + +inline TLiwVariant::TLiwVariant(TInt32 aValue) : iTypeId(LIW::EVariantTypeNull), iPtrC(), iPtrC8() + { + Set(aValue); + } + +inline TLiwVariant::TLiwVariant(TInt64 aValue) : iTypeId(LIW::EVariantTypeNull), iPtrC(), iPtrC8() + { + Set(aValue); + } + +inline TLiwVariant::TLiwVariant(TBool aValue) : iTypeId(LIW::EVariantTypeNull), iPtrC(), iPtrC8() + { + Set(aValue); + } + +inline TLiwVariant::TLiwVariant(TUint aValue) : iTypeId(LIW::EVariantTypeNull), iPtrC(), iPtrC8() + { + Set(aValue); + } +inline TLiwVariant::TLiwVariant(TReal aValue) : iTypeId(LIW::EVariantTypeNull), iPtrC(), iPtrC8() + { + Set(aValue); + } +inline TLiwVariant::TLiwVariant(const CLiwBuffer* aValue) : iTypeId(LIW::EVariantTypeNull), iPtrC(), iPtrC8() + { + Set(aValue); + } + +inline TLiwVariant::TLiwVariant(const TUid& aValue) : iTypeId(LIW::EVariantTypeNull), iPtrC(), iPtrC8() + { + Set(aValue); + } + +inline TLiwVariant::TLiwVariant(const TDesC& aValue) : iTypeId(LIW::EVariantTypeNull), iPtrC(), iPtrC8() + { + iData.iBufC = NULL; + Set(aValue); + } + +inline TLiwVariant::TLiwVariant(const HBufC* aValue) : iTypeId(LIW::EVariantTypeNull), iPtrC(), iPtrC8() + { + iData.iBufC = NULL; + if(aValue) + Set(*aValue); + else + Reset(); + } + +inline TLiwVariant::TLiwVariant(const TTime& aValue) : iTypeId(LIW::EVariantTypeNull), iPtrC(), iPtrC8() + { + Set(aValue); + } + +inline TLiwVariant::TLiwVariant(const TDesC8& aValue) : iTypeId(LIW::EVariantTypeNull), iPtrC(), iPtrC8() + { + iData.iBufC8 = NULL; + Set(aValue); + } + + +inline TLiwVariant::TLiwVariant(const RFile& aValue) : iTypeId(LIW::EVariantTypeNull), iPtrC(), iPtrC8() + { + Set(aValue); + } + + +inline TLiwVariant::TLiwVariant(const CLiwList* aValue) : iTypeId(LIW::EVariantTypeNull), iPtrC(), iPtrC8() + { + Set(aValue); + } + +inline TLiwVariant::TLiwVariant(const CLiwMap* aValue) : iTypeId(LIW::EVariantTypeNull), iPtrC(), iPtrC8() + { + Set(aValue); + } + +inline TLiwVariant::TLiwVariant(const MLiwInterface* aValue) : iTypeId(LIW::EVariantTypeNull), iPtrC(), iPtrC8() + { + Set(aValue); + } + +inline TLiwVariant::TLiwVariant(const CLiwIterable* aValue) : iTypeId(LIW::EVariantTypeNull), iPtrC(), iPtrC8() + { + Set(aValue); + } + +inline LIW::TVariantTypeId TLiwVariant::TypeId() const + { + return static_cast(iTypeId); + } + +inline TBool TLiwVariant::IsEmpty() const + { + return (iTypeId == LIW::EVariantTypeNull); + } + +inline void TLiwVariant::Set(const HBufC* aValue) + { + Set(*aValue); + } + +inline TLiwVariant& TLiwVariant::operator=(TInt32 aValue) + { + Set(aValue); + return *this; + } + +inline TLiwVariant& TLiwVariant::operator=(TInt64 aValue) + { + Set(aValue); + return *this; + } + +inline TLiwVariant& TLiwVariant::operator=(TReal aValue) + { + Set(aValue); + return *this; + } +inline TLiwVariant& TLiwVariant::operator=(const CLiwBuffer* aValue) + { + Set(aValue); + return *this; + } + +inline TLiwVariant& TLiwVariant::operator=(TBool aValue) + { + Set(aValue); + return *this; + } + +inline TLiwVariant& TLiwVariant::operator=(TUint aValue) + { + Set(aValue); + return *this; + } + +inline TLiwVariant& TLiwVariant::operator=(const TUid& aValue) + { + Set(aValue); + return *this; + } + +inline TLiwVariant& TLiwVariant::operator=(const TDesC& aValue) + { + Set(aValue); + return *this; + } + +inline TLiwVariant& TLiwVariant::operator=(const HBufC* aValue) + { + Set(*aValue); + return *this; + } + +inline TLiwVariant& TLiwVariant::operator=(const TTime& aValue) + { + Set(aValue); + return *this; + } + + +inline TLiwVariant& TLiwVariant::operator=(const TDesC8& aValue) + { + Set(aValue); + return *this; + } + + +inline TLiwVariant& TLiwVariant::operator=(const RFile& aValue) + { + Set(aValue); + return *this; + } + + +inline TLiwVariant& TLiwVariant::operator=(const CLiwList* aValue) + { + Set(aValue); + return *this; + } + +inline TLiwVariant& TLiwVariant::operator=(const CLiwMap* aValue) + { + Set(aValue); + return *this; + } + +inline TLiwVariant& TLiwVariant::operator=(const MLiwInterface* aValue) + { + Set(aValue); + return *this; + } + +inline TLiwVariant& TLiwVariant::operator=(const CLiwIterable* aValue) + { + Set(aValue); + return *this; + } + +inline TBool operator!=(const TLiwVariant& aLhs, const TLiwVariant& aRhs) + { + return !(aLhs == aRhs); + } + + +inline void CLiwContainer::IncRef() + { + iRefCount++; + } + +inline void CLiwContainer::DecRef() + { + if (--iRefCount == 0) + delete this; + } +// End of file diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/liw_generic_parameter_api/inc/liwvarianttype.hrh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/liw_generic_parameter_api/inc/liwvarianttype.hrh Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,58 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Variant data type for Generic Parameters library. +* +*/ + + + + + + + +#include "LiwCommon.hrh" +#ifndef LIW_VARIANT_TYPE_HRH +#define LIW_VARIANT_TYPE_HRH + +namespace LIW { + +/** +* Data formats supported by TLiwVariant class. +*/ +enum TVariantTypeId + { + EVariantTypeAny = -1, ///< Used only in searching + EVariantTypeNull = 0, ///< Null (empty) type + + EVariantTypeTInt32 = 1, ///< 32 bit Integer + EVariantTypeTUid = 2, ///< Globally unique UID + EVariantTypeDesC = 3, ///< Constant text literal + EVariantTypeTTime = 4, ///< Date and time + EVariantTypeDesC8 = 5, ///< 8-bit data buffer + EVariantTypeFileHandle = 6, ///< File handle + EVariantTypeList = 7, ///< List + EVariantTypeMap = 8, ///< Map + EVariantTypeInterface = 9, ///< Interface + EVariantTypeIterable = 10, ///< Iterable + EVariantTypeTBool = 11, ///< Bool Data Type + EVariantTypeTUint = 12, ///< Unsigned Integer Data Type + EVariantTypeTReal = 13, ///< Float type + EVariantTypeBuffer = 14, ///< Buffer type + EVariantTypeTInt64 = 15 ///< 64 bit Integer + }; +} +#endif // LIW_VARIANT_TYPE_HRH + +// End of file + diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/liw_generic_parameter_api/liw_generic_parameter_api.metaxml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/liw_generic_parameter_api/liw_generic_parameter_api.metaxml Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,14 @@ + + +liw_generic_parameter_api +Generic parameter API supports the creation of generic parameters and passing them from a consumer to provider(s) (input parameters) and vice versa (output parameters). +c++ +languageinterworkingfw + + + + +yes +no + + diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/liw_provider_utility_api/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/liw_provider_utility_api/group/bld.inf Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,32 @@ +/* +* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: File that exports the files belonging to +: LIW Provider Utility API +* +*/ + + + + + + + +#include + +PRJ_PLATFORMS +DEFAULT + +PRJ_EXPORTS + +../inc/LiwMenu.h MW_LAYER_PLATFORM_EXPORT_PATH(LiwMenu.h) diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/liw_provider_utility_api/inc/liwmenu.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/liw_provider_utility_api/inc/liwmenu.h Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,277 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Declares LIW Menu utilities for providers to access consumer menu. +* +*/ + + + + + + + +#ifndef LIW_MENU_H +#define LIW_MENU_H + +// INCLUDES +#include +#include + +// CONSTANTS + +// MACROS + +// DATA TYPES + +// FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS + +// CLASS DECLARATION + +/** +* CLiwMenuPane for providers to have limited access to consumer menu. +* +* LIW provider can get a reference to CLiwMenuPane in its InitializeMenuPaneL() +* method, which is derived from CLiwServiceIfMenu. With this reference, +* the provider can e.g. insert menu items to the consumer application's menu. +* +* @lib ServiceHandler.lib +* @since Series 60 2.6 +*/ +class CLiwMenuPane: public CBase + { + public: + /** + * Constructor. + * + * @param aMenuPane Consumer's menu pane handle. + * @param aBaseCmdId Base command ID for new menu items, specified by consumer. + */ + IMPORT_C CLiwMenuPane(CEikMenuPane& aMenuPane, TInt aBaseCmdId); + + /** + * Destructor. + */ + IMPORT_C virtual ~CLiwMenuPane(); + + public: + /** + * Adds a menu item to consumer menu. For each addition a mapping element + * is created. This method should normally be called from provider's + * InitializeMenuPaneL(). + * + * @param aServiceCmd The LIW service command the provider implements. + * @param aMenuItem The menu item data. + * @param aIndex Position of item where to add menu items. + */ + IMPORT_C void AddMenuItemL( + TInt aServiceCmd, + CEikMenuPaneItem::SData& aMenuItem, + TInt aIndex); + + /** + * Adds a menu item to consumer menu. For each addition a mapping element + * is created. This method should normally be called from provider's + * InitializeMenuPaneL(). + * + * @param aServiceCmd The LIW service command the provider implements. + * @param aMenuItem The menu item data. + * @param aIndex Position of item where to add menu items. + * @param aExtraText Altenative menu item text, if it is placed to a submenu. + */ + IMPORT_C void AddMenuItemL( + TInt aServiceCmd, + CEikMenuPaneItem::SData& aMenuItem, + TInt aIndex, + const TDesC& aExtraText); + + /** + * Adds a menu item(s) to consumer menu from provider resource. This method + * should normally be called from provider's InitializeMenuPaneL(). + * + * @param aReader Resource reader pointing to the menu resource. + * @param aServiceCmd The LIW service command the provider implements. + * @param aIndex Position of item where to add menu items. + * @param aAddSeparator Currently not in use. + */ + IMPORT_C void AddMenuItemsL( + TResourceReader& aReader, + TInt aServiceCmd, + TInt aIndex, + TBool aAddSeperator = EFalse); + + /** + * Adds a menu item(s) to consumer menu from provider resource. This method + * should normally be called from provider's InitializeMenuPaneL(). + * + * @param aFileName The provider's resource where menu item(s) are defined. + * @param aResId Resource id of a MENU_PANE. + * @param aServiceCmd The LIW service command the provider implements. + * @param aIndex Position of item where to add menu items. + * @param aAddSeperator Currently not in use. + */ + IMPORT_C void AddMenuItemsL( + TFileName& aFileName, + TInt aResId, + TInt aServiceCmd, + TInt aIndex, + TBool aAddSeperator = EFalse); + + public: + /** + * Gets the provider's original menu command ID from the dynamic menu command + * ID (generated by the LIW framework). + * + * @param aDynCmdId Dynamic menu command ID. + * @return Found provider's original menu command ID, KErrNotFound if not found. + */ + IMPORT_C TInt MenuCmdId(TInt aDynCmdId) const; + + /** + * Gets the dynamic menu command ID (generated by the LIW framework) from the + * provider's original menu command ID. There are usually multiple matching + * dynamic menu command IDs, so this method returns the first item found. + * + * @param aMenuCmdId Provider's original menu command ID. + * @return Found dynamic menu command ID, KErrNotFound if not found. + */ + IMPORT_C TInt DynCmdId(TInt aMenuCmdId) const; + + /** + * Gets the LIW service command ID from the dynamic menu command ID (generated + * by the LIW framework). + * + * @param aDynCmdId Dynamic menu command ID. + * @return Found LIW service command ID, KErrNotFound if not found. + */ + IMPORT_C TInt ServiceCmdId(TInt aDynCmdId) const; + + /** + * Add sub menu title item. This item will not be visible in menus, + * but will be used as title for comsumer's LIW submenu (if consumer + * requests that). + * + * @param aTitle Title text + * @param aIndex Position of title item in menu (can be anything, but + * if there is several title item definitions in menu, + * then the last one will be used). + * @since 2.8 + */ + IMPORT_C void AddTitleItemL(const TDesC& aTitle, TInt aIndex); + + friend class CLiwServiceHandlerImpl; + + private: + struct SMenuIdMap + { + TInt serviceCmdId; // LIW service command ID. + TInt origCmdId; // Original menu ID used by provider SW + TInt dynMenuCmdId; // The dynamic command ID generated by LIWFW + CLiwServiceIfBase* owner; // A pointer to the provider object. + RBuf extraText; // Alternative submenu text is stored here. + }; + + private: + TInt FindCmdId(TInt aIndex); + inline CEikMenuPane& MenuPane(); + inline void SetResourceSlotId(TInt aSlot); + inline TInt ResourceSlotId() const; + inline void SetPaneOffset(TInt aOffset); + inline TInt PaneOffset() const; + inline TInt MenuResourceId() const; + inline void SetMenuResourceId(TInt aMenuResourceId); + TBool IsCmdInRange(TInt aCmdSpaceSize, TInt aCmd); + CLiwServiceIfBase* CommandOwner(TInt aDynId) const; + inline CLiwServiceIfBase* InitializingOwner() const; + inline void SetInitializingOwner(CLiwServiceIfBase* aOwner); + const TDesC& ExtraText(TInt aDynMenuCmdId); + + private: + // Original menu pane. + CEikMenuPane* iMenuPane; + + // Base ID to generate menu IDs for placeholders. From constructor. + TInt iBaseCmdId; + + // Map needed to map provider cmd IDs to dynamic command Ids + RArray iIdMap; + + TInt iNextCmdId; // The next free command ID to use + TInt iResourceSlotId; + TInt iPaneOffset; + TInt iMenuResourceId; + CLiwServiceIfBase* iInitializingOwner; // Owner that is currently initializing. + + TInt iReserved_1; + void *iExtension; // reserved for future use + }; + + +inline CEikMenuPane& CLiwMenuPane::MenuPane() + { + return *iMenuPane; + } + + +inline void CLiwMenuPane::SetResourceSlotId(TInt aSlot) + { + iResourceSlotId = aSlot; + } + + +inline TInt CLiwMenuPane::ResourceSlotId() const + { + return iResourceSlotId; + } + + +inline void CLiwMenuPane::SetPaneOffset(TInt aOffset) + { + iPaneOffset = aOffset; + } + + +inline TInt CLiwMenuPane::PaneOffset() const + { + return iPaneOffset; + } + + +inline CLiwServiceIfBase* CLiwMenuPane::InitializingOwner() const + { + return iInitializingOwner; + } + + +inline void CLiwMenuPane::SetInitializingOwner(CLiwServiceIfBase* aOwner) + { + iInitializingOwner = aOwner; + } + + +inline TInt CLiwMenuPane::MenuResourceId() const + { + return iMenuResourceId; + } + + +inline void CLiwMenuPane::SetMenuResourceId(TInt aMenuResourceId) + { + iMenuResourceId = aMenuResourceId; + } + +#endif // LIW_MENU_H + +// END of File diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/liw_provider_utility_api/liw_provider_utility_api.metaxml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/liw_provider_utility_api/liw_provider_utility_api.metaxml Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,14 @@ + + +liw_provider_utility_api +Utilities that help implementing LIW providers. +c++ +languageinterworkingfw + + + + +yes +no + + diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/liw_service_handler_api/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/liw_service_handler_api/group/bld.inf Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,32 @@ +/* +* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: File that exports the files belonging to +: LIW Service Handler API +* +*/ + + + + + + + +#include + +PRJ_PLATFORMS +DEFAULT + +PRJ_EXPORTS + +../inc/LiwServiceHandler.h MW_LAYER_PLATFORM_EXPORT_PATH(LiwServiceHandler.h) diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/liw_service_handler_api/inc/liwservicehandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/liw_service_handler_api/inc/liwservicehandler.h Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,457 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Declares an API for the consumer applications to access the +* Language Interworking Framework. +* +*/ + + + + + + + +#ifndef LIW_SERVICE_HANDLER_H +#define LIW_SERVICE_HANDLER_H + +// INCLUDES +#include +#include +#include + +// CONSTANTS + +// MACROS + +// FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS +class CLiwServiceHandlerImpl; + +class CRTSecMgrScriptSession; + + +enum TLiwLoadStatus +{ + KLiwUnknown = -5, + KLiwMetaDataInvalidFormat, //-4 + KLiwInvalidVersionSpecification, //-3 + KLiwVersionOutOfRange, //-2 + KLiwSecurityAccessCheckFailed, //-1 + KLiwServiceLoadSuccess, //0 + KLiwServiceAlreadyLoaded //1 + + //..Other possible error codes +}; + + +// CLASS DECLARATION + +/** +* CLiwServiceHandler is the main class of the Language Interworking +* Framework. The Service Handler implements support for dynamically +* loadable service providers which offer services to consumer applications. +* The Service Handler maps consumers and service providers together via +* interests and data agreements and hides the consumers from the providers. +* +* SERVICE is any command or functionality offered by a provider to +* consumer. The service includes typically menu item UI elements, +* but it can also just an engine type of command which executes specific +* functionality and reports status back to the consumer. +* +* CONSUMER application accesses interesting services offered by +* service provider(s). The consumer uses only those services in which +* it is interested in. The interest is expressed using a set of criteria +* items. +* +* INTEREST is a list of criteria items. +* +* CRITERIA consists of set of attributes which guide the LIW Framework to use +* only those providers in which the consumer is interested in. +* The criteria consists of following attributes: +* - Criteria UID (we can allocate pre-defined criteria items). +* - Service command UID (we can allocate pre-defined commands). +* - Content MIME type (string). +* - Additional options (variant data type just in case). +* +* PROVIDER produces those services for a consumer that match the given criteria +* specified by the consumer. A provider can offer menu items and their command +* handling logic to the consumer applications. A provider can also offer base +* services that don't require any UI elements. +* +* DATA AGREEMENT is an agreement between consumer and provider about parameters +* needed to be passed in a use case. +* +* @lib ServiceHandler.lib +* @since Series 60 2.6 +*/ +NONSHARABLE_CLASS(CLiwServiceHandler) : public CBase + { + public: // Construction & destruction + + /** + * Constructs a Service Handler instance. + */ + IMPORT_C static CLiwServiceHandler* NewL(); + + /** + * Constructs a Service Handler instance. + */ + IMPORT_C static CLiwServiceHandler* NewLC(); + + /** + * Destructor. + */ + IMPORT_C virtual ~CLiwServiceHandler(); + + public: // Management + + /** + * Resets the Service Handler, discards existing interest and unloads + * corresponding service providers. + */ + IMPORT_C void Reset(); + + /** + * Returns the amount of providers that fulfil the given criteria. + * + * @param aCriteria Criteria to match. + * @return Number of providers matching the criteria. + */ + IMPORT_C TInt NbrOfProviders(const CLiwCriteriaItem* aCriteria); + + public: // Interest handling + + /** + * Adds the given interest to the Service Handler from a resource and updates + * possibly existing old interest. Corresponding service providers are loaded. + * If a provider leaves during initialization, it is trapped by the Service Handler. + * + * @param aInterestResourceId ID of the resource containing criteria items. + * @leave KErrNotSupported CCoeEnv is not accessible. + * @see Reset + */ + IMPORT_C void AttachL(TInt aInterestResourceId); + + /** + * Adds given interest to the Service Handler from an array of criteria items. + * If a provider leaves during initialization, it is trapped by the Service Handler. + * + * @param aInterest Array of criteria items. Ownership is not transferred. + */ + IMPORT_C TInt AttachL(const RCriteriaArray& aInterest); + + /** + * Gets the currently valid interest in use by the Service Handler. + * + * @param aInterest An array of returned criteria items, may be empty. + * Ownership is not transferred, i.e. the objects in the + * array must not be deleted. + */ + IMPORT_C void GetInterest(RCriteriaArray& aInterest); + + /** + * Removes given interest from the Service Handler. Corresponding service + * providers are unloaded. + * + * @param aInterest Array of returned criteria items, may be empty. + */ + IMPORT_C void DetachL(const RCriteriaArray& aInterest); + + /** + * Removes given interest from the Service Handler. Corresponding service + * providers are unloaded. + * + * @param aInterestResourceId ID of the resource containing criteria items. + * @leave KErrNotSupported CCoeEnv is not accessible. + */ + IMPORT_C void DetachL(TInt aInterestResourceId); + + /** + * Returns criteria by ID. + * + * @param aId Criteria ID. + * @return Criteria item pointer matching the ID. Ownership is not transferred. + */ + IMPORT_C const CLiwCriteriaItem* GetCriteria(TInt aId); + + /** + * Returns an empty instance of CLiwGenericParamList class. It can be + * used for example as an input parameter list for the Service Handler's + * API methods. This is just a convenience method and doesn't have + * to be used. If consumer wants to create input list by itself + * it is ok. If this method is used, the Service Handler takes care + * of deleting returned generic parameter list. + * + * @return An empty instance of CLiwGenericParameter list. + */ + IMPORT_C CLiwGenericParamList& InParamListL(); + + /** + * Returns an empty instance of CLiwGenericParamList class. The instance can be + * used for example as an output parameter list for Service Handler + * API methods. This is just a convenience method and doesn't have + * to be used. If consumer wants to create output list by itself + * it is ok. If this method is used, Service Handler takes care + * of deleting returned generic parameter list. + * + * @return An empty instance of CLiwGenericParameter list. + */ + IMPORT_C CLiwGenericParamList& OutParamListL(); + + public: // Menu handling + + /** + * Initialises menu pane with service commands from a provider. + * This method must be called upon DynInitMenuPaneL of consumer + * application in order to let the provider to hook its menu items. + * + * @param aMenuPane Handle of the menu pane to initialise. + * @param aMenuResourceId The menu to be attached. + * @param aBaseMenuCmdId Base ID for the Service Handler to generate + * menu IDs for placeholders. + * @param aInParamList Input parameter list for provider's parameters checking. + * @leave KErrNotSupported CCoeEnv is not accessible. + * @leave KErrOverflow Consumer application has too many LIW placeholders in its menu. + * Currently, maximum 16 is supported. + */ + IMPORT_C void InitializeMenuPaneL( + CEikMenuPane& aMenuPane, + TInt aMenuResourceId, + TInt aBaseMenuCmdId, + const CLiwGenericParamList& aInParamList); + /** + * Initialises menu pane with service commands from a provider. + * This method must be called upon DynInitMenuPaneL of consumer + * application in order to let the provider to hook its menu items. + * In normal circumstances, the other variant of this method should be used. + * + * @param aMenuPane Handle of the menu pane to initialise. + * @param aMenuResourceId The menu to be attached. + * @param aBaseMenuCmdId Base ID for the Service Handler to generate + * menu IDs for placeholders. + * @param aInParamList Input parameter list for provider's parameters checking. + * @param aUseSubmenuTextsIfAvailable If the provider has specified alternative submenu + * texts for its menu items, those can be taken into use if this + * parameter is set to ETrue. This should be used only for manually + * created submenus. If using LIW_CASCADE_ID or + * LIW_INTELLIGENT_CASCADE_ID, the LIW framework can automatically + * decide whether to use the submenu texts or not, and this parameter + * has no effect. + * @leave KErrNotSupported CCoeEnv is not accessible. + * @leave KErrOverflow Consumer application has too many LIW placeholders in its menu. + * Currently, maximum 16 is supported. + */ + IMPORT_C void InitializeMenuPaneL( + CEikMenuPane& aMenuPane, + TInt aMenuResourceId, + TInt aBaseMenuCmdId, + const CLiwGenericParamList& aInParamList, + TBool aUseSubmenuTextsIfAvailable); + + /** + * Returns the service command ID associated to the menu command. If found, it means + * that there is a provider which can handle the menu command. Thus the command + * handling needs to be routed to the provider via ExecuteMenuCmdL. + * + * @param aMenuCmdId Menu command ID to be mapped to service cmd, + * KNullServiceCmd is returned if no service command exists. + * @return Service command ID, KLiwCmdNone if no ID is found. + * @see ExecuteMenuCmdL + */ + IMPORT_C TInt ServiceCmdByMenuCmd(TInt aMenuCmdId) const; + + /** + * Tells the provider to execute a menu command invoked by the consumer. + * Not supported if calling outside UI framework. Use ServiceCmdByMenuCmd to + * check if there is any provider for the menu command. + * + * @param aMenuCmdId The menu command to be executed. + * @param aInParamList Input data parameters, can be an empty list. + * @param aOutParamList Output data parameters, can be an empty list. + * @param aCmdOptions Options for the command, see TLiwServiceCmdOptions in LiwCommon.hrh. + * @param aCallback Callback for asynchronous command handling, parameter checking, etc. + * @leave KErrArgument Callback is missing when required. + * @leave KErrNotSupported No cmd matches given menu command or CCoeEnv is not accessible. + * @see ServiceCmdByMenuCmd + */ + IMPORT_C void ExecuteMenuCmdL( + TInt aMenuCmdId, + const CLiwGenericParamList& aInParamList, + CLiwGenericParamList& aOutParamList, + TUint aCmdOptions = 0, + MLiwNotifyCallback* aCallback= NULL); + + /** + * Attach menu related criteria items to the given menu. + * If a provider leaves during initialization, it is trapped by the Service Handler. + * + * @param aMenuResourceId Menu to be attached. + * @param aInterestResourceId Resource id for the interest list. + * @leave KErrNotSupported CCoeEnv is not accessible. + */ + IMPORT_C void AttachMenuL(TInt aMenuResourceId, TInt aInterestResourceId); + + /** + * Attach menu related criteria items to the given menu. + * If a provider leaves during initialization, it is trapped by the Service Handler. + * + * @param aMenuResourceId Menu to be attached. + * @param aReader Resource reader for the interest list. + * @leave KErrNotSupported CCoeEnv is not accessible. + */ + IMPORT_C void AttachMenuL(TInt aMenuResourceId, TResourceReader& aReader); + /** + * Attach menu related criteria items to the given menu. + * + * @param aMenuResourceId Menu to be attached. + * @param aInterest Array of criteria items. Ownership is not transferred. + * @leave KErrNotSupported CCoeEnv is not accessible. + */ + IMPORT_C void AttachMenuL(TInt aMenuResourceId, const RCriteriaArray& aInterest); + + /** + * Attach menu related criteria items to the given menu. + * + * @param aMenuEntries List of menu command ids, ids not related to interests may be set to 0. + * @param aMenuResourceId Menu to be attached. + * @param aInterest Interest list. + */ + IMPORT_C void AttachMenuL(RArray& aMenuEntries, TInt aMenuResourceId, RCriteriaArray& aInterest); + + /** + * Detach menu related criteria items from the given menu. + * In following cases this method just returns without doing anything: + * 1. If interest resource id is non-zero and CCoeEnv is not accessible. + * 2. If interest resource id is non-zero and there occurs an error when reading + * the interest (e.g. not enough memory). + * + * @param aMenuResourceId Menu to be detached. + * @param aInterestResourceId Resource id for the interest list. If NULL, all + * criteria items are detached from the given menu. + */ + IMPORT_C void DetachMenu(TInt aMenuResourceId, TInt aInterestResourceId); + + /** + * Checks if there are menu providers attached to given menu id. Consumer + * application can use this information to decide whether a sub menu + * containing only LIW items should be hidden or not. + * + * @param aSubMenuId The menu id to be checked. + * @return ETrue if there isn't any menu providers attached to this menu. + * EFalse otherwise. + */ + IMPORT_C TBool IsSubMenuEmpty(TInt aSubMenuId); + + /** + * Returns boolean value indicating whether the given menu contains + * currently attached placeholders. + * + * @param aMenuResourceId Resource id of the menu to be queried. + * @return ETrue if aMenuResource contains currently attached placeholders. + * EFalse otherwise. + */ + IMPORT_C TBool IsLiwMenu(TInt aMenuResourceId); + + /** + * Handles LIW submenus. This method should be called from consumer application's + * DynInitMenuPaneL. + * + * @param aPane Menu pane to be handled. + * @return ETrue if aPane was an LIW submenu and it was handled. + * Consumer's DynInitMenuPaneL pane may now return. + * EFalse if aPane was not an LIW submenu and DynInitMenuPaneL should + * continue normally. + */ + IMPORT_C TBool HandleSubmenuL(CEikMenuPane& aPane); + + /** + * CEikMenuPane uses this method to inform AIF framework that a menu is launched. + * This method does not need to be called by any other component. + * + * @since Series 60 3.0 + */ + IMPORT_C static void ReportMenuLaunch(); + + public: // Generic Service Command handling + + /** + * Executes a service command for all providers. Otherwise similar to ExecuteMenuCmdL. + * + * @param aCmdId The command to be executed. + * @param aInParamList Input data parameters, can be an empty list. + * @param aOutParamList Output data parameters, can be an empty list. + * @param aCmdOptions Options for the command, see TLiwServiceCmdOptions in LiwCommon.hrh. + * @param aCallback Callback for asynchronous command handling, parameter checking, etc. + * @leave KErrArgument Callback is missing when required. + * @leave KErrNotSupported No provider supports the service. + */ + IMPORT_C void ExecuteServiceCmdL( + const TInt& aCmdId, + const CLiwGenericParamList& aInParamList, + CLiwGenericParamList& aOutParamList, + TUint aCmdOptions = 0, + MLiwNotifyCallback* aCallback = 0); + + /** + * Executes a service command. + * + * @param aCmd The criteria item containing the service command and content type + * @param aInParamList Input data parameters, can be an empty list. + * @param aOutParamList Output data parameters, can be an empty list. + * @param aCmdOptions Options for the command, see TLiwServiceCmdOptions in LiwCommon.hrh. + * @param aCallback Callback for asynchronous command handling, parameter checking, etc. + * @leave KErrArgument Callback is missing when required. + * @leave KErrNotSupported No provider supports the service. + */ + IMPORT_C void ExecuteServiceCmdL( + const CLiwCriteriaItem& aCmd, + const CLiwGenericParamList& aInParamList, + CLiwGenericParamList& aOutParamList, + TUint aCmdOptions = 0, + MLiwNotifyCallback* aCallback = 0); + + /** + * Gets provider command ID by dynamic command ID. + * + * @since Series 60 3.0 + * @param aMenuCmdId The consumer's menu command ID generated by LIW framework. + * This can be get e.g. from consumer's HandleCommandL(). + * @return Found provider menu command ID, KErrNotFound if not found. + */ + IMPORT_C TInt MenuCmdId(TInt aMenuCmdId) const; + + IMPORT_C TInt AttachL(const RCriteriaArray& aInterest,CRTSecMgrScriptSession& aSecMgrScriptSession); + + /** + * Lists available service implementations + * + * @param aFilterItem + * @param aProviderList + * + * @return none + */ + IMPORT_C void QueryImplementationL(RCriteriaArray& aFilterItem, RCriteriaArray& aProviderList); + + private: + void ConstructL(); + CLiwServiceHandler(); + + private: + CLiwServiceHandlerImpl* iImpl; + }; + +#endif // LIW_SERVICE_HANDLER_H + +// END of File diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/liw_service_handler_api/liw_service_handler_api.metaxml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/liw_service_handler_api/liw_service_handler_api.metaxml Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,14 @@ + + +liw_service_handler_api +API for consumer applications to use the LIW framework, referred also as Consumer API. Hides the implementation details, e.g. ECom usage. In addition to this a consumer uses Generic Parameter API and Criteria API. +c++ +languageinterworkingfw + + + + +yes +no + + diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/liw_service_interface_base_api/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/liw_service_interface_base_api/group/bld.inf Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,32 @@ +/* +* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: File that exports the files belonging to +: LIW Service Interface Base API +* +*/ + + + + + + + +#include + +PRJ_PLATFORMS +DEFAULT + +PRJ_EXPORTS + +../inc/LiwServiceIfBase.h MW_LAYER_PLATFORM_EXPORT_PATH(LiwServiceIfBase.h) diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/liw_service_interface_base_api/inc/liwserviceifbase.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/liw_service_interface_base_api/inc/liwserviceifbase.h Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,166 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Declares Base service API for all providers to implement in +* order to offer services to Language Interworking Framework. +* +*/ + + + + + + +#ifndef LIW_SERVICE_IF_BASE_H +#define LIW_SERVICE_IF_BASE_H + +// INCLUDES +#include +#include + +// CONSTANTS + +// MACROS + +// DATA TYPES +/** +* Extension interface UIDs. +*/ +enum TLiwExtendedIf +{ + /* + * Extension interface UID to get service data interface + * + * @see CLiwServiceData + */ + KLiwGetServiceDataIf = 0x102830B2 +}; + +// FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS +class MLiwNotifyCallback; +class CLiwCriteriaItem; +//typedef RPointerArray RCriteriaArray; +class CLiwServiceData; +// CLASS DECLARATION + +/** +* This is the base service interface to access providers that offer base services. +* +* This interface needs to be implemented by all the LIW providers. Base service +* providers should inherit from this class directly. Menu service providers +* should inherit from CLiwServiceIfMenu. +* +* @lib ServiceHandler.lib +* @since Series 60 2.6 +* @see CLiwServiceIfMenu +**/ +class CLiwServiceIfBase : public CBase + { + public: + /** + * Destructor. + */ + IMPORT_C virtual ~CLiwServiceIfBase(); + + /** + * Called by the LIW framework to initialise provider with necessary information + * from the Service Handler. This method is called when the consumer makes + * the attach operation. + * + * @param aFrameworkCallback Framework provided callback for provider to send + * events to framework. + * @param aInterest List of criteria items which invoked the provider. + */ + virtual void InitialiseL( + MLiwNotifyCallback& aFrameworkCallback, + const RCriteriaArray& aInterest) = 0; + + /** + * Executes generic service commands included in criteria. + * + * @param aCmdId Command to be executed. + * @param aInParamList Input parameters, can be an empty list. + * @param aOutParamList Output parameters, can be an empty list. + * @param aCmdOptions Options for the command, see KLiwOpt* in LiwCommon.hrh. + * @param aCallback Callback for asynchronous command handling, parameter checking, etc. + * @leave KErrArgument Callback is missing when required. + * @leave KErrNotSupported No provider supports service. + */ + virtual void HandleServiceCmdL( + const TInt& aCmdId, + const CLiwGenericParamList& aInParamList, + CLiwGenericParamList& aOutParamList, + TUint aCmdOptions = 0, + const MLiwNotifyCallback* aCallback = NULL) = 0; + + /** + * Executes generic service command + * + * @param aCmdName The service command to be executed. + * @param aInParamList Input parameters, can be an empty list. + * @param aOutParamList Output parameters, can be an empty list. + * @param aCmdOptions Options for the command, see KLiwOpt* in LiwCommon.hrh. + * @param aCallback Callback for asynchronous command handling, parameter checking, etc. + * @leave KErrArgument Callback is missing when required. + * @leave KErrNotSupported No provider supports service. + */ + void HandleServiceCmdL( + const TDesC8& aCmdName, + const CLiwGenericParamList& aInParamList, + CLiwGenericParamList& aOutParamList, + TUint aCmdOptions = 0, + const MLiwNotifyCallback* aCallback = NULL) + { + _LIT8(KGenericParamID,"cmd"); + + ((CLiwGenericParamList&)aInParamList).AppendL( + TLiwGenericParam(KGenericParamID, TLiwVariant(aCmdName))); + + HandleServiceCmdL(KLiwCmdAsStr, aInParamList, + aOutParamList, aCmdOptions, aCallback); + } + + + + // Rest of the class is for LIW's internal use and doesn't consern + // service providers. + friend class CLiwServiceHandlerImpl; + friend class CLiwBinding; + friend class CLiwEcomMonitor; + + protected: + IMPORT_C virtual void* ExtensionInterface(TUid aInterface); + + private: + void SetDtorKeyId(TUid aDtorKeyId); + TBool Match(CLiwCriteriaItem* aItem); + void AddCriteria(CLiwCriteriaItem* aItem); + TUid ImplementationUid() const; + void SetImplementationUid(TUid aUid); + TBool HasCriteria(CLiwCriteriaItem& aItem) const; + + private: + TUid iDtorKeyId; + RCriteriaArray iCriterias; + TUid iImplUid; + + // Reserved member + TAny* iReserved; + }; + + +#endif // LIW_SERVICE_IF_BASE_H + +// End of file diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/liw_service_interface_base_api/liw_service_interface_base_api.metaxml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/liw_service_interface_base_api/liw_service_interface_base_api.metaxml Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,14 @@ + + +liw_service_interface_base_api +Base service interface, which needs to be implemented by all the providers. Contains initialization services for the LIW Framework and service command execution. +c++ +languageinterworkingfw + + + + +yes +no + + diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/liw_service_interface_menu_api/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/liw_service_interface_menu_api/group/bld.inf Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,32 @@ +/* +* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: File that exports the files belonging to +: LIW Service Interface Menu API +* +*/ + + + + + + + +#include + +PRJ_PLATFORMS +DEFAULT + +PRJ_EXPORTS + +../inc/LiwServiceIfMenu.h MW_LAYER_PLATFORM_EXPORT_PATH(LiwServiceIfMenu.h) diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/liw_service_interface_menu_api/inc/liwserviceifmenu.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/liw_service_interface_menu_api/inc/liwserviceifmenu.h Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,137 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Declares service API for providers offering menu services for +* consumers. +* +*/ + + + + + + +#ifndef LIW_SERVICE_IF_MENU_H +#define LIW_SERVICE_IF_MENU_H + +// INCLUDES +#include + +// CONSTANTS + +// MACROS + +// DATA TYPES + +// FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS +class CLiwMenuPane; + +// CLASS DECLARATION + +/** +* This is the menu service interface to access providers that offer menu services. +* +* Menu service providers should inherit this class. Providers offering +* only base services should inherit CLiwServiceIfBase instead. +* +* @lib ServiceHandler.lib +* @since Series 60 2.6 +* @see CLiwServiceIfBase +**/ +class CLiwServiceIfMenu: public CLiwServiceIfBase + { + public: + /** + * Destructor. + */ + IMPORT_C virtual ~CLiwServiceIfMenu(); + + /** + * Provider should implement this method to initialise a menu pane by adding + * provider specific menu items. The LIW framework gives the parameters to be + * used in the addition process. + * + * @param aMenuPane Menu pane handle. + * @param aIndex The position of the item where to add menu items. + * @param aCascadeId ID of cascade menu item. + * @param aInParamList Input parameter list for provider's parameter checking. + */ + virtual void InitializeMenuPaneL( + CLiwMenuPane& aMenuPane, + TInt aIndex, + TInt aCascadeId, + const CLiwGenericParamList& aInParamList) = 0; + + /** + * Provider should implement this method to handle a menu command. Called by the + * Service Handler when a consumer calls ExecuteMenuCmdL(). + * + * @param aMenuCmdId Original provider specific ommand ID for the menu command. + * Defined in the provider's menu item resource. + * @param aInParamList Input parameters, can be an empty list. + * @param aOutParamList Output parameters, can be an empty list. + * @param aCmdOptions Options for the command, see KLiwCmdOpt* in LiwCommon.hrh. + * @param aCallback Callback if asynchronous command handling is wanted by consumer. + * The provider may or may not support this. A provider should + * leave with KErrNotSupported, if not. + * @leave KErrNotSupported Callback is not supported. + */ + virtual void HandleMenuCmdL( + TInt aMenuCmdId, + const CLiwGenericParamList& aInParamList, + CLiwGenericParamList& aOutParamList, + TUint aCmdOptions = 0, + const MLiwNotifyCallback* aCallback = NULL) = 0; + + /** + * Returns current LIW menu pane for this menu service provider. + * + * @return Pointer to the current LIW menu pane object. + */ + IMPORT_C const CLiwMenuPane* MenuPane() const; + + protected: + IMPORT_C virtual void* ExtensionInterface(TUid aInterface); + + private: + // Rest of the class is for LIW's internal use and doesn't consern + // service providers. + friend class CLiwServiceHandlerImpl; + + void InitializeMenuPaneHookL( + CLiwMenuPane* aMenuPane, + TInt aIndex, + TInt aCascadeId, + const CLiwGenericParamList& aInParamList); + + void HandleMenuCmdHookL( + CLiwMenuPane* aMenuPane, + TInt aMenuCmdId, + const CLiwGenericParamList& aInParamList, + CLiwGenericParamList& aOutParamList, + TUint aCmdOptions = 0, + const MLiwNotifyCallback* aCallback = NULL); + + private: + CLiwMenuPane* iMenuPane; // Not owned. + + // Reserved member + TAny* iSpare; + }; + + +#endif // LIW_SERVICE_IF_MENU_H + +// End of file diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/liw_service_interface_menu_api/liw_service_interface_menu_api.metaxml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/liw_service_interface_menu_api/liw_service_interface_menu_api.metaxml Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,14 @@ + + +liw_service_interface_menu_api +Menu interface, which need to be implemented by those providers hooking into menu items of consumer applications. Contains initialization and command handling methods that relate to menu UI element. +c++ +languageinterworkingfw + + + + +yes +no + + diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/rtsecuritymanager_client_api/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/rtsecuritymanager_client_api/group/bld.inf Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,33 @@ +/* +* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Build file for rtsecurity manager client API +* +*/ + + + + + + + +#include + +PRJ_PLATFORMS +DEFAULT + +PRJ_EXPORTS +../inc/rtsecmanager.h MW_LAYER_PLATFORM_EXPORT_PATH(rtsecmanager.h) +../inc/rtsecmgrscriptsession.h MW_LAYER_PLATFORM_EXPORT_PATH(rtsecmgrscriptsession.h) +../inc/rtsecmgrtrustinfo.h MW_LAYER_PLATFORM_EXPORT_PATH(rtsecmgrtrustinfo.h) + diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/rtsecuritymanager_client_api/inc/rtsecmanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/rtsecuritymanager_client_api/inc/rtsecmanager.h Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,300 @@ +/* +* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Defines Runtime security manager's core class. Defines + * APIs for runtime bindings and clients to access security + * management functionalities + * +*/ + + + + + + +#ifndef _CRTSECMANAGER_H +#define _CRTSECMANAGER_H + +#include + +#include +#include + +class CRTSecMgrScriptSession; +class MSecMgrPromptHandler; +class CRTSecMgrClientProxy; +class CTrustInfo; +class CPermission; + +/** + * Core class of the runtime recurity manager component. + * + * Runtime security manager broadly offers + * + * - Policy management functions + * - Script management functions + * - Access permission check + * + * CRTSecManager offers methods to perform policy management functionalities + * such as + * - Registering runtime security access policy + * - Updating the registered security access policy + * - Un-registering the registered security access policy + * + * Similarly, CRTSecManager offers methods for script management such as + * - Registering a runtime script with security manager + * - Un-registering the registered script + * - Obtaining scipt session associated with the registered script + * + * The main functionality of CRTSecManager is to perform access permission + * check using script session functions + * + * @lib rtsecmgrclient.lib + */ +NONSHARABLE_CLASS(CRTSecManager) : public CBase + { +public: + + /** + * Two-phased constructor + * + * Constructs a CRTSecManager instance + * + * Initializes client side security manager session. Starts the security + * manager server, if it is not already running. + * + * @return pointer to an instance of CRTSecManager + */ + IMPORT_C static CRTSecManager* NewL(); + + /** + * Two-phased constructor + * + * Constructs a CRTSecManager instance and leaves the created instance + * onto the cleanupstack. + * + * Initializes client side security manager session. Starts the security + * manager server, if it is not already running. + * + * @return pointer to an instance of CRTSecManager + */ + IMPORT_C static CRTSecManager* NewLC(); + + /** + * Destructor + * + * Closes client side security manager session + */ + IMPORT_C ~CRTSecManager(); + + /** + * Registers a runtime security policy. Runtimes should call this function + * to register their security access and trust policies. + * + * @param aSecPolicy RFile Handle to security policy file + * + * @return TPolicyID generated policy identifier if successul; Otherwise one of + * system wide error codes + * + * \note + * Clients should call ShareProtected on the file session object as shown below. + * + * @code * + * RFs fileSession; + * fileSession.Connect(); + * fileSession.ShareProtected(); //Mandatorily call before invoking SetPolicy + * + * RFile secPolicyFile; + * secPolicyFile.Open(fileSession, _L("AccessPolicy.xml"), EFileShareAny ); + * TPolicyID policyID = secMgr->SetPolicy(secPolicyFile); + * + * if(policyID <= KErrNone) + * { + * //error.. + * } + * + * @endcode + * + */ + IMPORT_C TPolicyID SetPolicy(const RFile& aSecPolicy); + + /** + * Registers a runtime security policy. Runtimes should call this function + * to register their security access and trust policies. + * + * @param aPolicyBuffer const TDesC& security policy file buffer + * + * @return TPolicyID generated policy identifier if successul; Otherwise one of + * system wide error codes + * + * \note + * Clients should call ShareProtected on the file session object as shown below. + * + * @code * + * RFs fileSession; + * fileSession.Connect(); + * fileSession.ShareProtected(); //Mandatorily call before invoking SetPolicy + * + * RFile secPolicyFile; + * secPolicyFile.Open(fileSession, _L("AccessPolicy.xml"), EFileShareAny ); + * HBufC8* fileBuffer = HBufC8::NewL(KFileBufferMaxLen); + * secPolicyFile.Read(*fileBuffer); + * + * TPolicyID policyID = secMgr->SetPolicy(*fileBuffer); + * + * if(policyID <= KErrNone) + * { + * //error.. + * } + * + * @endcode + * + */ + IMPORT_C TPolicyID SetPolicy(const TDesC8& aPolicyBuffer); + + /** + * UnRegisters a registered security policy. Runtimes should call this function + * to de-register the already registered security policy. + * + * @param aPolicyID TPolicyID Policy identifier previously generated with SetPolicy + * + * @return TInt One of sytem wide error codes in case of failure; Otherwise KErrNone + * + */ + IMPORT_C TInt UnSetPolicy(TPolicyID aPolicyID); + + /** + * Updates an already registered security policy. Runtimes should call this function + * to update their policy. + * + * @param aPolicyID TPolicyID Policy identifier previously generated with SetPolicy + * @param aSecPolicy RFile Handle to security policy file + * + * @see SetPolicy for file session pre-conditions + * + * @return TPolicyID One of sytem wide error codes in case of failure; Otherwise the passed policyID + * + */ + IMPORT_C TPolicyID UpdatePolicy(TPolicyID aPolicyID,const RFile& aSecPolicy); + + /** + * Updates an already registered security policy. Runtimes should call this function + * to update their policy. + * + * @param aPolicyID TPolicyID Policy identifier previously generated with SetPolicy + * @param aPolicyBuffer const TDesC& security policy file buffer + * + * @see SetPolicy for file session pre-conditions + * + * @return TPolicyID One of sytem wide error codes in case of failure; Otherwise the passed policyID + * + */ + IMPORT_C TPolicyID UpdatePolicy(TPolicyID aPolicyID,const TDesC8& aPolicyBuffer); + + /** + * Registers a script/executable. Runtimes should specify the trust information + * of the script to be registered. + * + * @param aPolicyID TPolicyID Runtime's registered policy identifier + * @param aTrustInfo CTrustInfo a valid instance of CTrustInfo object + * + * @return TExecutableID generated executable identifier if successul; Otherwise one of + * system wide error codes + * + */ + IMPORT_C TExecutableID RegisterScript(TPolicyID aPolicyID, const CTrustInfo& aTrustInfo); + + /** + * Registers a script/executable. Runtimes should specify the trust information + * of the script to be registered. + * + * @param aPolicyID TPolicyID Runtime's registered policy identifier + * @param aHashMarker const TDesC& Hash value to identify script when starting script session + * @param aTrustInfo CTrustInfo a valid instance of CTrustInfo object + * + * @return TExecutableID generated executable identifier if successul; Otherwise one of + * system wide error codes + * + */ + IMPORT_C TExecutableID RegisterScript(TPolicyID aPolicyID, const TDesC& aHashMarker, const CTrustInfo& aTrustInfo); + + /** + * De-Registers a script/executable. Runtimes should pass the previously registered + * script identifier corresponding to the script to be de-registered. + * + * @param aExeID TExecutableID A valid script identifier + * + * @return TInt One of sytem wide error codes in case of failure; Otherwise KErrNone + * + */ + IMPORT_C TInt UnRegisterScript(TExecutableID aExeID, TPolicyID aPolicyID); + + /** + * Creates a script session instance. CRTSecMgrScriptSession performs access permission + * check for native platform service invocation. A CRTSecMgrScriptSession instance needs to + * be created for every instance of scripts which could potentially invoke platform service. + * + * @param aPolicyID TPolicyID Valid registered policy identifier + * @param aExeID TExecutableID Script identifier, KAnonymousScript in case of anonymous script session + * @param aPromptHdlr MSecMgrPromptHandler An optional prompt handler. If not provided, Security manager + * will supply a default prompt handler + * + * @return CRTSecMgrScriptSession* A pointer to the created instance of CRTSecMgrScriptSession if the executableID is valid; + * Otherwise NULL + */ + IMPORT_C CRTSecMgrScriptSession* GetScriptSessionL(TPolicyID aPolicyID, TExecutableID aExecID, MSecMgrPromptHandler* aPromptHdlr=NULL , const TDesC& aHashValue = KNullDesC); + + /** + * Creates a script session instance for an unregisterd trusted script. CRTSecMgrScriptSession performs access permission + * check for native platform service invocation. + * + * @param aPolicyID TPolicyID Valid registered policy identifier + * @param aTrustInfo CTrustInfo a valid instance of CTrustInfo object + * @param aPromptHdlr MSecMgrPromptHandler An optional prompt handler. If not provided, Security manager + * will supply a default prompt handler + * + * @return CRTSecMgrScriptSession* A pointer to the created instance of CRTSecMgrScriptSession; + * NULL in case of invalid policy identifier + * + * + */ + IMPORT_C CRTSecMgrScriptSession* GetScriptSessionL(TPolicyID aPolicyID, const CTrustInfo& aTrustInfo, MSecMgrPromptHandler* aPromptHdlr=NULL); + + /** + * Creates a script session instance. CRTSecMgrScriptSession performs access permission + * check for native platform service invocation. A CRTSecMgrScriptSession instance needs to + * be created for every instance of scripts which could potentially invoke platform service. + * + * @param aPolicyID TPolicyID Valid registered policy identifier + * @param aExeID TExecutableID Script identifier, KAnonymousScript in case of anonymous script session + * @param aHashValue TDesC hash value passed while registering the script + * @param aPromptHdlr MSecMgrPromptHandler An optional prompt handler. If not provided, Security manager + * will supply a default prompt handler + * + * @return CRTSecMgrScriptSession* A pointer to the created instance of CRTSecMgrScriptSession if the executableID is valid; + * Otherwise NULL + + IMPORT_C CRTSecMgrScriptSession* GetScriptSession(TPolicyID aPolicyID, TExecutableID aExecID, const TDesC& aHashValue, MSecMgrPromptHandler* aPromptHdlr=NULL);*/ +private: + //Private default constructor + CRTSecManager(); + + //Part of second-phase constructor + void ConstructL(); + +private: + //Proxy to client side session object + CRTSecMgrClientProxy* iClientProxy; + }; +#endif //_CRTSECMANAGER_H + diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/rtsecuritymanager_client_api/inc/rtsecmgrscriptsession.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/rtsecuritymanager_client_api/inc/rtsecmgrscriptsession.h Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,593 @@ +/* +* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Client side proxy class representing script session + * +*/ + + + + + + + +#ifndef _CRTSECMGRSCRIPTSESSION_H_ +#define _CRTSECMGRSCRIPTSESSION_H_ + +#include +#include +#include +#include +#include + +class CCoeEnv; +class CRTSecMgrSubSessionProxy; + +/** + * Type holding data to be used while prompting. + * + * The default or custom (runtime over-ridden) prompt handler requires the permission + * type to prompt and the user-selection to be returned to security + * manager for access permission check + * + * @lib rtsecmgrclient.lib + */ +class CPromptData : public CBase + { +public: + + /** + * Two-phased constructor + * + * Constructs a CPromptData instance + * + * @return pointer to an instance of CPromptData + */ + static CPromptData* NewL() + { + CPromptData* self = CPromptData::NewLC (); + CleanupStack::Pop (self); + return self; + } + + /** + * Two-phased constructor + * + * Constructs a CPromptData instance and leaves the created instance + * onto the cleanupstack. + * + * @return pointer to an instance of CPromptData + */ + + static CPromptData* NewLC() + { + CPromptData* self = new (ELeave) CPromptData(); + CleanupStack::PushL (self); + self->ConstructL (); + return self; + } + + + /** + * Destructor + * + */ + ~CPromptData() + { + if(iPermission) + delete iPermission; + + } + + + /* + * + * + */ + void ConstructL() + { + + } + + /** + * Returns permission data + * + * @return an object containing the permission data + */ + inline CPermission* Permission() const + { + return iPermission; + } + + /** + * Sets the user-selection data + * + * @param aUserSelection TUserPromptOption user-selected data value + */ + inline void SetUserSelection(TUserPromptOption aUserSelection) + { + iUserSelection = aUserSelection; + } + + /** + * Sets the permission value of the domain + * + * @param aPermission CPermission permission value of the domain + */ + + inline void SetPermissions(CPermission& aPermission) + { + if(iPermission) + { + delete iPermission; + iPermission = NULL; + } + + iPermission = CPermission::NewL(aPermission); + //iPermission = &aPermission; + } +private: + //private default constructor + CPromptData::CPromptData() : + iUserSelection(RTUserPrompt_UnDefined) + { + } + + //private permission data + CPermission* iPermission; + + //private user-selection + TUserPromptOption iUserSelection; + + friend class CRTSecMgrScriptSession; + }; + +//typdef to model list of prompt data structure +typedef RPointerArray RPromptDataList; + +/* + * Prompt callback handler class. + * + * Runtimes should implement the prompt handler function to prompt the user + * and to obtain the user option chosen. The prompt data are used by + * runtime security manager for further access permission check. + * + * If runtimes do not override prompt handling, security manager component + * would then provide default prompt handler functionality. + * + * @lib rtsecmgrclient.lib + */ +class MSecMgrPromptHandler + { +public: + /** + * Prompts the user. + * + * @param aPromptDataList RPromptDataList list of prompt data used by + * prompt callback handler to show to the user + * + * @return KErrNone if prompting successful; In case of failure, one of + * system wide error codes + */ + virtual TInt Prompt(RPromptDataList& aPromptDataList , TExecutableID aExecID = KAnonymousScript) =0; + + /** + * Sets the user chosen prompt selection. + * + * @param aPromptUiOption TSecMgrPromptUIOption prompt selection + */ + virtual void SetPromptOption(TSecMgrPromptUIOption aPromptUiOption) =0; + /** + * Returns the prompt selection + * + * @return TSecMgrPromptUIOption the prompt selection + */ + virtual TSecMgrPromptUIOption PromptOption() const =0; + }; + +/** + * + * Thin proxy to the client side sub-session handle. + * + * This class implements the default prompt handling functionality. In addition, the main + * functionality of native platform access check is performed by CRTSecMgrScriptSession. + * + * @lib rtsecmgrclient.lib + * + */ +NONSHARABLE_CLASS(CRTSecMgrScriptSession) : public CBase, MSecMgrPromptHandler + { +public: + /** + * Two-phased constructor + * + * Constructs a CRTSecMgrScriptSession instance + * + * Initializes client side script sub-session. + * + * @param MSecMgrPromptHandler pointer to a prompt handler callback + * + * @return pointer to an instance of CRTSecMgrScriptSession if succesful; + * Otherwise NULL + */ + static CRTSecMgrScriptSession* NewL(MSecMgrPromptHandler* aPromptHdlr=0); + + /** + * Two-phased constructor + * + * Constructs a CRTSecMgrScriptSession instance and leaves the created instance + * on the cleanupstack + * + * Initializes client side script sub-session. + * + * @param MSecMgrPromptHandler pointer to a prompt handler callback + * + * @return pointer to an instance of CRTSecMgrScriptSession if succesful; + * Otherwise NULL + */ + static CRTSecMgrScriptSession* NewLC(MSecMgrPromptHandler* aPromptHdlr=0); + + /** + * Callback funciton for moreinfo link in advanced prompt + * + * Calls the moreinfo function for indivudual capability or for a alias group + * + * @param aCallbackParam TAny* pointer to TCallbackParam + * + */ + static TInt LinkCallback(TAny *aCallbackParam); + + /** + * Destructor + * + * Closes the sub-session + * + */ + IMPORT_C ~CRTSecMgrScriptSession(); + + /** + * Opens security manager script sub-session. This method in turn opens a + * sub-session on the server side, by bringing script related data onto the cache. + * + * @param aParentSession RSessionBase handle to parent security manager session + * @param aPolicyID TPolicyID policy identifier of the script associated with this script session + * @param aExecID TExecutableID identifier of the script associated with this script session + * + * @return KErrNone if successful; In case of failure, one of system wide error cods + */ + TInt Open(const RSessionBase& aParentSession,TPolicyID aPolicyID,TExecutableID aExecID); + + /** + * Opens security manager script sub-session. This method in turn opens a + * sub-session on the server side, by bringing script related data onto the cache. + * + * @param aParentSession RSessionBase handle to parent security manager session + * @param aPolicyID TPolicyID policy identifier of the script associated with this script session + * @param aExecID TExecutableID identifier of the script associated with this script session + * @param aHashValue TDesC hash value of the scrpt passed while registering the script + * + * @return KErrNone if successful; In case of failure, one of system wide error cods + */ + TInt Open(const RSessionBase& aParentSession,TPolicyID aPolicyID,TExecutableID aExecID,const TDesC& aHashValue); + + /** + * Opens security manager script sub-session. This method in turn opens a + * sub-session on the server side, by bringing script related data onto the cache. + * + * @param aParentSession RSessionBase handle to parent security manager session + * @param aPolicyID TPolicyID policy identifier of the script associated with this script session + * @param aExecID TExecutableID identifier of the script associated with this script session + * @param aTrustInfo CTrustInfo trust data structure + * + * @return KErrNone if successful; In case of failure, one of system wide error cods + */ + TInt Open(const RSessionBase& aParentSession,TPolicyID aPolicyID,TExecutableID aExecID,const CTrustInfo& aTrustInfo); + + /** + * Performs access permission check + * + * This method evaluates access permission by comparing the expected capabilities + * to perform service invocation with the capabilities of the script. The + * capabilities of the script is computed as sum of : + * + * - default allowed capabilities as specified in security access policy + * - user-granted capabilities, allowed by user while prompting + * + * The capabilities allowed by the user could be of various durations, like + * session-based, blanket/permanent and the one valid for the current invocation only + * (one-shot) + * + * @param aCapabilitiesToCheck RCapabilityArray list of capabilities to be checked against + * script's capbilities + * + * @return EAccessOk if the access permission check is successful; Else, EAccessNOk + */ + IMPORT_C TInt IsAllowed(const RCapabilityArray& aCapabilitiesToCheck); + + /** + * Performs access permission check + * + * This overloaded method evaluates access permission by comparing the expected capabilities + * to perform service invocation with the capabilities of the script. The + * capabilities of the script is computed as sum of : + * + * - default allowed capabilities as specified in security access policy + * - user-granted capabilities, allowed by user while prompting + * + * The capabilities allowed by the user could be of various durations, like + * session-based, blanket/permanent and the one valid for the current invocation only + * (one-shot) + * + * This overloaded version returns the list of capabilities that do not match after + * access permission check. This can be used by the client to display to the user the + * list of unmatched capabilities + * + * @param aCapabilitiesToCheck RCapabilityArray list of capabilities to be checked against + * script's capbilities + * @param aUnMatchedCapabilities RCapabilityArray list of unmatched capabilities + * + * @return EAccessOk if the access permission check is successful; Else, EAccessNOk + */ + IMPORT_C TInt IsAllowed(const RCapabilityArray& aCapabilitiesToCheck,RCapabilityArray& aUnMatchedCapabilities); + + /** + * Definition of default prompt handler. + * + * @param aPromptDataList RPromptDataList list of prompt data used by + * prompt callback handler to show to the user + * + * @return KErrNone if prompting successful; In case of failure, one of + * system wide error codes + * + */ + TInt Prompt(RPromptDataList& aPromptDataList , TExecutableID aExecID = KAnonymousScript); + + /** + * Definition of cost notification. + * + */ + void PromptCostL() ; + + /** + * Gets the underlying script object + * + * This method is to be used by components, such as application manager, + * that are interested in displaying script related information to the user. + * + * Following are the script related information: + * + * - Capabilities allowed by default + * - User-grantable capabilities + * - Currently allowed or denied blanket permissions + * + * Note that this method should not be used by runtimes unless and until there is + * a strong design justification + * + * @return a reference to underlying script object + */ + inline CScript& CRTSecMgrScriptSession::Script() + { + return *iScript; + } + + /** + * Returns prompt handler reference + * + * @return reference to prompt handler + */ + inline MSecMgrPromptHandler* PromptHandler() const + { + return iPromptHdlr; + } + + /** + * Sets prompt UI option. The supported prompt options are : + * + * - Basic/Default + * - Advanced + * + * The difference between the basic and advanced prompt option + * reisdes in the fact the number of prompt options and the corresponding + * prompt texts displayed would be different. + * + * If not explictly, the default prompt UI option is set to basic/default prompt UI. + * + * @param aUIPromptOption TSecMgrPromptUIOption basic/advanced prompt UI option + */ + inline void SetPromptOption(TSecMgrPromptUIOption aUIPromptOption) + { + iUIPromptOption = aUIPromptOption; + } + + /** + * Gets prompt UI option. The supported prompt options are : + * + * - Basic/Default + * - Advanced + * + * The difference between the basic and advanced prompt option + * reisdes in the fact the number of prompt options and the corresponding + * prompt texts displayed would be different. + * + * @return aUIPromptOption TSecMgrPromptUIOption basic/advanced prompt UI option + */ + inline TSecMgrPromptUIOption PromptOption() const + { + return iUIPromptOption; + } + +private: + /* + * Default private constructor + * + */ + CRTSecMgrScriptSession(MSecMgrPromptHandler* aPromptHdlr=0); + + /* + * Two phased constructor + * + */ + void ConstructL(); + + /* + * Contains prompt logic + * + */ + TInt Prompt(CPromptData* aPromptData); + + /* + * Private default implementation for advanced prompt UI option + * + */ + TInt PromptAdvanced(CPromptData* aPromptData); + + /* + * Logic for displaying more inormation when the user selects more info + * + */ + TInt MoreInfoL(CPromptData& aPromptData); + + /* + * Logic identifying the user-selection of prompt + * duration + * + */ + void HandleGrantChosen(CPromptData* aPromptData, + TCapabilityBitSet aCapBitSet, TCapabilityBitSet& aAllowedCaps, + TBool& aIsPermGrantModified); + + /* + * Private implementation to update blanket permission data + * + */ + void UpdatePermGrant(); + + /* + * Conversion utility to convert a single 32-bit value to the list of + * capabilities (RArray) + * + */ + void BuildCapsL(TCapabilityBitSet aCapBitSet, RCapabilityArray& aInOutTCapList); + + /* + * Private implementation to evaluate access permission check + * + */ + TInt IsAllowed(const RCapabilityArray& aCapsToCheck,RPromptDataList& aPromptDataList,TCapabilityBitSet& aUnMatchedCapBits); + + /* + * Private implementation to evaluate access permission check. This + * overloaded version additionally returns the unmatched capabilities + * + */ + TInt IsAllowed(const RCapabilityArray& aCapsToCheck,TCapabilityBitSet& aUnMatchedCapBits); + + /* + * Conversion utility to generate an unsigned 32-bit value toggling the individual bits + * to the corresponding TCapability value + * + */ + void AddCapability(TCapabilityBitSet& aInOutCapBitSet, TCapability aCapToSet); + + /* + * Attempts to close the script sub-session + * + */ + void Close(); + + void AddResourceFiles(); + void CloseResourceFiles(); + +private: + /* + * permissions allowed or denied for the current session + * The lifetime of this data structure is associated + * with this script session + * + */ + struct + { + TCapabilityBitSet AllowedCaps; //caps allowed for this session (caps allowed for this session & perm allowed) + TCapabilityBitSet DeniedCaps; //caps denied for this sesion (caps denied for this session & perm denied) + }_sessionInfo; + + /* + * anonymous enumerations for selection index + * + */ + enum + { + PROMPT_SELIDX_ZERO = 0, + PROMPT_SELIDX_ONE = PROMPT_SELIDX_ZERO + 1, + PROMPT_SELIDX_TWO = PROMPT_SELIDX_ZERO + 2, + PROMPT_SELIDX_THREE = PROMPT_SELIDX_ZERO + 3, + PROMPT_SELIDX_FOUR = PROMPT_SELIDX_ZERO + 4, + PROMPT_SELIDX_FIVE = PROMPT_SELIDX_ZERO + 5 + }; + + /* + * private script reference + * + */ + CScript* iScript; + + /* + * permanently allowed capability bits + * + */ + TPermGrant iPermBits; //perm allowed caps, persistently stored for this script + + /* + * permanently denied capability bits + * + */ + TPermGrant iDeniedBits; //perm denied caps, persistently stored for this script + + /* + * reference to prompt handler instance + * + */ + MSecMgrPromptHandler* iPromptHdlr; + + /* + * sub-session proxy pointer + * + */ + CRTSecMgrSubSessionProxy* iSubSessionProxy; + + /* + * pointer to Coe environment + */ + CCoeEnv* iCoeEnv; + + /* + * security manager resource file offset value + * + */ + TInt iResourceOffset; + + /* + * Prompt UI option + * + */ + TSecMgrPromptUIOption iUIPromptOption; + + /* + * Custom prompt flag + * + */ + TBool isCustomPrompt; + }; + +#endif //_CRTSECMGRSCRIPTSESSION_H_ + diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/rtsecuritymanager_client_api/inc/rtsecmgrtrustInfo.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/rtsecuritymanager_client_api/inc/rtsecmgrtrustInfo.h Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,78 @@ +/* +* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Models trust information + * +*/ + + + + + + + +#ifndef _CTRUSTINFO_H_ +#define _CTRUSTINFO_H_ + +#include + +/** + * CTrustInfo models trust data structure. + * + * The runtime security manager evaluates trustedness of a + * runtime content/script/executable based on the trust information + * passed by runtimes. The definition of this type is currently + * incomplete, with state information such as + * + * - Origin of the script + * - Certificate chain of the signed trusted contents + * + * @lib rtsecmgrclient.lib + */ +NONSHARABLE_CLASS(CTrustInfo) : public CBase + { +public: + /** + * Two-phased constructor + * + * Constructs a CTrustInfo instance + * + * @return pointer to an instance of CTrustInfo + */ + IMPORT_C static CTrustInfo* NewL(); + + /** + * Two-phased constructor + * + * Constructs a CTrustInfo instance and leaves the created instance + * on the cleanupstack + * + * @return pointer to an instance of CTrustInfo + */ + IMPORT_C static CTrustInfo* NewLC(); + + /** + * Destructor + * + */ + IMPORT_C ~CTrustInfo(); +private: + /* + * Default private constructor + */ + CTrustInfo(); + }; + +#endif //_CTRUSTINFO_H_ + +// End of file diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/rtsecuritymanager_client_api/rtsecuritymanager_client_api.metaxml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/rtsecuritymanager_client_api/rtsecuritymanager_client_api.metaxml Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,14 @@ + + +rtsecuritymanager client api +rtsecuritymanager client API +c++ +rtsecuritymanager + + + + +no +no + + diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/rtsecuritymanager_client_api/tsrc/bwins/ui_tsecuritymanageru.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/rtsecuritymanager_client_api/tsrc/bwins/ui_tsecuritymanageru.def Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,3 @@ +EXPORTS + ?LibEntryL@@YAPAVCScriptBase@@AAVCTestModuleIf@@@Z @ 1 NONAME ; class CScriptBase * LibEntryL(class CTestModuleIf &) + diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/rtsecuritymanager_client_api/tsrc/conf/ui_tsecuritymanager.cfg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/rtsecuritymanager_client_api/tsrc/conf/ui_tsecuritymanager.cfg Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,373 @@ +//1 +[Test] +title Simulate KeyDown event +pause 1000 +presskey global EKeyDownArrow +pause 1000 +presskey global EKeyDevice0 +[Endtest] + +//2 +[Test] +title secclient1 setpolicy buffer nohash buffer1000 +bringtoforeground +create ui_tsecuritymanager foobar +foobar secclient1 buffer1000 Buffer nohash +delete foobar +sendtobackground +[Endtest] + +//3 +[Test] +title secclient1 setpolicy file nohash buffer1000 +bringtoforeground +create ui_tsecuritymanager foobar +foobar secclient1 buffer1000 File nohash +//foobar secclient1 +delete foobar +sendtobackground +[Endtest] + + + +//4 +[Test] +title secclient1 setpolicy buffer hash buffer1000 +bringtoforeground +create ui_tsecuritymanager foobar +foobar secclient1 buffer1000 Buffer hash +delete foobar +sendtobackground +[Endtest] + +//5 +[Test] +title secclient1 setpolicy file hash buffer1000 +bringtoforeground +create ui_tsecuritymanager foobar +foobar secclient1 buffer1000 File hash +delete foobar +sendtobackground +[Endtest] + +//6 +[Test] +title secclient2 2 crtsecmanager sessions +bringtoforeground +create ui_tsecuritymanager foobar +foobar secclient2 pa ra me ters +delete foobar +sendtobackground +[Endtest] + +//7 +[Test] +title secclient3 using unsetpolicy id +bringtoforeground +create ui_tsecuritymanager foobar +foobar secclient3 pa ra me ters +delete foobar +sendtobackground +[Endtest] + +//8 +[Test] +title secclient4 using unregister sript +bringtoforeground +create ui_tsecuritymanager foobar +foobar secclient4 pa ra me ters +delete foobar +sendtobackground +[Endtest] + + +//9 +[Test] +title secclient5 creating instance 1000 times +bringtoforeground +create ui_tsecuritymanager foobar +foobar secclient5 pa ra me ters +delete foobar +sendtobackground +[Endtest] + + +//10 +[Test] +title secclient6 unregister twice +bringtoforeground +create ui_tsecuritymanager foobar +foobar secclient6 pa ra me ters +delete foobar +sendtobackground +[Endtest] + +//11 +[Test] +title secclient7 updatepolicy with setpolicy gsswithtrust +bringtoforeground +create ui_tsecuritymanager foobar +foobar secclient7 gsswithtrust +delete foobar +sendtobackground +[Endtest] + +//12 +[Test] +title secclient7 updatepolicy with setpolicy gsswithouttrust +bringtoforeground +create ui_tsecuritymanager foobar +foobar secclient7 gsswithouttrust +delete foobar +sendtobackground +[Endtest] + + + //13 +[Test] +title secclient8 update policy buffer registerscript +bringtoforeground +create ui_tsecuritymanager foobar +foobar secclient8 Buffer registerscript +delete foobar +sendtobackground +[Endtest] + + + +//14 +[Test] +title secclient8 update policy buffer file noregisterscript +bringtoforeground +create ui_tsecuritymanager foobar +foobar secclient8 File noregisterscript +delete foobar +sendtobackground +[Endtest] + + +//15 +[Test] +title secclient8 update policy buffer noregisterscript +bringtoforeground +create ui_tsecuritymanager foobar +foobar secclient8 Buffer noregisterscript +delete foobar +sendtobackground +[Endtest] + +//16 +[Test] +title secclient8 update policy buffer file registerscript +bringtoforeground +create ui_tsecuritymanager foobar +foobar secclient8 File registerscript +delete foobar +sendtobackground +[Endtest] + +//17 +[Test] +title serverstart1 testcase +bringtoforeground +create ui_tsecuritymanager foobar +foobar serverstart1 pa ra me ters +delete foobar +sendtobackground +[Endtest] + +//18 +[Test] +title secclient9 +bringtoforeground +create ui_tsecuritymanager foobar +foobar secclient9 hash +delete foobar +sendtobackground +[Endtest] + + +//19 +[Test] +title secclient9_2 +bringtoforeground +create ui_tsecuritymanager foobar +foobar secclient9 nohash +delete foobar +sendtobackground +[Endtest] + + + + +//20 +[Test] +title Simulate KeyDown event +pause 1000 +presskey global EKeyUpArrow +pause 1000 +presskey global EKeyDevice0 +[Endtest] + + +//21 +[Test] +title Simulate KeyDown event +pause 1000 +presskey global EKeyDownArrow +pause 1000 +presskey global EKeyDownArrow +pause 3000 +presskey global EKeyDownArrow +pause 3000 +presskey global EKeyDevice0 + +[Endtest] + +//22 +[Test] +title Simulate KeyDown event +bringtoforeground +pause 2000 +presskey global EKeyDevice0 +pause 2000 +presskey global EKeyDevice0 +sendtobackground +[Endtest] + + + //23 +[Test] +title secclient8 update policy buffer file registerscript advancedprompt +bringtoforeground +create ui_tsecuritymanager foobar +foobar secclient8 File registerscript advancedprompt +delete foobar +sendtobackground +[Endtest] + + +//24 +[Test] +title Simulate KeyDown event +pause 2000 +presskey global EKeyEnter +pause 2000 +presskey global EKeyEnter +[Endtest] + + +//25 +[Test] +title secclient10 update policy buffer file registerscript +bringtoforeground +create ui_tsecuritymanager foobar +foobar secclient10 File registerscript +delete foobar +sendtobackground +[Endtest] + + +//26 +[Test] +title Simulate KeyDown event +pause 2000 +presskey global EKeyDownArrow +pause 2000 +presskey global EKeyDevice0 +pause 2000 +presskey global EKeyDevice0 +//pause 2000 +//presskey global EKeyDownArrow +pause 2000 +presskey global EKeyDevice0 + +[Endtest] + + +//27 +[Test] +title secclient11 +bringtoforeground +create ui_tsecuritymanager foobar +foobar secclient11 buffer1000 Buffer nohash +delete foobar +sendtobackground +[Endtest] + +//28 +[Test] +title secclient11 +bringtoforeground +create ui_tsecuritymanager foobar +foobar secclient11 buffer1000 File hash +delete foobar +sendtobackground +[Endtest] + + +//29 +[Test] +title Simulate KeyDown event +presskey global EKeyDevice0 +bringtoforeground +presskey global EKeyDevice0 +sendtobackground +[Endtest] + + +//30 +[Test] +title Simulate KeyDown event +bringtoforeground +pause 2000 +presskey global EKeyDevice0 +sendtobackground +[Endtest] + + +//31 +[Test] +title secclient12 +bringtoforeground +create ui_tsecuritymanager foobar +foobar secclient12 +delete foobar +sendtobackground +[Endtest] + + +//32 +[Test] +title secclient13_1 +bringtoforeground +create ui_tsecuritymanager foobar +foobar secclient13 1 +delete foobar +sendtobackground +[Endtest] + + +//33 +[Test] +title secclient13_2 +bringtoforeground +create ui_tsecuritymanager foobar +foobar secclient13 2 +delete foobar +sendtobackground +[Endtest] + + +//34 +[Test] +title secclient13_3 +bringtoforeground +create ui_tsecuritymanager foobar +foobar secclient13 3 +delete foobar +sendtobackground +[Endtest] + + + \ No newline at end of file diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/rtsecuritymanager_client_api/tsrc/conf/ui_tsecuritymanager_comb.cfg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/rtsecuritymanager_client_api/tsrc/conf/ui_tsecuritymanager_comb.cfg Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,373 @@ +//1 +[Test] + +title secclient1 setpolicy buffer nohash buffer1000 +// Show avkonlist +run testscripter c:\testframework\ui_tsecuritymanager.cfg 2 + +// Press Key + +run testscripter c:\testframework\ui_tsecuritymanager.cfg 1 + +[Endtest] + + +//2 +[Test] + +title secclient1 setpolicy alwaysallow_buffer_nohash_buffer1000 +// Show avkonlist +run testscripter c:\testframework\ui_tsecuritymanager.cfg 2 + +// Press Key + +run testscripter c:\testframework\ui_tsecuritymanager.cfg 20 + +[Endtest] + + +//3 +[Test] + +title secclient1 setpolicy moreinfo_buffer_nohash_buffer1000 +// Show avkonlist +run testscripter c:\testframework\ui_tsecuritymanager.cfg 2 + +// Press Key +run testscripter c:\testframework\ui_tsecuritymanager.cfg 21 + + +run testscripter c:\testframework\ui_tsecuritymanager.cfg 22 + +[Endtest] + + + +//4 +[Test] + +title secclient1 setpolicy file nohash buffer1000 +// Show avkonlist +run testscripter c:\testframework\ui_tsecuritymanager.cfg 3 + +// Press Key + +run testscripter c:\testframework\ui_tsecuritymanager.cfg 1 + +[Endtest] + +//5 + +[Test] + +title secclient1 setpolicy buffer hash buffer1000 +// Show avkonlist +run testscripter c:\testframework\ui_tsecuritymanager.cfg 4 + +// Press Key + +//run testscripter c:\testframework\ui_tsecuritymanager.cfg 1 + +[Endtest] + +//4 + +[Test] + +title secclient1 setpolicy file hash buffer1000 +// Show avkonlist +run testscripter c:\testframework\ui_tsecuritymanager.cfg 5 + +// Press Key + +//run testscripter c:\testframework\ui_tsecuritymanager.cfg 1 + +[Endtest] + + +//5 + +[Test] + +title secclient2 2 crtsecmanager sessions +// Show avkonlist +run testscripter c:\testframework\ui_tsecuritymanager.cfg 6 + +// Press Key + +run testscripter c:\testframework\ui_tsecuritymanager.cfg 1 + +[Endtest] + + +//6 + +[Test] + +title secclient3 using unsetpolicy id +// Show avkonlist +run testscripter c:\testframework\ui_tsecuritymanager.cfg 7 + +// Press Key + +run testscripter c:\testframework\ui_tsecuritymanager.cfg 1 + +[Endtest] + + + +//7 + +[Test] + +title secclient4 using unregister sript +// Show avkonlist +run testscripter c:\testframework\ui_tsecuritymanager.cfg 8 + +// Press Key + +run testscripter c:\testframework\ui_tsecuritymanager.cfg 1 + +[Endtest] + + + +//8 + +[Test] +title secclient5 creating instance 1000 times +// Show avkonlist +run testscripter c:\testframework\ui_tsecuritymanager.cfg 9 + +// Press Key + +run testscripter c:\testframework\ui_tsecuritymanager.cfg 1 + +[Endtest] + + +//9 + +[Test] +title secclient6 unregister twice +// Show avkonlist +run testscripter c:\testframework\ui_tsecuritymanager.cfg 10 + +// Press Key + +run testscripter c:\testframework\ui_tsecuritymanager.cfg 1 + +[Endtest] + + + +//10 + +[Test] +title secclient7 updatepolicy with setpolicy gsswithtrust +// Show avkonlist +run testscripter c:\testframework\ui_tsecuritymanager.cfg 11 + +// Press Key + +//run testscripter c:\testframework\ui_tsecuritymanager.cfg 1 + +[Endtest] + + + + +//11 + +[Test] +title secclient7 updatepolicy with setpolicy gsswithouttrust +// Show avkonlist +run testscripter c:\testframework\ui_tsecuritymanager.cfg 12 + +// Press Key + +//run testscripter c:\testframework\ui_tsecuritymanager.cfg 1 + +[Endtest] + + + +//12 + +[Test] +title secclient8 update policy buffer registerscript +// Show avkonlist +run testscripter c:\testframework\ui_tsecuritymanager.cfg 13 + +// Press Key + +run testscripter c:\testframework\ui_tsecuritymanager.cfg 1 + +[Endtest] + + +//13 + +[Test] +title secclient8 update policy buffer file noregisterscript +// Show avkonlist +run testscripter c:\testframework\ui_tsecuritymanager.cfg 14 + +// Press Key + +run testscripter c:\testframework\ui_tsecuritymanager.cfg 1 + +[Endtest] + + + + + +//14 + +[Test] +title secclient8 update policy buffer noregisterscript +// Show avkonlist +run testscripter c:\testframework\ui_tsecuritymanager.cfg 15 + +// Press Key + +run testscripter c:\testframework\ui_tsecuritymanager.cfg 1 + +[Endtest] + + + +//15 + +[Test] +title secclient8 update policy buffer file registerscript +// Show avkonlist +run testscripter c:\testframework\ui_tsecuritymanager.cfg 16 + +// Press Key + +run testscripter c:\testframework\ui_tsecuritymanager.cfg 1 + +[Endtest] + + +//16 + +[Test] +title serverstart1 testcase +// Show avkonlist +run testscripter c:\testframework\ui_tsecuritymanager.cfg 17 + +// Press Key + +//run testscripter c:\testframework\ui_tsecuritymanager.cfg 1 + +[Endtest] + + +//17 + +[Test] +title secclient9 +// Show avkonlist +run testscripter c:\testframework\ui_tsecuritymanager.cfg 18 + +// Press Key + +//run testscripter c:\testframework\ui_tsecuritymanager.cfg 1 + +[Endtest] + + +//18 + +[Test] +title secclient9_2 +// Show avkonlist +run testscripter c:\testframework\ui_tsecuritymanager.cfg 19 + +// Press Key + +run testscripter c:\testframework\ui_tsecuritymanager.cfg 1 + +[Endtest] + + + +//19 + +[Test] +title secclient8 update policy buffer file registerscript advancedprompt +// Show avkonlist +run testscripter c:\testframework\ui_tsecuritymanager.cfg 23 + +// Press Key + +run testscripter c:\testframework\ui_tsecuritymanager.cfg 26 + +[Endtest] + + +//20 + +[Test] +title secclient10 update policy buffer file registerscript +// Show avkonlist +run testscripter c:\testframework\ui_tsecuritymanager.cfg 25 + +// Press Key + +run testscripter c:\testframework\ui_tsecuritymanager.cfg 22 + +[Endtest] + + + + +//21 + +[Test] +title secclient12 test valid policy file +// Show avkonlist +run testscripter c:\testframework\ui_tsecuritymanager.cfg 31 + + + +[Endtest] + + + +//22 + +[Test] +title secclient13_1 test valid policy file +// Show avkonlist +run testscripter c:\testframework\ui_tsecuritymanager.cfg 32 + +[Endtest] + +//22 + +[Test] +title secclient13_2 test valid policy file +// Show avkonlist +run testscripter c:\testframework\ui_tsecuritymanager.cfg 33 + +[Endtest] + + +//23 + +[Test] +title secclient13_3 test valid policy file +// Show avkonlist +run testscripter c:\testframework\ui_tsecuritymanager.cfg 34 + +[Endtest] + + + + + + diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/rtsecuritymanager_client_api/tsrc/data/accesspolicy.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/rtsecuritymanager_client_api/tsrc/data/accesspolicy.xml Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,64 @@ + + + + + This can contain info which can be displayed with capabilities while prompting + + ReadUserData + WriteUserData + Location + UserEnvironment + + + + + This can contain info which can be displayed with capabilities while prompting + + MultimediaDD + ReadDeviceData + WriteDeviceData + CommDD + SurroundingsDD + NetworkControl + + + + + + This can contain info which can be displayed with capabilities while prompting + + NetworkServices + LocalServices + + + + + + + + + SwEvent + + + + + + + + oneshot + session + blanket + session + + NetworkGroup + UserDataGroup + DeviceResourcesGroup + + + + + + + diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/rtsecuritymanager_client_api/tsrc/data/accesspolicy_1.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/rtsecuritymanager_client_api/tsrc/data/accesspolicy_1.xml Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,65 @@ + + + + + + This can contain info which can be displayed with capabilities while prompting + + ReadUserData + WriteUserData + Location + UserEnvironment + + + + + This can contain info which can be displayed with capabilities while prompting + + MultimediaDD + ReadDeviceData + WriteDeviceData + CommDD + SurroundingsDD + NetworkControl + + + + + + This can contain info which can be displayed with capabilities while prompting + + NetworkServices + LocalServices + + + + + + + + + SwEvent + + + + + + + + oneshot + session + blanket + session + + NetworkGroup + UserDataGroup + DeviceResourcesGroup + + + + + + + diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/rtsecuritymanager_client_api/tsrc/data/accesspolicy_2.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/rtsecuritymanager_client_api/tsrc/data/accesspolicy_2.xml Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,2 @@ + + \ No newline at end of file diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/rtsecuritymanager_client_api/tsrc/data/accesspolicy_3.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/rtsecuritymanager_client_api/tsrc/data/accesspolicy_3.xml Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,65 @@ + + + + + + This can contain info which can be displayed with capabilities while prompting + + ReadUserData + WriteUserData + Location + UserEnvironment + + + + + This can contain info which can be displayed with capabilities while prompting + + MultimediaDD + ReadDeviceData + WriteDeviceData + CommDD + SurroundingsDD + NetworkControl + + + + + + This can contain info which can be displayed with capabilities while prompting + + NetworkServices + LocalServices + + + + + + + + + SwEvent + + + + + + + + oneshot + session + blanket + session + + NetworkGroup + UserDataGroup + DeviceResourcesGroup + + + + + + + diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/rtsecuritymanager_client_api/tsrc/eabi/ui_tsecuritymanageru.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/rtsecuritymanager_client_api/tsrc/eabi/ui_tsecuritymanageru.def Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,3 @@ +EXPORTS + _Z9LibEntryLR13CTestModuleIf @ 1 NONAME + diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/rtsecuritymanager_client_api/tsrc/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/rtsecuritymanager_client_api/tsrc/group/bld.inf Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,74 @@ +/* +* Copyright (c) 2002 - 2007 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: ?Description +* +*/ + + + + + + + + + +PRJ_PLATFORMS +// specify the platforms your component needs to be built for here +// defaults to WINS MARM so you can ignore this if you just build these +DEFAULT + +PRJ_TESTEXPORTS +// NOTE: If using ARS requirements all export operations should be done under this. +// 'abld test export' + +PRJ_EXPORTS +//../init/testframework.ini /epoc32/WINSCW/C/TestFramework/testframework.ini +../conf/ui_tsecuritymanager.cfg /epoc32/WINSCW/C/TestFramework/ui_tsecuritymanager.cfg +../conf/ui_tsecuritymanager_comb.cfg /epoc32/WINSCW/C/TestFramework/ui_tsecuritymanager_comb.cfg +../data/accesspolicy.xml /epoc32/WINSCW/C/data/others/accesspolicy.xml +../data/accesspolicy_1.xml /epoc32/WINSCW/C/data/others/accesspolicy_1.xml +../data/accesspolicy_2.xml /epoc32/WINSCW/C/data/others/accesspolicy_2.xml +../data/accesspolicy_3.xml /epoc32/WINSCW/C/data/others/accesspolicy_3.xml + + +// Specify the source file followed by its destination here +// copy will be used to copy the source file to its destination +// If there's no destination then the source file will be copied +// to the same name in /epoc32/include +// Example: +/* +/agnmodel/inc/AGMCOMON.H +*/ + +PRJ_TESTMMPFILES +// NOTE: If using ARS requirements .mmp file operation should be done under this. +// 'abld test build' + +PRJ_MMPFILES +// Specify the .mmp files required for building the important component +// releasables. +// +// Specify "tidy" if the component you need to build doesn't need to be +// released. Specify "ignore" if the MMP file exists but should be +// ignored. +// Example: +/* +/agnmodel/group/agnmodel.mmp +#if defined(MARM) +/agnmodel/group/agsvexe.mmp +#endif +*/ +ui_tsecuritymanager.mmp + +// End of File \ No newline at end of file diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/rtsecuritymanager_client_api/tsrc/group/ui_tsecuritymanager.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/rtsecuritymanager_client_api/tsrc/group/ui_tsecuritymanager.mmp Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,87 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + +/*TYPE TESTCLASS*//* +* Copyright (c) 2002 - 2007 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: ?Description +* +*/ + + +#if defined(__S60_) + // To get the OS_LAYER_SYSTEMINCLUDE-definition + #include +#endif + +TARGET ui_tsecuritymanager.dll +TARGETTYPE dll +UID 0x1000008D 0x101FB3E3 + +CAPABILITY ALL -TCB +/* Remove comments and replace 0x00000000 with correct vendor id */ +// VENDORID 0x00000000 +/* Remove comments and replace 0x00000000 with correct secure id */ +// SECUREID 0x00000000 + +//TARGETPATH ?target_path +DEFFILE ui_tsecuritymanager.def + +SOURCEPATH ../src +SOURCE ui_tsecuritymanager.cpp +SOURCE ui_tsecuritymanagerBlocks.cpp + +//RESOURCE resource_file +//RESOURCE resource_file2 + +USERINCLUDE ../inc + + +MW_LAYER_SYSTEMINCLUDE + +LIBRARY euser.lib +LIBRARY stiftestinterface.lib +LIBRARY stiftestengine.lib + + +LIBRARY apparc.lib +LIBRARY cone.lib +LIBRARY eikcore.lib +LIBRARY avkon.lib +LIBRARY gdi.lib +LIBRARY RTSecMgrClient.lib +LIBRARY efsrv.lib +LIBRARY RTSecMgrUtil.lib bafl.lib AknSkins.lib Flogger.lib +LIBRARY ws32.lib eikcoctl.lib eikctl.lib apgrfx.lib aknskins.lib aknskinsrv.lib aknswallpaperutils.lib + +LANG SC + + diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/rtsecuritymanager_client_api/tsrc/inc/ui_tsecuritymanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/rtsecuritymanager_client_api/tsrc/inc/ui_tsecuritymanager.h Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,235 @@ +/* +* Copyright (c) 2002 - 2007 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: ?Description +* +*/ + + + + + + + + + +#ifndef UI_TSECURITYMANAGER_H +#define UI_TSECURITYMANAGER_H + +// INCLUDES +#include +#include +#include + +#include +#include +#include +#include +#include + +// Forward reference + class CRTSecManager; +class CTrustInfo; +class RSecMgrSession; +class RSecMgrSubSession; +// CONSTANTS +//const ?type ?constant_var = ?constant; + +// MACROS +//#define ?macro ?macro_def +#define TEST_CLASS_VERSION_MAJOR 0 +#define TEST_CLASS_VERSION_MINOR 0 +#define TEST_CLASS_VERSION_BUILD 0 + +// Logging path +_LIT( Kui_tsecuritymanagerLogPath, "\\logs\\testframework\\ui_tsecuritymanager\\" ); +// Log file +_LIT( Kui_tsecuritymanagerLogFile, "ui_tsecuritymanager.txt" ); +_LIT( Kui_tsecuritymanagerLogFileWithTitle, "ui_tsecuritymanager_[%S].txt" ); + +// FUNCTION PROTOTYPES +//?type ?function_name(?arg_list); + +// FORWARD DECLARATIONS +//class ?FORWARD_CLASSNAME; +class Cui_tsecuritymanager; + +// DATA TYPES +//enum ?declaration +//typedef ?declaration +//extern ?data_type; + +// CLASS DECLARATION + +/** +* Cui_tsecuritymanager test class for STIF Test Framework TestScripter. +* ?other_description_lines +* +* @lib ?library +* @since ?Series60_version +*/ +NONSHARABLE_CLASS(Cui_tsecuritymanager) : public CScriptBase,public RSessionBase + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + */ + static Cui_tsecuritymanager* NewL( CTestModuleIf& aTestModuleIf ); + + /** + * Destructor. + */ + virtual ~Cui_tsecuritymanager(); + + public: // New functions + TVersion Version() const; + /** + * ?member_description. + * @since ?Series60_version + * @param ?arg1 ?description + * @return ?description + */ + //?type ?member_function( ?type ?arg1 ); + + public: // Functions from base classes + + /** + * From CScriptBase Runs a script line. + * @since ?Series60_version + * @param aItem Script line containing method name and parameters + * @return Symbian OS error code + */ + virtual TInt RunMethodL( CStifItemParser& aItem ); + + protected: // New functions + + /** + * ?member_description. + * @since ?Series60_version + * @param ?arg1 ?description + * @return ?description + */ + //?type ?member_function( ?type ?arg1 ); + + protected: // Functions from base classes + + /** + * From ?base_class ?member_description + */ + //?type ?member_function(); + + private: + + /** + * C++ default constructor. + */ + Cui_tsecuritymanager( CTestModuleIf& aTestModuleIf ); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + // Prohibit copy constructor if not deriving from CBase. + // ?classname( const ?classname& ); + // Prohibit assigment operator if not deriving from CBase. + // ?classname& operator=( const ?classname& ); + + /** + * Frees all resources allocated from test methods. + * @since ?Series60_version + */ + void Delete(); + + /** + * Test methods are listed below. + */ + + /** + * Example test method. + * @since ?Series60_version + * @param aItem Script line containing parameters. + * @return Symbian OS error code. + */ + virtual TInt serverstart1( CStifItemParser& aItem ); + virtual TInt serverstart2( CStifItemParser& aItem ); + virtual TInt secclient1( CStifItemParser& aItem ); + virtual TInt secclient2( CStifItemParser& aItem ); + virtual TInt secclient3(CStifItemParser& aItem ); + virtual TInt secclient4(CStifItemParser& aItem ); + virtual TInt secclient5(CStifItemParser& aItem ); + virtual TInt secclient6(CStifItemParser& aItem ); + virtual TInt secclient7(CStifItemParser& aItem ); + virtual TInt secclient8(CStifItemParser& aItem ); + virtual TInt secclient9(CStifItemParser& aItem ); + virtual TInt secclient10(CStifItemParser& aItem ); + virtual TInt secclient11(CStifItemParser& aItem ); + virtual TInt secclient12(CStifItemParser& aItem ); + virtual TInt secclient13(CStifItemParser& aItem ); + + + // void SendTestClassVersion(); + + + TInt StartSecManagerServer() const; + + TFullName ServerLocation() const; + TInt ExecuteThreadOne(TAny *aPtr); + + //ADD NEW METHOD DEC HERE + //[TestMethods] - Do not remove + + public: // Data + // ?one_line_short_description_of_data + //?data_declaration; + + protected: // Data + // ?one_line_short_description_of_data + //?data_declaration; + + private: // Data + + // ?one_line_short_description_of_data + //?data_declaration; + + // Reserved pointer for future extension + //TAny* iReserved; + + public: // Friend classes + //?friend_class_declaration; + protected: // Friend classes + //?friend_class_declaration; + private: // Friend classes + //?friend_class_declaration; + CTrustInfo* iTrust; + //CLogHandler* iLogger; + CRTSecManager* iSession; + CRTSecManager* iSession2; + CRTSecMgrScriptSession* scriptSession; + TInt iPolicyId; + + RThread iThread1; + + }; + + + const TInt KSecurityServerUid2Int(0x1020507E); +const TUid KSecMgrServerUid2 = + { + KSecurityServerUid2Int + }; + +#endif // UI_TSECURITYMANAGER_H + +// End of File diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/rtsecuritymanager_client_api/tsrc/init/testframework.ini --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/rtsecuritymanager_client_api/tsrc/init/testframework.ini Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,181 @@ +# +# This is STIFTestFramework initialization file +# Comment lines start with '#'-character. +# See STIF TestFramework users guide.doc for instructions + +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- +# Set following test engine settings: +# - Set Test Reporting mode. TestReportMode's possible values are: +# + 'Summary': Summary of the tested test cases. +# + 'Environment': Hardware and software info. +# + 'TestCases': Test case report. +# + 'FullReport': Set of all above ones. +# + Example 'TestReportMode= Summary TestCases' +# +# - CreateTestReport setting controls report creation mode +# + YES, Test report will created. +# + NO, No Test report. +# +# - File path indicates the base path of the test report. +# - File name indicates the name of the test report. +# +# - File format indicates the type of the test report. +# + TXT, Test report file will be txt type, for example 'TestReport.txt'. +# + HTML, Test report will be html type, for example 'TestReport.html'. +# +# - File output indicates output source of the test report. +# + FILE, Test report logging to file. +# + RDEBUG, Test report logging to using rdebug. +# +# - File Creation Mode indicates test report overwriting if file exist. +# + OVERWRITE, Overwrites if the Test report file exist. +# + APPEND, Continue logging after the old Test report information if +# report exist. +# - Sets a device reset module's dll name(Reboot). +# + If Nokia specific reset module is not available or it is not correct one +# StifHWResetStub module may use as a template for user specific reset +# module. + +[Engine_Defaults] + +TestReportMode= FullReport # Possible values are: 'Empty', 'Summary', 'Environment', + 'TestCases' or 'FullReport' + +CreateTestReport= YES # Possible values: YES or NO + +TestReportFilePath= C:\LOGS\TestFramework\ +TestReportFileName= TestReport + +TestReportFormat= TXT # Possible values: TXT or HTML +TestReportOutput= FILE # Possible values: FILE or RDEBUG +TestReportFileCreationMode= OVERWRITE # Possible values: OVERWRITE or APPEND + +DeviceResetDllName= StifResetForNokia.dll # e.g. 'StifHWResetStub.dll' for user specific reseting +UITestingSupport= YES +SeparateProcesses= YES +[End_Defaults] +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + + + +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- +# Module configurations start +# Modules are added between module tags +# tags. Module name is specified after ModuleName= tag, like +# ModuleName= XXXXXXXXX +# Modules might have initialisation file, specified as +# IniFile= c:\testframework\YYYYYY +# Modules might have several configuration files, like +# TestCaseFile= c:\testframework\NormalCases.txt +# TestCaseFile= c:\testframework\SmokeCases.txt +# TestCaseFile= c:\testframework\ManualCases.txt + +# (TestCaseFile is synonym for old term ConfigFile) + +# Following case specifies demo module settings. Demo module +# does not read any settings from file, so tags +# IniFile and TestCaseFile are not used. +# In the simplest case it is enough to specify only the +# name of the test module when adding new test module + +#[New_Module] +#ModuleName= demomodule +#[End_Module] + + + + +# Load testmoduleXXX, optionally with initialization file and/or test case files +[New_Module] +ModuleName= testcombiner + +#TestModuleXXX used initialization file +IniFile= c:\testframework\Testframework.ini + + + +TestCaseFile= c:\testframework\ui_tsecuritymanager_comb.cfg + + +[End_Module] +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + + + +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- +# Set STIFTestFramework logging overwrite parameters for Logger. +# Hardware and emulator environment logging path and styles can +# be configured from here to overwrite the Logger's implemented values. +# +# Settings description: +# - Indicates option for creation log directory/directories. If log directory/directories +# is/are not created by user they will make by software. +# + YES, Create log directory/directories if not allready exist. +# + NO, Log directory/directories not created. Only created one is used. +# +# - Overwrite emulator path setting. +# + Example: If 'EmulatorBasePath= C:\LOGS\TestFramework\' and in code is defined +# Logger's path 'D:\\LOGS\\Module\\' with those definition the path +# will be 'C:\LOGS\TestFramework\LOGS\Module\' +# +# - Overwrite emulator's logging format. +# + TXT, Log file(s) will be txt type(s), for example 'Module.txt'. +# + HTML, Log file(s) will be html type(s), for example 'Module.html'. +# +# - Overwrited emulator logging output source. +# + FILE, Logging to file(s). +# + RDEBUG, Logging to using rdebug(s). +# +# - Overwrite hardware path setting (Same description as above in emulator path). +# - Overwrite hardware's logging format(Same description as above in emulator format). +# - Overwrite hardware's logging output source(Same description as above in emulator output). +# +# - File Creation Mode indicates file overwriting if file exist. +# + OVERWRITE, Overwrites if file(s) exist. +# + APPEND, Continue logging after the old logging information if file(s) exist. +# +# - Will thread id include to the log filename. +# + YES, Thread id to log file(s) name, Example filename 'Module_b9.txt'. +# + NO, No thread id to log file(s), Example filename 'Module.txt'. +# +# - Will time stamps include the to log file. +# + YES, Time stamp added to each line in log file(s). Time stamp is +# for example'12.Nov.2003 115958 LOGGING INFO' +# + NO, No time stamp(s). +# +# - Will line breaks include to the log file. +# + YES, Each logging event includes line break and next log event is in own line. +# + NO, No line break(s). +# +# - Will event ranking include to the log file. +# + YES, Event ranking number added to each line in log file(s). Ranking number +# depends on environment's tics, for example(includes time stamp also) +# '012 12.Nov.2003 115958 LOGGING INFO' +# + NO, No event ranking. +# + +[Logger_Defaults] + +#NOTE: If you want to set Logger using next setting(s) remove comment(s)'#' + +#CreateLogDirectories= YES # Possible values: YES or NO + +#EmulatorBasePath= C:\LOGS\TestFramework\ +#EmulatorFormat= HTML # Possible values: TXT or HTML +#EmulatorOutput= FILE # Possible values: FILE or RDEBUG + +#HardwareBasePath= D:\LOGS\TestFramework\ +#HardwareFormat= HTML # Possible values: TXT or HTML +#HardwareOutput= FILE # Possible values: FILE or RDEBUG + +#FileCreationMode= OVERWRITE # Possible values: OVERWRITE or APPEND + +#ThreadIdToLogFile= YES # Possible values: YES or NO +#WithTimeStamp= YES # Possible values: YES or NO +#WithLineBreak= YES # Possible values: YES or NO +#WithEventRanking= YES # Possible values: YES or NO + +[End_Logger_Defaults] +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + +# End of file \ No newline at end of file diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/rtsecuritymanager_client_api/tsrc/src/ui_tsecuritymanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/rtsecuritymanager_client_api/tsrc/src/ui_tsecuritymanager.cpp Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,159 @@ +/* +* Copyright (c) 2002 - 2007 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: ?Description +* +*/ + + + + + + + + + +// INCLUDE FILES +#include +#include "ui_tsecuritymanager.h" +#include + + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// Cui_tsecuritymanager::Cui_tsecuritymanager +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +Cui_tsecuritymanager::Cui_tsecuritymanager( + CTestModuleIf& aTestModuleIf ): + CScriptBase( aTestModuleIf ) + { + } + +// ----------------------------------------------------------------------------- +// Cui_tsecuritymanager::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void Cui_tsecuritymanager::ConstructL() + { + //Read logger settings to check whether test case name is to be + //appended to log file name. + RSettingServer settingServer; + TInt ret = settingServer.Connect(); + if(ret != KErrNone) + { + User::Leave(ret); + } + // Struct to StifLogger settigs. + TLoggerSettings loggerSettings; + // Parse StifLogger defaults from STIF initialization file. + ret = settingServer.GetLoggerSettings(loggerSettings); + if(ret != KErrNone) + { + User::Leave(ret); + } + // Close Setting server session + settingServer.Close(); + + TFileName logFileName; + + if(loggerSettings.iAddTestCaseTitle) + { + TName title; + TestModuleIf().GetTestCaseTitleL(title); + logFileName.Format(Kui_tsecuritymanagerLogFileWithTitle, &title); + } + else + { + logFileName.Copy(Kui_tsecuritymanagerLogFile); + } + + iLog = CStifLogger::NewL( Kui_tsecuritymanagerLogPath, + logFileName, + CStifLogger::ETxt, + CStifLogger::EFile, + EFalse ); + + // SendTestClassVersion(); + } + +// ----------------------------------------------------------------------------- +// Cui_tsecuritymanager::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +Cui_tsecuritymanager* Cui_tsecuritymanager::NewL( + CTestModuleIf& aTestModuleIf ) + { + Cui_tsecuritymanager* self = new (ELeave) Cui_tsecuritymanager( aTestModuleIf ); + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + + return self; + + } + +// Destructor +Cui_tsecuritymanager::~Cui_tsecuritymanager() + { + + // Delete resources allocated from test methods + Delete(); + + // Delete logger + delete iLog; + + } + +//----------------------------------------------------------------------------- +// Cui_tsecuritymanager::SendTestClassVersion +// Method used to send version of test class +//----------------------------------------------------------------------------- +// +/*void Cui_tsecuritymanager::SendTestClassVersion() + { + TVersion moduleVersion; + moduleVersion.iMajor = TEST_CLASS_VERSION_MAJOR; + moduleVersion.iMinor = TEST_CLASS_VERSION_MINOR; + moduleVersion.iBuild = TEST_CLASS_VERSION_BUILD; + + TFileName moduleName; + moduleName = _L("ui_tsecuritymanager.dll"); + + TestModuleIf().SendTestModuleVersion(moduleVersion, moduleName); + }*/ + +// ========================== OTHER EXPORTED FUNCTIONS ========================= + +// ----------------------------------------------------------------------------- +// LibEntryL is a polymorphic Dll entry point. +// Returns: CScriptBase: New CScriptBase derived object +// ----------------------------------------------------------------------------- +// +EXPORT_C CScriptBase* LibEntryL( + CTestModuleIf& aTestModuleIf ) // Backpointer to STIF Test Framework + { + + return ( CScriptBase* ) Cui_tsecuritymanager::NewL( aTestModuleIf ); + + } + + +// End of File diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/rtsecuritymanager_client_api/tsrc/src/ui_tsecuritymanagerblocks.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/rtsecuritymanager_client_api/tsrc/src/ui_tsecuritymanagerblocks.cpp Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,1889 @@ +/* +* Copyright (c) 2002 - 2007 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: ?Description +* +*/ + + + + + + + + +#include +#include +// [INCLUDE FILES] - do not remove +#include +#include +#include +#include "ui_tsecuritymanager.h" +#include + +#include +#include +#include +#include +#include +#include +#include +//#include +#include +_LIT(KSecMgrServerExeName, "RTSecMgrServer.exe"); +_LIT(KServerStartFailed, "Security manager server starting failed"); +_LIT(KSecServerProcessName, "SecurityManagerServer"); +const TUint KDefaultMessageSlots= 16; +const TUint KRTSecMgrServMajorVersionNumber=0; +const TUint KRTSecMgrServMinorVersionNumber=1; +const TUint KRTSecMgrServBuildVersionNumber=1; + + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// Cui_tsecuritymanager::Delete +// Delete here all resources allocated and opened from test methods. +// Called from destructor. +// ----------------------------------------------------------------------------- +// +void Cui_tsecuritymanager::Delete() + { + + } + +// ----------------------------------------------------------------------------- +// Cui_tsecuritymanager::RunMethodL +// Run specified method. Contains also table of test mothods and their names. +// ----------------------------------------------------------------------------- +// +TInt Cui_tsecuritymanager::RunMethodL( + CStifItemParser& aItem ) + { + + static TStifFunctionInfo const KFunctions[] = + { + // Copy this line for every implemented function. + // First string is the function name used in TestScripter script file. + // Second is the actual implementation member function. + ENTRY( "serverstart1", Cui_tsecuritymanager::serverstart1 ), + ENTRY( "serverstart2", Cui_tsecuritymanager::serverstart2 ), + ENTRY( "secclient1", Cui_tsecuritymanager::secclient1 ), + ENTRY( "secclient2", Cui_tsecuritymanager::secclient2 ), + ENTRY( "secclient3",Cui_tsecuritymanager::secclient3), + ENTRY( "secclient4",Cui_tsecuritymanager::secclient4), + ENTRY( "secclient5",Cui_tsecuritymanager::secclient5), + ENTRY( "secclient6",Cui_tsecuritymanager::secclient6), + ENTRY( "secclient7",Cui_tsecuritymanager::secclient7), + ENTRY( "secclient8",Cui_tsecuritymanager::secclient8), + ENTRY( "secclient9",Cui_tsecuritymanager::secclient9), + ENTRY( "secclient10",Cui_tsecuritymanager::secclient10), + ENTRY( "secclient11",Cui_tsecuritymanager::secclient11), + ENTRY( "secclient12",Cui_tsecuritymanager::secclient12), + ENTRY( "secclient13",Cui_tsecuritymanager::secclient13), + + // [test cases entries] - Do not remove + + }; + const TInt count = sizeof( KFunctions ) / + sizeof( TStifFunctionInfo ); + + return RunInternalL( KFunctions, count, aItem ); + + } + +// ----------------------------------------------------------------------------- +// Cui_tsecuritymanager::serverstart1 +// Example test method function. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt Cui_tsecuritymanager::serverstart1( CStifItemParser& aItem ) + { + __UHEAP_MARK; + + TInt retry(2); // Try this twice + TInt err(KErrNone); + + while (retry>KErrNone) + { + // Try to create a Server session + err = CreateSession ( KSecServerProcessName, Version (), + KDefaultMessageSlots); + + if ( err != KErrNotFound && err != KErrServerTerminated) + { + // KErrNone or unrecoverable error + if ( err != KErrNone) + { + } + retry = 0; + } + else + { + // Return code was KErrNotFound or KErrServerTerminated. + // Try to start a new security manager server instance + + err = StartSecManagerServer (); + + + + if ( err != KErrNone && err != KErrAlreadyExists) + { + // Unrecoverable error + + retry = 0; + } + } + + retry--; + } + + +// __UHEAP_MARKEND; + + + + return KErrNone; + + } + + + TVersion Cui_tsecuritymanager::Version(void) const + { + return (TVersion(KRTSecMgrServMajorVersionNumber,KRTSecMgrServMinorVersionNumber,KRTSecMgrServBuildVersionNumber)); + } + + + + TInt Cui_tsecuritymanager::StartSecManagerServer() const + { + + RProcess server ,server1; + const TUidType serverUid( KNullUid, KSecMgrServerUid2, KNullUid); + TInt err = server.Create ( ServerLocation (), + KNullDesC, + serverUid, + EOwnerProcess); + + TInt err1 = server1.Create ( ServerLocation (), + KNullDesC, + serverUid, + EOwnerProcess); + + // Return error code if we the process couldn't be created + if ( KErrNone == err) + { + // Rendezvous is used to detect server start + TRequestStatus status; + server.Rendezvous ( status); + + if ( status != KRequestPending) + { + + server.Kill ( 0); // Abort startup + } + else + { + server.Resume (); // Logon OK - start the server + } + User::WaitForRequest (status); // Wait for start or death + + if ( server.ExitType ()== EExitPanic) + { + + err = KErrGeneral; + } + else + { + err = status.Int (); + } + + // We can close the handle now + server.Close (); + + } + return err; + } + + + TFullName Cui_tsecuritymanager::ServerLocation() const + { + TFullName fullPathAndName; + fullPathAndName.Append ( KSecMgrServerExeName); + return fullPathAndName; + } + + + + + + + + + // ----------------------------------------------------------------------------- +// Cui_tsecuritymanager::serverstart1 +// Example test method function. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt Cui_tsecuritymanager::serverstart2( CStifItemParser& aItem ) + { + __UHEAP_MARK; +CRTSecMgrClientProxy *proxy; + RSecMgrSession *isecmgrsession; + // Connect(); + // proxy->ConstructL(); + +// __UHEAP_MARKEND; + + + + return KErrNone; + + } + + + // ----------------------------------------------------------------------------- +// Cui_tsecuritymanager::secclient1 +// Example test method function. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt Cui_tsecuritymanager::secclient1( CStifItemParser& aItem ) + { + + + TInt cnt = User::CountAllocCells(); + // __UHEAP_MARK; + TInt32 exId; + TPtrC sptr; + + aItem.GetNextString(sptr); + + iSession = CRTSecManager::NewL (); + // iSession2 = CRTSecManager::NewL (); + iTrust = CTrustInfo::NewL (); + + + + RFs fileSession; + if ( KErrNone==fileSession.Connect ()) + { + CleanupClosePushL (fileSession); + if(KErrNone==fileSession.ShareProtected()) + { + RFile secPolicyFile; + + + TBuf8<5000> aFilebuffer ; + + + + + + aItem.GetNextString(sptr); + + if ( KErrNone == secPolicyFile.Open (fileSession, _L("c:\\data\\Others\\accesspolicy.xml"), + EFileShareAny)) + { + + + CleanupClosePushL (secPolicyFile); + + + + if(!sptr.Compare(_L("File"))) + { + + + + iPolicyId = iSession->SetPolicy (secPolicyFile); + } + if(!sptr.Compare(_L("Buffer"))) + { + if(KErrNone == secPolicyFile.Read(aFilebuffer)) + { + + iPolicyId = iSession->SetPolicy (aFilebuffer); + } + } + + + + CleanupStack::PopAndDestroy ();//secPolicyFile + } + } + CleanupStack::PopAndDestroy ();//fileSession + } + + + aItem.GetNextString(sptr); + + if(!sptr.Compare(_L("nohash"))) + { + + + exId = iSession->RegisterScript (iPolicyId, *iTrust); + } + + if(!sptr.Compare(_L("hash"))) + { + + _LIT(KHash,"sdsds"); + TBuf<10> aHash; + aHash.Copy(_L("sdsds")); + exId = iSession->RegisterScript(iPolicyId,aHash,*iTrust); + + } + + + + CRTSecMgrScriptSession* scriptSession; + + scriptSession = iSession->GetScriptSessionL(iPolicyId, exId); + + + +//#endif + + + + if(scriptSession) + { + CleanupStack::PushL (scriptSession); + RCapabilityArray caps; + caps.Append (ECapabilityWriteUserData); + caps.Append (ECapabilityReadUserData); + caps.Append (ECapabilityLocation); + caps.Append (ECapabilityUserEnvironment); + + + + + TInt IsAllowed(scriptSession->IsAllowed(caps)); + + + + + caps.Close(); + + CleanupStack::PopAndDestroy ();//scriptSession + } + + + + + // TInt result = iSession->UnSetPolicy (iPolicyId); + + + + + + + + +//delete scriptSession1; +delete iSession; +//delete iSession2; +delete iTrust; + + cnt = User::CountAllocCells(); +//__UHEAP_MARKEND; +return KErrNone; +} + + + + // ----------------------------------------------------------------------------- +// Cui_tsecuritymanager::secclient2 +// Example test method function. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt Cui_tsecuritymanager::secclient2( CStifItemParser& aItem ) + { + + __UHEAP_MARK; + + iSession = CRTSecManager::NewL (); + iSession2 = CRTSecManager::NewL (); // 2nd session + iTrust = CTrustInfo::NewL (); + + + + RFs fileSession; + if ( KErrNone==fileSession.Connect ()) + { + CleanupClosePushL (fileSession); + if(KErrNone==fileSession.ShareProtected()) + { + RFile secPolicyFile; + + if ( KErrNone == secPolicyFile.Open (fileSession, _L("c:\\data\\Others\\accesspolicy.xml"), + EFileShareAny)) + { + CleanupClosePushL (secPolicyFile); + + iPolicyId = iSession->SetPolicy (secPolicyFile); + CleanupStack::PopAndDestroy ();//secPolicyFile + } + } + CleanupStack::PopAndDestroy ();//fileSession + } + + + TInt32 exId = iSession2->RegisterScript (iPolicyId, *iTrust); + + CRTSecMgrScriptSession* scriptSession; + +//#ifdef AUTO_TESTING +// scriptSession = iSession->GetScriptSessionL(iPolicyId, exId, *iTrust, this); +//#else + + scriptSession = iSession->GetScriptSessionL(iPolicyId, exId); +//#endif + + + + if(scriptSession) + { + CleanupStack::PushL (scriptSession); + RCapabilityArray caps; + caps.Append (ECapabilityWriteUserData); + caps.Append (ECapabilityReadUserData); + caps.Append (ECapabilityLocation); + caps.Append (ECapabilityUserEnvironment); + + + + + TInt IsAllowed(scriptSession->IsAllowed(caps)); + + + + + caps.Close(); + + CleanupStack::PopAndDestroy ();//scriptSession + } + + + + + TInt result = iSession->UnSetPolicy (iPolicyId); + + + + + + + + +//delete scriptSession1; +delete iSession; +delete iSession2; +delete iTrust; +//__UHEAP_MARKEND; +return KErrNone; +} + + + + + + + // ----------------------------------------------------------------------------- +// Cui_tsecuritymanager::secclient3 +// Example test method function. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt Cui_tsecuritymanager::secclient3( CStifItemParser& aItem ) + { + + __UHEAP_MARK; + + iSession = CRTSecManager::NewL (); + iSession2 = CRTSecManager::NewL (); // 2nd session + iTrust = CTrustInfo::NewL (); + + + + RFs fileSession; + if ( KErrNone==fileSession.Connect ()) + { + CleanupClosePushL (fileSession); + if(KErrNone==fileSession.ShareProtected()) + { + RFile secPolicyFile; + + if ( KErrNone == secPolicyFile.Open (fileSession, _L("c:\\data\\Others\\accesspolicy.xml"), + EFileShareAny)) + { + CleanupClosePushL (secPolicyFile); + iPolicyId = iSession->SetPolicy (secPolicyFile); + CleanupStack::PopAndDestroy ();//secPolicyFile + } + } + CleanupStack::PopAndDestroy ();//fileSession + } + + + TInt32 exId = iSession2->RegisterScript (iPolicyId, *iTrust); + + CRTSecMgrScriptSession* scriptSession; + + + scriptSession = iSession->GetScriptSessionL(iPolicyId, exId); + + + + + if(scriptSession) + { + CleanupStack::PushL (scriptSession); + RCapabilityArray caps; + caps.Append (ECapabilityWriteUserData); + caps.Append (ECapabilityReadUserData); + caps.Append (ECapabilityLocation); + caps.Append (ECapabilityUserEnvironment); + + + + + TInt IsAllowed(scriptSession->IsAllowed(caps)); + + + + + caps.Close(); + + CleanupStack::PopAndDestroy ();//scriptSession + } + + + + + TInt result = iSession->UnSetPolicy (iPolicyId); + + + TExecutableID exId2 = iSession2->RegisterScript (iPolicyId, *iTrust); + + +// TInt32 x = -108; + if(exId2 != ErrRegisterScriptFailed) + { + delete iSession; +delete iSession2; +delete iTrust; + return exId2; + + } + + + +//delete scriptSession1; +delete iSession; +delete iSession2; +delete iTrust; +//__UHEAP_MARKEND; +return KErrNone; +} + + + + // ----------------------------------------------------------------------------- +// Cui_tsecuritymanager::secclient4 +// Example test method function. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt Cui_tsecuritymanager::secclient4(CStifItemParser& aItem ) + { + + __UHEAP_MARK; + + iSession = CRTSecManager::NewL (); + iSession2 = CRTSecManager::NewL (); // 2nd session + iTrust = CTrustInfo::NewL (); + + + + RFs fileSession; + if ( KErrNone==fileSession.Connect ()) + { + CleanupClosePushL (fileSession); + if(KErrNone==fileSession.ShareProtected()) + { + RFile secPolicyFile; + + if ( KErrNone == secPolicyFile.Open (fileSession, _L("c:\\data\\Others\\accesspolicy.xml"), + EFileShareAny)) + { + CleanupClosePushL (secPolicyFile); + iPolicyId = iSession->SetPolicy (secPolicyFile); + CleanupStack::PopAndDestroy ();//secPolicyFile + } + } + CleanupStack::PopAndDestroy ();//fileSession + } + + + TInt32 exId = iSession->RegisterScript (iPolicyId, *iTrust); + + CRTSecMgrScriptSession* scriptSession; + + + scriptSession = iSession->GetScriptSessionL(iPolicyId, exId); + + + + + if(scriptSession) + { + CleanupStack::PushL (scriptSession); + RCapabilityArray caps; + caps.Append (ECapabilityWriteUserData); + caps.Append (ECapabilityReadUserData); + caps.Append (ECapabilityLocation); + caps.Append (ECapabilityUserEnvironment); + + + + + TInt IsAllowed(scriptSession->IsAllowed(caps)); + + + + + caps.Close(); + + CleanupStack::PopAndDestroy ();//scriptSession + } + + + + TInt result = iSession->UnRegisterScript (exId, iPolicyId); + + scriptSession = iSession->GetScriptSessionL(iPolicyId, exId); + + if(scriptSession) + + { + return KErrGeneral; + } + + +//delete scriptSession1; +delete iSession; +delete iSession2; +delete iTrust; +//__UHEAP_MARKEND; +return KErrNone; +} + + + + + // ----------------------------------------------------------------------------- +// Cui_tsecuritymanager::secclient5 +// Example test method function. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt Cui_tsecuritymanager::secclient5(CStifItemParser& aItem ) + { + + __UHEAP_MARK; + + + int i= 0; + + + CRTSecManager *iSession[10]; + + while(i<10) + { + + + iSession[i] = CRTSecManager::NewL (); + i++; + } + + + + iTrust = CTrustInfo::NewL (); + + + + RFs fileSession; + if ( KErrNone==fileSession.Connect ()) + { + CleanupClosePushL (fileSession); + if(KErrNone==fileSession.ShareProtected()) + { + RFile secPolicyFile; + + if ( KErrNone == secPolicyFile.Open (fileSession, _L("c:\\data\\Others\\accesspolicy.xml"), + EFileShareAny)) + { + CleanupClosePushL (secPolicyFile); + iPolicyId = iSession[0]->SetPolicy (secPolicyFile); + CleanupStack::PopAndDestroy ();//secPolicyFile + } + } + CleanupStack::PopAndDestroy ();//fileSession + } + + + TInt32 exId = iSession[1]->RegisterScript (iPolicyId, *iTrust); + + CRTSecMgrScriptSession* scriptSession; + + + scriptSession = iSession[2]->GetScriptSessionL(iPolicyId, exId); + + + + + if(scriptSession) + { + CleanupStack::PushL (scriptSession); + RCapabilityArray caps; + caps.Append (ECapabilityWriteUserData); + caps.Append (ECapabilityReadUserData); + caps.Append (ECapabilityLocation); + caps.Append (ECapabilityUserEnvironment); + + + + + TInt IsAllowed(scriptSession->IsAllowed(caps)); + + + + + caps.Close(); + + CleanupStack::PopAndDestroy ();//scriptSession + } + + + + + + int j = 0; + + while(j<10) + { + + delete iSession[j] ; + j++; + } + + +delete iTrust; +//__UHEAP_MARKEND; +return KErrNone; +} + + + + + + // ----------------------------------------------------------------------------- +// Cui_tsecuritymanager::secclient6 +// Example test method function. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt Cui_tsecuritymanager::secclient6(CStifItemParser& aItem ) + { + + __UHEAP_MARK; + + iSession = CRTSecManager::NewL (); + iSession2 = CRTSecManager::NewL (); // 2nd session + iTrust = CTrustInfo::NewL (); + + + + RFs fileSession; + if ( KErrNone==fileSession.Connect ()) + { + CleanupClosePushL (fileSession); + if(KErrNone==fileSession.ShareProtected()) + { + RFile secPolicyFile; + + if ( KErrNone == secPolicyFile.Open (fileSession, _L("c:\\data\\Others\\accesspolicy.xml"), + EFileReadDirectIO)) + { + CleanupClosePushL (secPolicyFile); + iPolicyId = iSession->SetPolicy (secPolicyFile); + CleanupStack::PopAndDestroy ();//secPolicyFile + } + } + CleanupStack::PopAndDestroy ();//fileSession + } + + + TInt32 exId = iSession->RegisterScript (iPolicyId, *iTrust); + + CRTSecMgrScriptSession* scriptSession; + + + scriptSession = iSession->GetScriptSessionL(iPolicyId, exId); + + + + + if(scriptSession) + { + CleanupStack::PushL (scriptSession); + RCapabilityArray caps; + caps.Append (ECapabilityWriteUserData); + caps.Append (ECapabilityReadUserData); + caps.Append (ECapabilityLocation); + caps.Append (ECapabilityUserEnvironment); + + + + + TInt IsAllowed(scriptSession->IsAllowed(caps)); + + + + + caps.Close(); + + CleanupStack::PopAndDestroy ();//scriptSession + } + + + + TInt result = iSession->UnRegisterScript (exId, iPolicyId); + + TInt result1 = iSession->UnRegisterScript (exId, iPolicyId); + + +if(result1 != ErrUnRegisterScriptFailed ) +{ + +delete iSession; +delete iSession2; +delete iTrust; +return result1; + } + +//delete scriptSession1; +delete iSession; +delete iSession2; +delete iTrust; +//__UHEAP_MARKEND; +return KErrNone; +} + + + + + + // ----------------------------------------------------------------------------- +// Cui_tsecuritymanager::secclient7 +// Example test method function. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt Cui_tsecuritymanager::secclient7(CStifItemParser& aItem ) + { + + __UHEAP_MARK; + TPtrC sptr; + TInt32 exId; + aItem.GetNextString(sptr); + + iSession = CRTSecManager::NewL (); + iSession2 = CRTSecManager::NewL (); // 2nd session + iTrust = CTrustInfo::NewL (); + RFile secPolicyFile; + + + RFs fileSession; + if ( KErrNone==fileSession.Connect ()) + { + CleanupClosePushL (fileSession); + if(KErrNone==fileSession.ShareProtected()) + { + + + if ( KErrNone == secPolicyFile.Open (fileSession, _L("c:\\data\\Others\\accesspolicy.xml"), + EFileShareAny)) + { + CleanupClosePushL (secPolicyFile); + // iPolicyId = iSession->SetPolicy (secPolicyFile); + iPolicyId = iSession->UpdatePolicy(iPolicyId,secPolicyFile); + + + CleanupStack::PopAndDestroy ();//secPolicyFile + } + } + CleanupStack::PopAndDestroy ();//fileSession + } + + + + + + + if(iPolicyId!= ErrInvalidPolicyID) + return KErrGeneral; + + if(!sptr.Compare(_L("gsswithtrust"))) + { + + + scriptSession = iSession->GetScriptSessionL(iPolicyId,*iTrust ); +if(scriptSession != NULL) +return KErrGeneral; + } + + if(!sptr.Compare(_L("gsswithouttrust"))) + { +exId = iSession->RegisterScript(iPolicyId, *iTrust); + scriptSession = iSession->GetScriptSessionL(iPolicyId, exId); + +if(scriptSession != NULL) +return KErrGeneral; + } + + + + +//delete scriptSession1; +delete iSession; +delete iSession2; +delete iTrust; +//__UHEAP_MARKEND; +return KErrNone; +} + + + + + + + // ----------------------------------------------------------------------------- +// Cui_tsecuritymanager::secclient8 +// Example test method function. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt Cui_tsecuritymanager::secclient8( CStifItemParser& aItem ) + { + + __UHEAP_MARK; + TInt32 exId; + TPtrC sptr; + + aItem.GetNextString(sptr); + CRTSecMgrScriptSession* scriptSession; + iSession = CRTSecManager::NewL (); + // iSession2 = CRTSecManager::NewL (); + iTrust = CTrustInfo::NewL (); + + + + RFs fileSession; + if ( KErrNone==fileSession.Connect ()) + { + CleanupClosePushL (fileSession); + if(KErrNone==fileSession.ShareProtected()) + { + RFile secPolicyFile; + + TBuf8<5000> aFilebuffer ; + + if ( KErrNone == secPolicyFile.Open (fileSession, _L("c:\\data\\Others\\accesspolicy.xml"), + EFileShareAny)) + { + + + CleanupClosePushL (secPolicyFile); + + + + if(!sptr.Compare(_L("File"))) + { + + + + iPolicyId = iSession->SetPolicy (secPolicyFile); + + iPolicyId = iSession->UpdatePolicy(iPolicyId,secPolicyFile); + + + + } + + if(!sptr.Compare(_L("Buffer"))) + { + if(KErrNone == secPolicyFile.Read(aFilebuffer)) + { + + iPolicyId = iSession->SetPolicy (aFilebuffer); + iPolicyId = iSession->UpdatePolicy(iPolicyId,aFilebuffer); + + + } + } + + + + CleanupStack::PopAndDestroy ();//secPolicyFile + } + } + CleanupStack::PopAndDestroy ();//fileSession + } + + aItem.GetNextString(sptr); + + if(!sptr.Compare(_L("registerscript"))) + { + + + exId = iSession->RegisterScript(iPolicyId, *iTrust); + scriptSession = iSession->GetScriptSessionL(iPolicyId, exId); + } + + if(!sptr.Compare(_L("noregisterscript"))) + { + //no implementaion + + scriptSession = iSession->GetScriptSessionL(iPolicyId,*iTrust ); + } + + + + + + + + + + +//#endif + + + + if(scriptSession) + { + CleanupStack::PushL (scriptSession); + RCapabilityArray caps ; + caps.Append (ECapabilityWriteUserData); + caps.Append (ECapabilityReadUserData); + caps.Append (ECapabilityLocation); + caps.Append (ECapabilityUserEnvironment); + aItem.GetNextString(sptr); + if(!sptr.Compare(_L("advancedprompt"))) + { + + scriptSession->PromptHandler()->SetPromptOption(RTPROMPTUI_ADVANCED); + } + + + RCapabilityArray unMatchedCapabilities; + TInt isAllowed(scriptSession->IsAllowed (caps,unMatchedCapabilities)); + + // TInt IsAllowed(scriptSession->IsAllowed(caps)); + + + + + caps.Close(); + + CleanupStack::PopAndDestroy ();//scriptSession + } + + + + + // TInt result = iSession->UnSetPolicy (iPolicyId); + + + + + + + + +//delete scriptSession1; +delete iSession; +//delete iSession2; +delete iTrust; +//__UHEAP_MARKEND; +return KErrNone; +} + + + + + // ----------------------------------------------------------------------------- +// Cui_tsecuritymanager::secclient1 +// Example test method function. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt Cui_tsecuritymanager::secclient9( CStifItemParser& aItem ) + { + + __UHEAP_MARK; + TInt32 exId; + TPtrC sptr; + + + + iSession = CRTSecManager::NewL (); + // iSession2 = CRTSecManager::NewL (); + iTrust = CTrustInfo::NewL (); + + + + RFs fileSession; + if ( KErrNone==fileSession.Connect ()) + { + CleanupClosePushL (fileSession); + if(KErrNone==fileSession.ShareProtected()) + { + RFile secPolicyFile; + + + TBuf8<5000> aFilebuffer ; + + + + + + + + if ( KErrNone == secPolicyFile.Open (fileSession, _L("c:\\data\\Others\\accesspolicy.xml"), + EFileShareAny)) + { + + + CleanupClosePushL (secPolicyFile); + + + if(KErrNone == secPolicyFile.Read(aFilebuffer)) + { + + iPolicyId = iSession->SetPolicy (aFilebuffer); + } + + + + + CleanupStack::PopAndDestroy ();//secPolicyFile + } + } + CleanupStack::PopAndDestroy ();//fileSession + } + + + aItem.GetNextString(sptr); + + if(!sptr.Compare(_L("nohash"))) + { + + + exId = iSession->RegisterScript (iPolicyId, *iTrust); + scriptSession = iSession->GetScriptSessionL(iPolicyId,*iTrust ); + } + + if(!sptr.Compare(_L("hash"))) + { + + _LIT(KHash,"sdsds"); + TBuf<10> aHash; + aHash.Copy(_L("sdsds")); + exId = iSession->RegisterScript(iPolicyId,aHash,*iTrust); + scriptSession = iSession->GetScriptSessionL(iPolicyId, exId); + } + + + +// CRTSecMgrScriptSession* scriptSession; + + + + + +//#endif + + + + if(scriptSession) + { + CleanupStack::PushL (scriptSession); + RCapabilityArray caps; + caps.Append (ECapabilityWriteUserData); + caps.Append (ECapabilityReadUserData); + caps.Append (ECapabilityLocation); + caps.Append (ECapabilityUserEnvironment); + + + // RCapabilityArray caps; + RCapabilityArray unMatchedCapabilities; + TInt isAllowed(scriptSession->IsAllowed (caps,unMatchedCapabilities)); + + // TInt IsAllowed(scriptSession->IsAllowed(caps)); + + + + + caps.Close(); + + CleanupStack::PopAndDestroy ();//scriptSession + } + + + + + // TInt result = iSession->UnSetPolicy (iPolicyId); + + + + + + + + +//delete scriptSession1; +delete iSession; +//delete iSession2; +delete iTrust; +//__UHEAP_MARKEND; +return KErrNone; +} + + + + + + + // ----------------------------------------------------------------------------- +// Cui_tsecuritymanager::secclient10 +// Example test method function. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt Cui_tsecuritymanager::secclient10( CStifItemParser& aItem ) + { + + __UHEAP_MARK; + TInt32 exId; + TPtrC sptr; + + aItem.GetNextString(sptr); + CRTSecMgrScriptSession* scriptSession; + iSession = CRTSecManager::NewL (); + // iSession2 = CRTSecManager::NewL (); + iTrust = CTrustInfo::NewL (); + + + + RFs fileSession; + if ( KErrNone==fileSession.Connect ()) + { + CleanupClosePushL (fileSession); + if(KErrNone==fileSession.ShareProtected()) + { + RFile secPolicyFile; + + TBuf8<5000> aFilebuffer ; + + if ( KErrNone == secPolicyFile.Open (fileSession, _L("c:\\data\\Others\\accesspolicy.xml"), + EFileShareAny)) + { + + + CleanupClosePushL (secPolicyFile); + + + + if(!sptr.Compare(_L("File"))) + { + + + + iPolicyId = iSession->SetPolicy (secPolicyFile); + + iPolicyId = iSession->UpdatePolicy(iPolicyId,secPolicyFile); + + + + } + + if(!sptr.Compare(_L("Buffer"))) + { + if(KErrNone == secPolicyFile.Read(aFilebuffer)) + { + + iPolicyId = iSession->SetPolicy (aFilebuffer); + iPolicyId = iSession->UpdatePolicy(iPolicyId,aFilebuffer); + + + } + } + + + + CleanupStack::PopAndDestroy ();//secPolicyFile + } + } + CleanupStack::PopAndDestroy ();//fileSession + } + + aItem.GetNextString(sptr); + + if(!sptr.Compare(_L("registerscript"))) + { + + + exId = iSession->RegisterScript(iPolicyId, *iTrust); + scriptSession = iSession->GetScriptSessionL(iPolicyId, exId); + } + + if(!sptr.Compare(_L("noregisterscript"))) + { + //no implementaion + + scriptSession = iSession->GetScriptSessionL(iPolicyId,*iTrust ); + } + + + + + + + + + + +//#endif + + + + if(scriptSession) + { + CleanupStack::PushL (scriptSession); + RCapabilityArray caps ; + caps.Append (ECapabilityWriteUserData); + caps.Append (ECapabilityReadUserData); + caps.Append (ECapabilityLocation); + caps.Append (ECapabilityUserEnvironment); + // caps.Append(ECapabilitySurroundingsDD); + aItem.GetNextString(sptr); + if(!sptr.Compare(_L("advancedprompt"))) + { + + scriptSession->PromptHandler()->SetPromptOption(RTPROMPTUI_ADVANCED); + } + + + RCapabilityArray unMatchedCapabilities; + unMatchedCapabilities.Append (ECapabilitySurroundingsDD); + TInt isAllowed(scriptSession->IsAllowed (caps,unMatchedCapabilities)); + + // TInt IsAllowed(scriptSession->IsAllowed(caps)); + + + + + caps.Close(); + + CleanupStack::PopAndDestroy ();//scriptSession + } + + + + + // TInt result = iSession->UnSetPolicy (iPolicyId); + + + + + + + + +//delete scriptSession1; +delete iSession; +//delete iSession2; +delete iTrust; +//__UHEAP_MARKEND; +return KErrNone; +} + + + + + + + // ----------------------------------------------------------------------------- +// Cui_tsecuritymanager::secclient1 +// Example test method function. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt Cui_tsecuritymanager::secclient11( CStifItemParser& aItem ) + { + + + TInt cnt = User::CountAllocCells(); + // __UHEAP_MARK; + TInt32 exId; + TPtrC sptr; + + aItem.GetNextString(sptr); + + iSession = CRTSecManager::NewL (); + // iSession2 = CRTSecManager::NewL (); + iTrust = CTrustInfo::NewL (); + + // isubsession = RSecMgrSubSession::NewL(); + // SubSessionHandle(); + + RFs fileSession; + if ( KErrNone==fileSession.Connect ()) + { + CleanupClosePushL (fileSession); + if(KErrNone==fileSession.ShareProtected()) + { + RFile secPolicyFile; + + + TBuf8<5000> aFilebuffer ; + + + + + + aItem.GetNextString(sptr); + + if ( KErrNone == secPolicyFile.Open (fileSession, _L("c:\\data\\Others\\accesspolicy.xml"), + EFileShareAny)) + { + + + CleanupClosePushL (secPolicyFile); + + + + if(!sptr.Compare(_L("File"))) + { + + + + iPolicyId = iSession->SetPolicy (secPolicyFile); + } + if(!sptr.Compare(_L("Buffer"))) + { + if(KErrNone == secPolicyFile.Read(aFilebuffer)) + { + + iPolicyId = iSession->SetPolicy (aFilebuffer); + } + } + + + + CleanupStack::PopAndDestroy ();//secPolicyFile + } + } + CleanupStack::PopAndDestroy ();//fileSession + } + + + aItem.GetNextString(sptr); + + if(!sptr.Compare(_L("nohash"))) + { + + + exId = iSession->RegisterScript (iPolicyId, *iTrust); + } + + if(!sptr.Compare(_L("hash"))) + { + + _LIT(KHash,"sdsds"); + TBuf<10> aHash; + aHash.Copy(_L("sdsds")); + exId = iSession->RegisterScript(iPolicyId,aHash,*iTrust); + + } + + + + CRTSecMgrScriptSession* scriptSession; + + scriptSession = iSession->GetScriptSessionL(iPolicyId, exId); + + + +//#endif + + + + if(scriptSession) + { + CleanupStack::PushL (scriptSession); + RCapabilityArray caps; + // caps.Append (ECapabilityWriteUserData); + // caps.Append (ECapabilityReadUserData); + // caps.Append (ECapabilityLocation); + caps.Append (ECapabilityNetworkServices); + + + + + TInt IsAllowed(scriptSession->IsAllowed(caps)); + + + + + caps.Close(); + + CleanupStack::PopAndDestroy ();//scriptSession + } + + + + + // TInt result = iSession->UnSetPolicy (iPolicyId); + + + + + + + + +//delete scriptSession1; +delete iSession; +//delete iSession2; +delete iTrust; + + cnt = User::CountAllocCells(); +//__UHEAP_MARKEND; +return KErrNone; +} + + + // ----------------------------------------------------------------------------- +// Cui_tsecuritymanager::secclient12 +// Example test method function. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt Cui_tsecuritymanager::secclient12( CStifItemParser& aItem ) + { + + + TInt cnt = User::CountAllocCells(); + // __UHEAP_MARK; + TInt32 exId; + TPtrC sptr; + + aItem.GetNextString(sptr); + + iSession = CRTSecManager::NewL (); + // iSession2 = CRTSecManager::NewL (); + iTrust = CTrustInfo::NewL (); + + + + RFs fileSession; + if ( KErrNone==fileSession.Connect ()) + { + CleanupClosePushL (fileSession); + if(KErrNone==fileSession.ShareProtected()) + { + RFile secPolicyFile; + + + TBuf8<500> aFilebuffer ; + + + + + + aItem.GetNextString(sptr); + + if ( KErrNone == secPolicyFile.Open (fileSession, _L("c:\\data\\Others\\accesspolicy.xml"), + EFileShareAny)) + { + + + + + + + CleanupClosePushL (secPolicyFile); + + + + if(KErrNone == secPolicyFile.Read(aFilebuffer)) + { + + iPolicyId = iSession->SetPolicy (aFilebuffer); + } + + if(iPolicyId!=ErrInvalidPolicyFormat ) + return KErrGeneral; + + + CleanupStack::PopAndDestroy ();//secPolicyFile + } + } + CleanupStack::PopAndDestroy ();//fileSession + } + + + + + + exId = iSession->RegisterScript (iPolicyId, *iTrust); + + if(exId!=ErrInvalidPolicyID) + return KErrGeneral; + + + CRTSecMgrScriptSession* scriptSession; + + scriptSession = iSession->GetScriptSessionL(iPolicyId, exId); + + + +//#endif + + + + if(scriptSession) + { + CleanupStack::PushL (scriptSession); + RCapabilityArray caps; + caps.Append (ECapabilityWriteUserData); + caps.Append (ECapabilityReadUserData); + caps.Append (ECapabilityLocation); + caps.Append (ECapabilityUserEnvironment); + + + + + TInt IsAllowed(scriptSession->IsAllowed(caps)); + + + + + caps.Close(); + + CleanupStack::PopAndDestroy ();//scriptSession + } + + + + + // TInt result = iSession->UnSetPolicy (iPolicyId); + + + + + + + + +//delete scriptSession1; +delete iSession; +//delete iSession2; +delete iTrust; + + cnt = User::CountAllocCells(); +//__UHEAP_MARKEND; +return KErrNone; +} + + + + + + // ----------------------------------------------------------------------------- +// Cui_tsecuritymanager::secclient13 +// Example test method function. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt Cui_tsecuritymanager::secclient13( CStifItemParser& aItem ) + { + + + TInt cnt = User::CountAllocCells(); + // __UHEAP_MARK; + TInt32 exId; + TPtrC sptr; + + TBuf<50> path; + aItem.GetNextString(sptr); + + + + // _LIT(path,"c:\\data\\Others\\accesspolicy_1.xml"); + + if(!sptr.Compare(_L("1"))) + { + path.Copy(_L("c:\\data\\Others\\accesspolicy_1.xml")) ; + } + + if(!sptr.Compare(_L("2"))) + { + + path.Copy(_L("c:\\data\\Others\\accesspolicy_2.xml")) ; + } + if(!sptr.Compare(_L("3"))) + { + + path.Copy(_L("c:\\data\\Others\\accesspolicy_3.xml")) ; + } + + + + + + iSession = CRTSecManager::NewL (); + iTrust = CTrustInfo::NewL (); + + + + RFs fileSession; + if ( KErrNone==fileSession.Connect ()) + { + CleanupClosePushL (fileSession); + if(KErrNone==fileSession.ShareProtected()) + { + RFile secPolicyFile; + + + TBuf8<5000> aFilebuffer ; + + + + + + + if ( KErrNone == secPolicyFile.Open (fileSession,path, + EFileShareAny)) + { + + + + CleanupClosePushL (secPolicyFile); + + + + if(KErrNone == secPolicyFile.Read(aFilebuffer)) + { + + iPolicyId = iSession->SetPolicy (aFilebuffer); + } + + if(iPolicyId!=ErrInvalidPolicyFormat ) + return KErrGeneral; + + + CleanupStack::PopAndDestroy ();//secPolicyFile + } + } + CleanupStack::PopAndDestroy ();//fileSession + } + + + + + + exId = iSession->RegisterScript (iPolicyId, *iTrust); + + if(exId!=ErrInvalidPolicyID) + return KErrGeneral; + + + CRTSecMgrScriptSession* scriptSession; + + scriptSession = iSession->GetScriptSessionL(iPolicyId, exId); + + + +//#endif + + + + if(scriptSession) + { + CleanupStack::PushL (scriptSession); + RCapabilityArray caps; + caps.Append (ECapabilityWriteUserData); + caps.Append (ECapabilityReadUserData); + caps.Append (ECapabilityLocation); + caps.Append (ECapabilityUserEnvironment); + + + + + TInt IsAllowed(scriptSession->IsAllowed(caps)); + + + + + caps.Close(); + + CleanupStack::PopAndDestroy ();//scriptSession + + return KErrGeneral; + } + + + + // TInt result = iSession->UnSetPolicy (iPolicyId); + + + + + + + + +//delete scriptSession1; +delete iSession; +//delete iSession2; +delete iTrust; + + cnt = User::CountAllocCells(); +//__UHEAP_MARKEND; +return KErrNone; +} + + + + + diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/rtsecuritymanager_common_api/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/rtsecuritymanager_common_api/group/bld.inf Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,31 @@ +/* +* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Build file for rtsecuritymanager common API +* +*/ + + + + + + + +#include + +PRJ_PLATFORMS +DEFAULT + +PRJ_EXPORTS + +../inc/rtsecmgrcommondef.h MW_LAYER_PLATFORM_EXPORT_PATH(rtsecmgrcommondef.h) diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/rtsecuritymanager_common_api/inc/rtsecmgrcommondef.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/rtsecuritymanager_common_api/inc/rtsecmgrcommondef.h Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,121 @@ +/* +* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Security Manager common header + * +*/ + + + + + + +#ifndef _RTSECMGR_COMMON_DEF_H_ +#define _RTSECMGR_COMMON_DEF_H_ + +#include +#include + +typedef TInt TPolicyID; +typedef TInt TExecutableID; +typedef TUint32 TPermGrant; +typedef RArray RCapabilityArray; + +typedef TUint32 TCapabilityBitSet; + +//constant for default NULL capability bitset +const TCapabilityBitSet KDefaultNullBit = 0x0000; + +//constant for default capability bitset with LSB enabled +const TCapabilityBitSet KDefaultEnableBit = 0x0001; + +enum TAccessCheckCode + { + EAccessNok = -1, + EAccessOk + }; + +enum + { + EPromptOk = EAknSoftkeyOk, + EPromptCancel = EAknSoftkeyCancel + }; + +/* + * Enumerations for various duration option + */ +const TUint32 DEFAULT_ONESHOT = 0x80000000; +const TUint32 DEFAULT_SESSION = 0x40000000; +const TUint32 DEFAULT_BLANKET = 0x20000000; + +const TUint32 CONDITION_ONESHOT = 0x8000000; +const TUint32 CONDITION_SESSION = 0x4000000; +const TUint32 CONDITION_BLANKET = 0x2000000; + +const TUint32 ONESHOT_DENIED = 0x88000000; +const TUint32 SESSION_DENIED = 0x44000000; +const TUint32 BLANKET_DENIED = 0x22000000; + +const TUint32 DEFAULT_ALL = 0xE0000000; +const TUint32 CONDITION_ALL = 0xE000000; +const TUint32 CAPABILITY_ALL = 0xFFFFF; + +const TUint32 NetworkServices_CAP = 0x00002000; + +enum TUserPromptOption + { + RTUserPrompt_UnDefined = 0, //can be used for permisssions denied by default + RTUserPrompt_OneShot = CONDITION_ONESHOT, + RTUserPrompt_Session = CONDITION_SESSION, + RTUserPrompt_Permanent = CONDITION_BLANKET, + RTUserPrompt_Denied = ONESHOT_DENIED, + RTUserPrompt_SessionDenied = SESSION_DENIED, + RTUserPrompt_PermDenied = BLANKET_DENIED + }; + +enum TSecMgrPromptUIOption + { + RTPROMPTUI_DEFAULT = 0, + RTPROMPTUI_ADVANCED + }; + +//error code used btn server and client +//error code starts with -101 as predefined symbian codes +//range upto -48 +enum TSecMgrErrCode + { + ErrInvalidParameters = -101, + ErrFileSessionNotShared = ErrInvalidParameters -1, + ErrInvalidPolicyFormat = ErrFileSessionNotShared -1, + ErrFatalDBError = ErrInvalidPolicyFormat -1, + ErrSetPolicyFailed = ErrFatalDBError -1, + ErrUpdatePolicyFailed = ErrSetPolicyFailed -1, + ErrInvalidPolicyID = ErrUpdatePolicyFailed -1, + ErrPolicyIDDoesNotExist = ErrInvalidPolicyID -1, + ErrInvalidScriptID = ErrPolicyIDDoesNotExist -1, + ErrRegisterScriptFailed = ErrInvalidScriptID -1, + ErrUpdateGrantFailed = ErrRegisterScriptFailed -1, + ErrServerReadConfig = ErrUpdateGrantFailed -1, + ErrUnRegisterScriptFailed = ErrServerReadConfig -1, + ErrUnSetPolicyFailed = ErrUnRegisterScriptFailed -1, + ErrUpdatePermGrantFailed = ErrUnSetPolicyFailed -1, + ErrBackupNotCreated = ErrUpdatePermGrantFailed - 1, + ErrRestoreTempFailed = ErrBackupNotCreated - 1, + ErrAccessDenied = ErrRestoreTempFailed - 1 + }; + +const TInt KAnonymousScript = -1; +const TInt KInvalidPolicyID = -1; +const TInt KMaxTrustInfoLen = 512; //magic number - half of 1 KB + +#endif //_RTSECMGR_COMMON_DEF_H_ diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/rtsecuritymanager_common_api/rtsecuritymanager_common_api.metaxml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/rtsecuritymanager_common_api/rtsecuritymanager_common_api.metaxml Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,13 @@ + + +rtsecuritymanager_common_api +rtsecuritymanager_common_api +c++ +rtsecuritymanager + + + +no +no + + diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/rtsecuritymanager_common_api/tsrc/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/rtsecuritymanager_common_api/tsrc/group/bld.inf Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,24 @@ +/* +* Copyright (c) 2002 - 2007 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: ?Description +* +*/ + + + + + + + +#include "../../../rtsecuritymanager_client_api/tsrc/group/bld.inf" \ No newline at end of file diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/rtsecuritymanager_utility_api/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/rtsecuritymanager_utility_api/group/bld.inf Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,34 @@ +/* +* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Build file for rtsecuritymanager utility API +* +*/ + + + + + + + +#include + +PRJ_PLATFORMS +DEFAULT + +PRJ_EXPORTS +../inc/rtsecmgrpermission.h MW_LAYER_PLATFORM_EXPORT_PATH(rtsecmgrpermission.h) +../inc/rtsecmgrpermissionset.h MW_LAYER_PLATFORM_EXPORT_PATH(rtsecmgrpermissionset.h) +../inc/rtsecmgrscript.h MW_LAYER_PLATFORM_EXPORT_PATH(rtsecmgrscript.h) +../inc/rtsecmgrutility.h MW_LAYER_PLATFORM_EXPORT_PATH(rtsecmgrutility.h) + diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/rtsecuritymanager_utility_api/inc/rtsecmgrpermission.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/rtsecuritymanager_utility_api/inc/rtsecmgrpermission.h Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,272 @@ +/* +* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Defines permission data structure + * +*/ + + + + + + + +#ifndef _C_PERMISSION_H_ +#define _C_PERMISSION_H_ + +#include +#include +#include +#include + +typedef TUint32 TPermissionData; +const TPermissionData LOWBIT = 0x0001; + +/** + * Represents permission data structure. + * + * A permission data is modelled as 32 bit unsigned integer type + * with the following layout : + * + * - With leftmost 20 bits representing one of symbian native capability value + * - Bits 25 to 28 represent various user prompt conditions like oneshot, + * session or blanket + * - Bits 29-32 represent default condition value + * - Bits 21-24 are reserved + * + * Various accessor and modifier methods are provided to access underlying + * native capability value, the default condition and the conditions set + * for this permission data. + * + * @lib rtsecmgrutil.lib + */ +NONSHARABLE_CLASS(CPermission) : public CBase + { +public: + /** + * Default constructor + * + */ + IMPORT_C static CPermission* NewL(); + + /** + * destructor + * + */ + IMPORT_C ~CPermission(); + + /** + * Default constructor + * + */ + IMPORT_C static CPermission* NewLC(); + + + /** + * Copy constructor + * + * @param aPermission TPermission permission source from which copy is made + */ + IMPORT_C static CPermission* NewL(const CPermission& aPermission); + + /** + * Copy constructor + * + * @param aPermission TPermission permission source from which copy is made + */ + IMPORT_C static CPermission* NewLC(const CPermission& aPermission); + + /** + * Overloaded constructor taking capability + * + * @param aCapability TCapability capability to be set + */ + IMPORT_C static CPermission* NewL(const RCapabilityArray& aCapabilities); + + /** + * Overloaded constructor taking capability + * + * @param aCapability TCapability capability to be set + */ + IMPORT_C static CPermission* NewLC(const RCapabilityArray& aCapabilities); + + /** + * Overloaded constructor taking capability and default condition + * + * @param aCapability TCapability capability to be set + * @param aDefaultOption TUserPromptOption Default user prompt option to be set + */ + IMPORT_C static CPermission* NewL(const RCapabilityArray& aCapabilities, TUserPromptOption aDefOpt); + + /** + * Overloaded constructor taking capability and default condition + * + * @param aCapability TCapability capability to be set + * @param aDefaultOption TUserPromptOption Default user prompt option to be set + */ + IMPORT_C static CPermission* NewLC(const RCapabilityArray& aCapabilities, TUserPromptOption aDefOpt); + + /** + * Overloaded constructor taking capability, default condition and conditions of + * permission + * + * @param aCapability TCapability capability to be set + * @param aDefaultOption TUserPromptOption Default user prompt option to be set + * @param aCondition TUserPromptOption Conditions to be set + */ + IMPORT_C static CPermission* NewL(const RCapabilityArray& aCapabilities, TUserPromptOption aDefOpt, + TUserPromptOption aCondition); + + /** + * Overloaded constructor taking capability, default condition and conditions of + * permission + * + * @param aCapability TCapability capability to be set + * @param aDefaultOption TUserPromptOption Default user prompt option to be set + * @param aCondition TUserPromptOption Conditions to be set + */ + IMPORT_C static CPermission* NewLC(const RCapabilityArray& aCapabilities, TUserPromptOption aDefOpt, + TUserPromptOption aCondition); + + /** + * Returns default prompt option + * + * @return TUserPromptOption default condition + */ + IMPORT_C TUserPromptOption Default() const; + + /** + * Returns condition + * + * @return TUserPromptOption condition + */ + IMPORT_C TUserPromptOption Condition() const; + + /** + * Returns capability value + * + * @return TCapability capability value + */ + IMPORT_C TCapability Capability() const; + + /** + * Returns capability of the permission + * + * @param aCapabilities RCapabilityArray& contains the capabilities + */ + IMPORT_C void Capabilitilites(RCapabilityArray& aCapabilities) const; + + /** + * Sets default condition value + * + * @param aDefaultOption TUserPromptOption default condition value + */ + IMPORT_C void SetDefault(TUserPromptOption aDefaultOption); + + /** + * Sets condition value + * + * @param aCondition TUserPromptOption condition value + */ + IMPORT_C void SetCondition(TUserPromptOption aCondition); + + /** + * Sets the name of the permission + * + * @param aName const TDesC& value + */ + IMPORT_C void SetPermName(const TDesC& aName); + + /** + * Returns Name of the permission + * + * @return const TDesC& + */ + IMPORT_C const TDesC& PermName() const; + + /** + * Returns iPermissionData of the permission + * + * @return TPermission iPermissionData value + */ + IMPORT_C TPermissionData PermissionData() const; + + // --------------------------------------------------------------------------- + // Adds a capability to permission data + // --------------------------------------------------------------------------- + // + IMPORT_C void AppendCapPermData(TCapability aCap); + + // --------------------------------------------------------------------------- + // Adds an unconditional capability + // --------------------------------------------------------------------------- + // + IMPORT_C void SetPermissionData(TPermissionData aPermData); + + /** + * Internalizes permission data from stream + * + * @param aInStream RReadStream input source stream + */ + IMPORT_C void InternalizeL(RReadStream& aInStream); + + /** + * Externalizes permission data to stream + * + * @param aOutStream RWriteStream output stream + */ + IMPORT_C void ExternalizeL(RWriteStream& aOutStream) const; + +private: + /* + * Default private constructor + */ + inline CPermission() : iPermName(NULL), iPermissionData(0) + {} + + /* + * private copy constructor + */ + CPermission(const CPermission& aPermission); + + + CPermission(const RCapabilityArray& aCapabilities); + + CPermission(const RCapabilityArray& aCapabilities, TUserPromptOption aDefOpt); + + CPermission(const RCapabilityArray& aCapabilities, TUserPromptOption aDefOpt,TUserPromptOption aCondition); + +private: + //layout of TPermissionData + //__________________________________________________________________________ + //| | | | | + //| Default | Condition | RESERVED | CAPABILITY BITS | + //|_________________|______________|_______________|________________________| + // + // 32,31,30,29, 28,27,26,25, 24,23,22,21, 20,19,18,...4,3,2,1 + // + //underlying permission data structure + + + TPermissionData iPermissionData; + + + /* + * alias group name + */ + HBufC* iPermName; + + }; + +#endif //_T_PERMISSION_H_ + diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/rtsecuritymanager_utility_api/inc/rtsecmgrpermissionset.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/rtsecuritymanager_utility_api/inc/rtsecmgrpermissionset.h Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,200 @@ +/* +* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Defines permission set class + * +*/ + + + + + + + +#ifndef _CPERMISSIONSET_H_ +#define _CPERMISSIONSET_H_ + +#include +#include +#include +#include +#include + +//Forward declaration +class CPermissionSet; + +typedef RPointerArray RPermissions; +typedef TUint32 TUnConditionalPermission; +typedef RArray RUnConditionals; +typedef RPointerArray RPermissionSet; + +/** + * CPermissionSet represents list of user grantable permissions + * and list of unconditional permissions. + * + * CPermissionSet provides accessor and modifier methods to access + * and modify CPermissionSet object state + * + * @lib rtsecmgrutil.lib + */ +NONSHARABLE_CLASS(CPermissionSet) : public CBase + { +public: + /** + * Two-phased constructor + * + * Constructs a CPermissionSet instance + * + * @return pointer to an instance of CPermissionSet + */ + IMPORT_C static CPermissionSet* NewL(); + + /** + * Two-phased constructor + * + * Constructs a CPermissionSet instance and leaves the created instance + * on the cleanupstack + * + * @return pointer to an instance of CPermissionSet + */ + IMPORT_C static CPermissionSet* NewLC(); + + /** + * Two-phased constructor + * + * Constructs a CPermissionSet instance from another permissionset + * object + * + * @param aPermSet CPermissionSet source permissionset object + * + * @return pointer to an instance of CPermissionSet + */ + IMPORT_C static CPermissionSet* NewL(const CPermissionSet& aPermSet); + + /** + * Two-phased constructor + * + * Constructs a CPermissionSet instance from another permissionset + * object and leaves the created instance on the cleanupstack + * + * @param aPermSet CPermissionSet source permissionset object + * + * @return pointer to an instance of CPermissionSet + */ + IMPORT_C static CPermissionSet* NewLC(const CPermissionSet& aPermSet); + + /** + * Destructor + * + */ + IMPORT_C ~CPermissionSet(); + + /** + * Externalizes permissionset data to stream + * + * @param aOutStream RWriteStream output stream + */ + IMPORT_C void ExternalizeL(RWriteStream& aSink) const; + + /** + * Internalizes permissionset data from stream + * + * @param aInStream RReadStream input source stream + */ + IMPORT_C void InternalizeL(RReadStream& aSource); + + /* + * Adds an unconditional capability to the permissionset + * + * @param aCapability TCapability unconditional capability to be added + */ + IMPORT_C void AppendUncondCap(TCapability aCapability); + + /* + * Adds a list of unconditional capabilities to the permissionset + * + * @param TUnConditionalPermission aUnConditionals - list of TCapability that are to be added + */ + IMPORT_C void AppendUncondCapabilities(TUnConditionalPermission aUnConditionals); + + /* + * Adds a permission to the permissionset + * + * @param aPermission CPermission permission data to be added + * + */ + IMPORT_C void AppendPermission(CPermission& aPermission); + + /* + * Gets the list of user-grantable permissions + * + * @return RPermissions non-modifiable reference to the list of user-grantable permissions + * + */ + IMPORT_C const RPermissions& Permissions() const; + + /* + * Gets the list of unconditional permissions + * + * @return TUnConditionalPermission unconditional permission + * + */ + IMPORT_C TUnConditionalPermission UnconditionalCaps() const; + + /* + * Gets the list of unconditional permissions as array of + * TCapability + * + * @return RUnConditionals list of unconditional capabilities + * + * @see TCapability + * + */ + IMPORT_C void UnconditionalCaps(RUnConditionals& aUnConditionals) const; + + /* + * Gets list of user-grantable permissions. This overloaded version + * returns modifiable list of user-grantable permissions + * + * @return RPermissions list of user-grantable permissions + * + */ + IMPORT_C RPermissions& Permissions(); + +private: + /* + * Default private constructor + */ + inline CPermissionSet() + {} + + /* + * private copy constructor + */ + CPermissionSet(const CPermissionSet& aPermSet); + + /* + * Private second phase constructor + */ + void ConstructL(const CPermissionSet& aPermSet); + +private: + + //unconditional permissions + TUnConditionalPermission iUncondCapSet; + + //user-grantable permissions + RPermissions iPermissions; + }; +#endif //_CPERMISSIONSET_H_ + diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/rtsecuritymanager_utility_api/inc/rtsecmgrscript.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/rtsecuritymanager_utility_api/inc/rtsecmgrscript.h Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,295 @@ +/* +* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Models script data structure + * +*/ + + + + + + +#ifndef _CSCRIPT_H_ +#define _CSCRIPT_H_ + +#include +#include + +/** + * Type holding data to be used while prompting. + * + * The default or custom (runtime over-ridden) prompt handler requires the permission + * type to prompt and the user-selection to be returned to security + * manager for access permission check + * + * @lib rtsecmgrclient.lib + */ +NONSHARABLE_CLASS(CScript) : public CBase + { +public: + + /** + * Two-phased constructor + * + * Constructs a CScript instance + * + * @param aPolicyID TPolicyID policy identifier of the script + * @param aScriptID TExecutableID script identifier + * + * @return pointer to an instance of CScript + */ + IMPORT_C static CScript* NewL(TPolicyID aPolicyID,TExecutableID aScriptID); + + /** + * Two-phased constructor + * + * Constructs a CScript instance and leaves the created instance + * on cleanupstack + * + * @param aPolicyID TPolicyID policy identifier of the script + * @param aScriptID TExecutableID script identifier + * + * @return pointer to an instance of CScript + */ + IMPORT_C static CScript* NewLC(TPolicyID aPolicyID,TExecutableID aScriptID); + + /* + * Destructor + */ + IMPORT_C ~CScript(); + + /* + * overloaded assignment operator + * + * @param aRhs CScript source script object specified on the right + * hand side of the assignment operator + * + * @return CScript returns the reference of this script object + */ + IMPORT_C const CScript& operator=(const CScript& aRhs); + + /* + * Gets the policy identifier of the script + * + * @return TPolicyID policy identifier of the script + */ + IMPORT_C TPolicyID PolicyID() const; + + /* + * Gets the script identifier + * + * @return TExecutableID identifier of the script + */ + IMPORT_C TExecutableID ScriptID() const; + + /* + * Gets the permissionset of the script. The permissionset + * contains the list of user-grantable permissions and the list + * of unconditional permissions + * + * @return CPermissionSet permissionset of the script + */ + IMPORT_C const CPermissionSet& PermissionSet() const; + + /* + * Gets the permissionset of the script. The permissionset + * contains the list of user-grantable permissions and the list + * of unconditional permissions. This overloaded version returns + * a modifiable reference to permissionset object. + * + * @return CPermissionSet modifiable reference to permissionset of the script + */ + IMPORT_C CPermissionSet& PermissionSet(); + + /* + * Gets the permanently granted permissions + * + * @return TPermGrant permanently granted permission + * + */ + IMPORT_C TPermGrant PermGranted() const; + + /* + * Gets the permanently denied permissions + * + * @return TPermGrant permanently denied permission + * + */ + IMPORT_C TPermGrant PermDenied() const; + + /* + * Sets the permissionset of the script + * + * @param aPermissionSet CPermissionSet source permissionset to be set + */ + IMPORT_C void SetPermissionSet(const CPermissionSet& aPermissionSet); + + /** + * Externalizes script data to stream + * + * @param aOutStream RWriteStream output stream + */ + IMPORT_C void ExternalizeL(RWriteStream& aSink) const; + + /** + * Internalizes script data from stream + * + * @param aInStream RReadStream input source stream + */ + IMPORT_C void InternalizeL(RReadStream& aSource); + + /* + * Sets permanently granted permission + * + * @param aPermGrant TPermGrant permanently granted permission to be set + * + */ + IMPORT_C void SetPermGranted(TPermGrant aPermGrant); + + /* + * Sets permanently denied permission + * + * @param aPermDenied TPermGrant permanently denied permission to be set + * + */ + IMPORT_C void SetPermDenied(TPermGrant aPermDenied); + + /* + * Sets hash value of the script + * + * @param aHashMark TDesC hash value of the script + * + */ + inline void SetHashMarkL(const TDesC& aHashMark); + + /* + * Compares the HashValue of the script with the one passed as argument. + * + * @return TBool hash values match or not. + * + */ + inline TBool HashMatch(const TDesC& aHashValue = KNullDesC) const; + + /* + * returns hash value of the script + * + * @return TDesC hash value of the script + * + */ + inline TDesC Hash(); + +private: + /* + * default private constructor + * + */ + inline CScript():iPermGrant(KDefaultNullBit),iPermDenied(KDefaultNullBit) + {} + + /* + * overloaded constructor + * + * @param aPolicyID TPolicyID policy identifier of the script + * @param aScriptID TExecutableID script identifier + * + */ + inline CScript(TPolicyID aPolicyID,TExecutableID aScriptID):iPolicyID(aPolicyID),iPermGrant(KDefaultNullBit),iPermDenied(KDefaultNullBit),iScriptID(aScriptID) + {} + + /* + * copy constructor + * + * @param aRhs source script object + */ + CScript(const CScript& aRhs); + + /* + * Two-phased constructor + * + */ + void ConstructL(); + + +private: + //permission set + CPermissionSet* iPermissionSet; + + //script identifier + TExecutableID iScriptID; + + //policy identifier of the script + TPolicyID iPolicyID; + + //permanently granted permission + TPermGrant iPermGrant; + + //permanently denied permission + TPermGrant iPermDenied; //separate bit-patterns for permanently allowed & denied + + //hash value of the script + HBufC* iHashMark; + }; + +/* + * Sets hash value of the script + * + * @param aHashMark TDesC hash value of the script + * + */ +inline void CScript::SetHashMarkL(const TDesC& aHashMark) + { + if ( iHashMark) + { + delete iHashMark; + } + iHashMark = aHashMark.AllocLC (); + CleanupStack::Pop (); + } + +/* + * + * + * @return TBool Etrue + * + */ +inline TBool CScript::HashMatch(const TDesC& aHashValue) const + { + TBool matches(EFalse); + if(iHashMark) + { + if(0==aHashValue.CompareF(*iHashMark)) + { + return !matches; + } + } + return matches; + } + +/* + * + * @return TDesC hash value of the script. + * + */ + +inline TDesC CScript::Hash() + { + if(iHashMark) + return *iHashMark; + else + return KNullDesC; + } + +#endif //_CSCRIPT_H_ + +// End of file diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/rtsecuritymanager_utility_api/inc/rtsecmgrutility.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/rtsecuritymanager_utility_api/inc/rtsecmgrutility.h Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,36 @@ +/* +* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Security Manager utility header + * +*/ + + + + + + + +#ifndef _RTSECURITYMGRUTILITY_H_ +#define _RTSECURITYMGRUTILITY_H_ + +#include +#include +#include +#include +#include +#include + +#endif //_RTSECURITYMGRUTILITY_H_ + +// End of file diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/rtsecuritymanager_utility_api/rtsecuritymanager_utility_api.metaxml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/rtsecuritymanager_utility_api/rtsecuritymanager_utility_api.metaxml Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,14 @@ + + +rtsecuritymanager_utility_api +rtsecuritymanager_utility_api +c++ +rtsecuritymanager + + + + +no +no + + diff -r 000000000000 -r 99ef825efeca serviceapifw_plat/rtsecuritymanager_utility_api/tsrc/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_plat/rtsecuritymanager_utility_api/tsrc/group/bld.inf Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,24 @@ +/* +* Copyright (c) 2002 - 2007 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: ?Description +* +*/ + + + + + + + +#include "../../../rtsecuritymanager_client_api/tsrc/group/bld.inf" \ No newline at end of file diff -r 000000000000 -r 99ef825efeca serviceapifw_pub/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceapifw_pub/group/bld.inf Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,24 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + + + + diff -r 000000000000 -r 99ef825efeca sysdef_1_4_0.dtd --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sysdef_1_4_0.dtd Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 000000000000 -r 99ef825efeca tsrc/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/group/bld.inf Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,25 @@ +/* +* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + + + +#include "../../serviceapifw_plat/rtsecuritymanager_client_api/tsrc/group/bld.inf" +#include "../../serviceapifw_plat/liw_criteria_api/tsrc/group/bld.inf"