williamr@2: // Copyright (c) 2001-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: // This file contains the API definition for the classes TUriC8 and williamr@2: // CUri8. These classes provide non-modifying (TUriC8) and modifying williamr@2: // (CUri8) functionality for the components of a Uri as described in williamr@2: // RFC2396. williamr@2: // williamr@2: // williamr@2: williamr@2: /** williamr@2: @file Uri8.h williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: williamr@2: #ifndef __URI8_H__ williamr@2: #define __URI8_H__ williamr@2: williamr@2: // System includes williamr@2: // williamr@2: #include williamr@4: #include williamr@2: #include williamr@2: williamr@2: williamr@2: /** williamr@2: Dependencies : TUriComponent. williamr@2: Comments : Provides non-modifying functionality on the components of a uri object as williamr@2: defined in RFC2396. There are 5 components; scheme, authority, path, query and fragment. williamr@2: williamr@2: The object holds descriptor pointers to the parsed uri components and a descriptor pointer williamr@2: to the uri. It is non-owning. It uses 8-bit descriptors. williamr@2: williamr@2: The functionality provided by this API allows the uri components to be extracted from the williamr@2: parsed uri, checked for their presence in the uri and be compared with those in another williamr@2: TUriC8 object. williamr@2: @publishedAll williamr@2: @released williamr@2: @since 6.0 williamr@2: */ williamr@2: class TUriC8 williamr@2: { williamr@2: public: // Methods williamr@2: williamr@2: IMPORT_C HBufC* GetFileNameL() const; williamr@2: IMPORT_C HBufC* GetFileNameL(TUriFileName aType) const; williamr@2: williamr@2: IMPORT_C const TDesC8& Extract(TUriComponent aComponent) const; williamr@2: IMPORT_C void UriWithoutFragment(TPtrC8& aUriNoFrag) const; williamr@2: williamr@2: IMPORT_C TBool IsPresent(TUriComponent aComponent) const; williamr@2: IMPORT_C TBool IsSchemeValid() const; williamr@2: IMPORT_C TInt Compare(const TUriC8& aUri, TUriComponent aComponent) const; williamr@2: williamr@2: IMPORT_C const TDesC8& UriDes() const; williamr@2: williamr@2: IMPORT_C TInt Validate() const; williamr@2: IMPORT_C TInt Equivalent(const TUriC8& aUri) const; williamr@2: IMPORT_C HBufC* DisplayFormL(TUriComponent aComponent = EUriComplete) const; williamr@2: williamr@2: protected: // Methods williamr@2: williamr@2: IMPORT_C TUriC8(); williamr@2: void Reset(); williamr@2: williamr@2: protected: // Attributes williamr@2: williamr@2: /** The array of descriptor pointers to the uri components. williamr@2: */ williamr@2: TPtrC8 iComponent[EUriMaxComponents]; williamr@2: williamr@2: /** The descriptor pointer to the uri. williamr@2: */ williamr@2: TPtrC8 iUriDes; williamr@2: williamr@2: /** williamr@2: A friend class. williamr@2: @see CUri8 williamr@2: @since 6.0 williamr@2: */ williamr@2: friend class CUri8; williamr@4: #ifdef SYMBIAN_ENABLE_SPLIT_HEADERS williamr@4: /** williamr@4: A friend class used for testing. williamr@4: @see TUriC8StateAccessor williamr@4: @since 6.0 williamr@4: */ williamr@4: #else williamr@2: /** williamr@2: A friend class used for testing. williamr@2: @see TUriC8StateAccessor williamr@2: @since 6.0 williamr@2: @internalComponent williamr@2: */ williamr@4: #endif //SYMBIAN_ENABLE_SPLIT_HEADERS williamr@2: friend class TUriC8StateAccessor; williamr@2: williamr@2: }; williamr@2: williamr@2: /** williamr@2: Dependencies : TUriC8 williamr@2: Comments : Provides functionality to parse a descriptor into the components of a uri as williamr@2: defined in RFC2396. There are 5 components; scheme, authority, path, query and fragment. williamr@2: williamr@2: It uses 8-bit descriptors. williamr@2: williamr@2: Format of a uri is; scheme://authority path?query\#fragment williamr@2: williamr@2: @warning The descriptor that is parsed by an object of this class will be referenced williamr@2: by that object. If the original descriptor is no longer in scope there will be undefined williamr@2: behaviour. williamr@2: @publishedAll williamr@2: @released williamr@2: @since 6.0 williamr@2: */ williamr@2: class TUriParser8 : public TUriC8 williamr@2: { williamr@2: public: // Methods williamr@2: williamr@2: IMPORT_C TUriParser8(); williamr@2: williamr@2: IMPORT_C TInt Parse(const TDesC8& aUri); williamr@2: williamr@2: private: // Methods williamr@2: void RetrieveScheme(const TPtrC8& aUri, TPtrC8& aScheme); williamr@2: }; williamr@2: williamr@2: class CUri8 : public CBase williamr@2: /** williamr@2: Dependencies : CBase, TUriC8. williamr@2: Comments : Provides modifying functionality on the components of a uri object, as williamr@2: defined in RFC2396. There are 5 components; scheme. authority, path, query and fragment. williamr@2: williamr@2: The object holds parsed uri information. It is owning. It uses 8-bit descriptors. williamr@2: williamr@2: The functionality provided by this API allows the uri components to be set or removed williamr@2: from this parsed uri. Also, it provides a reference to TUriC8 object so that the non-modifying williamr@2: functionality can be used. williamr@2: @publishedAll williamr@2: @released williamr@2: @since 6.0 williamr@2: */ williamr@2: { williamr@2: public: // Methods williamr@2: williamr@2: IMPORT_C static CUri8* CreateFileUriL(const TDesC& aFullFileName, TUint aFlags = 0); williamr@2: IMPORT_C static CUri8* CreatePrivateFileUriL(const TDesC& aRelativeFileName, TDriveNumber aDrive, TInt aFlags = 0); williamr@2: williamr@2: IMPORT_C static CUri8* NewL(const TUriC8& aUri); williamr@2: IMPORT_C static CUri8* NewLC(const TUriC8& aUri); williamr@2: IMPORT_C static CUri8* NewL(); williamr@2: IMPORT_C static CUri8* NewLC(); williamr@2: williamr@2: IMPORT_C static CUri8* ResolveL(const TUriC8& aBaseUri, const TUriC8& aRefUri); williamr@2: williamr@2: IMPORT_C ~CUri8(); williamr@2: williamr@2: IMPORT_C const TUriC8& Uri() const; williamr@2: IMPORT_C void SetComponentL(const TDesC8& aData, TUriComponent aComponent); williamr@2: IMPORT_C void RemoveComponentL(TUriComponent aComponent); williamr@2: williamr@2: private: // Methods williamr@2: williamr@2: CUri8(const TUriC8& aNewUri); williamr@2: void ConstructL(); williamr@2: void FormUriL(); williamr@2: void InitializeFileUriComponentsL(const TDesC& aFileName, TDriveNumber aDrive, TUint aFlags); williamr@2: williamr@2: private: // Attributes williamr@2: williamr@2: /** The descriptor buffer that contains the uri. williamr@2: */ williamr@2: HBufC8* iUriBuf; williamr@2: williamr@2: /** The parsed uri object. williamr@2: */ williamr@2: TUriC8 iUri; williamr@4: williamr@4: #ifdef SYMBIAN_ENABLE_SPLIT_HEADERS williamr@4: /** williamr@4: A friend class used for testing. williamr@4: @see TUri8StateAccessor williamr@4: @since 6.0 williamr@4: */ williamr@4: #else williamr@2: /** williamr@2: A friend class used for testing. williamr@2: @see TUri8StateAccessor williamr@2: @since 6.0 williamr@2: @internalComponent williamr@2: */ williamr@4: #endif //SYMBIAN_ENABLE_SPLIT_HEADERS williamr@2: friend class TUri8StateAccessor; williamr@2: williamr@2: }; williamr@2: williamr@2: #endif // __URI8_H__