00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
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