eapol/eapol_framework/eapol_symbian/am/common/symbian/EapExpandedType.cpp
branchRCL_3
changeset 18 bad0cc58d154
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eapol/eapol_framework/eapol_symbian/am/common/symbian/EapExpandedType.cpp	Tue Aug 31 15:16:37 2010 +0300
@@ -0,0 +1,306 @@
+/*
+* Copyright (c) 2001-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:  Expanded EAP-type on Symbian.
+*
+*/
+
+/*
+* %version: 16 %
+*/
+
+#include <EapExpandedType.h>
+#include "EapTraceSymbian.h"
+#include "eap_expanded_type.h"
+
+//--------------------------------------------------
+
+#if defined(USE_EAP_EXPANDED_TYPE_TRACES)
+
+	#define EXPANDED_TYPE_EAP_TRACE EAP_TRACE_DEBUG_SYMBIAN
+
+	#define EXPANDED_TYPE_EAP_TRACE_DATA EAP_TRACE_DATA_DEBUG_SYMBIAN
+
+	#define EXPANDED_TYPE_EAP_TRACE_RETURN_STRING EAP_TRACE_RETURN_STRING_SYMBIAN
+
+#else
+
+	#define EXPANDED_TYPE_EAP_TRACE(_parameter_list_)
+
+	#define EXPANDED_TYPE_EAP_TRACE_DATA(_parameter_list_)
+
+	#define EXPANDED_TYPE_EAP_TRACE_RETURN_STRING(_parameter_list_)
+
+#endif //#if defined(USE_EAP_EXPANDED_TYPE_TRACES)
+
+//--------------------------------------------------
+
+EAP_FUNC_EXPORT TEapExpandedType::TEapExpandedType()
+{
+	EXPANDED_TYPE_EAP_TRACE_DATA(
+		(EAPL("TEapExpandedType::TEapExpandedType(): EapExpandedTypeNone"),
+		&EapExpandedTypeNone,
+		sizeof(EapExpandedTypeNone)));
+
+	EXPANDED_TYPE_EAP_TRACE_RETURN_STRING(_L("returns: TEapExpandedType::TEapExpandedType()\n"));
+
+	EXPANDED_TYPE_EAP_TRACE_DATA(
+		(EAPL("TEapExpandedType::TEapExpandedType(): EapExpandedTypeNone.GetType()"),
+		EapExpandedTypeNone.GetType(),
+		sizeof(*(EapExpandedTypeNone.GetType()))));
+
+	iValue.Copy(*(EapExpandedTypeNone.GetType()));
+
+	EXPANDED_TYPE_EAP_TRACE_DATA(
+		(EAPL("TEapExpandedType::TEapExpandedType()"),
+		iValue.Ptr(),
+		iValue.Length()));
+}
+
+//--------------------------------------------------
+
+EAP_FUNC_EXPORT TEapExpandedType::~TEapExpandedType()
+{
+	EAP_STATIC_ASSERT(sizeof(TConstEapExpandedTypeTemplate<KEapExpandedTypeLength>) == sizeof(TBufC8<KEapExpandedTypeLength>));
+}
+
+//--------------------------------------------------
+
+EAP_FUNC_EXPORT TEapExpandedType::TEapExpandedType(const TEapExpandedType * const init)
+{
+	EXPANDED_TYPE_EAP_TRACE_RETURN_STRING(_L("returns: TEapExpandedType::TEapExpandedType(const TEapExpandedType * const init)\n"));
+
+	iValue.Copy(init->GetValue());
+
+	EXPANDED_TYPE_EAP_TRACE_DATA(
+		(EAPL("TEapExpandedType::TEapExpandedType()"),
+		iValue.Ptr(),
+		iValue.Length()));
+}
+
+//--------------------------------------------------
+
+EAP_FUNC_EXPORT TEapExpandedType::TEapExpandedType(const TEapExpandedType & init)
+{
+	EXPANDED_TYPE_EAP_TRACE_RETURN_STRING(_L("returns: TEapExpandedType::TEapExpandedType(const TEapExpandedType & init)\n"));
+
+	iValue.Copy(init.GetValue());
+
+	EXPANDED_TYPE_EAP_TRACE_DATA(
+		(EAPL("TEapExpandedType::TEapExpandedType()"),
+		iValue.Ptr(),
+		iValue.Length()));
+}
+
+//--------------------------------------------------
+
+EAP_FUNC_EXPORT TEapExpandedType::TEapExpandedType(const TBufC8<KEapExpandedTypeLength> & init)
+{
+	EXPANDED_TYPE_EAP_TRACE_RETURN_STRING(_L("returns: TEapExpandedType::TEapExpandedType(const TBufC8<KEapExpandedTypeLength> & init)\n"));
+
+	iValue.Copy(init);
+
+	EXPANDED_TYPE_EAP_TRACE_DATA(
+		(EAPL("TEapExpandedType::TEapExpandedType()"),
+		iValue.Ptr(),
+		iValue.Length()));
+}
+
+//--------------------------------------------------
+
+EAP_FUNC_EXPORT TEapExpandedType::TEapExpandedType(const TDesC8 & init)
+{
+	EXPANDED_TYPE_EAP_TRACE_RETURN_STRING(_L("returns: TEapExpandedType::TEapExpandedType(const TDesC8 & init)\n"));
+
+	iValue.Copy(init);
+
+	EXPANDED_TYPE_EAP_TRACE_DATA(
+		(EAPL("TEapExpandedType::TEapExpandedType()"),
+		iValue.Ptr(),
+		iValue.Length()));
+}
+
+//--------------------------------------------------
+
+EAP_FUNC_EXPORT const TBuf8<KEapExpandedTypeLength> & TEapExpandedType::GetValue() const
+{
+	return iValue;
+}
+
+//--------------------------------------------------
+
+EAP_FUNC_EXPORT TInt TEapExpandedType::SetValue(
+	const void * const data,
+	const TUint data_length)
+{
+	EXPANDED_TYPE_EAP_TRACE_DATA(
+		(EAPL("TEapExpandedType::SetValue(const void * const data, const TUint data_length)"),
+		data,
+		data_length));
+
+	EXPANDED_TYPE_EAP_TRACE_RETURN_STRING(_L("returns: TEapExpandedType::SetValue()\n"));
+
+	if (data == 0
+		|| data_length > iValue.MaxSize())
+	{
+		return KErrArgument;
+	}
+
+	iValue.Copy(reinterpret_cast<const TUint8 *> (data), static_cast<TInt>(data_length));
+
+	EXPANDED_TYPE_EAP_TRACE_DATA(
+		(EAPL("TEapExpandedType::SetValue(const void * const data, const TUint data_length)"),
+		iValue.Ptr(),
+		iValue.Length()));
+
+	return KErrNone;
+}
+
+//--------------------------------------------------
+
+EAP_FUNC_EXPORT TInt TEapExpandedType::SetValue(
+	const TUint vendor_id,
+	const TUint vendor_type)
+{
+	const u32_t expanded_vendor = (0xfe000000 | static_cast<u32_t>(vendor_id));
+	const TUint net_ord_vendor = eap_htonl(expanded_vendor);
+	const TUint net_ord_type = eap_htonl(vendor_type);
+
+	EXPANDED_TYPE_EAP_TRACE((_L("TEapExpandedType::SetValue(): vendor_id=0x%08x, vendor_type=0x%08x, expanded_vendor=0x%08x, net_ord_vendor=0x%08x, net_ord_type=0x%08x\n"),
+		vendor_id,
+		vendor_type,
+		expanded_vendor,
+		net_ord_vendor,
+		net_ord_type));
+
+	EXPANDED_TYPE_EAP_TRACE_RETURN_STRING(_L("returns: TEapExpandedType::SetValue()\n"));
+
+	if ((sizeof(vendor_id)+sizeof(vendor_type)) > iValue.MaxSize())
+	{
+		return KErrArgument;
+	}
+
+	iValue.Copy(reinterpret_cast<const TUint8 *>(&net_ord_vendor), sizeof(net_ord_vendor));
+	iValue.Append(reinterpret_cast<const TUint8 *>(&net_ord_type), sizeof(net_ord_type));
+
+	EXPANDED_TYPE_EAP_TRACE_DATA(
+		(EAPL("TEapExpandedType::SetValue()"),
+		iValue.Ptr(),
+		iValue.Length()));
+
+	return KErrNone;
+}
+
+//--------------------------------------------------
+
+EAP_FUNC_EXPORT TUint TEapExpandedType::GetVendorId() const
+{
+	const TUint * const aHostOrderVendorId = reinterpret_cast<const TUint *>(iValue.Ptr());
+
+	// Masks off the leading octet 0xfe.
+	const u32_t VENDOR_ID_MASK = 0x00ffffff;
+	return eap_ntohl(*aHostOrderVendorId) & VENDOR_ID_MASK;
+}
+
+//--------------------------------------------------
+
+EAP_FUNC_EXPORT TUint TEapExpandedType::GetVendorType() const
+{
+	const TUint * const aHostOrderVendorType = reinterpret_cast<const TUint *>(iValue.Ptr() + sizeof(TUint));
+
+	return eap_ntohl(*aHostOrderVendorType);
+}
+
+//--------------------------------------------------
+
+EAP_FUNC_EXPORT TEapExpandedType &TEapExpandedType::operator = (const TEapExpandedType &right_type_value)
+{
+	if (this == &right_type_value)
+	{
+		return *this;
+	}
+
+	iValue.Copy(right_type_value.GetValue());
+
+	EXPANDED_TYPE_EAP_TRACE_DATA(
+		(EAPL("TEapExpandedType::operator ="),
+		iValue.Ptr(),
+		iValue.Length()));
+
+	return *this;
+}
+
+//--------------------------------------------------
+
+EAP_FUNC_EXPORT TEapExpandedType &TEapExpandedType::operator = (const TBufC8<KEapExpandedTypeLength> &right_type_value)
+{
+	iValue.Copy(right_type_value);
+
+	EXPANDED_TYPE_EAP_TRACE_DATA(
+		(EAPL("TEapExpandedType::operator ="),
+		iValue.Ptr(),
+		iValue.Length()));
+
+	return *this;
+}
+
+//--------------------------------------------------
+
+EAP_FUNC_EXPORT TEapExpandedType &TEapExpandedType::operator = (const TDesC8 &right_type_value)
+{
+	ASSERT(right_type_value.Length() == KEapExpandedTypeLength);
+
+	iValue.Copy(right_type_value);
+
+	EXPANDED_TYPE_EAP_TRACE_DATA(
+		(EAPL("TEapExpandedType::operator ="),
+		iValue.Ptr(),
+		iValue.Length()));
+
+	return *this;
+}
+
+//--------------------------------------------------
+
+EAP_FUNC_EXPORT TInt TEapExpandedType::Compare(const TEapExpandedType &right_type_value) const
+{
+	for (TUint ind = 0ul; ind < KEapExpandedTypeLength; ++ind)
+	{
+		const TUint8 left = iValue[ind];
+		const TUint8 right = right_type_value.GetValue()[ind];
+
+		if (left != right)
+		{
+			return iValue[ind] - right_type_value.GetValue()[ind];
+		}
+	}
+
+	return 0;
+}
+
+//--------------------------------------------------
+
+EAP_FUNC_EXPORT bool TEapExpandedType::operator == (const TEapExpandedType &right_type_value) const
+{
+	return Compare(right_type_value) == 0;
+}
+
+//--------------------------------------------------
+
+EAP_FUNC_EXPORT bool TEapExpandedType::operator != (const TEapExpandedType &right_type_value) const
+{
+	return Compare(right_type_value) != 0;
+}
+
+//--------------------------------------------------
+// End of file