00001 // Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 00002 // All rights reserved. 00003 // This component and the accompanying materials are made available 00004 // under the terms of "Eclipse Public License v1.0" 00005 // which accompanies this distribution, and is available 00006 // at the URL "http://www.eclipse.org/legal/epl-v10.html". 00007 // 00008 // Initial Contributors: 00009 // Nokia Corporation - initial contribution. 00010 // 00011 // Contributors: 00012 // 00013 // Description: 00014 // 00015 00016 #include <mtp/mtpprotocolconstants.h> 00017 #include <mtp/tmtptyperequest.h> 00018 #include <mtp/mmtpdataproviderframework.h> 00019 #include <mtp/tmtptypeevent.h> 00020 #include <mtp/mmtpconnection.h> 00021 #include <mtp/mmtpobjectmgr.h> 00022 00023 #include "cmtpexampledprequestprocessor.h" 00024 00025 00034 CMTPExampleDpRequestProcessor::CMTPExampleDpRequestProcessor( 00035 MMTPDataProviderFramework& aFramework, 00036 MMTPConnection& aConnection, 00037 TInt aElementCount, 00038 const TMTPRequestElementInfo* aElements) 00039 :iFramework(aFramework), 00040 iConnection(aConnection), 00041 iElementCount(aElementCount), 00042 iElements(aElements) 00043 { 00044 00045 } 00046 00050 CMTPExampleDpRequestProcessor::~CMTPExampleDpRequestProcessor() 00051 { 00052 } 00056 void CMTPExampleDpRequestProcessor::Release() 00057 { 00058 delete this; 00059 } 00060 00061 00068 void CMTPExampleDpRequestProcessor::SendResponseL(TMTPResponseCode aResponseCode, TInt aParameterCount, TUint32* aParams) 00069 { 00070 iResponse.SetUint16(TMTPTypeResponse::EResponseCode, aResponseCode); 00071 00072 iResponse.SetUint32(TMTPTypeResponse::EResponseSessionID, iSessionId); 00073 00074 iResponse.SetUint32(TMTPTypeResponse::EResponseTransactionID, iTransactionCode); 00075 00076 TInt i = 0; 00077 for(i = 0; i < aParameterCount; i++) 00078 { 00079 iResponse.SetUint32(TMTPTypeResponse::EResponseParameter1 + i, aParams[i]); 00080 } 00081 00082 i += TMTPTypeResponse::EResponseParameter1; 00083 while(i <= TMTPTypeResponse::EResponseParameter5) 00084 { 00085 iResponse.SetUint32(i, KMTPNotSpecified32); 00086 i++; 00087 } 00088 iFramework.SendResponseL(iResponse, *iRequest, iConnection); 00089 } 00094 const TMTPTypeRequest& CMTPExampleDpRequestProcessor::Request() const 00095 { 00096 return *iRequest; 00097 } 00098 00099 00100 00104 void CMTPExampleDpRequestProcessor::CompleteRequestL() 00105 { 00106 iFramework.TransactionCompleteL(*iRequest, iConnection); 00107 } 00108 00109 00116 TBool CMTPExampleDpRequestProcessor::HandleRequestL(const TMTPTypeRequest& aRequest, TMTPTransactionPhase aPhase) 00117 { 00118 iRequest = &aRequest; 00119 TBool result = EFalse; 00120 switch(aPhase) 00121 { 00122 case ERequestPhase: 00123 ExtractSessionTransactionId(); 00124 ServiceL(); 00125 break; 00126 00127 case EResponsePhase: 00128 result = DoHandleResponsePhaseL(); 00129 break; 00130 00131 case ECompletingPhase: 00132 result = DoHandleCompletingPhaseL(); 00133 break; 00134 } 00135 return result; 00136 } 00137 00138 00143 MMTPConnection& CMTPExampleDpRequestProcessor::Connection() const 00144 { 00145 return iConnection; 00146 } 00147 00152 TUint32 CMTPExampleDpRequestProcessor::SessionId() 00153 { 00154 return iSessionId; 00155 } 00156 00161 TBool CMTPExampleDpRequestProcessor::DoHandleResponsePhaseL() 00162 { 00163 TMTPResponseCode responseCode = (iCancelled ? EMTPRespCodeIncompleteTransfer : EMTPRespCodeOK); 00164 SendResponseL(responseCode); 00165 return EFalse; 00166 } 00167 00172 TBool CMTPExampleDpRequestProcessor::DoHandleCompletingPhaseL() 00173 { 00174 CompleteRequestL(); 00175 return ETrue; 00176 } 00177 00181 void CMTPExampleDpRequestProcessor::ExtractSessionTransactionId() 00182 { 00183 iSessionId = iRequest->Uint32(TMTPTypeRequest::ERequestSessionID); 00184 iTransactionCode = iRequest->Uint32(TMTPTypeRequest::ERequestTransactionID); 00185 } 00186 00187 00194 TBool CMTPExampleDpRequestProcessor::Match(const TMTPTypeEvent& aEvent, MMTPConnection& aConnection) const 00195 { 00196 00197 TUint32 eventSessionId = aEvent.Uint32(TMTPTypeEvent::EEventSessionID); 00198 TUint32 eventTransactionCode = aEvent.Uint32(TMTPTypeEvent::EEventTransactionID); 00199 00200 TBool result = EFalse; 00201 if(iSessionId == eventSessionId && 00202 iTransactionCode == eventTransactionCode && 00203 &iConnection == &aConnection) 00204 { 00205 result = ETrue; 00206 } 00207 return result; 00208 } 00209 00216 TBool CMTPExampleDpRequestProcessor::Match(const TMTPTypeRequest& aRequest, MMTPConnection& aConnection) const 00217 { 00218 TBool result = ((&aRequest == iRequest) && (&iConnection == &aConnection)); 00219 return result; 00220 } 00221 00226 void CMTPExampleDpRequestProcessor::HandleEventL(const TMTPTypeEvent& aEvent) 00227 { 00228 TUint16 eventCode = aEvent.Uint16(TMTPTypeEvent::EEventCode); 00229 iCancelled = (eventCode == EMTPEventCodeCancelTransaction); 00230 } 00231 00232 00233 00234
Copyright ©2010 Nokia Corporation and/or its subsidiary(-ies).
All rights
reserved. Unless otherwise stated, these materials are provided under the terms of the Eclipse Public License
v1.0.