author | Simon Howkins <simonh@symbian.org> |
Mon, 22 Nov 2010 12:04:39 +0000 | |
branch | RCL_3 |
changeset 84 | e6c5e34cd9b9 |
parent 66 | 8b7f4e561641 |
permissions | -rw-r--r-- |
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
1 |
/* |
66 | 2 |
* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies). |
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
3 |
* All rights reserved. |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
4 |
* This component and the accompanying materials are made available |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
5 |
* under the terms of the License "Eclipse Public License v1.0" |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
6 |
* which accompanies this distribution, and is available |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
7 |
* at the URL "http://www.eclipse.org/legal/epl-v10.html". |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
8 |
* |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
9 |
* Initial Contributors: |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
10 |
* Nokia Corporation - initial contribution. |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
11 |
* |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
12 |
* Contributors: |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
13 |
* |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
14 |
* Description: |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
15 |
* Implementation of Swi::CUissClientHandler class which is the client-side |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
16 |
* part of the reverse completion mechanism used by SWI to communicate with |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
17 |
* the UI |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
18 |
* |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
19 |
*/ |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
20 |
|
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
21 |
|
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
22 |
/** |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
23 |
@file |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
24 |
*/ |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
25 |
#include "uissclienthandler.h" |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
26 |
#include "uisscommand.h" |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
27 |
#include "uisssession.h" |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
28 |
#include "../source/uiss/server/uissserver.h" |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
29 |
#include "sishelper.h" |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
30 |
#include "sisregistrypackage.h" |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
31 |
#include "writestream.h" |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
32 |
// UI Support Server Commands |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
33 |
#include "commands/installdialog.h" |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
34 |
#include "commands/grantcapabilitiesdialog.h" |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
35 |
#include "commands/languagedialog.h" |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
36 |
#include "commands/applicationsinusedialog.h" |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
37 |
#include "commands/drivedialog.h" |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
38 |
#include "commands/cannotoverwritefiledialog.h" |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
39 |
#include "commands/dependencybreakdialog.h" |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
40 |
#include "commands/deviceincompatibility.h" |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
41 |
#include "commands/missingdependency.h" |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
42 |
#include "commands/errordialog.h" |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
43 |
#include "commands/handlecancellableinstallevent.h" |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
44 |
#include "commands/handleinstallevent.h" |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
45 |
#include "commands/ocspresultdialog.h" |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
46 |
#include "commands/optionsdialog.h" |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
47 |
#include "commands/questiondialog.h" |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
48 |
#include "commands/upgradedialog.h" |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
49 |
#include "commands/uninstalldialog.h" |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
50 |
#include "commands/securitywarningdialog.h" |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
51 |
#include "commands/textdialog.h" |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
52 |
#include "log.h" |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
53 |
|
66 | 54 |
#include "cleanuputils.h" |
65
7333d7932ef7
Revision: 201033
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
34
diff
changeset
|
55 |
#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK |
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
56 |
#include <usif/sif/sifcommon.h> |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
57 |
const TInt KCompInfoBufferSize=4*1024; |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
58 |
#endif |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
59 |
|
66 | 60 |
|
61 |
||
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
62 |
namespace Swi |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
63 |
{ |
66 | 64 |
|
65 |
//Temporary error logging solution. |
|
66 |
void LogSwiErrorsToFileL(TInt aErrorCode, const TDesC& aAppName); |
|
67 |
||
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
68 |
// |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
69 |
// A cancel handler |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
70 |
// |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
71 |
class InternalCancelHandler : public MCancelHandler |
66 | 72 |
{ |
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
73 |
public: |
66 | 74 |
InternalCancelHandler(CUissClientHandler& aUissClientHandler); |
75 |
void HandleCancel(); |
|
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
76 |
private: |
66 | 77 |
CUissClientHandler& iUissClientHandler; |
78 |
}; |
|
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
79 |
|
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
80 |
InternalCancelHandler::InternalCancelHandler( |
66 | 81 |
CUissClientHandler& aUissClientHandler) |
82 |
: iUissClientHandler(aUissClientHandler) |
|
83 |
{ |
|
84 |
} |
|
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
85 |
|
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
86 |
void InternalCancelHandler::HandleCancel() |
66 | 87 |
{ |
88 |
iUissClientHandler.CancelOperation(); |
|
89 |
} |
|
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
90 |
|
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
91 |
CUissClientHandler* CUissClientHandler::NewLC(MUiHandler& aUiHandler, TBool aActiveObjectMode) |
66 | 92 |
{ |
93 |
CUissClientHandler* self=new(ELeave) CUissClientHandler(aUiHandler, aActiveObjectMode); |
|
94 |
CleanupStack::PushL(self); |
|
95 |
self->ConstructL(); |
|
96 |
return self; |
|
97 |
} |
|
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
98 |
|
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
99 |
CUissClientHandler* CUissClientHandler::NewL(MUiHandler& aUiHandler, TBool aActiveObjectMode) |
66 | 100 |
{ |
101 |
CUissClientHandler* self=NewLC(aUiHandler, aActiveObjectMode); |
|
102 |
CleanupStack::Pop(self); |
|
103 |
return self; |
|
104 |
} |
|
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
105 |
|
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
106 |
CUissClientHandler::CUissClientHandler(MUiHandler& aUiHandler, TBool aActiveObjectMode) |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
107 |
: CActive(EPriorityStandard), |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
108 |
iUiHandler(aUiHandler), |
66 | 109 |
iPtrIntoBuf(0,0), |
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
110 |
iActiveObjectMode(aActiveObjectMode), |
66 | 111 |
iPtrIntoArgsStream(0,0) |
112 |
#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK |
|
113 |
,iCompInfoBufPtr(0,0) |
|
114 |
#endif |
|
115 |
{ |
|
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
116 |
if (iActiveObjectMode) |
66 | 117 |
{ |
118 |
CActiveScheduler::Add(this); |
|
119 |
} |
|
120 |
} |
|
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
121 |
|
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
122 |
void CUissClientHandler::WaitForSisHelperShutdown() |
66 | 123 |
{ |
124 |
if(iSisHelper.Handle() > 0) |
|
125 |
{ |
|
126 |
TRequestStatus reqStatus; |
|
127 |
iSisHelper.Logon(reqStatus); |
|
128 |
User::WaitForRequest(reqStatus); |
|
129 |
iSisHelper.Close(); |
|
130 |
} |
|
131 |
} |
|
132 |
||
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
133 |
CUissClientHandler::~CUissClientHandler() |
66 | 134 |
{ |
135 |
//Cancel any outstanding request |
|
136 |
CancelOperation(); |
|
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
137 |
|
66 | 138 |
WaitForSisHelperShutdown(); |
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
139 |
if (iActiveObjectMode) |
66 | 140 |
{ |
141 |
CActive::Cancel(); // Make sure we are cancelled before deletion |
|
142 |
} |
|
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
143 |
|
66 | 144 |
delete iCancelHandler; |
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
145 |
delete iArgsStream; |
66 | 146 |
iUissSession.Close(); |
147 |
delete iBuf; |
|
148 |
delete iBufLogger; |
|
149 |
#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK |
|
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
150 |
delete iCompInfoBuffer; |
66 | 151 |
#endif |
152 |
} |
|
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
153 |
|
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
154 |
/** |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
155 |
* Allocates a buffer for reverse-completion commands. The buffer is going to |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
156 |
* be resized in case it is not sufficient for a dialog command. |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
157 |
*/ |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
158 |
void CUissClientHandler::ConstructL() |
66 | 159 |
{ |
160 |
iCancelHandler=new(ELeave) InternalCancelHandler(*this); |
|
161 |
AllocBufL(KBufSize);// Allocate the initial r/c buffer |
|
162 |
||
163 |
//Logger buffer. |
|
164 |
iBufLogger = KNullDesC8().AllocL(); |
|
165 |
User::LeaveIfError(StartUiss()); // Start UISS |
|
166 |
User::LeaveIfError(iUissSession.Connect()); // Connect to UISS |
|
167 |
} |
|
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
168 |
|
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
169 |
void CUissClientHandler::AllocBufL(TInt aSize) |
66 | 170 |
{ |
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
171 |
HBufC8* buf=HBufC8::NewL(aSize); |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
172 |
delete iBuf; |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
173 |
iBuf=buf; |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
174 |
} |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
175 |
|
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
176 |
void CUissClientHandler::HandleOverflowL() |
66 | 177 |
{ |
178 |
// Reallocate the buffer to the size received in parameter 1 |
|
179 |
TInt size=0; |
|
180 |
TPckg<TInt> theSize(size); |
|
181 |
theSize.Copy(iBuf->Left(sizeof(TInt))); |
|
182 |
AllocBufL(size); |
|
183 |
} |
|
184 |
||
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
185 |
#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
186 |
void CUissClientHandler::AllocCompInfoBufL(TInt aSize) |
66 | 187 |
{ |
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
188 |
HBufC8* buf = HBufC8::NewL(aSize); |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
189 |
delete iCompInfoBuffer; |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
190 |
iCompInfoBuffer = buf; |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
191 |
} |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
192 |
#endif |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
193 |
|
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
194 |
///\short Creates a command handler object for the specified dialog request |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
195 |
CUissCmdHandler* CUissClientHandler::UissCmdHandlerFactoryL(TInt aCommand) const |
66 | 196 |
{ |
197 |
switch (aCommand) |
|
198 |
{ |
|
199 |
case CUissSession::KMessageApplicationsInUseDialog: |
|
200 |
return new(ELeave) CApplicationsInUseDialogCmdHandler(iUiHandler); |
|
201 |
case CUissSession::KMessageCannotOverwriteFileDialog: |
|
202 |
return new(ELeave) CCannotOverwriteFileDialogCmdHandler(iUiHandler); |
|
203 |
||
204 |
case CUissSession::KMessageDependencyBreakDialog: |
|
205 |
return new(ELeave) CDependencyBreakDialogCmdHandler(iUiHandler); |
|
206 |
case CUissSession::KMessageDeviceIncompatibility: |
|
207 |
return new(ELeave) CDeviceIncompatibilityDialogCmdHandler(iUiHandler); |
|
208 |
case CUissSession::KMessageMissingDependency: |
|
209 |
return new(ELeave) CMissingDependencyDialogCmdHandler(iUiHandler); |
|
210 |
case CUissSession::KMessageDriveDialog: |
|
211 |
return new(ELeave) CDriveDialogCmdHandler(iUiHandler); |
|
212 |
case CUissSession::KMessageErrorDialog: |
|
213 |
return new(ELeave) CErrorDialogCmdHandler(iUiHandler); |
|
214 |
case CUissSession::KMessageGrantCapabilitiesDialog: |
|
215 |
return new(ELeave) CGrantCapabilitiesDialogCmdHandler(iUiHandler); |
|
216 |
case CUissSession::KMessageHandleCancellableInstallEvent: |
|
217 |
return new(ELeave) CHandleCancellableInstallEventCmdHandler(iUiHandler, |
|
218 |
*iCancelHandler); |
|
219 |
case CUissSession::KMessageHandleInstallEvent: |
|
220 |
return new(ELeave) CHandleInstallEventCmdHandler(iUiHandler); |
|
221 |
case CUissSession::KMessageInstallDialog: |
|
222 |
return new(ELeave) CInstallDialogCmdHandler(iUiHandler); |
|
223 |
case CUissSession::KMessageLanguageDialog: |
|
224 |
return new(ELeave) CLanguageDialogCmdHandler(iUiHandler); |
|
225 |
case CUissSession::KMessageOcspResultDialog: |
|
226 |
return new(ELeave) COcspResultDialogCmdHandler(iUiHandler); |
|
227 |
case CUissSession::KMessageOptionsDialog: |
|
228 |
return new(ELeave) COptionsDialogCmdHandler(iUiHandler); |
|
229 |
case CUissSession::KMessageQuestionDialog: |
|
230 |
return new(ELeave) CQuestionDialogCmdHandler(iUiHandler); |
|
231 |
case CUissSession::KMessageSecurityWarningDialog: |
|
232 |
return new(ELeave) CSecurityWarningDialogCmdHandler(iUiHandler); |
|
233 |
case CUissSession::KMessageUninstallDialog: |
|
234 |
return new(ELeave) CUninstallDialogCmdHandler(iUiHandler); |
|
235 |
||
236 |
case CUissSession::KMessageUpgradeDialog: |
|
237 |
return new(ELeave) CUpgradeDialogCmdHandler(iUiHandler); |
|
238 |
||
239 |
case CUissSession::KMessageTextDialog: |
|
240 |
return new(ELeave) CTextDialogCmdHandler(iUiHandler); |
|
241 |
||
242 |
default: |
|
243 |
return NULL; |
|
244 |
} |
|
245 |
} |
|
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
246 |
|
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
247 |
void CUissClientHandler::InitializeArgStreamL(const CInstallPrefs& aInstallPrefs) |
66 | 248 |
{ |
249 |
// Stream out install parameters. Cannot do this in UISSCLIENT because |
|
250 |
// the code is in LAUNCHER which depends on UISSCLIENT. |
|
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
251 |
delete iArgsStream; |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
252 |
iArgsStream = 0; |
66 | 253 |
iArgsStream = CWriteStream::NewL(); |
254 |
*iArgsStream << aInstallPrefs; |
|
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
255 |
// Save ptr for args (must persist whilst server is processing) |
66 | 256 |
iPtrIntoArgsStream.Set(iArgsStream->Ptr()); |
257 |
} |
|
258 |
||
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
259 |
void CUissClientHandler::InstallL(const CInstallPrefs& aInstallPrefs, const RArray<TInt>& aDeviceSupportedLanguages, TRequestStatus& aRequestStatus, RThread& aServer) |
66 | 260 |
{ |
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
261 |
iState = KUissClientInstalling; |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
262 |
iClientStatus = &aRequestStatus; |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
263 |
|
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
264 |
// Save ptr for data returned by request (must persist whilst server is processing) |
66 | 265 |
iPtrIntoBuf.Set(iBuf->Des()); |
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
266 |
|
66 | 267 |
InitializeArgStreamL(aInstallPrefs); |
268 |
iArgsStream->Stream().WriteInt32L(aDeviceSupportedLanguages.Count()); |
|
269 |
//Streaming set of languages that device supports |
|
270 |
TInt noOfDeviceSupportedLanguages = aDeviceSupportedLanguages.Count(); |
|
271 |
for(TInt i=0;i<noOfDeviceSupportedLanguages;i++) |
|
272 |
{ |
|
273 |
iArgsStream->Stream().WriteInt32L(aDeviceSupportedLanguages[i]); |
|
274 |
} |
|
275 |
// Save ptr for args (must persist whilst server is processing) |
|
276 |
iPtrIntoArgsStream.Set(iArgsStream->Ptr()); |
|
277 |
||
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
278 |
// Issue initial request |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
279 |
iUissSession.Install(iPtrIntoArgsStream, iPtrIntoBuf, iStatus); |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
280 |
if (iActiveObjectMode) |
66 | 281 |
{ |
282 |
SetActive(); |
|
283 |
} |
|
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
284 |
|
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
285 |
// Update client's TRequestStatus object |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
286 |
*iClientStatus = KRequestPending; |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
287 |
iSisHelper = aServer; |
66 | 288 |
} |
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
289 |
|
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
290 |
#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
291 |
void CUissClientHandler::GetComponentInfoL(const CInstallPrefs& aInstallPrefs, Usif::CComponentInfo& aComponentInfo, TRequestStatus& aRequestStatus, RThread& aServer) |
66 | 292 |
{ |
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
293 |
iState = KUissClientGettingCompInfo; |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
294 |
iClientStatus = &aRequestStatus; |
66 | 295 |
|
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
296 |
// Store the component info reference to the class reference. So that, the same will be |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
297 |
// populated after getting the asynchronous method completed. |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
298 |
iComponentInfo = &aComponentInfo; |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
299 |
|
66 | 300 |
InitializeArgStreamL(aInstallPrefs); |
301 |
||
302 |
AllocCompInfoBufL(KCompInfoBufferSize); |
|
303 |
||
304 |
// Save the pointer for component info collection buffer |
|
305 |
iCompInfoBufPtr.Set(iCompInfoBuffer->Des()); |
|
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
306 |
|
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
307 |
// Issue get component info request |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
308 |
iUissSession.GetComponentInfo(iPtrIntoArgsStream, iCompInfoBufPtr, iStatus); |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
309 |
|
66 | 310 |
// There is no synchronous API for GetComponentInfo |
311 |
__ASSERT_ALWAYS(iActiveObjectMode, User::Invariant()); |
|
312 |
SetActive(); |
|
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
313 |
|
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
314 |
// Update client's TRequestStatus object |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
315 |
*iClientStatus = KRequestPending; |
66 | 316 |
iSisHelper = aServer; |
317 |
} |
|
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
318 |
#endif |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
319 |
|
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
320 |
void CUissClientHandler::UninstallL(const CSisRegistryPackage& aPackage, TRequestStatus& aRequestStatus) |
66 | 321 |
{ |
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
322 |
iState = KUissClientUninstalling; |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
323 |
iClientStatus = &aRequestStatus; |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
324 |
|
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
325 |
// Save ptr for data returned by request (must persist whilst server is processing) |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
326 |
iPtrIntoBuf.Set(iBuf->Des()); |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
327 |
|
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
328 |
delete iArgsStream; |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
329 |
iArgsStream = 0; |
66 | 330 |
iArgsStream = CWriteStream::NewL(); |
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
331 |
*iArgsStream << aPackage; |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
332 |
// Save ptr for args (must persist whilst server is processing) |
66 | 333 |
iPtrIntoArgsStream.Set(iArgsStream->Ptr()); |
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
334 |
|
66 | 335 |
// Issue initial request |
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
336 |
iUissSession.Uninstall(iPtrIntoArgsStream, iPtrIntoBuf, iStatus); |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
337 |
if (iActiveObjectMode) |
66 | 338 |
{ |
339 |
SetActive(); |
|
340 |
} |
|
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
341 |
|
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
342 |
// Update client's TRequestStatus object |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
343 |
*iClientStatus = KRequestPending; |
66 | 344 |
} |
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
345 |
|
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
346 |
void CUissClientHandler::CancelOperation() |
66 | 347 |
{ |
348 |
if (iState == KUissClientIdle) |
|
349 |
{ |
|
350 |
return; |
|
351 |
} |
|
352 |
||
353 |
// User called this so must have an outstanding request with us. |
|
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
354 |
|
66 | 355 |
// First tell the Uiss that we want to cancel the current |
356 |
// operation. |
|
357 |
// |
|
358 |
// If we have an outstanding Uiss request, this will complete (with |
|
359 |
// KErrCancel) when the operation has terminated. |
|
360 |
// |
|
361 |
// If we are called inside a dialog callback, then there is no |
|
362 |
// outstanding Uiss request at the moment. When the dialog |
|
363 |
// returns, we will issue a request, which will complete (with |
|
364 |
// KErrCancel) when the operation has terminated. |
|
365 |
(void)iUissSession.Cancel(); |
|
366 |
} |
|
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
367 |
|
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
368 |
void CUissClientHandler::WorkUntilCompleteL() |
66 | 369 |
{ |
370 |
// Keep processing UISS responses and issuing new requests |
|
371 |
// until we update the client status to non-pending. |
|
372 |
while(iClientStatus && *iClientStatus == KRequestPending) |
|
373 |
{ |
|
374 |
User::WaitForRequest(iStatus); |
|
375 |
TRAPD(err,RunL()); |
|
376 |
if(err != KErrNone) |
|
377 |
{ |
|
378 |
RunError(err); |
|
379 |
} |
|
380 |
} |
|
381 |
} |
|
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
382 |
|
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
383 |
TBool CUissClientHandler::IsBusy() |
66 | 384 |
{ |
385 |
return iState != KUissClientIdle; |
|
386 |
} |
|
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
387 |
|
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
388 |
|
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
389 |
// |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
390 |
// Code necessary to run UISS in the same process but in a different thread |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
391 |
// |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
392 |
TInt CUissClientHandler::StartUiss() |
66 | 393 |
{ |
394 |
const TInt KUissServerStackSize=0x2000; |
|
395 |
const TInt KUissServerInitHeapSize=0x1000; |
|
396 |
const TInt KUissServerMaxHeapSize=0x1000000; |
|
397 |
||
398 |
||
399 |
TThreadFunction entryPoint=UissThreadFunction; |
|
400 |
//TUiSupportStartParams uiSupportParams(aUiHandler); |
|
401 |
// The owner of the new thread will be the process, otherwise if the |
|
402 |
// current thread dies, the server thread will die, too. |
|
403 |
RThread server; |
|
404 |
TInt err = KErrNone; |
|
405 |
||
406 |
for (TInt retry=0; retry < 2; ++retry) |
|
407 |
{ |
|
408 |
err = server.Create(KUissServerName, entryPoint, |
|
409 |
KUissServerStackSize, KUissServerInitHeapSize, KUissServerMaxHeapSize, |
|
410 |
NULL, EOwnerThread); |
|
411 |
||
412 |
if (err == KErrAlreadyExists) |
|
413 |
{ |
|
414 |
User::After(30000); |
|
415 |
} |
|
416 |
else |
|
417 |
{ |
|
418 |
break; |
|
419 |
} |
|
420 |
} |
|
421 |
||
422 |
if (err==KErrAlreadyExists) |
|
423 |
{ |
|
424 |
return KErrServerBusy; |
|
425 |
} |
|
426 |
if (err != KErrNone) |
|
427 |
{ |
|
428 |
return err; |
|
429 |
} |
|
430 |
||
431 |
// Synchronise with the process to make sure it hasn't died straight away |
|
432 |
TRequestStatus stat; |
|
433 |
server.Rendezvous(stat); |
|
434 |
if (stat != KRequestPending) |
|
435 |
{ |
|
436 |
// logon failed - server is not yet running, so cannot have terminated |
|
437 |
server.Kill(0); // Abort startup |
|
438 |
} |
|
439 |
else |
|
440 |
{ |
|
441 |
// logon OK - start the server |
|
442 |
server.Resume(); |
|
443 |
} |
|
444 |
// Wait to synchronise with server - if it dies in the meantime, it |
|
445 |
// also gets completed |
|
446 |
User::WaitForRequest(stat); |
|
447 |
// We can't use the 'exit reason' if the server panicked as this |
|
448 |
// is the panic 'reason' and may be '0' which cannot be distinguished |
|
449 |
// from KErrNone |
|
450 |
TInt r=(server.ExitType()==EExitPanic) ? KErrGeneral : stat.Int(); |
|
451 |
server.Close(); |
|
452 |
return r; |
|
453 |
} |
|
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
454 |
|
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
455 |
// Entry point for the thread the UISS runs in |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
456 |
TInt CUissClientHandler::UissThreadFunction(TAny *) |
66 | 457 |
{ |
458 |
__UHEAP_MARK; |
|
459 |
CTrapCleanup* cleanup = CTrapCleanup::New(); // get clean-up stack |
|
460 |
||
461 |
CActiveScheduler* scheduler=new(ELeave) CActiveScheduler; |
|
462 |
CActiveScheduler::Install(scheduler); |
|
463 |
CUissServer* server=NULL; |
|
464 |
||
465 |
TRAPD(err, server=CUissServer::NewL()); |
|
466 |
if (err==KErrNone) |
|
467 |
{ |
|
468 |
RThread::Rendezvous(KErrNone); |
|
469 |
scheduler->Start(); |
|
470 |
} |
|
471 |
||
472 |
delete server; |
|
473 |
||
474 |
CActiveScheduler::Install(NULL); |
|
475 |
delete scheduler; |
|
476 |
delete cleanup; // destroy clean-up stack |
|
477 |
__UHEAP_MARKEND; |
|
478 |
return KErrNone; |
|
479 |
} |
|
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
480 |
|
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
481 |
void CUissClientHandler::RunL() |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
482 |
{ |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
483 |
TInt err = iStatus.Int(); |
66 | 484 |
iPtrIntoBuf.Set(iBuf->Des()); // Get ptr to our return buffer |
485 |
||
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
486 |
DEBUG_PRINTF2(_L8("Sis Helper - UISS Client Handler, RunL(). Status: %d."), err); |
66 | 487 |
if(err > 0) |
488 |
{ |
|
489 |
// For Logging purpose, store the buffer to retrieve |
|
490 |
// application info later. |
|
491 |
delete iBufLogger; |
|
492 |
iBufLogger = 0; |
|
493 |
iBufLogger = iBuf->AllocL(); |
|
494 |
} |
|
495 |
||
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
496 |
if (err==KErrOverflow |
66 | 497 |
#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK |
498 |
&& iState != KUissClientGettingCompInfo // We don't support overflow management for component info |
|
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
499 |
#endif |
66 | 500 |
) |
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
501 |
{ |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
502 |
// Grow the respective buffer buffer and re-issue "request". |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
503 |
// There should now be space for the UISS server to copy in its dialogue message. |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
504 |
HandleOverflowL(); |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
505 |
iPtrIntoBuf.Set(iBuf->Des()); |
66 | 506 |
iUissSession.BufferReallocated(iPtrIntoBuf, iStatus); |
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
507 |
|
66 | 508 |
if (iActiveObjectMode) |
509 |
{ |
|
510 |
SetActive(); |
|
511 |
} |
|
512 |
return; |
|
513 |
} |
|
514 |
else |
|
515 |
{ |
|
516 |
if (err>CUissSession::KMsgSeparatorMinimumSwisMessage && |
|
517 |
err<CUissSession::KMsgSeparatorMaximumSwisMessage) |
|
518 |
{ |
|
519 |
// this is a dialog request, unmarshal parameters and display |
|
520 |
// the dialog |
|
521 |
CUissCmdHandler* cmdHandler=UissCmdHandlerFactoryL(err); |
|
522 |
if (!cmdHandler) |
|
523 |
{ |
|
524 |
User::Leave(KErrNotSupported); |
|
525 |
} |
|
526 |
||
527 |
CleanupStack::PushL(cmdHandler); |
|
528 |
// Note that the callback might call CancelOperation which |
|
529 |
// would update iState... |
|
530 |
cmdHandler->HandleMessageL(iPtrIntoBuf, iPtrIntoBuf); |
|
531 |
CleanupStack::PopAndDestroy(cmdHandler); |
|
532 |
} |
|
533 |
else |
|
534 |
{ |
|
535 |
#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK |
|
536 |
// Request has been completed successfully. So, now construct the |
|
537 |
// component info from the buffer which is populated from the SWI server. |
|
538 |
if (err == KErrNone && iState == KUissClientGettingCompInfo) |
|
539 |
{ |
|
540 |
ConstructCompInfoFromBufferL(); |
|
541 |
} |
|
542 |
#endif |
|
543 |
// Either KErrNone or some sort of error status - in any case the processing has finished |
|
544 |
iState = KUissClientIdle; |
|
545 |
} |
|
546 |
} |
|
547 |
||
548 |
// Re-issue request, if we are still installing/uninstalling |
|
549 |
switch(iState) |
|
550 |
{ |
|
551 |
case KUissClientInstalling: |
|
552 |
case KUissClientUninstalling: |
|
553 |
iUissSession.CompleteDialog(KErrNone, iPtrIntoBuf, iStatus); |
|
554 |
if (iActiveObjectMode) |
|
555 |
{ |
|
556 |
SetActive(); |
|
557 |
} |
|
558 |
return; |
|
559 |
||
560 |
case KUissClientIdle: |
|
561 |
// All done, or failed... |
|
562 |
delete iArgsStream; |
|
563 |
iArgsStream = 0; |
|
564 |
//Wait for the death of SisHelper |
|
565 |
WaitForSisHelperShutdown(); |
|
566 |
// Complete user request (also sets iClientStatus to 0) |
|
567 |
ASSERT(iClientStatus); |
|
568 |
User::RequestComplete(iClientStatus, err); |
|
569 |
||
570 |
// Logging the error to a file |
|
571 |
// Temporary solution, should be removed once instrumentation is fully operational. |
|
572 |
if(err != KErrNone) |
|
573 |
{ |
|
574 |
TRAP_IGNORE( |
|
575 |
RDesReadStream readStream(iBufLogger->Des()); |
|
576 |
CleanupClosePushL(readStream); |
|
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
577 |
|
66 | 578 |
//Retrieve package name. |
579 |
CAppInfo* appInfo=CAppInfo::NewLC(readStream); |
|
580 |
LogSwiErrorsToFileL(err, appInfo->AppName()); |
|
581 |
||
582 |
CleanupStack::PopAndDestroy(2, &readStream); |
|
583 |
); |
|
584 |
} |
|
585 |
return; |
|
586 |
} |
|
587 |
ASSERT(false); |
|
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
588 |
} |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
589 |
|
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
590 |
|
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
591 |
TInt CUissClientHandler::RunError(TInt aError) |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
592 |
{ |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
593 |
DEBUG_PRINTF2(_L8("Sis Helper - UISS Client Handler, RunError. Error: %d."), aError); |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
594 |
// Pass failure code on to our client. |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
595 |
iPtrIntoBuf.Zero(); |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
596 |
iUissSession.CompleteDialog(aError, iPtrIntoBuf, iStatus); |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
597 |
if (iActiveObjectMode) |
66 | 598 |
{ |
599 |
SetActive(); |
|
600 |
} |
|
601 |
return KErrNone; // Do not crash the CActiveScheduler. |
|
602 |
} |
|
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
603 |
|
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
604 |
void CUissClientHandler::DoCancel() |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
605 |
{ |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
606 |
DEBUG_PRINTF(_L8("Sis Helper - UISS Client Handler, Cancelling.")); |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
607 |
|
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
608 |
// Normally NEVER called because the application should have |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
609 |
// waited for the original request to complete! |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
610 |
|
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
611 |
// We can NOT simply call CancelOperation, because when we return |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
612 |
// into the framework Cancel function it will block on our |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
613 |
// iStatus, which would stop the active scheduler and hence stop |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
614 |
// the CancelOperation from being actioned. |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
615 |
|
66 | 616 |
// Do an emergency abort..... |
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
617 |
|
66 | 618 |
// First kill our helper threads |
619 |
||
620 |
// SIS helper thread/server |
|
621 |
CSisHelperServer::Abort(); |
|
622 |
||
623 |
// UI helper thread/server |
|
624 |
TFullName fullName = RProcess().FullName(); |
|
625 |
fullName.Append(':'); |
|
626 |
fullName.Append(':'); |
|
627 |
fullName.Append(KUissServerName); |
|
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
628 |
|
66 | 629 |
RThread server; |
630 |
TInt err = server.Open(fullName); |
|
631 |
if (err == KErrNone) |
|
632 |
{ |
|
633 |
server.Terminate(KErrAbort); |
|
634 |
server.Close(); |
|
635 |
} |
|
636 |
||
637 |
// Now complete any client request |
|
638 |
if (iClientStatus) |
|
639 |
{ |
|
640 |
User::RequestComplete(iClientStatus, err); |
|
641 |
} |
|
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
642 |
} |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
643 |
|
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
644 |
#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
645 |
void CUissClientHandler::ConstructCompInfoFromBufferL() |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
646 |
{ |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
647 |
// create a stream based on the buffer |
66 | 648 |
RDesReadStream stream(*iCompInfoBuffer); |
649 |
CleanupClosePushL(stream); |
|
650 |
||
651 |
CNativeComponentInfo* nativeCompInfo = CNativeComponentInfo::NewLC(); |
|
652 |
nativeCompInfo->InternalizeL(stream); |
|
653 |
||
654 |
// UISS and SWI cannot use Usif::CComponentInfo directly, as it is implemented in a non-TCB DLL. For this reason, a private structure maintained (CNativeComponentInfo), |
|
655 |
// which is returned by SWI and is converted here to the CComponentInfo according to the USIF interface |
|
656 |
Usif::CComponentInfo::CNode* rootNode = MapToComponentInfoL(*nativeCompInfo); |
|
657 |
iComponentInfo->SetRootNodeL(rootNode); |
|
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
658 |
|
66 | 659 |
CleanupStack::PopAndDestroy(nativeCompInfo); |
660 |
CleanupStack::PopAndDestroy(&stream); |
|
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
661 |
} |
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
662 |
|
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
663 |
Usif::CComponentInfo::CNode* CUissClientHandler::MapToComponentInfoL(CNativeComponentInfo& aNativeComponentInfo) |
66 | 664 |
{ |
665 |
// Create the array to store the children nodes. |
|
666 |
RPointerArray<Usif::CComponentInfo::CNode> children; |
|
667 |
CleanupResetAndDestroyPushL(children); |
|
668 |
||
669 |
// If there is any child for the current node, call this method with that child object. |
|
670 |
// Continue this (recursively) until we get the leaf node in the embedded tree (with no children) |
|
671 |
// and add the resultant node as one of the children and pass it to create the parent node further. |
|
672 |
TInt count = aNativeComponentInfo.iChildren.Count(); |
|
673 |
for (TInt i = 0; i < count; ++i) |
|
674 |
{ |
|
675 |
Usif::CComponentInfo::CNode* node = MapToComponentInfoL(*aNativeComponentInfo.iChildren[i]); |
|
676 |
CleanupStack::PushL(node); |
|
677 |
children.AppendL(node); |
|
678 |
CleanupStack::Pop(node); |
|
679 |
} |
|
680 |
||
681 |
// Create the CNode object using the appropriate parameters. |
|
682 |
// children for leaf nodes (bottom most nodes in the embedded tree) will be null. |
|
683 |
Usif::CComponentInfo::CNode* node = Usif::CComponentInfo::CNode::NewLC( |
|
684 |
Usif::KSoftwareTypeNative(), |
|
685 |
*(aNativeComponentInfo.iComponentName), |
|
686 |
*(aNativeComponentInfo.iVersion), |
|
687 |
*(aNativeComponentInfo.iVendor), |
|
688 |
static_cast<Usif::TScomoState>(aNativeComponentInfo.iScomoState), |
|
689 |
static_cast<Usif::TInstallStatus>(aNativeComponentInfo.iInstallStatus), |
|
690 |
aNativeComponentInfo.iComponentId, |
|
691 |
*(aNativeComponentInfo.iGlobalComponentId), |
|
692 |
static_cast<Usif::TAuthenticity>(aNativeComponentInfo.iAuthenticity), |
|
693 |
aNativeComponentInfo.iUserGrantableCaps, |
|
694 |
aNativeComponentInfo.iMaxInstalledSize, |
|
695 |
aNativeComponentInfo.iHasExe, |
|
696 |
&children); |
|
697 |
CleanupStack::Pop(node); |
|
698 |
CleanupStack::Pop(&children); |
|
699 |
children.Close(); |
|
700 |
return (node); |
|
701 |
} |
|
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
702 |
#endif |
66 | 703 |
|
704 |
||
705 |
void LogSwiErrorsToFileL(TInt aErrorCode, const TDesC& aAppName) |
|
706 |
{ |
|
707 |
_LIT(KErrorString, "%S : Failed with %d"); |
|
708 |
_LIT(KLogFile, "c:\\data\\swilog.log"); |
|
709 |
||
710 |
//Format Output string |
|
711 |
HBufC* outputString = HBufC::NewLC(aAppName.Length()+ 30); |
|
712 |
outputString->Des().Format(KErrorString, &aAppName, aErrorCode); |
|
713 |
||
714 |
//Maximum number of log file entries. |
|
715 |
const TUint KLogFileSize = 10; |
|
716 |
||
717 |
RFs fs; |
|
718 |
User::LeaveIfError(fs.Connect()); |
|
719 |
CleanupClosePushL(fs); |
|
720 |
||
721 |
RFile logFile; |
|
722 |
TInt err = logFile.Open(fs, KLogFile, EFileWrite); |
|
723 |
if(err != KErrNone) |
|
724 |
{ |
|
725 |
//Attempt to create the file. |
|
726 |
err = logFile.Create(fs, KLogFile, EFileWrite); |
|
727 |
User::LeaveIfError(err); |
|
728 |
} |
|
729 |
CleanupClosePushL(logFile); |
|
730 |
||
731 |
||
732 |
//Read the entire log file. |
|
733 |
RPointerArray<HBufC> linesArray; |
|
734 |
CleanupResetAndDestroyPushL(linesArray); |
|
735 |
||
736 |
TFileText logFileManipulator; |
|
737 |
logFileManipulator.Set(logFile); |
|
738 |
||
739 |
TBuf<200>buffer; |
|
740 |
err = logFileManipulator.Read(buffer); |
|
741 |
TInt count(0); |
|
742 |
while(err == KErrNone && ++count <= KLogFileSize) |
|
743 |
{ |
|
744 |
HBufC* line = buffer.AllocLC(); |
|
745 |
linesArray.AppendL(line); |
|
746 |
CleanupStack::Pop(line); |
|
747 |
err = logFileManipulator.Read(buffer); |
|
748 |
} |
|
749 |
||
750 |
// If the log file contains less than KLogFileSize entries, |
|
751 |
// write the new log entry. |
|
752 |
if(count < KLogFileSize) |
|
753 |
{ |
|
754 |
logFileManipulator.Seek(ESeekEnd); |
|
755 |
logFileManipulator.Write(*outputString); |
|
756 |
} |
|
757 |
else |
|
758 |
{ |
|
759 |
// Contains KLogFileSize entries. |
|
760 |
// Replicate the last KLogFileSize - 1 entries and add the |
|
761 |
// new log at the end. |
|
762 |
logFile.Close(); |
|
763 |
logFile.Replace(fs, KLogFile, EFileWrite); |
|
764 |
logFileManipulator.Set(logFile); |
|
765 |
for(TInt i = linesArray.Count()- KLogFileSize +1; i<linesArray.Count(); ++i ) |
|
766 |
{ |
|
767 |
logFileManipulator.Write(*linesArray[i]); |
|
768 |
} |
|
769 |
||
770 |
// New Entry. |
|
771 |
logFileManipulator.Write(*outputString); |
|
772 |
} |
|
773 |
logFile.Close(); |
|
774 |
CleanupStack::PopAndDestroy(4, outputString); |
|
775 |
} |
|
0
ba25891c3a9e
Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
776 |
} // namespace Swi |