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);
|
Disconnect(DISCONNECT.Unpower);
|
||||||
|
|
||||||
ReleaseContext();
|
try { ReleaseContext(); }
|
||||||
|
catch { }
|
||||||
}
|
}
|
||||||
|
|
||||||
#region ICard Members
|
#region ICard Members
|
||||||
@ -214,6 +215,8 @@ namespace GemCard
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns>A string array of the readers</returns>
|
/// <returns>A string array of the readers</returns>
|
||||||
public override string[] ListReaders()
|
public override string[] ListReaders()
|
||||||
|
{
|
||||||
|
try
|
||||||
{
|
{
|
||||||
EstablishContext(SCOPE.User);
|
EstablishContext(SCOPE.User);
|
||||||
|
|
||||||
@ -224,7 +227,7 @@ namespace GemCard
|
|||||||
m_nLastError = SCardListReaders(m_hContext, null, szListReaders, out pchReaders);
|
m_nLastError = SCardListReaders(m_hContext, null, szListReaders, out pchReaders);
|
||||||
if (m_nLastError == 0)
|
if (m_nLastError == 0)
|
||||||
{
|
{
|
||||||
szListReaders = Marshal.AllocHGlobal((int) pchReaders);
|
szListReaders = Marshal.AllocHGlobal((int)pchReaders);
|
||||||
m_nLastError = SCardListReaders(m_hContext, null, szListReaders, out pchReaders);
|
m_nLastError = SCardListReaders(m_hContext, null, szListReaders, out pchReaders);
|
||||||
if (m_nLastError == 0)
|
if (m_nLastError == 0)
|
||||||
{
|
{
|
||||||
@ -232,7 +235,7 @@ namespace GemCard
|
|||||||
int nbReaders = 0;
|
int nbReaders = 0;
|
||||||
for (int nI = 0; nI < pchReaders; nI++)
|
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)
|
if (caReadersData[nI] == 0)
|
||||||
nbReaders++;
|
nbReaders++;
|
||||||
@ -250,7 +253,7 @@ namespace GemCard
|
|||||||
int nIdz = 0;
|
int nIdz = 0;
|
||||||
// Get the nJ string from the multi-string
|
// Get the nJ string from the multi-string
|
||||||
|
|
||||||
while(nIdx < pchReaders - 1)
|
while (nIdx < pchReaders - 1)
|
||||||
{
|
{
|
||||||
caReader[nIdy] = caReadersData[nIdx];
|
caReader[nIdy] = caReadersData[nIdx];
|
||||||
if (caReader[nIdy] == 0)
|
if (caReader[nIdy] == 0)
|
||||||
@ -276,6 +279,11 @@ namespace GemCard
|
|||||||
|
|
||||||
return sListReaders;
|
return sListReaders;
|
||||||
}
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
return new string[0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Wraps the PCSC function
|
/// Wraps the PCSC function
|
||||||
|
|||||||
@ -3,6 +3,7 @@
|
|||||||
///
|
///
|
||||||
using System;
|
using System;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
|
using log4net;
|
||||||
using TBF.Resources;
|
using TBF.Resources;
|
||||||
using GemCard;
|
using GemCard;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
@ -17,6 +18,8 @@ namespace TBF.UI.Shared
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public partial class LoginDlgWithBenchSelection : Form
|
public partial class LoginDlgWithBenchSelection : Form
|
||||||
{
|
{
|
||||||
|
private static readonly ILog log = LogManager.GetLogger(typeof(LoginDlgWithBenchSelection));
|
||||||
|
|
||||||
public const string UseTheTagPassword = "UseTheTag0293578";
|
public const string UseTheTagPassword = "UseTheTag0293578";
|
||||||
|
|
||||||
/// Private fields
|
/// Private fields
|
||||||
@ -108,10 +111,16 @@ namespace TBF.UI.Shared
|
|||||||
string[] cardReaders = card.ListReaders();
|
string[] cardReaders = card.ListReaders();
|
||||||
if (cardReaders != null)
|
if (cardReaders != null)
|
||||||
{
|
{
|
||||||
|
foreach (var crd in cardReaders)
|
||||||
|
{
|
||||||
|
log.WarnFormat("SMART card reader found: {0}", crd);
|
||||||
|
}
|
||||||
|
|
||||||
foreach (var crd in cardReaders)
|
foreach (var crd in cardReaders)
|
||||||
{
|
{
|
||||||
if (crd.Contains("NFC"))
|
if (crd.Contains("NFC"))
|
||||||
{
|
{
|
||||||
|
log.ErrorFormat("SMART card reader selected: {0}", crd);
|
||||||
smartCardReader = crd; /// NFC smart card reader detected
|
smartCardReader = crd; /// NFC smart card reader detected
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -240,15 +249,23 @@ namespace TBF.UI.Shared
|
|||||||
|
|
||||||
|
|
||||||
void OnCardInserted(object sender, CardInsertedEventArgs args)
|
void OnCardInserted(object sender, CardInsertedEventArgs args)
|
||||||
|
{
|
||||||
|
string tag = string.Empty;
|
||||||
|
try
|
||||||
{
|
{
|
||||||
BackColor = Color.Green;
|
BackColor = Color.Green;
|
||||||
card.Connect(smartCardReader, SHARE.Shared, PROTOCOL.T0orT1);
|
card.Connect(smartCardReader, SHARE.Shared, PROTOCOL.T0orT1);
|
||||||
|
|
||||||
/// Read the serial number of the card
|
/// Read the serial number of the card
|
||||||
APDUResponse response = card.Transmit(new APDUCommand(0xFF, 0xCA, 0x00, 0x00, null, 7));
|
APDUResponse response = card.Transmit(new APDUCommand(0xFF, 0xCA, 0x00, 0x00, null, 7));
|
||||||
string tag = response.ToString();
|
tag = response.ToString();
|
||||||
|
|
||||||
card.Disconnect(DISCONNECT.Leave);
|
card.Disconnect(DISCONNECT.Leave);
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
tag = string.Empty;
|
||||||
|
}
|
||||||
|
|
||||||
if (testBenchComboBox.SelectedItem != null)
|
if (testBenchComboBox.SelectedItem != null)
|
||||||
{
|
{
|
||||||
@ -281,7 +298,8 @@ namespace TBF.UI.Shared
|
|||||||
{
|
{
|
||||||
if (!string.IsNullOrEmpty(smartCardReader))
|
if (!string.IsNullOrEmpty(smartCardReader))
|
||||||
{
|
{
|
||||||
card.StopCardEvents();
|
try { card.StopCardEvents(); }
|
||||||
|
catch { }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -306,6 +306,9 @@ namespace Users.Forms
|
|||||||
|
|
||||||
|
|
||||||
void OnCardInserted(object sender, CardInsertedEventArgs args)
|
void OnCardInserted(object sender, CardInsertedEventArgs args)
|
||||||
|
{
|
||||||
|
string tag = string.Empty;
|
||||||
|
try
|
||||||
{
|
{
|
||||||
BackColor = Color.Green;
|
BackColor = Color.Green;
|
||||||
card.Connect(smartCardReader, SHARE.Shared, PROTOCOL.T0orT1);
|
card.Connect(smartCardReader, SHARE.Shared, PROTOCOL.T0orT1);
|
||||||
@ -316,6 +319,11 @@ namespace Users.Forms
|
|||||||
|
|
||||||
card.Disconnect(DISCONNECT.Leave);
|
card.Disconnect(DISCONNECT.Leave);
|
||||||
}
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
txtTag.Text = string.Empty;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void OnCardRemoved(object sender, CardRemovedEventArgs args)
|
void OnCardRemoved(object sender, CardRemovedEventArgs args)
|
||||||
@ -327,7 +335,8 @@ namespace Users.Forms
|
|||||||
{
|
{
|
||||||
if (!string.IsNullOrEmpty(smartCardReader))
|
if (!string.IsNullOrEmpty(smartCardReader))
|
||||||
{
|
{
|
||||||
card.StopCardEvents();
|
try { card.StopCardEvents(); }
|
||||||
|
catch { }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,6 +3,7 @@
|
|||||||
///
|
///
|
||||||
using System;
|
using System;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
|
using log4net;
|
||||||
using Common;
|
using Common;
|
||||||
using GemCard;
|
using GemCard;
|
||||||
using Users.Entities;
|
using Users.Entities;
|
||||||
@ -17,6 +18,8 @@ namespace Users.Forms
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public partial class LoginDlg : Form
|
public partial class LoginDlg : Form
|
||||||
{
|
{
|
||||||
|
private static readonly ILog log = LogManager.GetLogger(typeof(LoginDlg));
|
||||||
|
|
||||||
/// Public readonly
|
/// Public readonly
|
||||||
public string UserName { get { return user; } }
|
public string UserName { get { return user; } }
|
||||||
|
|
||||||
@ -111,10 +114,16 @@ namespace Users.Forms
|
|||||||
string[] cardReaders = card.ListReaders();
|
string[] cardReaders = card.ListReaders();
|
||||||
if (cardReaders != null)
|
if (cardReaders != null)
|
||||||
{
|
{
|
||||||
|
foreach (var crd in cardReaders)
|
||||||
|
{
|
||||||
|
log.WarnFormat("SMART card reader found: {0}", crd);
|
||||||
|
}
|
||||||
|
|
||||||
foreach (var crd in cardReaders)
|
foreach (var crd in cardReaders)
|
||||||
{
|
{
|
||||||
if (crd.Contains("NFC"))
|
if (crd.Contains("NFC"))
|
||||||
{
|
{
|
||||||
|
log.ErrorFormat("SMART card reader selected: {0}", crd);
|
||||||
smartCardReader = crd; /// NFC smart card reader detected
|
smartCardReader = crd; /// NFC smart card reader detected
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -278,15 +287,24 @@ namespace Users.Forms
|
|||||||
|
|
||||||
|
|
||||||
void OnCardInserted(object sender, CardInsertedEventArgs args)
|
void OnCardInserted(object sender, CardInsertedEventArgs args)
|
||||||
|
{
|
||||||
|
string tag = string.Empty;
|
||||||
|
|
||||||
|
try
|
||||||
{
|
{
|
||||||
BackColor = Color.Green;
|
BackColor = Color.Green;
|
||||||
card.Connect(smartCardReader, SHARE.Shared, PROTOCOL.T0orT1);
|
card.Connect(smartCardReader, SHARE.Shared, PROTOCOL.T0orT1);
|
||||||
|
|
||||||
/// Read the serial number of the card
|
/// Read the serial number of the card
|
||||||
APDUResponse response = card.Transmit(new APDUCommand(0xFF, 0xCA, 0x00, 0x00, null, 7));
|
APDUResponse response = card.Transmit(new APDUCommand(0xFF, 0xCA, 0x00, 0x00, null, 7));
|
||||||
string tag = response.ToString();
|
tag = response.ToString();
|
||||||
|
|
||||||
card.Disconnect(DISCONNECT.Leave);
|
card.Disconnect(DISCONNECT.Leave);
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
tag = string.Empty;
|
||||||
|
}
|
||||||
|
|
||||||
DBSettings[] dbs = new DBSettings[] { GlobalData.RemoteUsersDB, GlobalData.LocalUsersDB };
|
DBSettings[] dbs = new DBSettings[] { GlobalData.RemoteUsersDB, GlobalData.LocalUsersDB };
|
||||||
bool authorized = false;
|
bool authorized = false;
|
||||||
@ -336,7 +354,8 @@ namespace Users.Forms
|
|||||||
{
|
{
|
||||||
if (!string.IsNullOrEmpty(smartCardReader))
|
if (!string.IsNullOrEmpty(smartCardReader))
|
||||||
{
|
{
|
||||||
card.StopCardEvents();
|
try { card.StopCardEvents(); }
|
||||||
|
catch { }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user