diff -r 30e048a7b597 -r bad0cc58d154 eapol/eapol_framework/eapol_symbian/am/common/symbian/EapExpandedType.cpp --- /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 +#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) == sizeof(TBufC8)); +} + +//-------------------------------------------------- + +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 & init) +{ + EXPANDED_TYPE_EAP_TRACE_RETURN_STRING(_L("returns: TEapExpandedType::TEapExpandedType(const TBufC8 & 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 & 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 (data), static_cast(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(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(&net_ord_vendor), sizeof(net_ord_vendor)); + iValue.Append(reinterpret_cast(&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(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(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 &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