15 * |
15 * |
16 */ |
16 */ |
17 |
17 |
18 |
18 |
19 #include "swtypereginfo.h" |
19 #include "swtypereginfo.h" |
20 #include "arrayutils.h" |
20 |
21 #include "ipcutil.h" |
|
22 using namespace Swi; |
21 using namespace Swi; |
23 |
22 |
24 EXPORT_C void SoftwareTypeRegInfoUtils::SerializeArrayL(const RPointerArray<Usif::CSoftwareTypeRegInfo>& aSwTypeRegInfoArray, RBuf8& aSerializedArray) |
23 CLocalizedSoftwareTypeName::CLocalizedSoftwareTypeName() |
|
24 { |
|
25 } |
|
26 |
|
27 CLocalizedSoftwareTypeName::CLocalizedSoftwareTypeName(TLanguage aLocale) |
|
28 : iLocale(aLocale) |
|
29 { |
|
30 } |
|
31 |
|
32 EXPORT_C CLocalizedSoftwareTypeName::~CLocalizedSoftwareTypeName() |
|
33 { |
|
34 delete iName; |
|
35 } |
|
36 |
|
37 EXPORT_C CLocalizedSoftwareTypeName* CLocalizedSoftwareTypeName::NewL(const TDesC& aName, TLanguage aLocale) |
|
38 { |
|
39 CLocalizedSoftwareTypeName *self = CLocalizedSoftwareTypeName::NewLC(aName, aLocale); |
|
40 CleanupStack::Pop(self); |
|
41 return self; |
|
42 } |
|
43 |
|
44 EXPORT_C CLocalizedSoftwareTypeName* CLocalizedSoftwareTypeName::NewLC(const TDesC& aName, TLanguage aLocale) |
|
45 { |
|
46 CLocalizedSoftwareTypeName *self = new(ELeave) CLocalizedSoftwareTypeName(aLocale); |
|
47 CleanupStack::PushL(self); |
|
48 self->iName = aName.AllocL(); |
|
49 return self; |
|
50 } |
|
51 |
|
52 EXPORT_C CLocalizedSoftwareTypeName* CLocalizedSoftwareTypeName::NewL(RReadStream& aStream) |
|
53 { |
|
54 CLocalizedSoftwareTypeName* self = new(ELeave) CLocalizedSoftwareTypeName(); |
|
55 CleanupStack::PushL(self); |
|
56 self->InternalizeL(aStream); |
|
57 CleanupStack::Pop(self); |
|
58 return self; |
|
59 } |
|
60 |
|
61 EXPORT_C void CLocalizedSoftwareTypeName::ExternalizeL(RWriteStream& aStream) const |
|
62 { |
|
63 aStream.WriteInt32L(iLocale); |
|
64 aStream << *iName; |
|
65 } |
|
66 |
|
67 void CLocalizedSoftwareTypeName::InternalizeL(RReadStream& aStream) |
|
68 { |
|
69 TLanguage locale = static_cast<TLanguage>(aStream.ReadInt32L()); |
|
70 iLocale = locale; |
|
71 |
|
72 delete iName; |
|
73 iName = HBufC::NewL(aStream, KMaxTInt); // No restriction on length |
|
74 } |
|
75 |
|
76 // ########################################################################################## |
|
77 |
|
78 EXPORT_C CSoftwareTypeRegInfo* CSoftwareTypeRegInfo::NewL(const TDesC& aUniqueSoftwareTypeName) |
|
79 { |
|
80 CSoftwareTypeRegInfo* self = new (ELeave) CSoftwareTypeRegInfo(); |
|
81 CleanupStack::PushL(self); |
|
82 self->iUniqueSoftwareTypeName = HBufC::NewL(aUniqueSoftwareTypeName.Length()); |
|
83 self->iUniqueSoftwareTypeName->Des().Copy(aUniqueSoftwareTypeName); |
|
84 CleanupStack::Pop(self); |
|
85 return self; |
|
86 } |
|
87 |
|
88 EXPORT_C CSoftwareTypeRegInfo* CSoftwareTypeRegInfo::NewL(RReadStream& aStream) |
|
89 { |
|
90 CSoftwareTypeRegInfo* self = new (ELeave) CSoftwareTypeRegInfo(); |
|
91 CleanupStack::PushL(self); |
|
92 self->InternalizeL(aStream); |
|
93 CleanupStack::Pop(self); |
|
94 return self; |
|
95 } |
|
96 |
|
97 CSoftwareTypeRegInfo::CSoftwareTypeRegInfo() |
|
98 { |
|
99 } |
|
100 |
|
101 EXPORT_C CSoftwareTypeRegInfo::~CSoftwareTypeRegInfo() |
|
102 { |
|
103 delete iUniqueSoftwareTypeName; |
|
104 iMimeTypes.Close(); |
|
105 iLocalizedSoftwareTypeNames.Close(); |
|
106 } |
|
107 |
|
108 EXPORT_C void CSoftwareTypeRegInfo::ExternalizeL(RWriteStream& aStream) const |
|
109 { |
|
110 aStream << *iUniqueSoftwareTypeName; |
|
111 aStream << iSifPluginUid.iUid; |
|
112 |
|
113 TUid installerUid = iInstallerSecureId; |
|
114 aStream << installerUid.iUid; |
|
115 |
|
116 TUid executionLayerUid = iExecutionLayerSecureId; |
|
117 aStream << executionLayerUid.iUid; |
|
118 |
|
119 // MIME types |
|
120 const TInt numMimeTypes = iMimeTypes.Count(); |
|
121 aStream.WriteInt32L(numMimeTypes); |
|
122 for (TInt i=0; i<numMimeTypes; ++i) |
|
123 { |
|
124 aStream << *iMimeTypes[i]; |
|
125 } |
|
126 |
|
127 // Localized names |
|
128 const TInt numLocalizedNames = iLocalizedSoftwareTypeNames.Count(); |
|
129 aStream.WriteInt32L(numLocalizedNames); |
|
130 for (TInt i=0; i<numLocalizedNames; ++i) |
|
131 { |
|
132 aStream << *iLocalizedSoftwareTypeNames[i]; |
|
133 } |
|
134 } |
|
135 |
|
136 EXPORT_C TInt CSoftwareTypeRegInfo::ExternalizedSize() const |
|
137 { |
|
138 TInt size = sizeof(TUid) + sizeof(TSecureId) + sizeof(TSecureId); |
|
139 size += sizeof(TInt) + iUniqueSoftwareTypeName->Size(); |
|
140 |
|
141 // MIME types |
|
142 const TInt numMimeTypes = iMimeTypes.Count(); |
|
143 size += sizeof(TInt); |
|
144 for (TInt i=0; i<numMimeTypes; ++i) |
|
145 { |
|
146 size += sizeof(TInt) + iMimeTypes[i]->Size(); |
|
147 } |
|
148 |
|
149 // Localized names |
|
150 const TInt numLocalizedNames = iLocalizedSoftwareTypeNames.Count(); |
|
151 size += sizeof(TInt); |
|
152 for (TInt i=0; i<numLocalizedNames; ++i) |
|
153 { |
|
154 size += sizeof(TInt) + sizeof(TInt) + iLocalizedSoftwareTypeNames[i]->Name().Size(); |
|
155 } |
|
156 |
|
157 return size; |
|
158 } |
|
159 |
|
160 void CSoftwareTypeRegInfo::InternalizeL(RReadStream& aStream) |
|
161 { |
|
162 ASSERT(iUniqueSoftwareTypeName == NULL); |
|
163 |
|
164 iUniqueSoftwareTypeName = HBufC::NewL(aStream, EUniqueSwTypeNameMaxLength); |
|
165 |
|
166 iSifPluginUid = TUid::Uid(aStream.ReadInt32L()); |
|
167 iInstallerSecureId = TUid::Uid(aStream.ReadInt32L()); |
|
168 iExecutionLayerSecureId = TUid::Uid(aStream.ReadInt32L()); |
|
169 |
|
170 // MIME types |
|
171 const TInt numMimeTypes = aStream.ReadInt32L(); |
|
172 for (TInt i=0; i<numMimeTypes; ++i) |
|
173 { |
|
174 HBufC* mimeType = HBufC::NewLC(aStream, EUniqueSwTypeNameMaxLength); |
|
175 iMimeTypes.AppendL(mimeType); |
|
176 CleanupStack::Pop(mimeType); |
|
177 } |
|
178 |
|
179 // Localized names |
|
180 const TInt numLocalizedNames = aStream.ReadInt32L(); |
|
181 for (TInt i=0; i<numLocalizedNames; ++i) |
|
182 { |
|
183 CLocalizedSoftwareTypeName* name = CLocalizedSoftwareTypeName::NewL(aStream); |
|
184 CleanupStack::PushL(name); |
|
185 iLocalizedSoftwareTypeNames.AppendL(name); |
|
186 CleanupStack::Pop(name); |
|
187 } |
|
188 } |
|
189 |
|
190 EXPORT_C void CSoftwareTypeRegInfo::SetMimeTypeL(const TDesC& aMimeType) |
|
191 { |
|
192 HBufC* mimeType = HBufC::NewLC(aMimeType.Length()); |
|
193 mimeType->Des().Copy(aMimeType); |
|
194 iMimeTypes.AppendL(mimeType); |
|
195 CleanupStack::Pop(mimeType); |
|
196 } |
|
197 |
|
198 EXPORT_C void CSoftwareTypeRegInfo::SetLocalizedSoftwareTypeNameL(TLanguage aLanguage, const TDesC& aName) |
|
199 { |
|
200 CLocalizedSoftwareTypeName* name = CLocalizedSoftwareTypeName::NewLC(aName, aLanguage); |
|
201 iLocalizedSoftwareTypeNames.AppendL(name); |
|
202 CleanupStack::Pop(name); |
|
203 } |
|
204 |
|
205 // ########################################################################################## |
|
206 |
|
207 EXPORT_C void SoftwareTypeRegInfoUtils::SerializeArrayL(const RPointerArray<CSoftwareTypeRegInfo>& aSwTypeRegInfoArray, RBuf8& aSerializedArray) |
25 { |
208 { |
26 TInt bufLen = sizeof(TInt); |
209 TInt bufLen = sizeof(TInt); |
27 const TInt count = aSwTypeRegInfoArray.Count(); |
210 const TInt count = aSwTypeRegInfoArray.Count(); |
28 for (TInt i=0; i<count; ++i) |
211 for (TInt i=0; i<count; ++i) |
29 { |
212 { |
30 bufLen += GetObjectSizeL(aSwTypeRegInfoArray[i]); |
213 bufLen += aSwTypeRegInfoArray[i]->ExternalizedSize(); |
31 } |
214 } |
32 |
215 |
33 aSerializedArray.ReAllocL(aSerializedArray.Length()+bufLen); |
216 aSerializedArray.ReAllocL(aSerializedArray.Length()+bufLen); |
34 RDesWriteStream ws(aSerializedArray); |
217 RDesWriteStream ws(aSerializedArray); |
35 CleanupClosePushL(ws); |
218 CleanupClosePushL(ws); |
36 |
219 |
37 ExternalizePointerArrayL(aSwTypeRegInfoArray, ws); |
220 ws.WriteInt32L(count); |
|
221 for (TInt i=0; i<count; ++i) |
|
222 { |
|
223 const CSoftwareTypeRegInfo& info = *aSwTypeRegInfoArray[i]; |
|
224 ws << info; |
|
225 } |
38 |
226 |
39 ws.CommitL(); |
227 ws.CommitL(); |
40 CleanupStack::PopAndDestroy(&ws); |
228 CleanupStack::PopAndDestroy(&ws); |
41 } |
229 } |
42 |
230 |
43 EXPORT_C void SoftwareTypeRegInfoUtils::UnserializeArrayL(RReadStream& aStream, RPointerArray<Usif::CSoftwareTypeRegInfo>& aSwTypeRegInfoArray) |
231 EXPORT_C void SoftwareTypeRegInfoUtils::UnserializeArrayL(RReadStream& aStream, RPointerArray<CSoftwareTypeRegInfo>& aSwTypeRegInfoArray) |
44 { |
232 { |
|
233 CleanupResetAndDestroyPushL(aSwTypeRegInfoArray); |
45 const TInt numElems = aStream.ReadInt32L(); |
234 const TInt numElems = aStream.ReadInt32L(); |
46 for (TInt i=0; i<numElems; ++i) |
235 for (TInt i=0; i<numElems; ++i) |
47 { |
236 { |
48 Usif::CSoftwareTypeRegInfo* info = Usif::CSoftwareTypeRegInfo::NewL(aStream); |
237 CSoftwareTypeRegInfo* info = CSoftwareTypeRegInfo::NewL(aStream); |
49 CleanupStack::PushL(info); |
238 CleanupStack::PushL(info); |
50 aSwTypeRegInfoArray.AppendL(info); |
239 aSwTypeRegInfoArray.AppendL(info); |
51 CleanupStack::Pop(info); |
240 CleanupStack::Pop(info); |
52 } |
241 } |
53 } |
242 CleanupStack::Pop(&aSwTypeRegInfoArray); |
54 |
243 } |
55 EXPORT_C void SoftwareTypeRegInfoUtils::SerializeUniqueSwTypeNamesL(const RPointerArray<Usif::CSoftwareTypeRegInfo>& aSwTypeRegInfoArray, RBuf& aSerializedNames) |
244 |
|
245 EXPORT_C void SoftwareTypeRegInfoUtils::SerializeUniqueSwTypeNamesL(const RPointerArray<CSoftwareTypeRegInfo>& aSwTypeRegInfoArray, RBuf& aSerializedNames) |
56 { |
246 { |
57 const TInt numNames = aSwTypeRegInfoArray.Count(); |
247 const TInt numNames = aSwTypeRegInfoArray.Count(); |
58 |
248 |
59 TInt bufLen = 0; |
249 TInt bufLen = 0; |
60 for (TInt i=0; i<numNames; ++i) |
250 for (TInt i=0; i<numNames; ++i) |
61 { |
251 { |
62 const Usif::CSoftwareTypeRegInfo& info = *aSwTypeRegInfoArray[i]; |
252 const CSoftwareTypeRegInfo& info = *aSwTypeRegInfoArray[i]; |
63 bufLen += info.UniqueSoftwareTypeName().Length() + sizeof(TChar); |
253 bufLen += info.UniqueSoftwareTypeName().Length() + sizeof(TChar); |
64 } |
254 } |
65 |
255 |
66 aSerializedNames.ReAllocL(aSerializedNames.Length()+bufLen); |
256 aSerializedNames.ReAllocL(aSerializedNames.Length()+bufLen); |
67 |
257 |
68 for (TInt i=0; i<numNames; ++i) |
258 for (TInt i=0; i<numNames; ++i) |
69 { |
259 { |
70 const Usif::CSoftwareTypeRegInfo& info = *aSwTypeRegInfoArray[i]; |
260 const CSoftwareTypeRegInfo& info = *aSwTypeRegInfoArray[i]; |
71 aSerializedNames.Append(info.UniqueSoftwareTypeName()); |
261 aSerializedNames.Append(info.UniqueSoftwareTypeName()); |
72 aSerializedNames.Append(static_cast<TChar>(KUniqueNameSeparator)); |
262 aSerializedNames.Append(static_cast<TChar>(KUniqueNameSeparator)); |
73 } |
263 } |
74 } |
264 } |
75 |
265 |
76 EXPORT_C void SoftwareTypeRegInfoUtils::UnserializeUniqueSwTypeNamesL(const TDesC& aSerializedNames, RArray<TPtrC>& aUniqueSwTypeNames) |
266 EXPORT_C void SoftwareTypeRegInfoUtils::UnserializeUniqueSwTypeNamesL(const TDesC& aSerializedNames, RArray<TPtrC>& aUniqueSwTypeNames) |
77 { |
267 { |
|
268 CleanupClosePushL(aUniqueSwTypeNames); |
78 TPtrC buf(aSerializedNames); |
269 TPtrC buf(aSerializedNames); |
79 for (;;) |
270 for (;;) |
80 { |
271 { |
81 const TInt sep = buf.Locate(static_cast<TChar>(KUniqueNameSeparator)); |
272 const TInt sep = buf.Locate(static_cast<TChar>(KUniqueNameSeparator)); |
82 if (sep != KErrNotFound) |
273 if (sep != KErrNotFound) |