|
1 /* |
|
2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). |
|
3 * All rights reserved. |
|
4 * This component and the accompanying materials are made available |
|
5 * under the terms of "Eclipse Public License v1.0" |
|
6 * which accompanies this distribution, and is available |
|
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
8 * |
|
9 * Initial Contributors: |
|
10 * Nokia Corporation - initial contribution. |
|
11 * |
|
12 * Contributors: |
|
13 * |
|
14 * Description: |
|
15 * |
|
16 */ |
|
17 |
|
18 #include "clientlogstest.h" |
|
19 #include <f32file.h> |
|
20 #include <s32file.h> |
|
21 #include <utf.h> |
|
22 #include <bacline.h> |
|
23 #include <EscapeUtils.h> |
|
24 |
|
25 |
|
26 #ifdef EKA2 //RD_APPS_TO_EXES |
|
27 #include <eikstart.h> |
|
28 #endif |
|
29 _LIT(KtestlogclientsFileName,"C:\\System\\testlogclients.dat"); |
|
30 |
|
31 |
|
32 #include <e32std.h> |
|
33 #include <eikstart.h> |
|
34 |
|
35 _LIT(KClientlogstestPanic,"Clientlogstest creation"); |
|
36 |
|
37 LOCAL_C void MainL(); |
|
38 |
|
39 // main function called by E32 |
|
40 GLDEF_C TInt E32Main() |
|
41 { |
|
42 CTrapCleanup* cleanup=CTrapCleanup::New(); // get clean-up stack |
|
43 TRAPD(error,MainL()); |
|
44 __ASSERT_ALWAYS(error == KErrNone,User::Panic(KClientlogstestPanic,error)); |
|
45 delete cleanup; // destroy clean-up stack |
|
46 User::Heap().Reset(); |
|
47 return 0; // and return |
|
48 } |
|
49 |
|
50 LOCAL_C void MainL() |
|
51 {RDebug::Print(_L("CClientlogstest MainL")); |
|
52 RThread().SetPriority(EPriorityAbsoluteForeground); |
|
53 // install an active scheduler |
|
54 CActiveScheduler* scheduler = new(ELeave)CActiveScheduler; |
|
55 CActiveScheduler::Install(scheduler); |
|
56 //CleanupStack::PushL(scheduler); |
|
57 //CleanupStack::Pop(scheduler); |
|
58 |
|
59 CClientlogstest* main = 0; |
|
60 TRAPD (err, main = CClientlogstest::NewL()); |
|
61 if (err == KErrNone) |
|
62 {RDebug::Print(_L("CClientlogstest CActiveScheduler::Start()")); |
|
63 CActiveScheduler::Start(); |
|
64 } |
|
65 RDebug::Print(_L("CClientlogstestafter CActiveScheduler::Start()")); |
|
66 delete main; |
|
67 delete scheduler; |
|
68 |
|
69 } |
|
70 |
|
71 CClientlogstest::~CClientlogstest() |
|
72 { |
|
73 RDebug::Print(_L("CClientlogstest deleted")); |
|
74 RDebug::Print(_L("CClientlogstest Cancel()")); |
|
75 CActive::Cancel(); |
|
76 RDebug::Print(_L("CClientlogstest delete iLogEvent")); |
|
77 delete iLogEvent; |
|
78 iLogEvent = NULL; |
|
79 RDebug::Print(_L("CClientlogstest delete iLogClient")); |
|
80 delete iLogClient; |
|
81 iLogClient = NULL; |
|
82 RDebug::Print(_L("CClientlogstest iLogEvents.ResetAndDestroy()")); |
|
83 iLogEvents.ResetAndDestroy(); |
|
84 RDebug::Print(_L("CClientlogstest iFsSession.Close()")); |
|
85 iFsSession.Close(); |
|
86 RDebug::Print(_L("CClientlogstest delete iDescription")); |
|
87 delete iDescription; |
|
88 iDescription = NULL; |
|
89 RDebug::Print(_L("CClientlogstest delete iRemoteParty")); |
|
90 delete iRemoteParty; |
|
91 iRemoteParty = NULL; |
|
92 RDebug::Print(_L("CClientlogstest delete iDirection")); |
|
93 delete iDirection; |
|
94 iDirection = NULL; |
|
95 RDebug::Print(_L("CClientlogstest delete iCallStatus")); |
|
96 delete iCallStatus; |
|
97 iCallStatus = NULL; |
|
98 RDebug::Print(_L("CClientlogstest delete iSubject")); |
|
99 delete iSubject; |
|
100 iSubject = NULL; |
|
101 RDebug::Print(_L("CClientlogstest delete iNumber")); |
|
102 delete iNumber; |
|
103 iNumber = NULL; |
|
104 RDebug::Print(_L("CClientlogstest delete iData")); |
|
105 delete iData; |
|
106 iData = NULL; |
|
107 delete ikeyword; |
|
108 ikeyword = NULL; |
|
109 delete iArgs; |
|
110 iArgs = NULL; |
|
111 RDebug::Print(_L("CClientlogstest deleted <-")); |
|
112 //CActiveScheduler::Install (NULL); |
|
113 //CActiveScheduler::Stop(); |
|
114 } |
|
115 // From CActive |
|
116 void CClientlogstest::RunL () |
|
117 { |
|
118 RDebug::Print(_L("CClientlogstest::RunL->")); |
|
119 if (iStatus.Int() == KErrNone) |
|
120 {RDebug::Print(_L("CClientlogstest::RunL iStatus.Int() == KErrNone")); |
|
121 if (iLogEvents.Count() > 0) |
|
122 {RDebug::Print(_L("CClientlogstest::RunL if (iLogEvents.Count() > 0)")); |
|
123 delete iLogEvent; |
|
124 iLogEvent = NULL; |
|
125 RDebug::Print(_L("CClientlogstest::RunL iStatus.Int() == KErrNone")); |
|
126 User::LeaveIfError(AddEvent()); |
|
127 } |
|
128 else |
|
129 { |
|
130 RDebug::Print(_L("CClientlogstest::RunL <-")); |
|
131 CActiveScheduler::Stop(); |
|
132 } |
|
133 } |
|
134 else |
|
135 { |
|
136 if (iStatus.Int() == KErrNotFound) |
|
137 { |
|
138 //if the event type is not registered with the Log Engine |
|
139 RDebug::Print(_L("CClientlogstest::RunL event type is not registered with the Log Engine")); |
|
140 } |
|
141 |
|
142 RDebug::Print(_L("CClientlogstest::RunL iStatus.Int() != KErrNone")); |
|
143 CActiveScheduler::Stop(); |
|
144 } |
|
145 } |
|
146 |
|
147 // From CActive |
|
148 void CClientlogstest::DoCancel () |
|
149 { |
|
150 RDebug::Print(_L("CClientlogstest::DoCancel")); |
|
151 |
|
152 } |
|
153 |
|
154 |
|
155 |
|
156 CClientlogstest* CClientlogstest::NewL() |
|
157 {RDebug::Print(_L("CClientlogstest NewL")); |
|
158 CClientlogstest* self = new (ELeave) CClientlogstest(); |
|
159 CleanupStack::PushL( self ); |
|
160 self->ConstructL(); |
|
161 CleanupStack::Pop(); |
|
162 return self; |
|
163 } |
|
164 |
|
165 CClientlogstest::CClientlogstest() |
|
166 : CActive(EPriorityStandard) |
|
167 { |
|
168 } |
|
169 |
|
170 void CClientlogstest::ConstructL() |
|
171 {RDebug::Print(_L("CClientlogstest ConstructL->")); |
|
172 CActiveScheduler::Add (this); |
|
173 //TRequestStatus *status=&iStatus; |
|
174 User::LeaveIfError(iFsSession.Connect()); |
|
175 iLogClient = CLogClient::NewL( iFsSession ); |
|
176 iLogEvent = CLogEvent::NewL(); |
|
177 TBuf<100> fileName; |
|
178 fileName.Append( KtestlogclientsFileName ); |
|
179 CCommandLineArguments* args = CCommandLineArguments::NewLC(); |
|
180 //ikeyword = HBufC::NewL(0); |
|
181 _LIT(Kkeywordlogs,"logevent"); |
|
182 TBufC<16> buf1(Kkeywordlogs); |
|
183 |
|
184 ikeyword = buf1.AllocL(); |
|
185 if (args->Count() > 1) |
|
186 { |
|
187 delete ikeyword; |
|
188 ikeyword = NULL; |
|
189 ikeyword = args->Arg(1).AllocL(); |
|
190 RDebug::Print(*ikeyword); |
|
191 } |
|
192 CleanupStack::PopAndDestroy(args); |
|
193 ReadParametersL( fileName ); |
|
194 User::LeaveIfError(AddEvent()); |
|
195 RDebug::Print(_L("CClientlogstest ConstructL<-")); |
|
196 } |
|
197 |
|
198 TInt CClientlogstest::AddEvent() |
|
199 {RDebug::Print(_L("CClientlogstest::AddEvent()->")); |
|
200 TInt errorCode ( KErrNone ); |
|
201 iLogEvent = iLogEvents[0]; |
|
202 iLogEvents.Remove(0); |
|
203 iLogEvents.Compress(); |
|
204 if ( !IsActive( ) ) |
|
205 { |
|
206 RDebug::Print(_L("CClientlogstest::AddEvent() CLogClient::AddEvent()")); |
|
207 iLogClient->AddEvent( *iLogEvent, iStatus ); |
|
208 errorCode = KErrNone; |
|
209 SetActive( ); |
|
210 } |
|
211 else |
|
212 { |
|
213 RDebug::Print(_L("CClientlogstest::AddEvent() Event NOT added")); |
|
214 errorCode = KErrInUse; |
|
215 } |
|
216 RDebug::Print(_L("CClientlogstest::AddEvent()<-")); |
|
217 return errorCode; |
|
218 } |
|
219 |
|
220 |
|
221 void CClientlogstest::ReadParametersL( const TDes& fileName ) |
|
222 {RDebug::Print(_L("CClientlogstest ReadParametersL ->")); |
|
223 iArgs = new ( ELeave ) CArgs(); |
|
224 RFileReadStream readStream; |
|
225 TBuf8<256> asciiLine; |
|
226 TBuf16<256> unicodeLine; |
|
227 TInt findPos; |
|
228 TInt leaveCode( KErrNone ); |
|
229 iCompleteError = KErrNone; |
|
230 iId = 0; |
|
231 iEventType.Null(); |
|
232 iRemoteParty = NULL; |
|
233 iDirection = NULL; |
|
234 iTime = 0; |
|
235 iDurationType = 0; |
|
236 iDuration = 0; |
|
237 iCallStatus = NULL; |
|
238 iSubject = NULL; |
|
239 iNumber = NULL; |
|
240 iContact = 0; |
|
241 iDescription = NULL; |
|
242 iData = NULL; |
|
243 iFlags = 0; |
|
244 if ( KErrNone != readStream.Open( iFsSession, fileName, EFileRead ) ) |
|
245 {RDebug::Print(_L("CClientlogstest ReadParametersL KErrNone != readStream.Open ")); |
|
246 CleanupStack::PopAndDestroy(); |
|
247 return; |
|
248 } |
|
249 |
|
250 CleanupClosePushL( readStream ); |
|
251 while ( KErrEof != leaveCode ) |
|
252 {RDebug::Print(_L("CClientlogstest ReadParametersL while ")); |
|
253 TRAP( leaveCode, readStream.ReadL( asciiLine, TChar(10)) ) |
|
254 if ( KErrNone == leaveCode ) |
|
255 { |
|
256 // Delete leading spaces and tabs |
|
257 asciiLine.TrimLeft(); |
|
258 // Delete trailing (CR)+LF if any |
|
259 findPos = asciiLine.Locate( TChar(10) ); |
|
260 if ( KErrNotFound != findPos ) |
|
261 { |
|
262 if ( KErrNotFound != asciiLine.Locate( TChar(13) ) ) |
|
263 { |
|
264 // Dos style text file(CR+LF) |
|
265 asciiLine.Delete( |
|
266 findPos - 1, asciiLine.Length() - (findPos + 1) ); |
|
267 } |
|
268 else |
|
269 { |
|
270 // Unix style text file(LF) |
|
271 asciiLine.Delete( |
|
272 findPos , asciiLine.Length() - findPos ); |
|
273 } |
|
274 } |
|
275 |
|
276 // Skip empty lines and lines that start with '//' |
|
277 if ( asciiLine.Length() == 0 || |
|
278 (findPos = asciiLine.Find(_L8("//"))) == 0 ) |
|
279 { |
|
280 continue; |
|
281 } |
|
282 |
|
283 if ( KErrNotFound != findPos ) |
|
284 { |
|
285 asciiLine.Delete( findPos, asciiLine.Length() - findPos ); |
|
286 asciiLine.TrimRight(); |
|
287 } |
|
288 |
|
289 // Unicode format is used internally |
|
290 TInt ret = |
|
291 CnvUtfConverter::ConvertToUnicodeFromUtf8( |
|
292 unicodeLine, asciiLine ); |
|
293 |
|
294 if ( KErrNone != ret ) |
|
295 { |
|
296 //Unicode conversion failed. Skip this line and go on |
|
297 continue; |
|
298 } |
|
299 |
|
300 if ( KErrNone != iArgs->ParseLineL( EParseFunction, unicodeLine ) ) |
|
301 { |
|
302 continue; |
|
303 } |
|
304 // Long lines maintained for clarity |
|
305 if ( iArgs->StrArg(1) == _L("") ) |
|
306 { |
|
307 // if ( iArgs->StrArg(2) == _L("logevent") ) |
|
308 if (iArgs->StrArg(2) == *ikeyword ) |
|
309 { |
|
310 iId = iArgs->NumArg(3); |
|
311 iEventType.iUid = iArgs->NumArg(4); |
|
312 iRemoteParty = iArgs->StrArg(5).AllocL(); |
|
313 |
|
314 iDirection = iArgs->StrArg(6).AllocL(); |
|
315 RDebug::RawPrint(*iDirection); |
|
316 iTime = iArgs->NumArg(7); |
|
317 iDurationType = iArgs->NumArg(8); |
|
318 iDuration = iArgs->NumArg(9); |
|
319 iCallStatus = iArgs->StrArg(10).AllocL(); |
|
320 iSubject = iArgs->StrArg(11).AllocL(); |
|
321 iNumber = iArgs->StrArg(12).AllocL(); |
|
322 iContact = iArgs->NumArg(13); |
|
323 iDescription = iArgs->StrArg(14).AllocL(); |
|
324 RDebug::Print(_L("CClientlogstest data:")); |
|
325 RDebug::RawPrint(iArgs->StrArg(15)); |
|
326 iData = HBufC8::NewL( iArgs->StrArg(15).Length() * 2 ); |
|
327 TPtr8 ptrData( iData->Des() ); |
|
328 ptrData.Copy( iArgs->StrArg(15) ); |
|
329 _LIT8( KLogClientFieldDelim, "\\t" ); |
|
330 int delimPos = ptrData.Find( KLogClientFieldDelim ); |
|
331 while ( delimPos >= 0 ){ |
|
332 ptrData.Replace( delimPos, KLogClientFieldDelim().Length(), _L8("\t") ); |
|
333 int newDelimPos = ptrData.Mid( delimPos + 1 ).Find( KLogClientFieldDelim ); |
|
334 delimPos = ( newDelimPos >= 0 ) ? delimPos + newDelimPos + 1 : -1; |
|
335 } |
|
336 iFlags = iArgs->NumArg(16); |
|
337 |
|
338 delete iLogEvent; |
|
339 iLogEvent = CLogEvent::NewL(); |
|
340 RDebug::Print(_L("CClientlogstest ReadParametersL while iLogEvent->SetId(iId)")); |
|
341 iLogEvent->SetId(iId); |
|
342 //iLogEvent->SetEventType(iEventType); |
|
343 iLogEvent->SetEventType( KLogCallEventTypeUid ); |
|
344 iLogEvent->SetRemoteParty(*iRemoteParty); |
|
345 iLogEvent->SetDirection(*iDirection); |
|
346 iLogEvent->SetTime(iTime); |
|
347 iLogEvent->SetDurationType(iDurationType); |
|
348 iLogEvent->SetDuration(iDuration); |
|
349 iLogEvent->SetStatus(*iCallStatus); |
|
350 iLogEvent->SetSubject(*iSubject); |
|
351 iLogEvent->SetNumber(*iNumber); |
|
352 iLogEvent->SetContact(iContact); |
|
353 iLogEvent->SetDescription(*iDescription); |
|
354 iLogEvent->SetFlags(iFlags); |
|
355 RDebug::Print(_L("CClientlogstest ReadParametersL while After set logevent parameters")); |
|
356 iDataPtr.Set( iData->Des() ); |
|
357 iLogEvent->SetDataL(iDataPtr); |
|
358 //own the objects |
|
359 RDebug::Print(_L("CClientlogstest ReadParametersL while append LogEvent obj to array")); |
|
360 iLogEvents.AppendL(iLogEvent); |
|
361 iLogEvent = NULL; |
|
362 DeleteReadDataMembers(); |
|
363 |
|
364 RDebug::Print(_L("CClientlogstest ReadParametersL while After deleting all member parameters")); |
|
365 } |
|
366 } |
|
367 else |
|
368 { |
|
369 // not a valid line |
|
370 } |
|
371 } |
|
372 }//while |
|
373 |
|
374 CleanupStack::PopAndDestroy();//readStream |
|
375 RDebug::Print(_L("CClientlogstest ReadParametersL <-")); |
|
376 } |
|
377 |
|
378 void CClientlogstest::DeleteReadDataMembers() |
|
379 { |
|
380 RDebug::RawPrint(*iDescription); |
|
381 delete iDescription; |
|
382 iDescription = NULL; |
|
383 RDebug::RawPrint(*iRemoteParty); |
|
384 delete iRemoteParty; |
|
385 iRemoteParty = NULL; |
|
386 RDebug::RawPrint(*iDirection); |
|
387 delete iDirection; |
|
388 iDirection = NULL; |
|
389 RDebug::RawPrint(*iCallStatus); |
|
390 delete iCallStatus; |
|
391 iCallStatus = NULL; |
|
392 RDebug::RawPrint(*iSubject); |
|
393 delete iSubject; |
|
394 iSubject = NULL; |
|
395 RDebug::RawPrint(*iNumber); |
|
396 delete iNumber; |
|
397 iNumber = NULL; |
|
398 //RDebug::RawPrint(*iData); |
|
399 delete iData; |
|
400 iData = NULL; |
|
401 } |
|
402 |
|
403 // End of file |
|
404 |