Bug fix : 6x try / catch to resolve crashes caused by GemCard, etc.
This commit is contained in:
parent
ce74b0a3bb
commit
284feb73dc
@ -199,7 +199,8 @@ namespace GemCard
|
||||
{
|
||||
Disconnect(DISCONNECT.Unpower);
|
||||
|
||||
ReleaseContext();
|
||||
try { ReleaseContext(); }
|
||||
catch { }
|
||||
}
|
||||
|
||||
#region ICard Members
|
||||
@ -214,6 +215,8 @@ namespace GemCard
|
||||
/// </summary>
|
||||
/// <returns>A string array of the readers</returns>
|
||||
public override string[] ListReaders()
|
||||
{
|
||||
try
|
||||
{
|
||||
EstablishContext(SCOPE.User);
|
||||
|
||||
@ -224,7 +227,7 @@ namespace GemCard
|
||||
m_nLastError = SCardListReaders(m_hContext, null, szListReaders, out pchReaders);
|
||||
if (m_nLastError == 0)
|
||||
{
|
||||
szListReaders = Marshal.AllocHGlobal((int) pchReaders);
|
||||
szListReaders = Marshal.AllocHGlobal((int)pchReaders);
|
||||
m_nLastError = SCardListReaders(m_hContext, null, szListReaders, out pchReaders);
|
||||
if (m_nLastError == 0)
|
||||
{
|
||||
@ -232,7 +235,7 @@ namespace GemCard
|
||||
int nbReaders = 0;
|
||||
for (int nI = 0; nI < pchReaders; nI++)
|
||||
{
|
||||
caReadersData[nI] = (char) Marshal.ReadByte(szListReaders, nI);
|
||||
caReadersData[nI] = (char)Marshal.ReadByte(szListReaders, nI);
|
||||
|
||||
if (caReadersData[nI] == 0)
|
||||
nbReaders++;
|
||||
@ -250,7 +253,7 @@ namespace GemCard
|
||||
int nIdz = 0;
|
||||
// Get the nJ string from the multi-string
|
||||
|
||||
while(nIdx < pchReaders - 1)
|
||||
while (nIdx < pchReaders - 1)
|
||||
{
|
||||
caReader[nIdy] = caReadersData[nIdx];
|
||||
if (caReader[nIdy] == 0)
|
||||
@ -276,6 +279,11 @@ namespace GemCard
|
||||
|
||||
return sListReaders;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return new string[0];
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Wraps the PCSC function
|
||||
|
||||
@ -3,6 +3,7 @@
|
||||
///
|
||||
using System;
|
||||
using System.Windows.Forms;
|
||||
using log4net;
|
||||
using TBF.Resources;
|
||||
using GemCard;
|
||||
using System.Drawing;
|
||||
@ -17,6 +18,8 @@ namespace TBF.UI.Shared
|
||||
/// </summary>
|
||||
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;
|
||||
}
|
||||
@ -240,15 +249,23 @@ namespace TBF.UI.Shared
|
||||
|
||||
|
||||
void OnCardInserted(object sender, CardInsertedEventArgs args)
|
||||
{
|
||||
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();
|
||||
tag = response.ToString();
|
||||
|
||||
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 { }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -306,6 +306,9 @@ namespace Users.Forms
|
||||
|
||||
|
||||
void OnCardInserted(object sender, CardInsertedEventArgs args)
|
||||
{
|
||||
string tag = string.Empty;
|
||||
try
|
||||
{
|
||||
BackColor = Color.Green;
|
||||
card.Connect(smartCardReader, SHARE.Shared, PROTOCOL.T0orT1);
|
||||
@ -316,6 +319,11 @@ namespace Users.Forms
|
||||
|
||||
card.Disconnect(DISCONNECT.Leave);
|
||||
}
|
||||
catch
|
||||
{
|
||||
txtTag.Text = string.Empty;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void OnCardRemoved(object sender, CardRemovedEventArgs args)
|
||||
@ -327,7 +335,8 @@ namespace Users.Forms
|
||||
{
|
||||
if (!string.IsNullOrEmpty(smartCardReader))
|
||||
{
|
||||
card.StopCardEvents();
|
||||
try { card.StopCardEvents(); }
|
||||
catch { }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -3,6 +3,7 @@
|
||||
///
|
||||
using System;
|
||||
using System.Windows.Forms;
|
||||
using log4net;
|
||||
using Common;
|
||||
using GemCard;
|
||||
using Users.Entities;
|
||||
@ -17,6 +18,8 @@ namespace Users.Forms
|
||||
/// </summary>
|
||||
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 Users.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;
|
||||
}
|
||||
@ -278,15 +287,24 @@ namespace Users.Forms
|
||||
|
||||
|
||||
void OnCardInserted(object sender, CardInsertedEventArgs args)
|
||||
{
|
||||
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();
|
||||
tag = response.ToString();
|
||||
|
||||
card.Disconnect(DISCONNECT.Leave);
|
||||
}
|
||||
catch
|
||||
{
|
||||
tag = string.Empty;
|
||||
}
|
||||
|
||||
DBSettings[] dbs = new DBSettings[] { GlobalData.RemoteUsersDB, GlobalData.LocalUsersDB };
|
||||
bool authorized = false;
|
||||
@ -336,7 +354,8 @@ namespace Users.Forms
|
||||
{
|
||||
if (!string.IsNullOrEmpty(smartCardReader))
|
||||
{
|
||||
card.StopCardEvents();
|
||||
try { card.StopCardEvents(); }
|
||||
catch { }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user