diff --git a/GemCard/CardNative.cs b/GemCard/CardNative.cs index fc7d02122..3439ebb5a 100644 --- a/GemCard/CardNative.cs +++ b/GemCard/CardNative.cs @@ -199,7 +199,8 @@ namespace GemCard { Disconnect(DISCONNECT.Unpower); - ReleaseContext(); + try { ReleaseContext(); } + catch { } } #region ICard Members @@ -215,66 +216,73 @@ namespace GemCard /// A string array of the readers public override string[] ListReaders() { - EstablishContext(SCOPE.User); + try + { + EstablishContext(SCOPE.User); - string[] sListReaders = null; - UInt32 pchReaders = 0; - IntPtr szListReaders = IntPtr.Zero; + string[] sListReaders = null; + UInt32 pchReaders = 0; + IntPtr szListReaders = IntPtr.Zero; - m_nLastError = SCardListReaders(m_hContext, null, szListReaders, out pchReaders); - if (m_nLastError == 0) - { - szListReaders = Marshal.AllocHGlobal((int) pchReaders); - m_nLastError = SCardListReaders(m_hContext, null, szListReaders, out pchReaders); - if (m_nLastError == 0) - { - char[] caReadersData = new char[pchReaders]; - int nbReaders = 0; - for (int nI = 0; nI < pchReaders; nI++) - { - caReadersData[nI] = (char) Marshal.ReadByte(szListReaders, nI); + m_nLastError = SCardListReaders(m_hContext, null, szListReaders, out pchReaders); + if (m_nLastError == 0) + { + szListReaders = Marshal.AllocHGlobal((int)pchReaders); + m_nLastError = SCardListReaders(m_hContext, null, szListReaders, out pchReaders); + if (m_nLastError == 0) + { + char[] caReadersData = new char[pchReaders]; + int nbReaders = 0; + for (int nI = 0; nI < pchReaders; nI++) + { + caReadersData[nI] = (char)Marshal.ReadByte(szListReaders, nI); - if (caReadersData[nI] == 0) - nbReaders++; - } + if (caReadersData[nI] == 0) + nbReaders++; + } - // Remove last 0 - --nbReaders; + // Remove last 0 + --nbReaders; - if (nbReaders != 0) - { - sListReaders = new string[nbReaders]; - char[] caReader = new char[pchReaders]; - int nIdx = 0; - int nIdy = 0; - int nIdz = 0; - // Get the nJ string from the multi-string + if (nbReaders != 0) + { + sListReaders = new string[nbReaders]; + char[] caReader = new char[pchReaders]; + int nIdx = 0; + int nIdy = 0; + int nIdz = 0; + // Get the nJ string from the multi-string - while(nIdx < pchReaders - 1) - { - caReader[nIdy] = caReadersData[nIdx]; - if (caReader[nIdy] == 0) - { - sListReaders[nIdz] = new string(caReader, 0, nIdy); - ++nIdz; - nIdy = 0; - caReader = new char[pchReaders]; - } - else - ++nIdy; + while (nIdx < pchReaders - 1) + { + caReader[nIdy] = caReadersData[nIdx]; + if (caReader[nIdy] == 0) + { + sListReaders[nIdz] = new string(caReader, 0, nIdy); + ++nIdz; + nIdy = 0; + caReader = new char[pchReaders]; + } + else + ++nIdy; - ++nIdx; - } - } + ++nIdx; + } + } - } + } - Marshal.FreeHGlobal(szListReaders); - } + Marshal.FreeHGlobal(szListReaders); + } - ReleaseContext(); + ReleaseContext(); - return sListReaders; + return sListReaders; + } + catch + { + return new string[0]; + } } /// diff --git a/SharedDatabase/Forms/LoginDlg.cs b/SharedDatabase/Forms/LoginDlg.cs index 4bf12c391..24ec70a1f 100644 --- a/SharedDatabase/Forms/LoginDlg.cs +++ b/SharedDatabase/Forms/LoginDlg.cs @@ -4,6 +4,7 @@ using System; using System.Drawing; using System.Windows.Forms; +using log4net; using Common; using GemCard; using SharedDatabase.Entities; @@ -17,6 +18,8 @@ namespace SharedDatabase.Forms /// public partial class LoginDlg : Form { + private static readonly ILog log = LogManager.GetLogger(typeof(LoginDlg)); + /// Public readonly public string UserName { get { return user; } } @@ -111,10 +114,16 @@ namespace SharedDatabase.Forms string[] cardReaders = card.ListReaders(); if (cardReaders != null) { + foreach (var crd in cardReaders) + { + log.WarnFormat("SMART card reader found: {0}", crd); + } + foreach (var crd in cardReaders) { if (crd.Contains("NFC")) { + log.ErrorFormat("SMART card reader selected: {0}", crd); smartCardReader = crd; /// NFC smart card reader detected break; } diff --git a/TBF/Properties/AssemblyInfo.cs b/TBF/Properties/AssemblyInfo.cs index 94a764e55..01aa0a8c6 100644 --- a/TBF/Properties/AssemblyInfo.cs +++ b/TBF/Properties/AssemblyInfo.cs @@ -29,5 +29,5 @@ using System.Runtime.InteropServices; // Build Number // Revision // -[assembly: AssemblyVersion("3.1.1801.0")] -[assembly: AssemblyFileVersion("3.1.1801.0")] +[assembly: AssemblyVersion("3.1.1805.0")] +[assembly: AssemblyFileVersion("3.1.1805.0")] diff --git a/TBF/UI/Shared/LoginDlgWithBenchSelection.cs b/TBF/UI/Shared/LoginDlgWithBenchSelection.cs index 6000cf5ad..9dbfd9f00 100644 --- a/TBF/UI/Shared/LoginDlgWithBenchSelection.cs +++ b/TBF/UI/Shared/LoginDlgWithBenchSelection.cs @@ -4,6 +4,7 @@ using System; using System.Drawing; using System.Windows.Forms; +using log4net; using Common; using GemCard; using TBF.Resources; @@ -17,6 +18,8 @@ namespace TBF.UI.Shared /// public partial class LoginDlgWithBenchSelection : Form { + private static readonly ILog log = LogManager.GetLogger(typeof(LoginDlgWithBenchSelection)); + public const string UseTheTagPassword = "UseTheTag0293578"; /// Private fields @@ -108,10 +111,16 @@ namespace TBF.UI.Shared string[] cardReaders = card.ListReaders(); if (cardReaders != null) { + foreach (var crd in cardReaders) + { + log.WarnFormat("SMART card reader found: {0}", crd); + } + foreach (var crd in cardReaders) { if (crd.Contains("NFC")) { + log.ErrorFormat("SMART card reader selected: {0}", crd); smartCardReader = crd; /// NFC smart card reader detected break; } @@ -241,14 +250,22 @@ namespace TBF.UI.Shared void OnCardInserted(object sender, CardInsertedEventArgs args) { - BackColor = Color.Green; - card.Connect(smartCardReader, SHARE.Shared, PROTOCOL.T0orT1); + string tag = string.Empty; + try + { + BackColor = Color.Green; + card.Connect(smartCardReader, SHARE.Shared, PROTOCOL.T0orT1); - /// Read the serial number of the card - APDUResponse response = card.Transmit(new APDUCommand(0xFF, 0xCA, 0x00, 0x00, null, 7)); - string tag = response.ToString(); + /// Read the serial number of the card + APDUResponse response = card.Transmit(new APDUCommand(0xFF, 0xCA, 0x00, 0x00, null, 7)); + tag = response.ToString(); - card.Disconnect(DISCONNECT.Leave); + card.Disconnect(DISCONNECT.Leave); + } + catch + { + tag = string.Empty; + } if (testBenchComboBox.SelectedItem != null) { @@ -281,7 +298,8 @@ namespace TBF.UI.Shared { if (!string.IsNullOrEmpty(smartCardReader)) { - card.StopCardEvents(); + try { card.StopCardEvents(); } + catch { } } } } diff --git a/Users/Forms/EditSelectedUser.cs b/Users/Forms/EditSelectedUser.cs index a7a21c744..29f27e045 100644 --- a/Users/Forms/EditSelectedUser.cs +++ b/Users/Forms/EditSelectedUser.cs @@ -307,14 +307,22 @@ namespace Users.Forms void OnCardInserted(object sender, CardInsertedEventArgs args) { - BackColor = Color.Green; - card.Connect(smartCardReader, SHARE.Shared, PROTOCOL.T0orT1); + string tag = string.Empty; + try + { + BackColor = Color.Green; + card.Connect(smartCardReader, SHARE.Shared, PROTOCOL.T0orT1); - /// Read the serial number of the card - APDUResponse response = card.Transmit(new APDUCommand(0xFF, 0xCA, 0x00, 0x00, null, 7)); - txtTag.Text = response.ToString(); + /// Read the serial number of the card + APDUResponse response = card.Transmit(new APDUCommand(0xFF, 0xCA, 0x00, 0x00, null, 7)); + txtTag.Text = response.ToString(); - card.Disconnect(DISCONNECT.Leave); + card.Disconnect(DISCONNECT.Leave); + } + catch + { + txtTag.Text = string.Empty; + } } @@ -327,7 +335,8 @@ namespace Users.Forms { if (!string.IsNullOrEmpty(smartCardReader)) { - card.StopCardEvents(); + try { card.StopCardEvents(); } + catch { } } } } diff --git a/Users/Forms/LoginDlg.cs b/Users/Forms/LoginDlg.cs index bcde73f07..a3104e2b5 100644 --- a/Users/Forms/LoginDlg.cs +++ b/Users/Forms/LoginDlg.cs @@ -278,14 +278,23 @@ namespace Users.Forms void OnCardInserted(object sender, CardInsertedEventArgs args) { - BackColor = Color.Green; - card.Connect(smartCardReader, SHARE.Shared, PROTOCOL.T0orT1); + string tag = string.Empty; - /// Read the serial number of the card - APDUResponse response = card.Transmit(new APDUCommand(0xFF, 0xCA, 0x00, 0x00, null, 7)); - string tag = response.ToString(); + try + { + BackColor = Color.Green; + card.Connect(smartCardReader, SHARE.Shared, PROTOCOL.T0orT1); - card.Disconnect(DISCONNECT.Leave); + /// Read the serial number of the card + APDUResponse response = card.Transmit(new APDUCommand(0xFF, 0xCA, 0x00, 0x00, null, 7)); + tag = response.ToString(); + + card.Disconnect(DISCONNECT.Leave); + } + catch + { + tag = string.Empty; + } DBSettings[] dbs = new DBSettings[] { GlobalData.RemoteUsersDB, GlobalData.LocalUsersDB }; bool authorized = false; @@ -335,7 +344,8 @@ namespace Users.Forms { if (!string.IsNullOrEmpty(smartCardReader)) { - card.StopCardEvents(); + try { card.StopCardEvents(); } + catch { } } } }