williamr@2: /* williamr@2: * Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: * All rights reserved. williamr@2: * This component and the accompanying materials are made available williamr@4: * under the terms of "Eclipse Public License v1.0" williamr@2: * which accompanies this distribution, and is available williamr@4: * at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@2: * williamr@2: * Initial Contributors: williamr@2: * Nokia Corporation - initial contribution. williamr@2: * williamr@2: * Contributors: williamr@2: * williamr@2: * Description: williamr@2: * Name : sipaddress.h williamr@2: * Part of : SIP Codec williamr@2: * Interface : SDK API, SIP Codec API williamr@2: * Version : SIP/4.0 williamr@2: * williamr@2: */ williamr@2: williamr@2: williamr@2: williamr@2: williamr@2: #ifndef CSIPADDRESS_H williamr@2: #define CSIPADDRESS_H williamr@2: williamr@2: // INCLUDES williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: williamr@2: // FORWARD DECLARATIONS williamr@2: class CURIContainer; williamr@2: williamr@2: // CLASS DECLARATION williamr@2: /** williamr@2: * @publishedAll williamr@2: * @released williamr@2: * williamr@2: * Class provides functions for setting and getting parameters in SIP williamr@2: * name-addr structure williamr@2: * williamr@2: * @lib sipcodec.lib williamr@2: */ williamr@2: class CSIPAddress : public CBase williamr@2: { williamr@2: public: // Constructors and destructor williamr@2: williamr@2: /** williamr@2: * Constructs a CSIPAddress from textual representation williamr@2: * @param aValue SIP name-addr as text williamr@2: * @return a new instance of CSIPAddress williamr@2: */ williamr@2: IMPORT_C static CSIPAddress* DecodeL(const TDesC8& aValue); williamr@2: williamr@2: /** williamr@2: * Creates a new instance of CSIPAddress williamr@2: * @pre aUri != 0 williamr@2: * @param aUri the ownership is transferred. williamr@2: * @return a new instance of CSIPAddress williamr@2: */ williamr@2: IMPORT_C static CSIPAddress* NewL(CUri8* aUri8); williamr@2: williamr@2: /** williamr@2: * Creates a new instance of CSIPAddress and puts it to CleanupStack williamr@2: * @pre aUri != 0 williamr@2: * @param aUri the ownership is transferred. williamr@2: * @return a new instance of CSIPAddress williamr@2: */ williamr@2: IMPORT_C static CSIPAddress* NewLC(CUri8* aUri8); williamr@2: williamr@2: /** williamr@2: * Creates a new instance of CSIPAddress williamr@2: * @pre aUri != 0 williamr@2: * @param aDisplayName a SIP token or a SIP quoted-string williamr@2: * @param aUri the ownership is transferred. williamr@2: * @return a new instance of CSIPAddress williamr@2: */ williamr@2: IMPORT_C static CSIPAddress* NewL(const TDesC8& aDisplayName, williamr@2: CUri8* aUri8); williamr@2: williamr@2: /** williamr@2: * Creates a new instance of CSIPAddress and puts it to CleanupStack williamr@2: * @pre aUri != 0 williamr@2: * @param aDisplayName a SIP token or a SIP quoted-string williamr@2: * @param aUri the ownership is transferred. williamr@2: * @return a new instance of CSIPAddress williamr@2: */ williamr@2: IMPORT_C static CSIPAddress* NewLC(const TDesC8& aDisplayName, williamr@2: CUri8* aUri8); williamr@2: williamr@2: /** williamr@2: * Creates a deep-copy of a CSIPAddress williamr@2: * @param aSIPAddress the address to be copied williamr@2: * @return a new instance of CSIPAddress williamr@2: */ williamr@2: IMPORT_C static CSIPAddress* NewL(const CSIPAddress& aSIPAddress); williamr@2: williamr@2: /** williamr@2: * Creates a deep-copy of a CSIPAddress and puts it to CleanupStack williamr@2: * @param aSIPAddress the address to be copied williamr@2: * @return a new instance of CSIPAddress williamr@2: */ williamr@2: IMPORT_C static CSIPAddress* NewLC(const CSIPAddress& aSIPAddress); williamr@2: williamr@2: /** williamr@2: * Destructor, deletes the resources of CSIPAddress. williamr@2: */ williamr@2: IMPORT_C ~CSIPAddress(); williamr@2: williamr@2: williamr@2: public: // New functions williamr@2: williamr@2: /** williamr@2: * Compares this object to another instance of CSIPAddress williamr@2: * @param aSIPAddress a CSIPAddress to compare to williamr@2: * @return ETrue if the objects are equal otherwise EFalse williamr@2: */ williamr@2: IMPORT_C TBool operator==(const CSIPAddress& aSIPAddress) const; williamr@2: williamr@2: /** williamr@2: * Gets the display name williamr@2: * @return the display name if present, williamr@2: * otherwise a zero-length descriptor williamr@2: */ williamr@2: IMPORT_C const TDesC8& DisplayName() const; williamr@2: williamr@2: /** williamr@2: * Sets the display name williamr@2: * @param aDisplayName a SIP token or a SIP quoted-string williamr@2: */ williamr@2: IMPORT_C void SetDisplayNameL(const TDesC8& aDisplayName); williamr@2: williamr@2: /** williamr@2: * Gets the URI part of the address as const williamr@2: * @return a reference to the URI object williamr@2: */ williamr@2: IMPORT_C const CUri8& Uri8() const; williamr@2: williamr@2: /** williamr@2: * Sets the URI part of the address williamr@2: * @pre aUri!= 0 williamr@2: * @param aUri a pointer to the URI object, the ownership is transferred williamr@2: */ williamr@2: IMPORT_C void SetUri8L(CUri8* aUri8); williamr@2: williamr@2: /** williamr@2: * Creates a textual representation and pushes it to CleanupStack williamr@2: * @param aUseAngleBrackets if ETrue, sets the anglebrackets williamr@2: * @return a textual representation of the object, williamr@2: * the ownership is transferred williamr@2: */ williamr@2: IMPORT_C HBufC8* ToTextLC(TBool aUseAngleBrackets=EFalse) const; williamr@2: williamr@2: /** williamr@2: * Constructs an instance of a CSIPAddress from a RReadStream williamr@2: * @param aReadStream a stream containing the externalized object williamr@2: * @return an instance of a CSIPAddress williamr@2: */ williamr@2: IMPORT_C static CSIPAddress* InternalizeL(RReadStream& aReadStream); williamr@2: williamr@2: /** williamr@2: * Writes the object to a RWriteStream williamr@2: * @param aWriteStream a stream where the object is to be externalized williamr@2: */ williamr@2: IMPORT_C void ExternalizeL(RWriteStream& aWriteStream); williamr@2: williamr@2: williamr@2: public: // For internal use: williamr@2: williamr@2: IMPORT_C CURIContainer& URI(); williamr@2: IMPORT_C const CURIContainer& URI() const; williamr@2: static CSIPAddress* NewLC(CURIContainer* aURI); williamr@2: williamr@2: williamr@2: private: // Constructors williamr@2: williamr@2: CSIPAddress(); williamr@2: void ConstructL(); williamr@2: void ConstructL(CUri8* aUri); williamr@2: void ConstructL(const TDesC8& aDisplayName, CUri8* aUri); williamr@2: void ConstructL(const CSIPAddress& aSIPAddress); williamr@2: void ConstructL(CURIContainer* aURI); williamr@2: williamr@2: private: // New functions williamr@2: williamr@2: void DoInternalizeL(RReadStream& aReadStream); williamr@2: TInt QuotedStringLength(const TDesC8& aValue); williamr@2: TBool CheckDisplayName(const TDesC8& aValue); williamr@2: void ParseURIInAngleBracketsL(const TDesC8& aValue); williamr@2: void ParseURIL(const TDesC8& aValue); williamr@2: TBool ContainsSeparators(const TDesC8& aValue) const; williamr@2: TBool HasDisplayName() const; williamr@2: williamr@2: private: // Data williamr@2: williamr@2: HBufC8* iDisplayName; williamr@2: CURIContainer* iURI; williamr@2: williamr@2: private: // For testing purposes williamr@4: #ifdef CPPUNIT_TEST williamr@4: friend class CSIPAddressTest; williamr@4: #endif williamr@2: }; williamr@2: williamr@2: #endif // end of __SIP_ADDRESS_H__ williamr@2: williamr@2: // End of File