diff -r 78fbd574edf4 -r da856f45b798 zeroconf/dnsparser/src/cdnsresourcedata.cpp --- /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(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(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(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(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& txtList = txtRecord->Text(); + TInt count = txtList.Count(); + for(TInt j=0; jAppendTextDataL(txtBuf); + } + CleanupStack::Pop(rrTxtRecord); + recordData = rrTxtRecord; + } + break; + } + return recordData; + } + +TUint16 CDnsResourceData::Size()const + { + return 0; + } + +