diff -r 000000000000 -r b16258d2340f applayerpluginsandutils/uripermissionservices/client/src/ineturiimpl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/applayerpluginsandutils/uripermissionservices/client/src/ineturiimpl.cpp Tue Feb 02 01:09:52 2010 +0200 @@ -0,0 +1,193 @@ +// Copyright (c) 2007-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: +// + + +#include "ineturiimpl.h" +#include "ineturiproperties.h" +#include +#include + +CInetUriImpl* CInetUriImpl::NewL () + { + CInetUriImpl* self = new ( ELeave ) CInetUriImpl (); + CleanupStack::PushL ( self ); + self->ConstructL (); + CleanupStack::Pop (); + return self; + } + +CInetUriImpl::CInetUriImpl () +: iUriId ( -1 ) + { + } + +CInetUriImpl::~CInetUriImpl () + { + delete iUri; + iUri = NULL; + delete iProperties; + iProperties = NULL; + } + +CInetUriImpl* CInetUriImpl::NewL ( const TDesC8& aUri, InetUriList::TServiceType aServiceType, InetUriList::TListType aUriType ) + { + CInetUriImpl* self = new ( ELeave ) CInetUriImpl (); + CleanupStack::PushL ( self ); + self->ConstructL ( aUri, aServiceType, aUriType ); + CleanupStack::Pop (); + return self; + } + +void CInetUriImpl::ConstructL () + { + iProperties = new ( ELeave ) CInetUriProperties; + } + +void CInetUriImpl::ConstructL ( const TDesC8& aUri, InetUriList::TServiceType aServiceType, InetUriList::TListType aUriType ) + { + TUriParser8 uriParser; + User::LeaveIfError ( uriParser.Parse ( aUri ) ); + // Do a syntax based normalisation + iUri = UriUtils::NormaliseUriL ( uriParser ); + ConstructL ( aServiceType, aUriType ); + } + +void CInetUriImpl::ConstructL ( InetUriList::TServiceType aServiceType, InetUriList::TListType aUriType ) + { + iProperties = CInetUriProperties::NewL ( aServiceType, aUriType ); + } + +/** +Returns the underlying CUri8 object +*/ +const CUri8& CInetUriImpl::Uri () const + { + return *iUri; + } + +/** +Set the URI Id +*/ +void CInetUriImpl::SetUriId ( TInt aId ) + { + iUriId = aId; + } + +/** +Returns the URI Id +*/ +TInt CInetUriImpl::UriId () const + { + return iUriId; + } + +/** +Returns the properties object +*/ +CInetUriProperties& CInetUriImpl::Properties () const + { + return *iProperties; + } + +/** +Leaves with KErrUriReadOnly value if the URI is read-only +*/ +void CInetUriImpl::LeaveIfReadOnlyL () const + { + if ( iProperties->Permission() == InetUriList::EReadOnly ) + { + User::Leave ( InetUriList::KErrUriReadOnly ); + } + } + +/** +Clears the URI object by deleting the underlying CUri8 object +*/ +void CInetUriImpl::Clear () + { + delete iUri; + iUri = NULL; + iProperties->Clear (); + } + +TBool CInetUriImpl::IsDirty () const + { + return ( iUri == NULL ); + } + +void CInetUriImpl::SetUri ( CUri8& aUri ) + { + iUri = &aUri; + } + +/** +Set the URI and parses the URI +*/ +void CInetUriImpl::SetUriL ( const TDesC8& aUri ) + { + // The handle must be open and attached to a concrete inernet uri object + __ASSERT_ALWAYS( !iUri, User::Panic( InetUriList::KInetUriListErrHandleNotOpen, InetUriList::KErrNotOpen ) ); + + TUriParser8 uriParser; + User::LeaveIfError ( uriParser.Parse ( aUri ) ); + iUri = CUri8::NewL ( uriParser ); + } + +const TDesC8& CInetUriImpl::UriDes () const + { + // The handle must be open and attached to a concrete inernet uri object + __ASSERT_ALWAYS( iUri, User::Panic( InetUriList::KInetUriListErrHandleNotOpen, InetUriList::KErrNotOpen ) ); + + return iUri->Uri().UriDes(); + } + +/** +Calculates total size of the IPC data buffer +*/ +TInt CInetUriImpl::Size () const + { + return ( sizeof ( TInt ) * 2 + iUri->Uri ().UriDes ().Length () + iProperties->Size() ); + } + +/** +Packs the URI object to send it via IPC +*/ +void CInetUriImpl::PackL ( RWriteStream& aStream ) + { + aStream.WriteInt32L ( iUriId ); + const TDesC8& uriDes ( iUri->Uri ().UriDes () ); + aStream.WriteInt32L ( uriDes.Length() ); + aStream.WriteL ( uriDes ); + + // Pack the properties + iProperties->PackL ( aStream ); + } + +/** +Unpacks the stream and assign to respective values +*/ +void CInetUriImpl::UnpackL ( RReadStream& aStream ) + { + SetUriId ( aStream.ReadInt32L() ); + TInt uriSize = aStream.ReadInt32L (); + HBufC8* uri = HBufC8::NewLC ( uriSize ); + TPtr8 ptr ( uri->Des () ); + aStream.ReadL ( ptr, uriSize ); + SetUriL ( ptr ); + CleanupStack::PopAndDestroy ( ); // uri + + // Unpack the properties + iProperties->UnpackL ( aStream ); + }