Bug fix : 6x try / catch to resolve crashes caused by GemCard, etc., ver. 3.1.1805
This commit is contained in:
parent
44fc7b92fd
commit
335fce3e39
@ -199,7 +199,8 @@ namespace GemCard
|
|||||||
{
|
{
|
||||||
Disconnect(DISCONNECT.Unpower);
|
Disconnect(DISCONNECT.Unpower);
|
||||||
|
|
||||||
ReleaseContext();
|
try { ReleaseContext(); }
|
||||||
|
catch { }
|
||||||
}
|
}
|
||||||
|
|
||||||
#region ICard Members
|
#region ICard Members
|
||||||
@ -215,66 +216,73 @@ namespace GemCard
|
|||||||
/// <returns>A string array of the readers</returns>
|
/// <returns>A string array of the readers</returns>
|
||||||
public override string[] ListReaders()
|
public override string[] ListReaders()
|
||||||
{
|
{
|
||||||
EstablishContext(SCOPE.User);
|
try
|
||||||
|
{
|
||||||
|
EstablishContext(SCOPE.User);
|
||||||
|
|
||||||
string[] sListReaders = null;
|
string[] sListReaders = null;
|
||||||
UInt32 pchReaders = 0;
|
UInt32 pchReaders = 0;
|
||||||
IntPtr szListReaders = IntPtr.Zero;
|
IntPtr szListReaders = IntPtr.Zero;
|
||||||
|
|
||||||
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)
|
||||||
{
|
{
|
||||||
char[] caReadersData = new char[pchReaders];
|
char[] caReadersData = new char[pchReaders];
|
||||||
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++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove last 0
|
// Remove last 0
|
||||||
--nbReaders;
|
--nbReaders;
|
||||||
|
|
||||||
if (nbReaders != 0)
|
if (nbReaders != 0)
|
||||||
{
|
{
|
||||||
sListReaders = new string[nbReaders];
|
sListReaders = new string[nbReaders];
|
||||||
char[] caReader = new char[pchReaders];
|
char[] caReader = new char[pchReaders];
|
||||||
int nIdx = 0;
|
int nIdx = 0;
|
||||||
int nIdy = 0;
|
int nIdy = 0;
|
||||||
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)
|
||||||
{
|
{
|
||||||
sListReaders[nIdz] = new string(caReader, 0, nIdy);
|
sListReaders[nIdz] = new string(caReader, 0, nIdy);
|
||||||
++nIdz;
|
++nIdz;
|
||||||
nIdy = 0;
|
nIdy = 0;
|
||||||
caReader = new char[pchReaders];
|
caReader = new char[pchReaders];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
++nIdy;
|
++nIdy;
|
||||||
|
|
||||||
++nIdx;
|
++nIdx;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Marshal.FreeHGlobal(szListReaders);
|
Marshal.FreeHGlobal(szListReaders);
|
||||||
}
|
}
|
||||||
|
|
||||||
ReleaseContext();
|
ReleaseContext();
|
||||||
|
|
||||||
return sListReaders;
|
return sListReaders;
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
return new string[0];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@ -4,6 +4,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
|
using log4net;
|
||||||
using Common;
|
using Common;
|
||||||
using GemCard;
|
using GemCard;
|
||||||
using SharedDatabase.Entities;
|
using SharedDatabase.Entities;
|
||||||
@ -17,6 +18,8 @@ namespace SharedDatabase.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 SharedDatabase.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;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -29,5 +29,5 @@ using System.Runtime.InteropServices;
|
|||||||
// Build Number
|
// Build Number
|
||||||
// Revision
|
// Revision
|
||||||
//
|
//
|
||||||
[assembly: AssemblyVersion("3.1.1801.0")]
|
[assembly: AssemblyVersion("3.1.1805.0")]
|
||||||
[assembly: AssemblyFileVersion("3.1.1801.0")]
|
[assembly: AssemblyFileVersion("3.1.1805.0")]
|
||||||
|
|||||||
@ -4,6 +4,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
|
using log4net;
|
||||||
using Common;
|
using Common;
|
||||||
using GemCard;
|
using GemCard;
|
||||||
using TBF.Resources;
|
using TBF.Resources;
|
||||||
@ -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;
|
||||||
}
|
}
|
||||||
@ -241,14 +250,22 @@ namespace TBF.UI.Shared
|
|||||||
|
|
||||||
void OnCardInserted(object sender, CardInsertedEventArgs args)
|
void OnCardInserted(object sender, CardInsertedEventArgs args)
|
||||||
{
|
{
|
||||||
BackColor = Color.Green;
|
string tag = string.Empty;
|
||||||
card.Connect(smartCardReader, SHARE.Shared, PROTOCOL.T0orT1);
|
try
|
||||||
|
{
|
||||||
|
BackColor = Color.Green;
|
||||||
|
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 { }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -307,14 +307,22 @@ namespace Users.Forms
|
|||||||
|
|
||||||
void OnCardInserted(object sender, CardInsertedEventArgs args)
|
void OnCardInserted(object sender, CardInsertedEventArgs args)
|
||||||
{
|
{
|
||||||
BackColor = Color.Green;
|
string tag = string.Empty;
|
||||||
card.Connect(smartCardReader, SHARE.Shared, PROTOCOL.T0orT1);
|
try
|
||||||
|
{
|
||||||
|
BackColor = Color.Green;
|
||||||
|
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));
|
||||||
txtTag.Text = response.ToString();
|
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))
|
if (!string.IsNullOrEmpty(smartCardReader))
|
||||||
{
|
{
|
||||||
card.StopCardEvents();
|
try { card.StopCardEvents(); }
|
||||||
|
catch { }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -278,14 +278,23 @@ namespace Users.Forms
|
|||||||
|
|
||||||
void OnCardInserted(object sender, CardInsertedEventArgs args)
|
void OnCardInserted(object sender, CardInsertedEventArgs args)
|
||||||
{
|
{
|
||||||
BackColor = Color.Green;
|
string tag = string.Empty;
|
||||||
card.Connect(smartCardReader, SHARE.Shared, PROTOCOL.T0orT1);
|
|
||||||
|
|
||||||
/// Read the serial number of the card
|
try
|
||||||
APDUResponse response = card.Transmit(new APDUCommand(0xFF, 0xCA, 0x00, 0x00, null, 7));
|
{
|
||||||
string tag = response.ToString();
|
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 };
|
DBSettings[] dbs = new DBSettings[] { GlobalData.RemoteUsersDB, GlobalData.LocalUsersDB };
|
||||||
bool authorized = false;
|
bool authorized = false;
|
||||||
@ -335,7 +344,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