27 #include "cmtpdataprovidercontroller.h" |
27 #include "cmtpdataprovidercontroller.h" |
28 #include "mtpframeworkconst.h" |
28 #include "mtpframeworkconst.h" |
29 #include "rmtpdpsingletons.h" |
29 #include "rmtpdpsingletons.h" |
30 #include "rmtputility.h" |
30 #include "rmtputility.h" |
31 #include "cmtpstoragemgr.h" |
31 #include "cmtpstoragemgr.h" |
|
32 #include "mtpdebug.h" |
|
33 #include "OstTraceDefinitions.h" |
|
34 #ifdef OST_TRACE_COMPILER_IN_USE |
|
35 #include "cmtpsetobjectpropvalueTraces.h" |
|
36 #endif |
|
37 |
32 |
38 |
33 /** |
39 /** |
34 Verification data for the SetObjectPropValue request |
40 Verification data for the SetObjectPropValue request |
35 */ |
41 */ |
36 const TMTPRequestElementInfo KMTPSetObjectPropValuePolicy[] = |
42 const TMTPRequestElementInfo KMTPSetObjectPropValuePolicy[] = |
150 } |
156 } |
151 else |
157 else |
152 { |
158 { |
153 const TDesC& suid(meta->DesC(CMTPObjectMetaData::ESuid)); |
159 const TDesC& suid(meta->DesC(CMTPObjectMetaData::ESuid)); |
154 TEntry entry; |
160 TEntry entry; |
155 User::LeaveIfError( iFramework.Fs().Entry(suid, entry) ); |
161 LEAVEIFERROR( iFramework.Fs().Entry(suid, entry), |
156 |
162 OstTraceExt1( TRACE_ERROR, CMTPSETOBJECTPROPVALUE_CHECKREQUESTL, "Gets entry details for %S failed!", suid)); |
157 //According to spec, there are 4 statuses: No Protection; Read-only; Read-only data; Non-transferrable data |
163 //According to spec, there are 4 statuses: No Protection; Read-only; Read-only data; Non-transferrable data |
158 //Currently, we only use FS's Read-only attribute to support No Protection and Read-only statuses. |
164 //Currently, we only use FS's Read-only attribute to support No Protection and Read-only statuses. |
159 //so if the attribute is read-only, we will return EMTPRespCodeAccessDenied. |
165 //so if the attribute is read-only, we will return EMTPRespCodeAccessDenied. |
160 if (entry.IsReadOnly()) |
166 if (entry.IsReadOnly()) |
161 { |
167 { |
174 __ASSERT_DEBUG(iRequestChecker, Panic(EMTPDpRequestCheckNull)); |
180 __ASSERT_DEBUG(iRequestChecker, Panic(EMTPDpRequestCheckNull)); |
175 TUint32 handle = Request().Uint32(TMTPTypeRequest::ERequestParameter1); |
181 TUint32 handle = Request().Uint32(TMTPTypeRequest::ERequestParameter1); |
176 TUint32 propCode = Request().Uint32(TMTPTypeRequest::ERequestParameter2); |
182 TUint32 propCode = Request().Uint32(TMTPTypeRequest::ERequestParameter2); |
177 |
183 |
178 iFramework.ObjectMgr().ObjectL(TMTPTypeUint32(handle), *iObjMeta); |
184 iFramework.ObjectMgr().ObjectL(TMTPTypeUint32(handle), *iObjMeta); |
179 User::LeaveIfError(iRfs.Entry(iObjMeta->DesC(CMTPObjectMetaData::ESuid), iFileEntry)); |
185 LEAVEIFERROR(iRfs.Entry(iObjMeta->DesC(CMTPObjectMetaData::ESuid), iFileEntry), |
|
186 OstTraceExt1(TRACE_ERROR, CMTPSETOBJECTPROPVALUE_SERVICEL, |
|
187 "can't get entry details for %S!", iObjMeta->DesC(CMTPObjectMetaData::ESuid))); |
180 |
188 |
181 delete iMTPTypeString; |
189 delete iMTPTypeString; |
182 iMTPTypeString = NULL; |
190 iMTPTypeString = NULL; |
183 iMTPTypeString = CMTPTypeString::NewL(); |
191 iMTPTypeString = CMTPTypeString::NewL(); |
184 switch(propCode) |
192 switch(propCode) |
190 break; |
198 break; |
191 case EMTPObjectPropCodeNonConsumable: |
199 case EMTPObjectPropCodeNonConsumable: |
192 ReceiveDataL(iMTPTypeUint8); |
200 ReceiveDataL(iMTPTypeUint8); |
193 break; |
201 break; |
194 case EMTPObjectPropCodeAssociationType: |
202 case EMTPObjectPropCodeAssociationType: |
|
203 case EMTPObjectPropCodeHidden: |
195 { |
204 { |
196 ReceiveDataL(iMTPTypeUint16); |
205 ReceiveDataL(iMTPTypeUint16); |
197 } |
206 } |
198 break; |
207 break; |
199 case EMTPObjectPropCodeAssociationDesc: |
208 case EMTPObjectPropCodeAssociationDesc: |
212 //!!! Never come here, it should be blocked on CheckRequestL() |
221 //!!! Never come here, it should be blocked on CheckRequestL() |
213 // and EMTPRespCodeAccessDenied will be reported. |
222 // and EMTPRespCodeAccessDenied will be reported. |
214 //No break sentance, goto Panic |
223 //No break sentance, goto Panic |
215 } |
224 } |
216 default: |
225 default: |
|
226 OstTrace1( TRACE_ERROR, DUP1_CMTPSETOBJECTPROPVALUE_SERVICEL, "Invalid property code %d", propCode); |
217 User::Leave( KErrNotSupported ); |
227 User::Leave( KErrNotSupported ); |
218 break; |
228 break; |
219 } |
229 } |
220 } |
230 } |
221 |
231 |
243 { |
253 { |
244 responseCode = EMTPRespCodeInvalidObjectPropValue; |
254 responseCode = EMTPRespCodeInvalidObjectPropValue; |
245 } |
255 } |
246 } |
256 } |
247 break; |
257 break; |
248 |
258 case EMTPObjectPropCodeHidden: |
|
259 { |
|
260 if ( EMTPHidden == iMTPTypeUint16.Value()) |
|
261 { |
|
262 TEntry entry; |
|
263 User::LeaveIfError(iFramework.Fs().Entry(iObjMeta->DesC(CMTPObjectMetaData::ESuid), entry)); |
|
264 if ( !entry.IsHidden()) |
|
265 { |
|
266 entry.iAtt &= ~KEntryAttHidden; |
|
267 entry.iAtt |= KEntryAttHidden; |
|
268 User::LeaveIfError(iFramework.Fs().SetAtt(iObjMeta->DesC(CMTPObjectMetaData::ESuid), entry.iAtt, ~entry.iAtt)); |
|
269 } |
|
270 responseCode = EMTPRespCodeOK; |
|
271 } |
|
272 else if ( EMTPVisible == iMTPTypeUint16.Value()) |
|
273 { |
|
274 TEntry entry; |
|
275 User::LeaveIfError(iFramework.Fs().Entry(iObjMeta->DesC(CMTPObjectMetaData::ESuid), entry)); |
|
276 if ( entry.IsHidden()) |
|
277 { |
|
278 entry.iAtt &= ~KEntryAttHidden; |
|
279 User::LeaveIfError(iFramework.Fs().SetAtt(iObjMeta->DesC(CMTPObjectMetaData::ESuid), entry.iAtt, ~entry.iAtt)); |
|
280 } |
|
281 responseCode = EMTPRespCodeOK; |
|
282 } |
|
283 else |
|
284 { |
|
285 responseCode = EMTPRespCodeInvalidObjectPropValue; |
|
286 } |
|
287 } |
|
288 break; |
249 case EMTPObjectPropCodeObjectFileName: |
289 case EMTPObjectPropCodeObjectFileName: |
250 { |
290 { |
251 |
291 |
252 TRAPD(err, iDpSingletons.MTPUtility().RenameObjectL(iObjMeta->Uint(CMTPObjectMetaData::EHandle),iMTPTypeString->StringChars())) ; |
292 TRAPD(err, iDpSingletons.MTPUtility().RenameObjectL(iObjMeta->Uint(CMTPObjectMetaData::EHandle),iMTPTypeString->StringChars())) ; |
253 if( KErrNone == err ) |
293 if( KErrNone == err ) |