examples/RemoteConn/MtpDataProviderExample/inc/cmtpexampledprequestprocessor.h

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 
00017 #ifndef __CMTPEXAMPLEDPREQUESTPROCESSOR_H__
00018 #define __CMTPEXAMPLEDPREQUESTPROCESSOR_H__
00019 
00020 #include <e32base.h>
00021 #include <mtp/mtpdataproviderapitypes.h>
00022 #include <mtp/mtpprotocolconstants.h>
00023 #include <mtp/tmtptyperesponse.h>
00024 #include <mtp/tmtptypenull.h>
00025 
00026 
00027 class TMTPTypeRequest;
00028 class CMTPDataProviderPlugin;
00029 class MMTPDataProviderFramework;
00030 class TMTPTypeEvent;
00031 
00032 struct TMTPRequestElementInfo; 
00033 
00039 class MMTPExampleDpRequestProcessor
00040         {
00041 public: 
00042         /*
00043         Process a request from the initiator
00044         @param aRequest The request to be processed
00045         @param aPhase   The transaction phase of the request
00046         @return ETrue to signal that the processor object can be deleted, EFalse to keep the processor object
00047         */
00048         virtual TBool HandleRequestL(const TMTPTypeRequest& aRequest, TMTPTransactionPhase aPhase) = 0;
00049         
00050         /*
00051         Process an event from the initiator
00052         @param aEvent   The event to be processed
00053         */
00054         virtual void HandleEventL(const TMTPTypeEvent& aEvent) = 0;
00055         
00056         /*
00057     Check if the processor matches the request on the connection
00058     @param aRequest The request to be checked
00059     @param aConnection The connection from which the request comes
00060     @return ETrue to indicate the processor can handle the request, otherwise, EFalse
00061     */
00062     virtual TBool Match(const TMTPTypeRequest& aRequest, MMTPConnection& aConnection) const = 0;
00063         
00064         /*
00065         Check if the processor matches the event on the connection
00066         @param aEvent The event to be checked
00067         @param aConnection The connection from which the event comes
00068         @return ETrue to indicate the processor can handle the event, otherwise, EFalse
00069         */      
00070         virtual TBool Match(const TMTPTypeEvent& aEvent, MMTPConnection& aConnection) const = 0;
00071         
00072         /*
00073         Get the request object which the processor is currently handling
00074         @return the request object which the processor is currently handling
00075         */
00076         virtual const TMTPTypeRequest& Request() const = 0;
00077         
00078         /*
00079         Get the connection object associated with the current request object
00080         @return the connection object associated with the current request object
00081         */
00082         virtual MMTPConnection& Connection() const = 0;
00083     /*
00084     Get the Session ID associated with the current request object
00085     @return Session ID associated with the current request object
00086     */  
00087         
00088         virtual TUint32 SessionId() = 0;
00089    /*
00090     delete the request processor object
00091     */
00092     virtual void Release() = 0;
00093 
00094         };
00095 
00099 typedef MMTPExampleDpRequestProcessor* (*TMTPRequestProcessorCreateFunc)(
00100                                                                                                                                 MMTPDataProviderFramework& aFramework, 
00101                                                                                                                                 MMTPConnection& aConnection);
00102 
00106 typedef struct 
00107         {
00108         TUint16                                                 iOperationCode;
00109         TMTPRequestProcessorCreateFunc  iCreateFunc;
00110         }TMTPRequestProcessorEntry;
00111 
00112 class CMTPExampleDpRequestProcessor : public MMTPExampleDpRequestProcessor
00113     {
00114 protected:  
00115     CMTPExampleDpRequestProcessor(
00116                         MMTPDataProviderFramework& aFramework,
00117                         MMTPConnection& aConnection,
00118                         TInt aElementCount,
00119                         const TMTPRequestElementInfo* aElements);
00120     virtual ~CMTPExampleDpRequestProcessor();   
00121 
00122 protected:  //utility methods   
00123     void SendResponseL(TMTPResponseCode aResponseCode, TInt aParameterCount = 0, TUint32* aParams = NULL);
00124     void CompleteRequestL();
00125         
00126 protected:  //  from MMTPRequestProcessor   
00127     virtual TBool HandleRequestL(const TMTPTypeRequest& aRequest, TMTPTransactionPhase aPhase);
00128     virtual void HandleEventL(const TMTPTypeEvent& aEvent);
00129     virtual void Release();
00130     virtual TBool Match(const TMTPTypeRequest& aRequest, MMTPConnection& aConnection) const;
00131     virtual TBool Match(const TMTPTypeEvent& aEvent, MMTPConnection& aConnection) const;  
00132     virtual const TMTPTypeRequest& Request() const;
00133     virtual MMTPConnection& Connection() const;
00134     virtual TUint32 SessionId();
00135 
00136 
00137 protected:  //new virtuals  
00138     virtual TBool DoHandleResponsePhaseL();
00139     virtual TBool DoHandleCompletingPhaseL();
00140     
00141     /*
00142     service a request at request phase
00143     */
00144     virtual void ServiceL() = 0;
00145 
00146 private:
00147     void ExtractSessionTransactionId();                 
00148     
00149 protected:
00150     MMTPDataProviderFramework&      iFramework;
00151     const TMTPTypeRequest*          iRequest;           //the pending request object.
00152     MMTPConnection&                 iConnection;        //the connection from which the request comes.
00153     TMTPTypeResponse                iResponse;          //the response object to send to the initiator.
00154     TBool                           iCancelled;         //indicates whether the data phase (send/receive) has been cancelled.
00155     TInt                            iElementCount;      //number of verification elements used for request checker.
00156     const TMTPRequestElementInfo*   iElements;          //pointer to an array of verification elements.
00157     TUint32                         iSessionId;         //session id for the pending request.
00158     TUint32                         iTransactionCode;   //transaction code for the pending request.
00159 
00160 private:
00161     TMTPResponseCode                iResponseCode;      // contains response from CheckRequestL call.
00162     };
00163 
00164 #endif // __CMTPEXAMPLEDPREQUESTPROCESSOR_H__
00165 

Generated by  doxygen 1.6.2