zeroconf/dnsparser/src/cdnsresourcedata.cpp
changeset 14 da856f45b798
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/zeroconf/dnsparser/src/cdnsresourcedata.cpp	Thu Jun 24 19:09:47 2010 +0530
@@ -0,0 +1,169 @@
+/*
+* Copyright (c) 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 "cdnsresourcedata.h"
+#include "crdtypeptr.h"
+#include "crdtypea.h"
+#include "crdtypesrv.h"
+#include "crdtypetxt.h"
+
+
+CDnsResourceData::CDnsResourceData():CDnsSection()    
+	{	
+	}
+
+EXPORT_C CDnsResourceData::~CDnsResourceData()
+	{
+	}
+
+
+EXPORT_C TBool CDnsResourceData::IsFlushBitSet()const
+	{
+	if(iClass & KFlushBit)
+		return ETrue;
+	else
+		return EFalse;
+	}
+
+EXPORT_C void CDnsResourceData::SetFlushBit(TBool aFlushBit)
+	{
+	if(aFlushBit)
+		iClass |= KFlushBit;
+	else
+		iClass &= ~KFlushBit;
+	}
+
+EXPORT_C TUint16 CDnsResourceData::RdLength()const
+	{
+	return iRdLength;
+	}
+
+EXPORT_C void CDnsResourceData::SetRdLength(TUint16 aRdLength)
+	{
+	iRdLength = aRdLength;
+	}
+
+EXPORT_C TUint32 CDnsResourceData::Ttl()const
+	{
+	return iTtl;
+	}
+
+EXPORT_C void CDnsResourceData::SetTtl(TUint32 aTtl)
+	{
+	iTtl = aTtl;
+	}
+
+
+//Creates a new copy of this object. Leaves if a memory allocation fails
+EXPORT_C CDnsResourceData* CDnsResourceData::CloneL()const
+	{
+	CDnsResourceData* recordData = NULL;
+
+	switch(Type())
+		{
+		case EDnsType_A: // A record 
+			{
+			const CRdTypeA* addrRecord = static_cast<const CRdTypeA*>(this);
+			CRdTypeA* rrAddrRecord = CRdTypeA::NewL();
+			CleanupStack::PushL(rrAddrRecord);
+
+			rrAddrRecord->SetNameL(addrRecord->Name());
+			rrAddrRecord->SetType(addrRecord->Type());
+			rrAddrRecord->SetClass(addrRecord->Class());
+			rrAddrRecord->SetTtl(addrRecord->Ttl());
+			rrAddrRecord->SetRdLength(addrRecord->RdLength());							
+			rrAddrRecord->SetAddr(addrRecord->Address());
+			
+			CleanupStack::Pop(rrAddrRecord);
+			recordData = rrAddrRecord;
+			}
+		    break;
+
+		case EDnsType_PTR: // ptr record
+			{
+			const CRdTypePtr* ptrRecord = static_cast<const CRdTypePtr*>(this);
+			CRdTypePtr* rrPtrRecord = CRdTypePtr::NewL();
+			CleanupStack::PushL(rrPtrRecord);
+			
+			rrPtrRecord->SetNameL(ptrRecord->Name());
+			rrPtrRecord->SetType(ptrRecord->Type());
+			rrPtrRecord->SetClass(ptrRecord->Class());
+			rrPtrRecord->SetTtl(ptrRecord->Ttl());
+			rrPtrRecord->SetRdLength(ptrRecord->RdLength());						
+			rrPtrRecord->SetDomainNameL(ptrRecord->DomainName());
+            
+			CleanupStack::Pop(rrPtrRecord);
+			recordData = rrPtrRecord;
+			}
+		    break;
+
+		case EDnsType_SRV: // srv record
+			{
+			const CRdTypeSrv* srvRecord = static_cast<const CRdTypeSrv*>(this);
+			CRdTypeSrv* rrSrvRecord = CRdTypeSrv::NewL();
+			CleanupStack::PushL(rrSrvRecord);
+			
+			rrSrvRecord->SetNameL(srvRecord->Name());
+			rrSrvRecord->SetClass(srvRecord->Class());
+			rrSrvRecord->SetType(srvRecord->Type());
+			rrSrvRecord->SetTtl(srvRecord->Ttl());
+			rrSrvRecord->SetRdLength(srvRecord->RdLength());
+			rrSrvRecord->SetPriority(srvRecord->Priority());
+			rrSrvRecord->SetWeight(srvRecord->Weight());
+			rrSrvRecord->SetPort(srvRecord->Port());							
+			rrSrvRecord->SetTargetL(srvRecord->Target());
+			
+			CleanupStack::Pop(rrSrvRecord);
+			recordData = rrSrvRecord;
+			}
+			break;
+
+		case EDnsType_TXT: // Txt record
+			{
+			const CRdTypeTxt* txtRecord = static_cast<const CRdTypeTxt*>(this);
+			CRdTypeTxt* rrTxtRecord = CRdTypeTxt::NewL();
+			CleanupStack::PushL(rrTxtRecord);
+			
+			rrTxtRecord->SetNameL(txtRecord->Name());
+			rrTxtRecord->SetType(txtRecord->Type());
+			rrTxtRecord->SetClass(txtRecord->Class());
+			rrTxtRecord->SetTtl(txtRecord->Ttl());
+			rrTxtRecord->SetRdLength(txtRecord->RdLength());
+										
+			const RArray<RBuf8>& txtList = txtRecord->Text();
+			TInt count = txtList.Count();
+			for(TInt j=0; j<count; j++)
+				{
+				RBuf8 txtBuf;
+				txtBuf.CreateL(txtList[j]);
+				rrTxtRecord->AppendTextDataL(txtBuf);
+				}
+			CleanupStack::Pop(rrTxtRecord);
+			recordData = rrTxtRecord;
+			}
+		    break;  	     		
+		}
+	return recordData;
+	}
+
+TUint16 CDnsResourceData::Size()const
+	{
+	return 0; 
+	}
+
+