diff -r 000000000000 -r f63038272f30 bluetoothengine/btaudioman/inc/basrvsdpquery.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/btaudioman/inc/basrvsdpquery.h Mon Jan 18 20:28:57 2010 +0200 @@ -0,0 +1,188 @@ +/* +* 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: +* Implementations of SDP queries +* +*/ + + +#ifndef BASRVSDPQUERY_H +#define BASRVSDPQUERY_H + +#include +#include +#include +#include +#include "BTAccInfo.h" +#include "basrvactive.h" + +class TBTDevAddr; +class CSdpSearchPattern; + + +class TBTSdpAttrInt + { +public: + TUUID iUUID; // The UUID of the service. Must be specified by caller. + TUint16 iAttrID; // The Attribute ID. Must be specified by the caller. + TUint iAttrValue; // The value of the attribute if this is found in the device. + }; + +class MBasrvSdpQuerier + { +public: + + /** + * Indicates GetAccInfo completed. + * @param aAcc the accinfo if the operation succeeded. + * @param aErr the completion status + */ + virtual void GetAccInfoCompletedL(TInt aErr, const TAccInfo* aAcc, const TBTDeviceClass* aCod) = 0; + + }; + +/** +* The base class for various SDP query strategies +*/ +class CBasrvSdpQuery : public CBase, public MSdpAgentNotifier, public MBasrvActiveObserver, + public MSdpAttributeValueVisitor + { +public: + + static CBasrvSdpQuery* NewL(MBasrvSdpQuerier& aQuerier); + + ~CBasrvSdpQuery(); + + void QueryAccInfoL(const TBTDevAddr& aDevAddr, TBool aTolerateSdpError); + +private: // From MSdpAgentNotifier + + /** + * Called when an service record request operation completes. + * + * @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 + */ + void NextRecordRequestComplete( + TInt aError, + TSdpServRecordHandle aHandle, + TInt aTotalRecordsCount); + + /** + * Called when an attribute request (CSdpAgent::AttributeRequestL()) wants to + * pass up a result. + * + * @param aHandle Service record for which the query was made + * @param aAttrID ID of the attribute obtained + * @param aAttrValue Attribute value obtained + */ + void AttributeRequestResult( + TSdpServRecordHandle aHandle, + TSdpAttributeID aAttrID, + CSdpAttrValue* aAttrValue); + + /** + * Called when an attribute request (CSdpAgent::AttributeRequestL()) wants to + * signal the completion of a attribute request. + * + * @param aHandle Service record for which the query was made + * @param aError an error + */ + void AttributeRequestComplete(TSdpServRecordHandle aHandle, TInt aError); + // from base class MSdpAttributeValueVisitor + + /** + * From MSdpAttributeValueVisitor. + * Called to pass an attribute value. + * + * @since S60 v3.2 + * @param ?arg1 ?description + */ + void VisitAttributeValueL( CSdpAttrValue &aValue, TSdpElementType aType ); + + /** + * From MSdpAttributeValueVisitor. + * Called to indicate the start of a list of attribute values. + * This call is followed by a call to VisitAttributeValueL() + * for each attribute value in the list, and concluded by + * a call to EndList(). + * + * @since S60 v3.2 + * @param ?arg1 ?description + */ + void StartListL( CSdpAttrValueList &aList ); + + /** + * From MSdpAttributeValueVisitor. + * Called to indicate the end of a list of attribute values. + * + * @since S60 v3.2 + * @param ?arg1 ?description + */ + void EndListL(); + +private: + // From MBasrvActiveObserver + + void RequestCompletedL(CBasrvActive& aActive); + + void CancelRequest(CBasrvActive& aActive); + + +private: + + void ConstructL(); + + CBasrvSdpQuery(MBasrvSdpQuerier& aQuerier); + + void QueryCompleteL(TInt aStatus); + + void DoNextServiceRecordRequestL(); + + void NextRecordRequestCompleteL( + TInt aError, + TSdpServRecordHandle aHandle, + TInt aTotalRecordsCount); + + void AttributeRequestResultL( + TSdpServRecordHandle aHandle, + TSdpAttributeID aAttrID, + CSdpAttrValue* aAttrValue); + + void AttributeRequestCompleteL(TSdpServRecordHandle aHandle, TInt aError); + + void MakeAccInfo(TAccInfo& aInfo); + +private: + + MBasrvSdpQuerier& iQuerier; // not own + + CSdpAgent* iSdpAgent; + CSdpSearchPattern* iSdpSearchPattern; + RArray iServiceAttrs; + + TInt iCursor; + TBTDevAddr iAddr; + + CBasrvActive* iActive; + RBTRegServ iRegServ; + RBTRegistry iReg; + CBTRegistryResponse* iResponse; + TBool iTolerateSdpError; + }; +#endif // BASRVSDPQUERY_H + +