os/security/securityanddataprivacytools/securitytools/certapp/encdec/capabilityset.cpp
Update contrib.
2 * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
4 * This component and the accompanying materials are made available
5 * under the terms of the License "Eclipse Public License v1.0"
6 * which accompanies this distribution, and is available
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
9 * Initial Contributors:
10 * Nokia Corporation - initial contribution.
19 #define __INCLUDE_CAPABILITY_NAMES__
20 #include "capabilityset.h"
22 CapabilitySet::CapabilitySet()
24 memset(iCaps,0,sizeof(iCaps));
28 // Not currently used or tested
29 CapabilitySet::CapabilitySet(const CapabilitySet &aRef)
31 memcpy(iCaps, aRef.iCaps, sizeof(iCaps));
35 CapabilitySet &CapabilitySet::operator=(const CapabilitySet &aRhs)
38 if(this == &aRhs) return *this; // handle self assignment
40 memcpy(iCaps, aRhs.iCaps, sizeof(iCaps));
45 void CapabilitySet::AddCapability(TCapability aCapability)
48 if((TUint32)aCapability>=(TUint32)ECapability_HardLimit)
50 dbg << Log::Indent() << "Illegal capabaility value " << aCapability << Log::Endl();
55 TInt index = aCapability>>3;
56 TUint8 mask = (TUint8)(1<<(aCapability&7));
57 //mask &= ((TUint8*)&AllSupportedCapabilities)[index];
58 ((TUint8*)iCaps)[index] |= mask;
61 TBool CapabilitySet::HasCapability(TCapability aCapability) const
64 if((TUint32)aCapability>=(TUint32)ECapability_HardLimit)
70 return (((TUint8*)iCaps)[aCapability>>3]>>(aCapability&7))&1;
74 void EncodeHuman(REncodeWriteStream& aStream,const CapabilitySet &aCapSet)
76 aStream.WriteCStr(" { ");
77 for(TUint32 cap=0; cap < ECapability_Limit; ++cap)
79 if(aCapSet.HasCapability(TCapability(cap)))
81 aStream.WriteCStr(CapabilityNames[cap]);
86 for(TUint32 cap=ECapability_Limit; cap < ECapability_HardLimit; ++cap)
88 if(aCapSet.HasCapability(TCapability(cap)))
90 EncodeHuman(aStream, TUint32(cap));
95 aStream.WriteByte('}');
98 void DecodeHuman(RDecodeReadStream& aStream, CapabilitySet &aCapSet)
100 aStream.CheckName("{");
101 while(aStream.PeakToken() != "}")
104 // We process PeakToken so if it is not valid we can call
105 // DecodeHuman TUint32 to read the next token and process it
107 prog << Log::Indent() << "Parsing capability '" << aStream.PeakToken() << "'" << Log::Endl();
109 for(cap=0; cap < ECapability_Limit; ++cap)
111 if(aStream.PeakToken() == CapabilityNames[cap])
116 if(cap < ECapability_Limit)
118 // The token was ok, so read/discard it.
119 aStream.ReadNextToken();
123 // Fallback to decoding as a number
124 prog<< Log::Indent() << "WARNING: Unknown capability '" << aStream.PeakToken() << "' attempting to decode as a bit number..." << Log::Endl();
125 DecodeHuman(aStream, cap);
126 prog << Log::Indent() << "Decoded as " << cap << Log::Endl();
128 aCapSet.AddCapability(TCapability(cap));
130 aStream.CheckName("}");
134 void CapabilitySet::ExternalizeL(RWriteStream &aStream) const
136 TPckg<typeof(iCaps)> capsPckg(iCaps);
140 void CapabilitySet::InternalizeL(RReadStream &aStream)
142 TPckg<typeof(iCaps)> capsPckg(iCaps);