diff -r 000000000000 -r 1bce908db942 natplugins/natpnatfwsdpprovider/inc/nspcontentparser.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/natplugins/natpnatfwsdpprovider/inc/nspcontentparser.h Tue Feb 02 01:04:58 2010 +0200 @@ -0,0 +1,449 @@ +/* +* Copyright (c) 2007 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: Description for Sdp content parser. +* +*/ + +#ifndef NSPCONTENTPARSER_H +#define NSPCONTENTPARSER_H + +#include +#include +#include "natfwconnectivityapidefs.h" +#include "natfwcandidate.h" +#include "nsputdefinitions.h" + +class TInetAddr; +class CSdpDocument; +class CSdpMediaField; +class CSdpAttributeField; +class CNATFWCredentials; + +/** + * Class methods are used to insert/remove/modify SDP content. + * + * SDP document must be modified in both directions to point NAT FW ports, + * to ensure perfect audio routing. Modification of these documents are + * done by means introduced in this class. + * + * @lib natfwsdpprovider.dll + * @since S60 3.2 + */ +class CNSPContentParser : public CBase + { +public: // Constructors and destructor + + /** + * A two-phase constructor. + */ + static CNSPContentParser* NewL(); + + /** + * A two-phase constructor. + */ + static CNSPContentParser* NewLC(); + + /** + * Destructor. + */ + virtual ~CNSPContentParser(); + + +private: // Constructors and destructor + + CNSPContentParser(); + + void ConstructL(); + + +public: // New functions + + /** + * Used to check whether sdp document contains any candidate - attributes. + * + * @since S60 3.2 + * @param aDocument Sdp document object, that is to be + * checked for candidate - attributes. + * @return Boolean value indicating whether Ice grammar is supported. + */ + TBool IsIceSupported( CSdpDocument& aDocument ) const; + + /** + * Used to check whether sdp document has a mismatch situation. + * + * @since S60 3.2 + * @param aDocument Sdp document object which m/c - lines + * are compared against candidate - lines. + * @return Boolean value indicating a mismatch in Sdp document. + */ + TBool IsMismatchL( CSdpDocument& aDocument ) const; + + /** + * Used to check whether media field has a mismatch situation. + * + * @since S60 3.2 + * @param aMediaField Sdp media field object which primary port, + * and given Inet address, is compared + * against candidate - line trans. address. + * @param aAddress Address descriptor from the session level. + * @return Boolean value indicating a mismatch in Sdp document. + */ + TBool IsMismatchL( CSdpMediaField& aMediaField, const TDesC8& aAddress ) const; + + /** + * Used to check whether media field contains ice-mismatch - attribute. + * + * @since S60 3.2 + * @param aMediaField Sdp media field object which attributes + * are searched for ice-mismatch attribute. + * @return Boolean value indicating whether ice-mismatch was present. + */ + TBool IsMismatchAttribute( CSdpMediaField& aMediaField ) const; + + /** + * Used to check whether sdp document contains ice-lite - attribute. + * + * @since S60 3.2 + * @param aDocument Sdp document object which attributes + * are searched for ice-lite attribute. + * @return Boolean value indicating whether ice-lite was present. + */ + TBool IsLiteAttribute( CSdpDocument& aDocument ) const; + + /** + * Used to check whether media field has rtcp - attribute. If rtcp was + * present then transport address values are given + * + * @since S60 3.2 + * @param aMediaField Sdp media field object which attributes + * are searched for rtcp attribute. + * @param aAddress A reference to a TDes8 descriptor, used + * to convey transport address strings. + * @param aPort Reference to TUint, which is used to convey + * port information from the rctp-attribute. + * @return Boolean value indicating whether rtcp was present. + */ + TBool FindRTCP( CSdpMediaField& aMediaField, TDes8& aAddress, TUint& aPort ) const; + + /** + * Used to modify rctp information in rtcp - attribute. + * + * @since S60 3.2 + * @param aMediaField Sdp media field object, which + * rtcp-attribute is modified to contain + * a new transport address. + * @param aAddress A reference to a TDesC8 descriptor, used + * to convey transport address values. + * @param aPort Port for rtcp-attribute + */ + void ModifyRTCPL( CSdpMediaField& aMediaField, const TDesC8& aAddress, TUint aPort ) const; + + /** + * Used to insert ice-lite - attribute. + * + * @since S60 3.2 + * @param aDocument Sdp document object where ice-lite + * is added. + */ + void AddLiteL( CSdpDocument& aDocument ) const; + + /** + * Used to insert ice-mismatch - attribute to answer, from corresponding + * offer media line. + * + * @since S60 3.2 + * @param aMismatch Sdp document object, which has mismatch attribute. + * @param aMismatched Sdp document object, which is edited to + * have mismatch attribute in m-line, + * from corresponding offer m-line. + */ + void AddMismatchL( CSdpDocument& aMismatch, CSdpDocument& aMismatched ) const; + + /** + * Used to insert the actual ice-mismatch - attribute. + * + * @since S60 3.2 + * @param aMediaField Sdp media field object, in which the + * ice-mismatch attribute is added. + */ + void AddMismatchL( CSdpMediaField& aMediaField ) const; + + /** + * Used to insert candidates from the array to the media line. + * + * @since S60 3.2 + * @param aMediaField Sdp media field object, in which the + * candidate - attributes are added. + * @param aCandidates Array containing NAT FW candidate objects. + */ + void AddCandidatesL( CSdpMediaField& aMediaField, + const RPointerArray& aCandidates ) const; + + /** + * Used to insert remote-candidates attribute to media line. + * + * @since S60 3.2 + * @param aMediaField Sdp media field object, where remote + * candidates attribute is inserted. + * @param aCandidates Array containing remote candidates. + */ + void AddRemoteCandidatesL( CSdpMediaField& aMediaField, + const RPointerArray& aCandidates ) const; + + /** + * Used to insert ice-ufrag - & ice-pwd - attributes to media line. + * + * @since S60 3.2 + * @param aMediaField Sdp media field object, in which the + * ice-ufrag/ice-pwd attributes are added. + * @param aCredentials Object containing NAT FW credentials. + */ + void AddCredentialsL( CSdpMediaField& aMediaField, + const CNATFWCredentials& aCredentials ) const; + + /** + * Used to insert ice-ufrag - & ice-pwd - attributes to session level. + * + * @since S60 3.2 + * @param aDocument Sdp document object, in which the + * ice-ufrag/ice-pwd attributes are added. + * @param aCredentials Object containing NAT FW credentials. + */ + void AddCredentialsL( CSdpDocument& aDocument, + const CNATFWCredentials& aCredentials ) const; + + /** + * Used to get candidate - attributes from media field. + * + * @since S60 3.2 + * @param aMediaField Sdp media field object, where the + * candidate attributes are acquired from. + * @param aCandidates Array where candidates are inserted. + * @return Warning code if failure(s) happened in candidate decoding. + */ + TInt GetCandidatesL( CSdpMediaField& aMediaField, + RPointerArray& aCandidates ) const; + + /** + * Used to get remote-candidates - attributes from sdp document. + * + * @since S60 3.2 + * @param aDocument Sdp document object, from where + * remote-candidates attributes are retrieved. + * @param aRemoteCands Array where remote candidates are inserted. + * @return Warning code if failure(s) happened in candidate decoding. + */ + TInt GetRemoteCandidatesL( CSdpDocument& aDocument, + RPointerArray& aRemoteCands ) const; + + /** + * Used to get remote-candidates - attributes from media field. + * + * @since S60 3.2 + * @param aMediaField Sdp media field object, where the + * remote-candidates attributes are acquired from. + * @param aRemoteCands Array where remote candidates are inserted. + * @return Warning code if failure(s) happened in candidate decoding. + */ + TInt GetRemoteCandidatesL( CSdpMediaField& aMediaField, + RPointerArray& aRemoteCands ) const; + + /** + * Used to get ice-ufrag - & ice-pwd - attributes from media field. + * + * @since S60 3.2 + * @param aMediaField Sdp media field object, from which the + * candidate attributes are acquired. + * @param aCredentials Object containing NAT FW credentials. + * @return Warning code if failure(s) happened in candidate decoding. + */ + TInt GetCredentialsL( CSdpMediaField& aMediaField, + CNATFWCredentials& aCredentials ) const; + + /** + * Used to get ice-ufrag - & ice-pwd - attributes from session level. + * + * @since S60 3.2 + * @param aDocument Sdp media field object, where the + * candidate attributes are acquired from. + * @param aCredentials Object containing NAT FW credentials. + * @return Warning code if failure(s) happened in candidate decoding. + */ + TInt GetCredentialsL( CSdpDocument& aDocument, + CNATFWCredentials& aCredentials ) const; + + /** + * Used to remove all ice specific attributes from sdp document. + * + * @since S60 3.2 + * @param aDocument Sdp document object, from which all + * Ice specific content is removed. + */ + void RemoveIceContent( CSdpDocument& aDocument ) const; + + /** + * Used to remove all ice specific attributes from media field. + * + * @since S60 3.2 + * @param aMediaField Sdp media field object, from which all + * Ice specific content is removed. + */ + void RemoveIceContent( CSdpMediaField& aMediaField ) const; + + +private: // New functions + + CSdpAttributeField* EncodeCandidateLineL( + const CNATFWCandidate& aCandidate ) const; + + void DecodeCandidateLineL( + const CSdpAttributeField& aAttribute, + CNATFWCandidate& aCandidate ) const; + + CSdpAttributeField* EncodeRemoteCandidatesL( + const RPointerArray& aCandidates ) const; + + void EncodeRemoteCandidateL( TDes8& aBuffer, + const CNATFWCandidate& aCandidate ) const; + + void DecodeRemoteCandidatesL( const TDesC8& aValue, + RPointerArray& aCandidates ) const; + + CSdpAttributeField* EncodeUfragL( + const CNATFWCredentials& aCredentials ) const; + + void DecodeUfragL( const CSdpAttributeField& aAttribute, + CNATFWCredentials& aCredentials ) const; + + CSdpAttributeField* EncodePwdL( + const CNATFWCredentials& aCredentials ) const; + + void DecodePwdL( const CSdpAttributeField& aAttribute, + CNATFWCredentials& aCredentials ) const; + + void LexTDesC8ToTUintL( const TDesC8& aDesC8, TUint& aUint ) const; + + void SolveTransportProtocolL( const TDesC8& aDesC8, TUint& aProto ) const; + + void InputTDesC8ToTInetAddrL( const TDesC8& aDesC8, TInetAddr& aAddress ) const; + + void SolveCandidateTypeL( const TDesC8& aDesC8Typ, + const TDesC8& aDesC8Value, CNATFWCandidate::TCandidateType& aType ) const; + + TInt FindCandidateType( const TDesC8& aDesC8Value ) const; + + TInt FindCandidateTypeString( const CNATFWCandidate::TCandidateType& aType ) const; + + void AppendTDesC8ToTDes8L( TDes8& aDes8, + const TDesC8& aDes, TBool aAddFieldSeparator = ETrue ) const; + + void AppendNumToTDes8L( TDes8& aDes8, + TUint aNumber, TBool aAddFieldSeparator = ETrue ) const; + + void AppendProtocolToTDes8L( TDes8& aDes8, + const TUint& aProtocol, TBool aAddFieldSeparator = ETrue ) const; + + void AppendTInetAddrToTDes8L( TDes8& aDes8, + const TInetAddr& aAddress, TBool aAddFieldSeparator = ETrue ) const; + + void AppendTypeToTDes8L( TDes8& aDes8, + const CNATFWCandidate::TCandidateType& aType, + TBool aAddFieldSeparator = ETrue ) const; + + void LeaveIfTooLongL( const TDes8& aDes8, const TInt aLength ) const; + + CSdpMediaField* FindMediaField( const CSdpMediaField& aMediaField, + const RPointerArray& aMediaFields ) const; + + static void CleanupArrayItem( TAny* aArray ); + + +private: // data + + /** + * Handle to a string that resides in string pool, to "candidate" string. + */ + RStringF iCandidate; + + /** + * Handle to a string that resides in string pool, to "remote-candidates" + * string. + */ + RStringF iRemoteCandidates; + + /** + * Handle to a string that resides in string pool, to "ice-lite" string. + */ + RStringF iLite; + + /** + * Handle to a string that resides in string pool, to "ice-passive" string. + */ + RStringF iPassive; + + /** + * Handle to a string that resides in string pool, to "ice-ufrag" string. + */ + RStringF iUfrag; + + /** + * Handle to a string that resides in string pool, to "ice-pwd" string. + */ + RStringF iPwd; + + /** + * Handle to a string that resides in string pool, to "ice-mismatch" string. + */ + RStringF iMismatch; + + /** + * Handle to a string that resides in string pool, to "rtcp" string. + */ + RStringF iRTCP; + + /** + * Handle to a string that resides in string pool, to "UDP" string. + */ + RStringF iUdp; + + /** + * Handle to a string that resides in string pool, to "TCP" string. + */ + RStringF iTcp; + + /** + * Handle to a string that resides in string pool, to "IN" string. + */ + RStringF iIN; + + /** + * Handle to a string that resides in string pool, to "IP4" string. + */ + RStringF iIPv4; + + /** + * Handle to a string that resides in string pool, to "IP6" string. + */ + RStringF iIPv6; + + /** + * Definitions for unit testing. + */ + NSP_UT_DEFINITIONS + + }; + +#endif // NSPCONTENTPARSER_H + +// end of file