450 lines
18 KiB
C#

//----------------------------------------------------------------------------
//
// Copyright (c) Intel Corporation, 2012 - 2014 All Rights Reserved.
//
// File: WirelessRemoteFunctionality.cs
//
// Contents: Example that shows how to use WiFiConfiguration High Level API
//
// Notes:
//
//----------------------------------------------------------------------------
using System;
using Intel.Manageability;
using Intel.Manageability.Exceptions;
using System.Collections.Generic;
using HLAPI.Wireless;
using System.Security.Cryptography.X509Certificates;
using System.Security.Cryptography;
namespace WiFiConfigurationRemoteSample
{
public class WirelessRemoteFunctionality
{
#region Private Members
private const string ADMIN_PROFILE_NAME = "Wireless-Profile-Admin";
private const string ADMIN_1X_PROFILE_NAME = "Wireless-Profile-Admin-1x";
private const string AMT_CERT = @"..\..\amtCert_sub1.p12";
private const string ROOT_CA = @"..\..\rootCA.cer";
IAMTInstance amt;
#endregion
#region Constructor
public WirelessRemoteFunctionality(IAMTInstance amt)
{
this.amt = amt;
}
#endregion
#region Public Functions
public void SetAndGetLinkPolicy()
{
try
{
Console.WriteLine("\nSet and get link policy:");
Console.WriteLine("========================\n");
// Set link policy in the AMT machine.
amt.Config.Wireless.SetWiFiLinkPolicy(WiFiLinkPolicy.EnableS0);
Console.WriteLine("Enable WiFi link policy on S0 completed successfully.");
}
catch (WirelessManageabilityException ex)
{
Console.WriteLine(ex.Message);
}
try
{
// Get list of link policies. (The power states in which the wireless network works.)
WiFiLinkPolicy linkPolicy = amt.Config.Wireless.GetWiFiLinkPolicy();
Console.WriteLine("Link policy is {0}.", linkPolicy);
}
catch (WirelessManageabilityException ex)
{
Console.WriteLine(ex.Message);
}
}
public void AddWirelessProfiles(string SSID)
{
# region ========== Admin Profile with PSKPassphrase =============================
Console.WriteLine("\nAdd admin profile with PSK passphrase:");
Console.WriteLine("====================================\n");
// Add admin wireless profile configuration setting.
AdminProfile adminProfile = new AdminProfile(ADMIN_PROFILE_NAME,
AdminEncryptionMethod.CCMP,
AdminAuthenticationMethod.WPA2_PSK,
"P@ssw0rd",
SSID);
// Set the admin profile to be primary.
adminProfile.IsPrimary = true;
try
{
// Add the profile in the AMT machine.
amt.Config.Wireless.CreateOrUpdateProfile(adminProfile);
Console.WriteLine("Wireless admin profile added successfully.");
}
catch (WirelessManageabilityException ex)
{
Console.WriteLine(ex.Message);
}
#endregion
# region ========== Admin 802.1x Profile with UserCredential =====================
Console.WriteLine("\nAdd admin 802.1x profile with user credential:");
Console.WriteLine("============================================\n");
// Add admin 1.x wireless profile configuration setting with client certificate.
Admin1XProfile admin802_1xProfile = new Admin1XProfile(ADMIN_1X_PROFILE_NAME,
AdminEncryptionMethod.CCMP,
Admin1XAuthenticationMethod.WPA2_IEEE_802_1x,
AuthenticationProtocol.EAP_TTLS_MSCHAPv2,
new UserCredential("admin", "P@ssw0rd", "Intel"),
SSID);
try
{
// Add the profile in the AMT machine.
amt.Config.Wireless.CreateOrUpdateProfile(admin802_1xProfile);
Console.WriteLine("Wireless admin 1x profile added successfully.");
}
catch (WirelessManageabilityException ex)
{
Console.WriteLine(ex.Message);
}
#endregion
}
public void UpdateWirelessProfiles(string SSID)
{
#region ========== Admin Profile with PSK Value ==================================
Console.WriteLine("\nUpdate admin profile with PSK value:");
Console.WriteLine("====================================\n");
// Update admin wireless profile configuration setting.
AdminProfile adminProfile = new AdminProfile(ADMIN_PROFILE_NAME,
AdminEncryptionMethod.TKIP,
AdminAuthenticationMethod.WPA2_PSK,
ConvertStringToByteArray("P@ssw0rdP@ssw0rdP@ssw0rdP@ssw0rd"),
SSID);
// Change the admin profile to not be primary.
adminProfile.IsPrimary = false;
try
{
// Update the profile in the AMT machine.
amt.Config.Wireless.CreateOrUpdateProfile(adminProfile);
Console.WriteLine("Wireless admin profile updated successfully.");
}
catch (WirelessManageabilityException ex)
{
Console.WriteLine(ex.Message);
}
#endregion
#region ========== Admin 802.1x Profile with ClientCertificate ===================
Console.WriteLine("\nUpdate admin 802.1x profile with client certificate:");
Console.WriteLine("====================================================\n");
try
{
Admin1XProfile admin802_1xProfile;
using (X509Certificate2 clientCertificate = new X509Certificate2(AMT_CERT, "q", X509KeyStorageFlags.Exportable))
{
admin802_1xProfile = new Admin1XProfile(ADMIN_1X_PROFILE_NAME,
AdminEncryptionMethod.TKIP,
Admin1XAuthenticationMethod.WPA_IEEE_802_1x,
"admin",
clientCertificate,
SSID);
}
admin802_1xProfile.CACertificate = new CACertificate(new X509Certificate2(ROOT_CA));
amt.Config.CertificateManagement.ManageCertificateManually = false;
try
{
// Update the profile in the AMT machine.
amt.Config.Wireless.CreateOrUpdateProfile(admin802_1xProfile);
Console.WriteLine("Wireless admin 1x profile updated successfully.");
}
catch (WirelessManageabilityException ex)
{
Console.WriteLine(ex.Message);
}
}
catch (CryptographicException ex)
{
Console.WriteLine(ex.Message);
return;
}
#endregion
}
public void GetWirelessProfiles()
{
try
{
Console.WriteLine("\nGet active wireless profile:");
Console.WriteLine("============================\n");
// Get and print active profile.
Profile activeProfile = amt.Config.Wireless.GetActiveProfile();
if (activeProfile != null)
PrintProfile(activeProfile);
else
Console.WriteLine("No wireless profile is active in the Intel AMT machine.");
}
catch (WirelessManageabilityException ex)
{
Console.WriteLine(ex.Message);
}
try
{
// Get and print admin wireless profile by ProfileName.
PrintProfile(amt.Config.Wireless.GetProfile(ADMIN_PROFILE_NAME));
}
catch (WirelessManageabilityException ex)
{
Console.WriteLine(ex.Message);
}
try
{
Console.WriteLine("\nGet all wireless profiles:");
Console.WriteLine("==========================\n");
List<Profile> profiles;
// Get all wireless profiles.
amt.Config.Wireless.GetProfiles(out profiles);
// Print the profiles list.
Console.WriteLine("\nProfile list:");
foreach (Profile profile in profiles)
{
PrintProfile(profile);
}
}
catch (WirelessManageabilityException ex)
{
Console.WriteLine(ex.Message);
}
}
public void DeleteWirelessProfiles()
{
try
{
Console.WriteLine("\nDelete wireless profile \"" + ADMIN_PROFILE_NAME + "\":");
Console.WriteLine("=================================================\n");
// Delete admin profile by name.
amt.Config.Wireless.DeleteAdminProfile(ADMIN_PROFILE_NAME);
Console.WriteLine("Delete wireless profile completed successfully.");
}
catch (WirelessManageabilityException ex)
{
Console.WriteLine(ex.Message);
}
try
{
Console.WriteLine("\nDelete all wireless admin profiles:");
Console.WriteLine("===================================\n");
// Delete all admin profiles. (Regular admin profile and 1.xs profile.)
amt.Config.Wireless.DeleteProfiles(ProfileTypes.AllAdminProfiles);
Console.WriteLine("Delete all admin wireless profiles completed successfully.");
}
catch (WirelessManageabilityException ex)
{
Console.WriteLine(ex.Message);
}
}
public void GetUserProfileSync()
{
try
{
Console.WriteLine("\nGet user profile synchronization state:");
Console.WriteLine("=======================================\n");
// Get profile synchronization state.
ProfileSynchronization profileSync = amt.Config.Wireless.GetUserProfileSync();
// Print profile synchronization state.
Console.WriteLine("Local profile synchronization is {0}.",
(profileSync == ProfileSynchronization.Disable?"disable":"enable"));
}
catch (WirelessManageabilityException ex)
{
Console.WriteLine(ex.Message);
}
}
public void SetUserProfileSync(ProfileSynchronization synchronize)
{
try
{
Console.WriteLine("\nSet user profile synchronization state:");
Console.WriteLine("=======================================\n");
// Set profile synchronization state.
amt.Config.Wireless.SetUserProfileSync(synchronize);
Console.WriteLine((synchronize == ProfileSynchronization.Disable? "Disable":"Enable user") +
" profile synchronization completed successfully.");
}
catch (WirelessManageabilityException ex)
{
Console.WriteLine(ex.Message);
}
}
public void GetLinkProperties()
{
try
{
Console.WriteLine("\nGet link properties:");
Console.WriteLine("=====================\n");
// Get the link preference.
LinkType linkPreference = amt.Config.Wireless.GetLinkPreference();
// Print link preference.
Console.WriteLine("The link control is preferred to be owned by " + linkPreference.ToString());
// Get the actual link owner.
LinkType linkOwner = amt.Config.Wireless.GetLinkOwner();
// Print the actual link owner.
Console.WriteLine("Currently, the link control is owned by " + linkOwner.ToString());
// Get automatic link transition state.
AutoLinkTransType link = amt.Config.Wireless.GetAutoLinkTransitionState();
Console.WriteLine("Automatic link transition state is: " + link);
}
catch (WirelessManageabilityException ex)
{
Console.WriteLine(ex.Message);
}
}
public void SetLinkPreference()
{
try
{
Console.WriteLine("\nSet link preference:");
Console.WriteLine("====================\n");
// Set link preference to ME. The timeout will be 60 sec.
amt.Config.Wireless.SetLinkPreferenceToMe(60);
Console.WriteLine("Set link preference to ME completed successfully.");
}
catch (WirelessManageabilityException ex)
{
Console.WriteLine(ex.Message);
}
}
public void PauseAutoLinkTransition()
{
try
{
Console.WriteLine("\nSet automatic link transition state:");
Console.WriteLine("====================================\n");
// Pause automatic link transition for an one hour.
amt.Config.Wireless.SetAutoLinkTransitionState(false);
Console.WriteLine("Resume automatic link transition completed successfully.");
}
catch (WirelessManageabilityException ex)
{
Console.WriteLine(ex.Message);
}
}
#endregion
#region Private Static Functions
private static void PrintProfile(Profile profile)
{
if (profile != null)
{
// Check profile type, and send the profile to the appropiate print function
if (profile is UserProfile)
PrintProfile((UserProfile)profile);
else
if (profile is AdminProfile)
PrintProfile((AdminProfile)profile);
else
PrintProfile((Admin1XProfile)profile);
}
}
private static void PrintProfile(UserProfile userProfile)
{
Console.WriteLine("\n=====================================================================\n");
Console.WriteLine("Profile Name: {0}", userProfile.ProfileName);
}
private static void PrintProfile(AdminProfile adminProfile)
{
Console.WriteLine("\n=====================================================================\n");
Console.WriteLine("Profile Name: {0}", adminProfile.ProfileName);
Console.WriteLine("SSID: {0}", (string.IsNullOrEmpty(adminProfile.SSID) ? "Null" : adminProfile.SSID));
Console.WriteLine("Authentication Method: {0}", adminProfile.AuthenticationMethod);
Console.WriteLine("Encryption Method: {0}", adminProfile.EncryptionMethod);
Console.WriteLine("Is primary: {0}", Convert.ToString(adminProfile.IsPrimary));
}
private static void PrintProfile(Admin1XProfile admin802_1xProfile)
{
Console.WriteLine("\n=====================================================================\n");
Console.WriteLine("Profile Name: {0}", admin802_1xProfile.ProfileName);
Console.WriteLine("SSID: {0}", (string.IsNullOrEmpty(admin802_1xProfile.SSID) ? "Null" : admin802_1xProfile.SSID));
Console.WriteLine("Is Primary: {0}", admin802_1xProfile.IsPrimary);
Console.WriteLine("Authentication Method: {0}", admin802_1xProfile.AuthenticationMethod);
Console.WriteLine("Encryption Method: {0}", admin802_1xProfile.EncryptionMethod);
Console.WriteLine("Authentication Protocol: {0}", admin802_1xProfile.AuthenticationProtocol);
if (!string.IsNullOrEmpty(admin802_1xProfile.CACertificate.ServerCertificateName))
{
Console.WriteLine("Server Sertificate {0}: {1}",
(admin802_1xProfile.CACertificate.ServerCertificateNameComparison == ServerCertificateNamesComparison.DomainSuffix ? "Domain" : "Name"),
admin802_1xProfile.CACertificate.ServerCertificateName);
}
Console.WriteLine("Roaming Identify: {0}", (string.IsNullOrEmpty(admin802_1xProfile.RoamingIdentity)?"Null":admin802_1xProfile.RoamingIdentity));
if (!string.IsNullOrEmpty(admin802_1xProfile.UserCredential.UserName))
{
Console.WriteLine("Intel AMT User Name: {0}",
(string.IsNullOrEmpty(admin802_1xProfile.UserCredential.UserName) ? "Null" : admin802_1xProfile.UserCredential.UserName));
Console.WriteLine("Intel AMT Domain: {0}",
(string.IsNullOrEmpty(admin802_1xProfile.UserCredential.Domain) ? "Null" : admin802_1xProfile.UserCredential.Domain));
}
}
private static byte[] ConvertStringToByteArray(string s)
{
char[] cArr = s.ToCharArray();
byte[] bArr = new byte[cArr.Length];
for (int i = 0; i < cArr.Length; i++)
{
bArr[i] = Convert.ToByte(cArr[i]);
}
return bArr;
}
#endregion
}
}