DLMS_SOURCE_DIAGNOSTIC CGXDLMSBase::ValidateAuthentication( DLMS_AUTHENTICATION authentication, CGXByteBuffer& password) { if (authentication == DLMS_AUTHENTICATION_NONE) { //Uncomment this if authentication is always required. //return DLMS_SOURCE_DIAGNOSTIC_AUTHENTICATION_MECHANISM_NAME_REQUIRED; } if (authentication == DLMS_AUTHENTICATION_LOW) { CGXByteBuffer expected; std::string name = "0.0.40.0.0.255"; if (GetUseLogicalNameReferencing()) { CGXDLMSAssociationLogicalName* ln = (CGXDLMSAssociationLogicalName*)GetItems().FindByLN( DLMS_OBJECT_TYPE_ASSOCIATION_LOGICAL_NAME, name); expected = ln->GetSecret(); } else { CGXDLMSAssociationShortName* sn = (CGXDLMSAssociationShortName*)GetItems().FindByLN( DLMS_OBJECT_TYPE_ASSOCIATION_SHORT_NAME, name); expected = sn->GetSecret(); } if (expected.Compare(password.GetData(), password.GetSize())) { return DLMS_SOURCE_DIAGNOSTIC_NONE; } return DLMS_SOURCE_DIAGNOSTIC_AUTHENTICATION_FAILURE; } // Other authentication levels are check on phase two. return DLMS_SOURCE_DIAGNOSTIC_NONE; }