mtpfws/mtpfw/dataproviders/dputility/src/cmtpsetobjectpropvalue.cpp
changeset 47 63cf70d3ecd8
parent 20 6e82ae192c3a
equal deleted inserted replaced
44:a5deb6b96675 47:63cf70d3ecd8
    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 )
   315 			}	
   355 			}	
   316 			break;
   356 			break;
   317 			
   357 			
   318 			
   358 			
   319 		default:
   359 		default:
       
   360 		    OstTrace1( TRACE_ERROR, CMTPSETOBJECTPROPVALUE_DOHANDLERESPONSEPHASEL, "Invalid property code %d", propCode);
   320 		    User::Leave( KErrNotSupported );
   361 		    User::Leave( KErrNotSupported );
   321 		    break;
   362 		    break;
   322 		}
   363 		}
   323 
   364 
   324 	SendResponseL(responseCode);
   365 	SendResponseL(responseCode);