applayerpluginsandutils/uripermissionservices/client/src/ineturiimpl.cpp
changeset 0 b16258d2340f
--- /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 <uri8.h>
+#include <uriutils.h>
+ 
+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 );
+	}