--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetooth/btsdp/database/EncoderVisitor.cpp Fri Jan 15 08:13:17 2010 +0200
@@ -0,0 +1,151 @@
+// Copyright (c) 2000-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:
+//
+
+/**
+ @internalTechnology
+ @released
+*/
+
+#include "EncoderVisitor.h"
+#include <btsdp.h>
+#include "DataEncoder.h"
+#include "SDPDatabase.h"
+#include "sdputil.h"
+
+/** Creates a new CAttrEncoderVisitor and leaves it on the cleanup stack.
+
+@param aEncoder a TElementEncoder to be used by this CAttrEncoderVisitor.
+@return A new CAttrEncoderVisitor.
+*/
+EXPORT_C CAttrEncoderVisitor *CAttrEncoderVisitor::NewLC(TElementEncoder aEncoder)
+ {
+ CAttrEncoderVisitor *self = new(ELeave) CAttrEncoderVisitor(aEncoder);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ return self;
+ }
+
+/** Creates a new CAttrEncoderVisitor.
+
+@param aEncoder a TElementEncoder to be used by this CAttrEncoderVisitor.
+@return A new CAttrEncoderVisitor.
+*/
+EXPORT_C CAttrEncoderVisitor *CAttrEncoderVisitor::NewL(TElementEncoder aEncoder)
+ {
+ CAttrEncoderVisitor *self = CAttrEncoderVisitor::NewLC(aEncoder);
+ CleanupStack::Pop();
+ return self;
+ }
+
+CAttrEncoderVisitor::CAttrEncoderVisitor(TElementEncoder aEncoder)
+ : iEncoder(aEncoder)
+ {
+ }
+
+void CAttrEncoderVisitor::ConstructL()
+ {
+ }
+
+CAttrEncoderVisitor::~CAttrEncoderVisitor()
+ {
+ }
+
+/**
+Encode attribute in aSrcAttr into buffer supplied in the encoder.
+
+@param aEncoder A TElementEncoder with a buffer large enough to contain the
+ encoded value.
+@leave ESdpUnexpectedAttributeValueType If the attribute is of an unknown type.
+@leave Positive value equal to the number of bytes of the encoded value which
+ did not fit in the write buffer of the TElementEncoder which is provided
+ as aEncoder. To calculate the size of write buffer needed use the
+ TElementEncoder::EncodedSize function.
+@see TElementEncoder::EncodedSize
+*/
+EXPORT_C void CAttrEncoderVisitor::EncodeAttributeL(TElementEncoder aEncoder, CSdpAttrValue &aSrcAttr)
+ {
+ CAttrEncoderVisitor *self = CAttrEncoderVisitor::NewLC(aEncoder);
+ aSrcAttr.AcceptVisitorL(*self);
+ CleanupStack::PopAndDestroy();
+ }
+
+/**
+Encode attribute in aSrcAttr into buffer supplied at construction.
+
+@leave ESdpUnexpectedAttributeValueType If the attribute is of an unknown type.
+@leave Positive value equal to the number of bytes of the encoded value which
+ did not fit in the write buffer of the TElementEncoder. This was provided
+ at construction. To calculate the size of write buffer needed use the
+ TElementEncoder::EncodedSize function.
+@see TElementEncoder::EncodedSize
+*/
+EXPORT_C void CAttrEncoderVisitor::EncodeAttributeL(CSdpAttrValue &aSrcAttr)
+ {
+ aSrcAttr.AcceptVisitorL(*this);
+ }
+
+
+void CAttrEncoderVisitor::VisitAttributeL(CSdpAttr &aAttribute)
+ {
+ iEncoder.WriteUint(aAttribute.AttributeID(), sizeof(TSdpAttributeID));
+ }
+
+void CAttrEncoderVisitor::VisitAttributeValueL(CSdpAttrValue &aValue, TSdpElementType aType)
+ {
+ TUint rem=0;
+ switch(aType)
+ {
+ case ETypeNil:
+ rem = iEncoder.WriteNil();
+ break;
+ case ETypeUint:
+ case ETypeInt:
+ case ETypeUUID:
+ case ETypeString:
+ case ETypeURL:
+ rem = iEncoder.WriteElement(aType, aValue.Des());
+ break;
+ case ETypeBoolean:
+ rem = iEncoder.WriteBoolean(aValue.Bool());
+ break;
+ case ETypeDES:
+ rem = iEncoder.WriteDES(aValue.DataSize());
+ break;
+ case ETypeDEA:
+ rem = iEncoder.WriteDEA(aValue.DataSize());
+ break;
+ case ETypeEncoded:
+ rem= iEncoder.WriteDesc(aValue.Des());
+ break;
+ default:
+ User::Leave(ESdpUnexpectedAttributeValueType);
+ }
+
+
+ if (rem)
+ User::Leave(rem);
+ }
+
+void CAttrEncoderVisitor::StartListL(CSdpAttrValueList &/*aList*/)
+ {
+ }
+
+void CAttrEncoderVisitor::EndListL()
+ {
+ }
+
+
+
+