www.pudn.com > S60_Platform_Bluetooth_OBEX_Example.rar > sdpattributeparser.h
/* Copyright (c) 2004, Nokia. All rights reserved */ #ifndef __SDP_ATTRIBUTE_PARSER_H__ #define __SDP_ATTRIBUTE_PARSER_H__ // INCLUDES #include#include "StaticArrayC.h" // FORWARD DECLARATIONS class MSdpAttributeNotifier; // CLASS DECLARATIONS /** * TSdpAttributeParser * An instance of TSdpAttributeParser is used to check an SDP * attribute value, and read selected parts */ class TSdpAttributeParser : public MSdpAttributeValueVisitor { public: /** * TNodeCommand * The command to be carried out at a node * ECheckType. Check the type of the value * ECheckValue. Check the type and the value * ECheckEnd. Check that a list ends at this point * ESkip. Do not check this value - can not match a list end * EReadValue. Pass the value onto the observer * EFinished. Marks the end of the node list */ enum TNodeCommand { ECheckType, ECheckValue, ECheckEnd, ESkip, EReadValue, EFinished }; /** * SSdpAttributeNode * An instance of SSdpAttributeNode is used to determine how * to parse an SDP attribute value data element */ struct SSdpAttributeNode { /** iCommand the command for the node */ TNodeCommand iCommand; /** iType the expected type */ TSdpElementType iType; /** iValue the expected value for ECheckValue,the value of aKey * passed to the observer for EReadValue */ TInt iValue; }; typedef const TStaticArrayC< SSdpAttributeNode > TSdpAttributeList; /** * TSdpAttributeParser * Construct a TSdpAttributeParser * @param aNodeList the list of expected nodes * @param aObserver an observer to read specified node values */ TSdpAttributeParser( TSdpAttributeList& aNodeList, MSdpAttributeNotifier& aObserver ); /** * HasFinished * Check if parsing processed the whole list * @return true is the index refers to the EFinished node */ TBool HasFinished() const; public: // from MSdpAttributeValueVisitor /** * VisitAttributeValueL() * Process a data element * @param aValue the data element * @param aType the type of the data element */ void VisitAttributeValueL( CSdpAttrValue& aValue, TSdpElementType aType ); /** * StartListL() * Process the start of a data element list * @param aList the data element list */ void StartListL( CSdpAttrValueList& aList ); /** * EndListL() * Process the end of a data element list */ void EndListL(); private: // Functions from base classes /** * CheckTypeL() * Check the type of the current node is the same as * the specified type. * @param aElementType the type of the current data element */ void CheckTypeL( TSdpElementType aElementType ) const; /** * CheckValueL() * Check value of the current node is the same as the specified value * @param aValue the value of the current data element. */ void CheckValueL( CSdpAttrValue& aValue ) const; /** * ReadValueL() * Pass the data element value to the observer * @param aValue the value of the current data element. */ void ReadValueL( CSdpAttrValue& aValue ) const; /** * CurrentNode() * Get the current node * @return the current node */ const SSdpAttributeNode& CurrentNode() const; /** * AdvanceL() * Advance to the next node. Leaves with KErrEof * if at the finished node. */ void AdvanceL(); private: // data /** iObserver the observer to read values */ MSdpAttributeNotifier& iObserver; /** iNodeList a list defining the expected * structure of the value */ TSdpAttributeList& iNodeList; /** iCurrentNodeIndex the index of the current node in iNodeList */ TInt iCurrentNodeIndex; }; #endif // __SDP_ATTRIBUTE_PARSER_H__ // End of File