www.pudn.com > S60_Platform_Bluetooth_OBEX_Example.rar > btservicesearcher.h


/* Copyright (c) 2004, Nokia. All rights reserved */ 
 
 
#ifndef __BTSERVICESEARCHER_H__ 
#define __BTSERVICESEARCHER_H__ 
 
// INCLUDES 
#include  
#include  
#include  
 
#include "SdpAttributeParser.h" 
#include "SdpAttributeNotifier.h" 
#include "Log.h" 
 
// CONSTANTS 
_LIT(KErrNRRCErr,"NRRC ERR"); 
 
/** 
* CBTServiceSearcher 
* Searches for a service on a remote machine 
*/ 
 
class CBTServiceSearcher : public CBase, 
                           public MSdpAgentNotifier, 
                           public MSdpAttributeNotifier 
    { 
    public: // Constructors and destructor 
 
        /** 
        * ~CBTServiceSearcher() 
        * Destroy the object and release all memory objects 
        */ 
        virtual ~CBTServiceSearcher(); 
 
        /** 
        * SelectDeviceByDiscoveryL() 
        * Select a device 
        * @param aObserverRequestStatus the observer that 
        * is to be notified when the device selection is complete 
        */ 
        void SelectDeviceByDiscoveryL( 
            TRequestStatus& aObserverRequestStatus ); 
 
        /** 
        * FindServiceL() 
        * Find a service on the specified device 
        * @param aObserverRequestStatus the observer that 
        * is to be notified when the service search is complete 
        */ 
        void FindServiceL( TRequestStatus& aObserverRequestStatus ); 
 
        /** 
        * BTDevAddr() 
        * @return the bluetooth device address 
        */ 
        const TBTDevAddr& BTDevAddr(); 
 
        /** 
        * ResponseParams() 
        * @return Information about the device selected by the user 
        */ 
        const TBTDeviceResponseParams& ResponseParams(); 
 
    protected: 
 
        /** 
        * CBTServiceSearcher() 
        * Constructs this object 
        * @param aLog the log to send output to 
        */ 
        CBTServiceSearcher( MLog& aLog ); 
 
        /** 
        * Finished() 
        * The search has finished. Notify the observer that 
        * the process is complete. 
        * @param aError Error occured 
        */ 
        virtual void Finished( TInt aError = KErrNone ); 
 
        /** 
        * HasFinishedSearching() 
        * Is the instance still wanting to search. 
        * @return EFalse if the instance wants searching to continue. 
        */ 
        virtual TBool HasFinishedSearching() const; 
 
        /** 
        * HasFoundService() 
        * @return ETrue if a service has been found 
        */ 
        TBool HasFoundService() const; 
 
    protected: // abstract methods 
 
        /** 
        * ProtocolList() 
        * The list of Protocols required by the service. 
		* @return The list of Protocols required by the service 
        */ 
        virtual const TSdpAttributeParser:: 
            TSdpAttributeList& ProtocolList() const = 0; 
 
        /** 
        * ServiceClass() 
        * The service class to search for 
        * @return the service class UUID 
        */ 
        virtual const TUUID& ServiceClass() const = 0; 
 
        /** 
        * FoundElementL() 
        * Read the data element 
        * @param aKey a key that identifies the element 
        * @param aValue the data element 
        */ 
        virtual void FoundElementL( TInt aKey, 
            const CSdpAttrValue& aValue ) = 0; 
 
    public: // from MSdpAgentNotifier 
        /** 
        * NextRecordRequestComplete() 
        * Process the result of the next record request 
        * @param aError the error code 
        * @param aHandle the handle of the service record 
        * @param aTotalRecordsCount the total number of matching 
        * service records 
        */ 
        void NextRecordRequestComplete( TInt aError, 
            TSdpServRecordHandle aHandle, TInt aTotalRecordsCount ); 
 
        /** 
        * AttributeRequestResult() 
        * Process the next attribute requested 
        * @param aHandle the handle of the service record 
        * @param aAttrID the id of the attribute 
        * @param aAttrValue the value of the attribute 
        */ 
        void AttributeRequestResult( TSdpServRecordHandle aHandle, 
            TSdpAttributeID aAttrID, CSdpAttrValue* aAttrValue ); 
 
        /** 
        * AttributeRequestComplete() 
        * Process the attribute request completion 
        * @param aHandle the handle of the service record 
        * @param aError the error code 
        */ 
        void AttributeRequestComplete( TSdpServRecordHandle aHandle, 
            TInt aError ); 
 
    private: 
 
        /** 
        * NextRecordRequestCompleteL() 
        * Process the result of the next record request 
        * @param aError the error code 
        * @param aHandle the handle of the service record 
        * @param aTotalRecordsCount the total number of 
        * matching service records 
        */ 
        void NextRecordRequestCompleteL( TInt aError, 
            TSdpServRecordHandle aHandle, TInt aTotalRecordsCount ); 
 
        /** 
        * AttributeRequestResultL() 
        * Process the next attribute requested 
        * @param aHandle the handle of the service record 
        * @param aAttrID the id of the attribute 
        * @param aAttrValue the value of the attribute 
        */ 
        void AttributeRequestResultL( TSdpServRecordHandle aHandle, 
            TSdpAttributeID aAttrID, CSdpAttrValue* aAttrValue ); 
 
        /** 
        * AttributeRequestCompleteL() 
        * Process the arrtibute request completion 
        * @param aHandle the handle of the service record 
        * @param aError the error code 
        */ 
        void AttributeRequestCompleteL( TSdpServRecordHandle, 
            TInt aError ); 
 
    private:    // data 
 
        /** 
        * iStatusObserver pointer to the request status observer 
        * Not owned by CBTServiceSearcher 
        */ 
        TRequestStatus* iStatusObserver; 
 
        /** iIsDeviceSelectorConnected is the device 
        * selector connected ? 
        */ 
        TBool iIsDeviceSelectorConnected; 
 
        /** iDeviceSelector a handle to the bluetooth 
        * device selector notifier 
        */ 
        RNotifier iDeviceSelector; 
 
        /** iResponse the response of the device selection */ 
        TBTDeviceResponseParamsPckg iResponse; 
 
        /** 
        * iAgent a connetction to the SDP client 
        * Owned by CBTServiceSearcher 
        */ 
        CSdpAgent* iAgent; 
 
        /** 
        * iSdpSearchPattern a search pattern 
        * Owned by CBTServiceSearcher 
        */ 
        CSdpSearchPattern* iSdpSearchPattern; 
 
        /** iHasFoundService has the service been found ? */ 
        TBool iHasFoundService; 
 
        /** iLog the log to send output to */ 
        MLog& iLog; 
    }; 
 
#endif // __BTSERVICESEARCHER_H__ 
 
// End of File