70 CRequestProcessor( aFramework, |
70 CRequestProcessor( aFramework, |
71 aConnection, |
71 aConnection, |
72 sizeof(KMTPSetObjectPropValuePolicy) / sizeof(TMTPRequestElementInfo), |
72 sizeof(KMTPSetObjectPropValuePolicy) / sizeof(TMTPRequestElementInfo), |
73 KMTPSetObjectPropValuePolicy ), |
73 KMTPSetObjectPropValuePolicy ), |
74 iObjectMgr( aFramework.ObjectMgr() ), |
74 iObjectMgr( aFramework.ObjectMgr() ), |
75 iDpConfig( aDpConfig ) |
75 iDpConfig( aDpConfig ), |
|
76 iFs( aFramework.Fs() ) |
76 { |
77 { |
77 SetPSStatus(); |
78 SetPSStatus(); |
78 PRINT( _L( "Operation: SetObjectPropValue(0x9804)" ) ); |
79 PRINT( _L( "Operation: SetObjectPropValue(0x9804)" ) ); |
79 } |
80 } |
80 |
81 |
105 case EMTPObjectPropCodeObjectFormat: |
106 case EMTPObjectPropCodeObjectFormat: |
106 case EMTPObjectPropCodeProtectionStatus: |
107 case EMTPObjectPropCodeProtectionStatus: |
107 case EMTPObjectPropCodeObjectSize: |
108 case EMTPObjectPropCodeObjectSize: |
108 case EMTPObjectPropCodeParentObject: |
109 case EMTPObjectPropCodeParentObject: |
109 case EMTPObjectPropCodePersistentUniqueObjectIdentifier: |
110 case EMTPObjectPropCodePersistentUniqueObjectIdentifier: |
110 case EMTPObjectPropCodeNonConsumable: |
|
111 case EMTPObjectPropCodeDateAdded: |
111 case EMTPObjectPropCodeDateAdded: |
112 case EMTPObjectPropCodeDateCreated: |
112 case EMTPObjectPropCodeDateCreated: |
113 case EMTPObjectPropCodeDateModified: |
113 case EMTPObjectPropCodeDateModified: |
114 //case EMTPObjectPropCodeVideoBitRate: // move to specific dp |
114 //case EMTPObjectPropCodeVideoBitRate: // move to specific dp |
115 returnCode = ETrue; |
115 returnCode = ETrue; |
116 break; |
116 break; |
|
117 case EMTPObjectPropCodeNonConsumable: |
|
118 // It's settable, return EFalse here. |
|
119 break; |
117 |
120 |
118 default: |
121 default: |
119 returnCode = IsSpecificPropCodeReadOnly(aPropCode); |
122 returnCode = IsSpecificPropCodeReadOnly(aPropCode); |
120 break; |
123 break; |
121 } |
124 } |
131 EXPORT_C TMTPResponseCode CSetObjectPropValue::CheckRequestL() |
134 EXPORT_C TMTPResponseCode CSetObjectPropValue::CheckRequestL() |
132 { |
135 { |
133 PRINT( _L( "MM MTP => CSetObjectPropValue::CheckRequestL" ) ); |
136 PRINT( _L( "MM MTP => CSetObjectPropValue::CheckRequestL" ) ); |
134 |
137 |
135 TMTPResponseCode result = CRequestProcessor::CheckRequestL(); |
138 TMTPResponseCode result = CRequestProcessor::CheckRequestL(); |
|
139 if ( result == EMTPRespCodeObjectWriteProtected ) |
|
140 { |
|
141 // Return AccessDenied for P4S pass rate, instead of EMTPRespCodeObjectWriteProtected |
|
142 result = EMTPRespCodeAccessDenied; |
|
143 } |
136 |
144 |
137 // Check if property is supported |
145 // Check if property is supported |
138 if ( result == EMTPRespCodeOK ) |
146 if ( result == EMTPRespCodeOK ) |
139 { |
147 { |
140 iPropCode = Request().Uint32( TMTPTypeRequest::ERequestParameter2 ); |
148 iPropCode = Request().Uint32( TMTPTypeRequest::ERequestParameter2 ); |
141 PRINT1( _L( "MM MTP <> CSetObjectPropValue::CheckRequestL iPropCode = 0x%x" ), iPropCode ); |
149 PRINT1( _L( "MM MTP <> CSetObjectPropValue::CheckRequestL iPropCode = 0x%x" ), iPropCode ); |
142 result = EMTPRespCodeInvalidObjectPropCode; |
|
143 |
150 |
144 TUint32 objectHandle = Request().Uint32( TMTPTypeRequest::ERequestParameter1 ); |
151 TUint32 objectHandle = Request().Uint32( TMTPTypeRequest::ERequestParameter1 ); |
145 CMTPObjectMetaData* objectInfo = iRequestChecker->GetObjectInfo( objectHandle ); |
152 CMTPObjectMetaData* objectInfo = iRequestChecker->GetObjectInfo( objectHandle ); |
146 |
153 if ( objectInfo == NULL ) |
147 if (!objectInfo) |
154 { |
148 { |
155 PRINT( _L("MM MTP <> CGetObjectPropValue::CheckRequestL, objectInfo is NULL" ) ); |
149 PRINT(_L("MM MTP <> CGetObjectPropValue::CheckRequestL, objectInfo is NULL")); |
|
150 return EMTPRespCodeInvalidObjectHandle; |
156 return EMTPRespCodeInvalidObjectHandle; |
151 } |
157 } |
152 |
158 |
153 TFileName fileName = objectInfo->DesC(CMTPObjectMetaData::ESuid); |
159 TFileName fileName = objectInfo->DesC( CMTPObjectMetaData::ESuid ); |
154 TUint32 formatCode = objectInfo->Uint(CMTPObjectMetaData::EFormatCode); |
160 TUint32 formatCode = objectInfo->Uint( CMTPObjectMetaData::EFormatCode ); |
155 |
|
156 PRINT3( _L( "MM MTP <> CGetObjectPropValue::CheckRequestL, handle = 0x%x, filename = %S, formatCode = 0x%x" ), |
161 PRINT3( _L( "MM MTP <> CGetObjectPropValue::CheckRequestL, handle = 0x%x, filename = %S, formatCode = 0x%x" ), |
157 objectHandle, |
162 objectHandle, |
158 &fileName, |
163 &fileName, |
159 formatCode ); |
164 formatCode ); |
160 const RArray<TUint>* properties = iDpConfig.GetSupportedPropertiesL( formatCode ); |
165 const RArray<TUint>* properties = iDpConfig.GetSupportedPropertiesL( formatCode ); |
161 TInt count = properties->Count(); |
166 TInt count = properties->Count(); |
|
167 |
|
168 result = EMTPRespCodeInvalidObjectPropCode; |
162 for ( TInt i = 0; i < count; i++ ) |
169 for ( TInt i = 0; i < count; i++ ) |
163 { |
170 { |
164 // Object property code is supported, but can not be set which is read only. |
171 // Object property code is supported, but can not be set which is read only. |
165 if ( (*properties)[i] == iPropCode |
172 if ( ( *properties )[i] == iPropCode && IsPropCodeReadonly( iPropCode ) ) |
166 && IsPropCodeReadonly( iPropCode ) ) |
|
167 { |
173 { |
168 result = EMTPRespCodeAccessDenied; |
174 result = EMTPRespCodeAccessDenied; |
169 break; |
175 break; |
170 } |
176 } |
171 // Object property code is supported and can be set. |
177 // Object property code is supported and can be set. |
172 else if ( iPropCode == (*properties)[i] ) |
178 else if ( iPropCode == ( *properties )[i] ) |
173 { |
179 { |
174 result = EMTPRespCodeOK; |
180 result = EMTPRespCodeOK; |
175 break; |
181 break; |
176 } |
182 } |
177 } // end of for |
183 } // end of for |
210 case EMTPObjectPropCodeParentObject: |
216 case EMTPObjectPropCodeParentObject: |
211 case EMTPObjectPropCodePersistentUniqueObjectIdentifier: |
217 case EMTPObjectPropCodePersistentUniqueObjectIdentifier: |
212 case EMTPObjectPropCodeDateAdded: // 0xDC4E |
218 case EMTPObjectPropCodeDateAdded: // 0xDC4E |
213 case EMTPObjectPropCodeDateCreated: // Date Created(0xDC08) |
219 case EMTPObjectPropCodeDateCreated: // Date Created(0xDC08) |
214 case EMTPObjectPropCodeDateModified: // Modified Date(0xDC09) |
220 case EMTPObjectPropCodeDateModified: // Modified Date(0xDC09) |
|
221 case EMTPObjectPropCodeVideoBitRate: // 0xDE9C |
|
222 { |
|
223 SendResponseL( EMTPRespCodeAccessDenied ); |
|
224 } |
|
225 break; |
|
226 |
215 case EMTPObjectPropCodeNonConsumable: // Non Consumable(0xDC4F) |
227 case EMTPObjectPropCodeNonConsumable: // Non Consumable(0xDC4F) |
216 case EMTPObjectPropCodeVideoBitRate: // 0xDE9C |
228 ReceiveDataL( iMTPTypeUint8 ); |
217 { |
|
218 SendResponseL( EMTPRespCodeAccessDenied ); |
|
219 } |
|
220 break; |
229 break; |
221 |
230 |
222 // Get Data for String objects |
231 // Get Data for String objects |
223 case EMTPObjectPropCodeObjectFileName: // 0xDC07 |
232 case EMTPObjectPropCodeObjectFileName: // 0xDC07 |
224 case EMTPObjectPropCodeName: // 0xDC44 |
233 case EMTPObjectPropCodeName: // 0xDC44 |
250 __ASSERT_DEBUG( iObjectInfo, Panic( EMmMTPDpObjectNull ) ); |
259 __ASSERT_DEBUG( iObjectInfo, Panic( EMmMTPDpObjectNull ) ); |
251 TMTPResponseCode responseCode = EMTPRespCodeOK; |
260 TMTPResponseCode responseCode = EMTPRespCodeOK; |
252 |
261 |
253 switch ( iPropCode ) |
262 switch ( iPropCode ) |
254 { |
263 { |
|
264 case EMTPObjectPropCodeNonConsumable: |
|
265 iObjectInfo->SetUint( CMTPObjectMetaData::ENonConsumable, iMTPTypeUint8.Value() ); |
|
266 iFramework.ObjectMgr().ModifyObjectL( *iObjectInfo ); |
|
267 break; |
|
268 |
255 case EMTPObjectPropCodeObjectFileName: |
269 case EMTPObjectPropCodeObjectFileName: |
256 { |
270 { |
257 TPtrC suid( iObjectInfo->DesC( CMTPObjectMetaData::ESuid ) ); |
271 TPtrC suid( iObjectInfo->DesC( CMTPObjectMetaData::ESuid ) ); |
258 TBuf<KMaxFileName> newSuid( iMTPTypeString->StringChars() ); |
272 TBuf<KMaxFileName> newSuid( iMTPTypeString->StringChars() ); |
259 PRINT2( _L( "MM MTP <> old name = %S, new name = %S" ), &suid, &newSuid ); |
273 PRINT2( _L( "MM MTP <> old name = %S, new name = %S" ), &suid, &newSuid ); |
271 TRAP( err, iDpConfig.GetWrapperL().RenameObjectL( suid, newSuid ) ); //Update MPX DB |
285 TRAP( err, iDpConfig.GetWrapperL().RenameObjectL( suid, newSuid ) ); //Update MPX DB |
272 PRINT1( _L( "MM MTP <> Rename MPX object file name err = %d" ), err ); |
286 PRINT1( _L( "MM MTP <> Rename MPX object file name err = %d" ), err ); |
273 // it is ok if file is not found in DB, following S60 solution |
287 // it is ok if file is not found in DB, following S60 solution |
274 if ( KErrNotFound == err ) |
288 if ( KErrNotFound == err ) |
275 { |
289 { |
276 TRAP( err, iDpConfig.GetWrapperL().AddObjectL( newSuid ) ); |
290 TUint formatCode = iObjectInfo->Uint( CMTPObjectMetaData::EFormatCode ); |
|
291 TUint subFormatCode = iObjectInfo->Uint( CMTPObjectMetaData::EFormatSubCode ); |
|
292 TRAP( err, iDpConfig.GetWrapperL().AddObjectL( newSuid, formatCode, subFormatCode ) ); |
277 PRINT1( _L( "MM MTP <> Add MPX object file name err = %d" ), err ); |
293 PRINT1( _L( "MM MTP <> Add MPX object file name err = %d" ), err ); |
278 } |
294 } |
279 |
295 |
280 if ( KErrNone == err ) |
296 if ( KErrNone == err ) |
281 { |
297 { |
341 { |
357 { |
342 resCode = EMTPRespCodeAccessDenied; |
358 resCode = EMTPRespCodeAccessDenied; |
343 } |
359 } |
344 else if ( err == KErrNotFound ) |
360 else if ( err == KErrNotFound ) |
345 { |
361 { |
346 // TMTPFormatCode formatCode = |
|
347 // MmMtpDpUtility::FormatFromFilename( aObjectMetaData.DesC( CMTPObjectMetaData::ESuid ) ); |
|
348 if( MmMtpDpUtility::HasMetadata( aObjectMetaData.Uint( CMTPObjectMetaData::EFormatCode ) ) ) |
362 if( MmMtpDpUtility::HasMetadata( aObjectMetaData.Uint( CMTPObjectMetaData::EFormatCode ) ) ) |
349 SendResponseL( EMTPRespCodeAccessDenied ); |
363 SendResponseL( EMTPRespCodeAccessDenied ); |
350 else |
|
351 SendDataL( aNewData ); |
|
352 } |
364 } |
353 else |
365 else |
354 { |
366 { |
355 resCode = EMTPRespCodeGeneralError; |
367 resCode = EMTPRespCodeGeneralError; |
356 } |
368 } |