diff -r 000000000000 -r f63038272f30 bluetoothengine/bteng/btengdiscovery/inc/btengsdpquery.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/bteng/btengdiscovery/inc/btengsdpquery.h Mon Jan 18 20:28:57 2010 +0200 @@ -0,0 +1,227 @@ +/* +* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Helper class for performing SDP queries. +* +*/ + + +#ifndef BTENGSDPQUERY_H +#define BTENGSDPQUERY_H + +#include "btengdiscovery.h" + +class CBTEngSdpAttrParser; + +/** Array definition for storing SDP record handles */ +typedef RPointerArray RSdpAttrValueArray; + + +/** + * Class CBTEngSdpQuery + * + * ?more_complete_description + * + * @lib btengdiscovery.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( CBTEngSdpQuery ) : public CBase, public MSdpAgentNotifier + { + +public: + + /** ?description */ + enum TSdpQueryType + { + EQueryIdle, + EServiceQuery, + EAttrQuery, + EServiceAttrQuery + }; + + /** + * Two-phase constructor + */ + static CBTEngSdpQuery* NewL( MBTEngSdpResultReceiver* aNotifier ); + + /** + * Destructor + */ + virtual ~CBTEngSdpQuery(); + + /** + * ?description + * + * @since S60 v3.2 + */ + void Cancel(); + + /** + * ?description + * + * @since S60 v3.2 + * @param aAddr ?description + * @param aService ?description + */ + void RemoteSdpQueryL( const TBTDevAddr& aAddr, const TUUID& aService ); + + /** + * ?description + * + * @since S60 v3.2 + * @param aAddr ?description + * @param aHandle ?description + * @param aAttrId ?description + */ + void RemoteSdpQueryL( const TBTDevAddr& aAddr, + const TSdpServRecordHandle aHandle, + const TSdpAttributeID aAttrId ); + + /** + * ?description + * + * @since S60 v3.2 + * @param aAddr ?description + * @param aService ?description + * @param aAttrId ?description + */ + void RemoteSdpQueryL( const TBTDevAddr& aAddr, const TUUID& aService, + const TSdpAttributeID aAttrId ); + +// from base class MSdpAgentNotifier + + /** + * From MSdpAgentNotifier. + * Called when an service record request operation completes. + * + * @since S60 v3.2 + * @param aError KErrNone if successful; KErrEof if there are no more + * SDP records left to be read; or an SDP error. + * @param aHandle Service record for which the query was made. + * @param aTotalRecordsCount Total number of matching records. + */ + virtual void NextRecordRequestComplete( TInt aError, + TSdpServRecordHandle aHandle, + TInt aTotalRecordsCount ); + + /** + * From MSdpAgentNotifier. + * Called when an attribute request wants to pass up a result. + * + * @since S60 v3.2 + * @param aHandle Service record for which the query was made. + * @param aAttrID ID of the attribute obtained. + * @param @param aAttrValue Attribute value obtained. + */ + virtual void AttributeRequestResult( TSdpServRecordHandle aHandle, + TSdpAttributeID aAttrID, + CSdpAttrValue* aAttrValue ); + + /** + * From MSdpAgentNotifier. + * Called when an attribute request wants to signal the completion + * of a attribute request. + * + * @since S60 v3.2 + * @param aHandle Service record for which the query was made. + * @param aError An error. + */ + virtual void AttributeRequestComplete( TSdpServRecordHandle aHandle, + TInt aError ); + +private: + + /** + * C++ default constructor + */ + CBTEngSdpQuery( MBTEngSdpResultReceiver* aNotifier ); + + /** + * Symbian 2nd-phase constructor + */ + void ConstructL(); + + /** + * Helper function to pass back an error to our client. + * + * @since S60 v3.2 + * @param aError The error to return to the result observer. + */ + void NotifyError( TInt aError ); + + /** + * Helper function to check that + * + * @since S60 v3.2 + * @param aAddr ?description + * @return KErrNone if sucessful, + * KErrNotReady if no SDP result notifier has been set, + * otherwise the error code indicating the error situation. + */ + void CheckSdpAgentL( const TBTDevAddr& aAddr ); + +private: // data + + /** + * Flag to check if an SDP query is ongoing. + */ + TSdpQueryType iQueryType; + + /** + * Flag to check if an SDP query is ongoing. + */ + TBTDevAddr iBDAddr; + + /** + * Attribute ID for second step of ServiceAttributeSearch + * operation; otherwise NULL. + */ + TSdpAttributeID iRequestedAttrId; + + /** + * Result array of discovered service record handles. + */ + RSdpRecHandleArray iRecHandleArray; + + /** + * Result array of discovered service record attributes. + */ + RSdpResultArray iAttrResArray; + + /** + * Array for temporarily storing CSdpAttrValue objects. The actual + * value is used through the RSdpResultArray member. + */ + RSdpAttrValueArray iAttrValArray; + + /** + * ?description_of_pointer_member + * Own. + */ + CSdpAgent* iSdpAgent; + + /** + * Parser for decoding SDP attribute values. + * Own. + */ + CBTEngSdpAttrParser* iParser; + + /** + * Reference to receiver of remote SDP query results. + * Not own. + */ + MBTEngSdpResultReceiver* iResultNotifier; + + }; + +#endif // BTENGSDPQUERY_H