diff -r 000000000000 -r 307788aac0a8 realtimenetprots/sipfw/SDP/api/SdpOriginField.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/realtimenetprots/sipfw/SDP/api/SdpOriginField.h Tue Feb 02 01:03:15 2010 +0200 @@ -0,0 +1,460 @@ +/* +* Copyright (c) 2003-2009 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: +* Name : SdpOriginField.h +* Part of : SDP Codec +* Interface : SDK API, SDP Codec API +* Version : 1.0 +* +*/ + + + +#ifndef CSDPORIGINFIELD_H +#define CSDPORIGINFIELD_H + +// INCLUDES +#include +#include +#include + +// CONSTANTS +const TInt KMaxAddressLength = 256; + +// FORWARD DECLARATIONS +class RReadStream; +class RWriteStream; +class CSdpOriginFieldPtrs; + +// CLASS DECLARATION +/** + * @publishedAll + * @released + * + * This class encapsulates the origin field of + * the Session Description Protocol. + * + * The normative reference for correct formatting and values is + * draft-ietf-mmusic-sdp-new-14 unless specified otherwise in + * member documentation. The implementation supports this normative + * reference, but does not enforce it fully. + * + * @lib sdpcodec.lib + */ +class CSdpOriginField : public CBase + { + public: // Constructors and destructor + + /** + * Constructs a new origin field. + * + * @param aText A string containing a correctly + * formatted field value terminated by a CRLF. + * @return a new instance. + */ + IMPORT_C static CSdpOriginField* DecodeL( const TDesC8& aText ); + + /** + * Constructs a new origin field and adds the pointer to the cleanup + * stack. + * + * @param aText A string containing a correctly + * formatted field value terminated by a CRLF. + * @return a new instance. + */ + IMPORT_C static CSdpOriginField* DecodeLC( const TDesC8& aText ); + + /** + * Constructs a new origin field. + * + * @param aUserName A valid user name value. + * @param aSessionId A valid session id value. + * @param aSessionVersion A valid announcement version value. + * @param aAddress A unicast IP address from either + * KAfInet or KAfInet6 family. + * @return a new instance. + */ + IMPORT_C static CSdpOriginField* NewL( const TDesC8& aUserName, + TInt64 aSessionId, + TInt64 aSessionVersion, + TInetAddr& aAddress ); + + /** + * Constructs a new origin field and adds the pointer to the cleanup + * stack. + * + * @param aUserName A valid user name value. + * @param aSessionId A valid session id value. + * @param aSessionVersion A valid announcement version value. + * @param aAddress A unicast IP address from either + * KAfInet or KAfInet6 family. + * @return a new instance. + */ + IMPORT_C static CSdpOriginField* NewLC( const TDesC8& aUserName, + TInt64 aSessionId, + TInt64 aSessionVersion, + TInetAddr& aAddress ); + + /** + * Constructs a new origin field. + * + * @param aUserName A valid user name value. + * @param aSessionId A valid session id value. + * @param aSessionVersion A valid announcement version value. + * @param aNetType A valid network type value (typically "IN"). + * @param aAddressType A valid address type value + * (typically "IP4" or "IP6"). + * @param aAddress A unicast IP Address, Fully + * Qualified Domain Name (FQDN), or an other type of + * address allowed for the address type. + * @return a new instance. + */ + IMPORT_C static CSdpOriginField* NewL( const TDesC8& aUserName, + TInt64 aSessionId, + TInt64 aSessionVersion, + RStringF aNetType, + RStringF aAddressType, + const TDesC8& aAddress ); + + /** + * Constructs a new origin field and adds the pointer to the cleanup + * stack. + * + * @param aUserName A valid user name value. + * @param aSessionId A valid session id value. + * @param aSessionVersion A valid announcement version value. + * @param aNetType A valid network type value (typically "IN"). + * @param aAddressType A valid address type value + * (typically "IP4" or "IP6"). + * @param aAddress A unicast IP Address, Fully Qualified Domain + * Name (FQDN), or an other type of address allowed + * for the address type. + * @return a new instance. + */ + IMPORT_C static CSdpOriginField* NewLC( const TDesC8& aUserName, + TInt64 aSessionId, + TInt64 aSessionVersion, + RStringF aNetType, + RStringF aAddressType, + const TDesC8& aAddress ); + + /** + * Deletes the resources held by the instance. + */ + IMPORT_C ~CSdpOriginField(); + + public: // New functions + + /** + * Outputs the field formatted according to SDP syntax and including + * the terminating CRLF. + * + * @param aStream Stream used for output. On return + * the stream includes correctly formatted origin field. + */ + IMPORT_C void EncodeL( RWriteStream& aStream ) const; + + /** + * Creates a new instance that is equal to the target. + * + * @return a new instance. + */ + IMPORT_C CSdpOriginField* CloneL() const; + + /** + * Compares this instance to another for equality. + * + * @param aObj The instance to compare to. + * @return ETrue if equal, EFalse if not. + */ + IMPORT_C TBool operator == ( const CSdpOriginField& aObj ) const; + + /** + * Gets the user name. + * + * @return User name. + */ + IMPORT_C const TDesC8& UserName() const; + + /** + * Sets the user name. + * + * @param aValue A valid user name value. + * @leave KErrSdpCodecOriginField if aValue is not a valid user name. + */ + IMPORT_C void SetUserNameL( const TDesC8& aValue ); + + /** + * Gets the session id of the origin field. + * + * @return Session id. + */ + IMPORT_C TInt64 SessionId() const; + + /** + * Sets the session id. + * + * @param aValue A valid session id value. + */ + IMPORT_C void SetSessionId( TInt64 aValue ); + + /** + * Gets the announcement version. + * + * @return Version. + */ + IMPORT_C TInt64 Version() const; + + /** + * Sets the announcement version.. + * + * @param aValue A valid version value. + */ + IMPORT_C void SetVersion( TInt64 aValue ); + + /** + * Gets the network type. + * + * @return The network type from pre-defined SDP string + * table or given by the user. + */ + IMPORT_C RStringF NetType() const; + + /** + * Gets the address type. + * + * @return The address type from pre-defined SDP string + * table or given by the user. + */ + IMPORT_C RStringF AddressType() const; + + /** + * Gets the address. + * + * @return Address as an IP address or null if it is + * not an IP address. This may be e.g. when the address has + * been specified as a FQDN. In this case, the address can be + * accessed using the other getters. + */ + IMPORT_C const TInetAddr* InetAddress() const; + + /** + * Gets the address. + * + * @return Address as a string. + */ + IMPORT_C const TDesC8& Address() const; + + /** + * Sets the address, network and address type. + * Also sets the network type to "IN" and address type to "IP4" or + * "IP6" depending on the address family of aValue. + * + * @param aValue A unicast IP address from either KAfInet + * or KAfInet6 family. + */ + IMPORT_C void SetInetAddress( const TInetAddr& aValue ); + + /** + * Sets the address, network and address type. + * + * @param aAddress A unicast IP Address, Fully Qualified Domain + * Name (FQDN), or an other type of address allowed for the + * address type. + * @param aNetType A valid network type value (typically "IN"). + * @param aAddressType A valid address type value + * (typically "IP4" or "IP6"). + * @leave KErrSdpCodecOriginField if aNetType or aAddressType are not + * valid tokens, or aAddress is invalid, or aAddress type + * is not aligned with the address format + */ + IMPORT_C void SetAddressL( const TDesC8& aAddress, + RStringF aNetType, + RStringF aAddressType ); + + public: // Internal to codec + + /** + * Externalizes the object to stream + * + * @param aStream Stream where the object's state will be stored + */ + void ExternalizeL( RWriteStream& aStream ) const; + + /** + * Creates object from the stream data + * + * @param aStream Stream where the object's state will be read + * @return Initialized object + */ + static CSdpOriginField* InternalizeL( RReadStream& aStream ); + + private: // Constructors + + /** + * Constructor + */ + CSdpOriginField(); + + /** + * Second phase constructor. Parses the text string and initializes + * the member variables + * + * @param aText Line of text that will be parsed (ends on the newline) + */ + void ConstructL( const TDesC8& aText ); + + /** + * Second phase constructor. Constructs the object. + * + * @param aUserName A valid user name value. + * @param aSessionId A valid session id value. + * @param aSessionVersion A valid announcement version value. + * @param aAddress A unicast IP address from either + * KAfInet or KAfInet6 family. + */ + void ConstructL( const TDesC8& aUserName, + TInt64 aSessionId, + TInt64 aSessionVersion, + TInetAddr& aUnicastAddress ); + + /** + * Second phase constructor. Constructs the object. + * + * @param aUserName A valid user name value. + * @param aSessionId A valid session id value. + * @param aSessionVersion A valid announcement version value. + * @param aNetType A valid network type value (typically "IN"). + * @param aAddressType A valid address type value + * (typically "IP4" or "IP6"). + * @param aAddress A unicast IP Address, Fully Qualified Domain + * Name (FQDN), or an other type of address allowed + * for the address type. + */ + void ConstructL( const TDesC8& aUserName, + TInt64 aSessionId, + TInt64 aSessionVersion, + RStringF aNetType, + RStringF aAddressType, + const TDesC8& aAddress ); + + // These are unnecessary? Derived from CBase, prevents the use + CSdpOriginField( const CSdpOriginField& ); // Hidden. + CSdpOriginField& operator = ( const CSdpOriginField& ); // Hidden + + private: // New methods + + /** + * Checks if the given address is valid + * + * @param aAddress Address to be checked + * @return Valid address or not + */ + TBool IsValidAddress( const TDesC8& aAddress ) const; + + /** + * Checks if the given address is valid + * + * @param aAddr Address to be checked + * @return Valid address or not + */ + TBool IsValidAddress( const TInetAddr& addr ) const; + + /** + * Checks that address type matches with address format + * + * @param aAddress Address + * @param aType Address type + * @param aPool String pool + * @return Type Matches with format or not + */ + TBool TypeMatchesWithFormat( + const TDesC8& aAddress, const TDesC8& aType, + RStringPool aPool ) const; + + /** + * Checks if the given username is valid + * + * @param aUserName Username + * @return Validity of the given username + */ + TBool IsValidUserName( const TDesC8& aUserName ) const; + + /** + * Parses username, initializes iUserName + * + * @param aArray Array containing all the elements + */ + void ParseUserNameL( RArray& aArray ); + + /** + * Parses session ID and version, initializes iSessionId + * and iSessionVersion + * + * @param aArray Array containing all the elements + */ + void ParseSessionIDAndVersionL( RArray& aArray ); + + /** + * Parses network type and address type, initializes + * iNetType and iAddressType + * + * @param aArray Array containing all the elements + */ + void ParseNetTypeAndAddressTypeL( RArray& aArray ); + + /** + * Parses address, checks address against address type, + * initializes iAddress + * + * @param aArray Array containing all the elements + */ + void ParseAddressL( RArray& aArray ); + + inline CSdpOriginFieldPtrs& OriginFieldPtrs(); + + inline const CSdpOriginFieldPtrs& OriginFieldPtrs() const; + + TInt64 Get63Msbs( const TDesC8& aDecimalValue ) const; + void SetIPAddressType( const TInetAddr& aAddr ); + + private: // Data + + RStringPool iPool; + + // + HBufC8* iUserName; + // + TInt64 iSessionId; + // + TInt64 iSessionVersion; + // + RStringF iNetType; + //
+ RStringF iAddressType; + //
+ // Either one is used (this or iAddressType/iAddress combo) + // Can be defined as mutable because this variable does not affect + // to the state of the object, but it is needed as const pointer + // is returned on InetAddr() method + mutable TInetAddr iUnicastAddress; + TBuf8 iAddress; + // For configuring the address into TInetAddr + TBuf iAddress16; + + void __DbgTestInvariant() const; + + }; + +#endif // CSDPORIGINFIELD_H