10 // |
10 // |
11 // Contributors: |
11 // Contributors: |
12 // |
12 // |
13 // Description: |
13 // Description: |
14 // CMassStorageMountCB implementation. |
14 // CMassStorageMountCB implementation. |
15 // |
15 // |
16 // |
16 // |
17 |
17 |
18 /** |
18 /** |
19 @file |
19 @file |
20 @internalTechnology |
20 @internalTechnology |
21 */ |
21 */ |
22 |
22 |
23 #include <f32fsys.h> |
23 #include <f32fsys.h> |
24 #include <f32file.h> |
24 #include <f32file.h> |
25 #include "cmassstoragemountcb.h" |
25 |
|
26 #include "drivemanager.h" |
26 #include "cusbmassstoragecontroller.h" |
27 #include "cusbmassstoragecontroller.h" |
27 #include "cmassstoragefilesystem.h" |
28 #include "cmassstoragefilesystem.h" |
28 #include "massstoragedebug.h" |
29 #include "cmassstoragemountcb.h" |
|
30 |
|
31 #include "OstTraceDefinitions.h" |
|
32 #ifdef OST_TRACE_COMPILER_IN_USE |
|
33 #include "cmassstoragemountcbTraces.h" |
|
34 #endif |
|
35 |
29 |
36 |
30 CMassStorageMountCB::CMassStorageMountCB(const RArray<TInt>& aDriveMapping) |
37 CMassStorageMountCB::CMassStorageMountCB(const RArray<TInt>& aDriveMapping) |
31 : iDriveMapping(aDriveMapping) |
38 : iDriveMapping(aDriveMapping) |
32 { |
39 { |
33 } |
40 } |
34 |
41 |
35 CMassStorageMountCB* CMassStorageMountCB::NewL(const RArray<TInt>& aDriveMapping) |
42 CMassStorageMountCB* CMassStorageMountCB::NewL(const RArray<TInt>& aDriveMapping) |
36 { |
43 { |
37 return new (ELeave) CMassStorageMountCB(aDriveMapping); |
44 return new (ELeave) CMassStorageMountCB(aDriveMapping); |
38 } |
45 } |
39 |
46 |
40 /** |
47 /** |
41 Checks that the drive number is supported. |
48 Checks that the drive number is supported. |
42 |
49 |
43 @leave KErrNotReady The drive number is not supported. |
50 @leave KErrNotReady The drive number is not supported. |
44 */ |
51 */ |
45 TInt CMassStorageMountCB::CheckDriveNumberL() |
52 TInt CMassStorageMountCB::CheckDriveNumberL() |
46 { |
53 { |
47 __FNLOG("CMassStorageMountCB::CheckDriveNumberL"); |
54 TInt driveNumber; |
48 TInt driveNumber; |
55 driveNumber = Drive().DriveNumber(); |
49 driveNumber = Drive().DriveNumber(); |
56 OstTrace1(TRACE_SMASSSTORAGE_FS, CMASSSTORAGEMOUNTCB_100, |
50 if (!IsValidLocalDriveMapping(driveNumber)) |
57 "Drive=%d", driveNumber); |
51 { |
58 if (!IsValidLocalDriveMapping(driveNumber)) |
52 __PRINT1(_L("CMassStorageMountCB::CheckDriveNumberL: Drive number %d not supported"), driveNumber); |
59 { |
53 User::Leave(KErrNotReady); |
60 OstTrace0(TRACE_SMASSSTORAGE_FS, CMASSSTORAGEMOUNTCB_101, |
54 } |
61 "Drive number not supported"); |
55 __PRINT1(_L("CMassStorageMountCB::CheckDriveNumberL: Drive number = %d"), driveNumber); |
62 User::Leave(KErrNotReady); |
56 return driveNumber; |
63 } |
57 } |
64 return driveNumber; |
|
65 } |
58 |
66 |
59 /** |
67 /** |
60 Registers the drive with the Mass Storage drive manager. |
68 Registers the drive with the Mass Storage drive manager. |
61 |
69 |
62 @leave KErrNotSupported The drive is not compatible with Mass Storage. |
70 @leave KErrNotSupported The drive is not compatible with Mass Storage. |
63 */ |
71 */ |
64 void CMassStorageMountCB::MountL(TBool /*aForceMount*/) |
72 void CMassStorageMountCB::MountL(TBool /*aForceMount*/) |
65 { |
73 { |
66 __FNLOG("CMassStorageMountCB::MountL"); |
74 CheckDriveNumberL(); |
67 |
75 CMassStorageFileSystem& msFsys = *reinterpret_cast<CMassStorageFileSystem*>(Drive().GetFSys()); |
68 CheckDriveNumberL(); |
76 |
69 CMassStorageFileSystem& msFsys = *reinterpret_cast<CMassStorageFileSystem*>(Drive().GetFSys()); |
77 TInt lun = DriveNumberToLun(Drive().DriveNumber()); |
70 |
78 |
71 TInt lun = DriveNumberToLun(Drive().DriveNumber()); |
79 OstTrace1(TRACE_SMASSSTORAGE_FS, CMASSSTORAGEMOUNTCB_120, |
72 |
80 "LUN=%d", lun); |
73 if(lun < 0) |
81 |
74 { |
82 if(lun < 0) |
75 // This is not a supported Mass Storage drive |
83 { |
76 User::Leave(KErrNotSupported); |
84 // This is not a supported Mass Storage drive |
77 } |
85 User::Leave(KErrNotSupported); |
78 |
86 } |
79 TBusLocalDrive& localDrive = msFsys.iLocalDriveForMediaFlag[lun]; |
87 |
80 |
88 TBusLocalDrive& localDrive = msFsys.iLocalDriveForMediaFlag[lun]; |
81 TInt err = CreateLocalDrive(localDrive); |
89 |
82 User::LeaveIfError(err); |
90 TInt err = CreateLocalDrive(localDrive); |
83 |
91 User::LeaveIfError(err); |
84 CProxyDrive* proxyDrive = LocalDrive(); |
92 |
85 |
93 CProxyDrive* proxyDrive = LocalDrive(); |
86 TLocalDriveCapsV2Buf caps; |
94 |
87 err = localDrive.Caps(caps); |
95 TLocalDriveCapsV2Buf caps; |
88 //Make sure file system is FAT and removable |
96 err = localDrive.Caps(caps); |
89 if (err == KErrNone) |
97 //Make sure file system is FAT and removable |
90 { |
98 if (err == KErrNone) |
91 err = KErrNotSupported; |
99 { |
92 if ((caps().iDriveAtt & KDriveAttRemovable) == KDriveAttRemovable) |
100 err = KErrNotSupported; |
93 { |
101 if ((caps().iDriveAtt & KDriveAttRemovable) == KDriveAttRemovable) |
94 if (caps().iType != EMediaNotPresent) |
102 { |
95 { |
103 if (caps().iType != EMediaNotPresent) |
96 err = KErrNone; |
104 { |
97 } |
105 err = KErrNone; |
98 } |
106 } |
99 } |
107 } |
100 |
108 } |
101 if (err != KErrNone && err != KErrNotReady) |
109 |
102 { |
110 if (err != KErrNone && err != KErrNotReady) |
103 __PRINT1(_L("CMassStorageMountCB::MountL: Drive is not compatible with Mass Storage, err=%d"), err); |
111 { |
104 User::Leave(err); |
112 OstTrace1(TRACE_SMASSSTORAGE_FS, CMASSSTORAGEMOUNTCB_121, |
105 } |
113 "Drive is not compatible with Mass Storage err=%d", err); |
106 |
114 User::Leave(err); |
107 __PRINT(_L("CMassStorageMountCB::MountL: Registering drive")); |
115 } |
108 |
116 |
109 // Set media changed to true so that Win2K doesn't used cached drive data |
117 // Set media changed to true so that Win2K doesn't used cached drive data |
110 (*msFsys.iMediaChanged)[lun] = ETrue; |
118 (*msFsys.iMediaChanged)[lun] = ETrue; |
111 |
119 |
112 msFsys.Controller().DriveManager().RegisterDrive(*proxyDrive, (*msFsys.iMediaChanged)[lun], lun); |
120 msFsys.Controller().DriveManager().RegisterDrive(*proxyDrive, (*msFsys.iMediaChanged)[lun], lun); |
113 |
121 |
114 SetVolumeName(_L("MassStorage").AllocL()); |
122 SetVolumeName(_L("MassStorage").AllocL()); |
115 } |
123 } |
116 |
124 |
117 /** |
125 /** |
118 Returns the LUN that corresponds to the specified drive number. |
126 Returns the LUN that corresponds to the specified drive number. |
119 |
127 |
120 @param aDriveNumber The drive number. |
128 @param aDriveNumber The drive number. |
121 */ |
129 */ |
122 TInt CMassStorageMountCB::DriveNumberToLun(TInt aDriveNumber) |
130 TInt CMassStorageMountCB::DriveNumberToLun(TInt aDriveNumber) |
123 { |
131 { |
124 __FNLOG("CMassStorageMountCB::DriveNumberToLun"); |
132 TInt lun = -1; |
125 TInt lun = -1; |
133 for (TInt i = 0; i < iDriveMapping.Count(); i++) |
126 for (TInt i = 0; i < iDriveMapping.Count(); i++) |
134 { |
127 { |
135 if (iDriveMapping[i] == aDriveNumber) |
128 if (iDriveMapping[i] == aDriveNumber) |
136 { |
129 { |
137 lun = i; |
130 lun = i; |
138 break; |
131 break; |
139 } |
132 } |
140 } |
133 } |
141 OstTraceExt2(TRACE_SMASSSTORAGE_FS, CMASSSTORAGEMOUNTCB_130, |
134 __PRINT2(_L("CMassStorageMountCB::DriveNumberToLun: Drive %d maps to LUN %d"), aDriveNumber, lun); |
142 "Drive %d maps to LUN %d", aDriveNumber, lun); |
135 return lun; |
143 return lun; |
136 } |
144 } |
137 |
145 |
138 /** |
146 /** |
139 Deregisters the drive from the Drive Manager. |
147 Deregisters the drive from the Drive Manager. |
140 */ |
148 */ |
141 void CMassStorageMountCB::Dismounted() |
149 void CMassStorageMountCB::Dismounted() |
142 { |
150 { |
143 __FNLOG("CMassStorageMountCB::Dismounted"); |
151 TInt driveNumber = -1; |
144 TInt driveNumber = -1; |
152 TRAPD(err, driveNumber = CheckDriveNumberL()); |
145 TRAPD(err, driveNumber = CheckDriveNumberL()); |
153 if (err != KErrNone) |
146 if (err != KErrNone) |
154 { |
147 { |
155 return; |
148 return; |
156 } |
149 } |
157 OstTrace1(TRACE_SMASSSTORAGE_FS, CMASSSTORAGEMOUNTCB_140, |
150 __PRINT(_L("CMassStorageMountCB::Dismounted: Deregistering drive")); |
158 "Dismounted drive %d", driveNumber); |
151 CMassStorageFileSystem& msFsys = *reinterpret_cast<CMassStorageFileSystem*>(Drive().GetFSys()); |
159 CMassStorageFileSystem& msFsys = *reinterpret_cast<CMassStorageFileSystem*>(Drive().GetFSys()); |
152 msFsys.Controller().DriveManager().DeregisterDrive(DriveNumberToLun(driveNumber)); |
160 msFsys.Controller().DriveManager().DeregisterDrive(DriveNumberToLun(driveNumber)); |
153 |
161 |
154 DismountedLocalDrive(); |
162 DismountedLocalDrive(); |
155 } |
163 } |
156 |
164 |
157 /** |
165 /** |
158 Unlocks the drive with the specified password, optionally storing the password for later use. |
166 Unlocks the drive with the specified password, optionally storing the password for later use. |
159 |
167 |
160 @param aPassword The password to use for unlocking the drive. |
168 @param aPassword The password to use for unlocking the drive. |
161 @param aStore True if the password is to be stored. |
169 @param aStore True if the password is to be stored. |
162 */ |
170 */ |
163 TInt CMassStorageMountCB::Unlock(TMediaPassword& aPassword, TBool aStore) |
171 TInt CMassStorageMountCB::Unlock(TMediaPassword& aPassword, TBool aStore) |
164 { |
172 { |
165 __FNLOG("CMassStorageMountCB::Unlock"); |
173 TInt driveNumber = -1; |
166 TInt driveNumber = -1; |
174 TRAPD(err, driveNumber = CheckDriveNumberL()); |
167 TRAPD(err, driveNumber = CheckDriveNumberL()); |
175 OstTrace1(TRACE_SMASSSTORAGE_FS, CMASSSTORAGEMOUNTCB_150, |
168 if (err != KErrNone) |
176 "Unlock drive %d", driveNumber); |
169 { |
177 if (err != KErrNone) |
170 return err; |
178 { |
171 } |
179 return err; |
172 TBusLocalDrive& localDrive=GetLocalDrive(driveNumber); |
180 } |
173 if(localDrive.Status() == KErrLocked) |
181 TBusLocalDrive& localDrive=GetLocalDrive(driveNumber); |
174 { |
182 if(localDrive.Status() == KErrLocked) |
175 localDrive.Status() = KErrNotReady; |
183 { |
176 } |
184 localDrive.Status() = KErrNotReady; |
177 TInt r = localDrive.Unlock(aPassword, aStore); |
185 } |
178 if(r == KErrNone && aStore) |
186 TInt r = localDrive.Unlock(aPassword, aStore); |
179 { |
187 if(r == KErrNone && aStore) |
180 WritePasswordData(); |
188 { |
181 } |
189 WritePasswordData(); |
182 return(r); |
190 } |
183 } |
191 return(r); |
|
192 } |
184 |
193 |
185 /** |
194 /** |
186 Stores the password for the drive to the password file. |
195 Stores the password for the drive to the password file. |
187 */ |
196 */ |
188 void CMassStorageMountCB::WritePasswordData() |
197 void CMassStorageMountCB::WritePasswordData() |
189 { |
198 { |
190 __FNLOG("CMassStorageMountCB::WritePasswordData"); |
199 TBusLocalDrive& local=GetLocalDrive(Drive().DriveNumber()); |
191 TBusLocalDrive& local=GetLocalDrive(Drive().DriveNumber()); |
200 OstTrace1(TRACE_SMASSSTORAGE_FS, CMASSSTORAGEMOUNTCB_160, |
192 TInt length = local.PasswordStoreLengthInBytes(); |
201 "WritePasswordData drive %d", DriveNumber()); |
193 if(length==0) |
202 TInt length = local.PasswordStoreLengthInBytes(); |
194 { |
203 if(length==0) |
195 TBuf<sizeof(KMediaPWrdFile)> mediaPWrdFile(KMediaPWrdFile); |
204 { |
196 mediaPWrdFile[0] = (TUint8) RFs::GetSystemDriveChar(); |
205 TBuf<sizeof(KMediaPWrdFile)> mediaPWrdFile(KMediaPWrdFile); |
197 WriteToDisk(mediaPWrdFile,_L8("")); |
206 mediaPWrdFile[0] = (TUint8) RFs::GetSystemDriveChar(); |
198 return; |
207 WriteToDisk(mediaPWrdFile,_L8("")); |
199 } |
208 return; |
200 HBufC8* hDes=HBufC8::New(length); |
209 } |
201 if(hDes==NULL) |
210 HBufC8* hDes=HBufC8::New(length); |
202 { |
211 if(hDes==NULL) |
203 return; |
212 { |
204 } |
213 return; |
205 TPtr8 pDes=hDes->Des(); |
214 } |
206 TInt r=local.ReadPasswordData(pDes); |
215 TPtr8 pDes=hDes->Des(); |
207 if(r==KErrNone) |
216 TInt r=local.ReadPasswordData(pDes); |
208 { |
217 if(r==KErrNone) |
209 TBuf<sizeof(KMediaPWrdFile)> mediaPWrdFile(KMediaPWrdFile); |
218 { |
210 mediaPWrdFile[0] = (TUint8) RFs::GetSystemDriveChar(); |
219 TBuf<sizeof(KMediaPWrdFile)> mediaPWrdFile(KMediaPWrdFile); |
211 WriteToDisk(mediaPWrdFile,pDes); |
220 mediaPWrdFile[0] = (TUint8) RFs::GetSystemDriveChar(); |
212 } |
221 WriteToDisk(mediaPWrdFile,pDes); |
213 delete hDes; |
222 } |
214 } |
223 delete hDes; |
|
224 } |
215 |
225 |
216 TInt CMassStorageMountCB::ReMount() |
226 TInt CMassStorageMountCB::ReMount() |
217 { |
227 { |
218 return KErrNotReady; |
228 return KErrNotReady; |
219 } |
229 } |
220 |
230 |
221 void CMassStorageMountCB::VolumeL(TVolumeInfo& /*aVolume*/) const |
231 void CMassStorageMountCB::VolumeL(TVolumeInfo& /*aVolume*/) const |
222 { |
232 { |
223 User::Leave(KErrNotReady); |
233 User::Leave(KErrNotReady); |
224 } |
234 } |
225 |
235 |
226 void CMassStorageMountCB::SetVolumeL(TDes& /*aName*/) |
236 void CMassStorageMountCB::SetVolumeL(TDes& /*aName*/) |
227 { |
237 { |
228 User::Leave(KErrNotReady); |
238 User::Leave(KErrNotReady); |
229 } |
239 } |
230 |
240 |
231 void CMassStorageMountCB::MkDirL(const TDesC& /*aName*/) |
241 void CMassStorageMountCB::MkDirL(const TDesC& /*aName*/) |
232 { |
242 { |
233 User::Leave(KErrNotReady); |
243 User::Leave(KErrNotReady); |
234 } |
244 } |
235 |
245 |
236 void CMassStorageMountCB::RmDirL(const TDesC& /*aName*/) |
246 void CMassStorageMountCB::RmDirL(const TDesC& /*aName*/) |
237 { |
247 { |
238 User::Leave(KErrNotReady); |
248 User::Leave(KErrNotReady); |
239 } |
249 } |
240 |
250 |
241 void CMassStorageMountCB::DeleteL(const TDesC& /*aName*/) |
251 void CMassStorageMountCB::DeleteL(const TDesC& /*aName*/) |
242 { |
252 { |
243 User::Leave(KErrNotReady); |
253 User::Leave(KErrNotReady); |
244 } |
254 } |
245 |
255 |
246 void CMassStorageMountCB::RenameL(const TDesC& /*anOldName*/,const TDesC& /*anNewName*/) |
256 void CMassStorageMountCB::RenameL(const TDesC& /*anOldName*/,const TDesC& /*anNewName*/) |
247 { |
257 { |
248 User::Leave(KErrNotReady); |
258 User::Leave(KErrNotReady); |
249 } |
259 } |
250 |
260 |
251 void CMassStorageMountCB::ReplaceL(const TDesC& /*anOldName*/,const TDesC& /*anNewName*/) |
261 void CMassStorageMountCB::ReplaceL(const TDesC& /*anOldName*/,const TDesC& /*anNewName*/) |
252 { |
262 { |
253 User::Leave(KErrNotReady); |
263 User::Leave(KErrNotReady); |
254 } |
264 } |
255 |
265 |
256 void CMassStorageMountCB::EntryL(const TDesC& /*aName*/,TEntry& /*anEntry*/) const |
266 void CMassStorageMountCB::EntryL(const TDesC& /*aName*/,TEntry& /*anEntry*/) const |
257 { |
267 { |
258 User::Leave(KErrNotReady); |
268 User::Leave(KErrNotReady); |
259 } |
269 } |
260 |
270 |
261 void CMassStorageMountCB::SetEntryL(const TDesC& /*aName*/,const TTime& /*aTime*/,TUint /*aSetAttMask*/,TUint /*aClearAttMask*/) |
271 void CMassStorageMountCB::SetEntryL(const TDesC& /*aName*/,const TTime& /*aTime*/,TUint /*aSetAttMask*/,TUint /*aClearAttMask*/) |
262 { |
272 { |
263 User::Leave(KErrNotReady); |
273 User::Leave(KErrNotReady); |
264 } |
274 } |
265 |
275 |
266 void CMassStorageMountCB::FileOpenL(const TDesC& /*aName*/,TUint /*aMode*/,TFileOpen /*anOpen*/,CFileCB* /*aFile*/) |
276 void CMassStorageMountCB::FileOpenL(const TDesC& /*aName*/,TUint /*aMode*/,TFileOpen /*anOpen*/,CFileCB* /*aFile*/) |
267 { |
277 { |
268 User::Leave(KErrNotReady); |
278 User::Leave(KErrNotReady); |
269 } |
279 } |
270 |
280 |
271 void CMassStorageMountCB::DirOpenL(const TDesC& /*aName*/,CDirCB* /*aDir*/) |
281 void CMassStorageMountCB::DirOpenL(const TDesC& /*aName*/,CDirCB* /*aDir*/) |
272 { |
282 { |
273 User::Leave(KErrNotReady); |
283 User::Leave(KErrNotReady); |
274 } |
284 } |
275 |
285 |
276 |
286 |
277 void CMassStorageMountCB::RawReadL(TInt64 /*aPos*/,TInt /*aLength*/,const TAny* /*aTrg*/,TInt /*anOffset*/,const RMessagePtr2& /*aMessage*/) const |
287 void CMassStorageMountCB::RawReadL(TInt64 /*aPos*/,TInt /*aLength*/,const TAny* /*aTrg*/,TInt /*anOffset*/,const RMessagePtr2& /*aMessage*/) const |
278 { |
288 { |
279 User::Leave(KErrNotReady); |
289 User::Leave(KErrNotReady); |
280 } |
290 } |
281 |
291 |
282 void CMassStorageMountCB::RawWriteL(TInt64 /*aPos*/,TInt /*aLength*/,const TAny* /*aSrc*/,TInt /*anOffset*/,const RMessagePtr2& /*aMessage*/) |
292 void CMassStorageMountCB::RawWriteL(TInt64 /*aPos*/,TInt /*aLength*/,const TAny* /*aSrc*/,TInt /*anOffset*/,const RMessagePtr2& /*aMessage*/) |
283 { |
293 { |
284 User::Leave(KErrNotReady); |
294 User::Leave(KErrNotReady); |
285 } |
295 } |
286 |
296 |
287 |
297 |
288 void CMassStorageMountCB::GetShortNameL(const TDesC& /*aLongName*/,TDes& /*aShortName*/) |
298 void CMassStorageMountCB::GetShortNameL(const TDesC& /*aLongName*/,TDes& /*aShortName*/) |
289 { |
299 { |
290 User::Leave(KErrNotReady); |
300 User::Leave(KErrNotReady); |
291 } |
301 } |
292 |
302 |
293 void CMassStorageMountCB::GetLongNameL(const TDesC& /*aShorName*/,TDes& /*aLongName*/) |
303 void CMassStorageMountCB::GetLongNameL(const TDesC& /*aShorName*/,TDes& /*aLongName*/) |
294 { |
304 { |
295 User::Leave(KErrNotReady); |
305 User::Leave(KErrNotReady); |
296 } |
306 } |
297 |
307 |
298 #if defined(_DEBUG) |
308 #if defined(_DEBUG) |
299 TInt CMassStorageMountCB::ControlIO(const RMessagePtr2& aMessage,TInt aCommand,TAny* aParam1,TAny* aParam2) |
309 TInt CMassStorageMountCB::ControlIO(const RMessagePtr2& aMessage,TInt aCommand,TAny* aParam1,TAny* aParam2) |
300 // |
310 // |
301 // Debug function |
311 // Debug function |
302 // |
312 // |
303 { |
313 { |
304 if(aCommand>=(KMaxTInt/2)) |
314 if(aCommand>=(KMaxTInt/2)) |
305 return LocalDrive()->ControlIO(aMessage,aCommand-(KMaxTInt/2),aParam1,aParam2); |
315 return LocalDrive()->ControlIO(aMessage,aCommand-(KMaxTInt/2),aParam1,aParam2); |
306 else |
316 else |
307 return KErrNotSupported; |
317 return KErrNotSupported; |
308 } |
318 } |
309 #else |
319 #else |
310 TInt CMassStorageMountCB::ControlIO(const RMessagePtr2& /*aMessage*/,TInt /*aCommand*/,TAny* /*aParam1*/,TAny* /*aParam2*/) |
320 TInt CMassStorageMountCB::ControlIO(const RMessagePtr2& /*aMessage*/,TInt /*aCommand*/,TAny* /*aParam1*/,TAny* /*aParam2*/) |
311 {return(KErrNotSupported);} |
321 {return(KErrNotSupported);} |
312 #endif |
322 #endif |
313 |
323 |
314 void CMassStorageMountCB::ReadSectionL(const TDesC& /*aName*/,TInt /*aPos*/,TAny* /*aTrg*/,TInt /*aLength*/,const RMessagePtr2& /*aMessage*/) |
324 void CMassStorageMountCB::ReadSectionL(const TDesC& /*aName*/,TInt /*aPos*/,TAny* /*aTrg*/,TInt /*aLength*/,const RMessagePtr2& /*aMessage*/) |
315 { |
325 { |
316 User::Leave(KErrNotReady); |
326 User::Leave(KErrNotReady); |
317 } |
327 } |
318 |
328 |