source: trunk/CrypPlugins/SmartCard/SmartCardSettings.cs @ 2280

Last change on this file since 2280 was 186, checked in by Thomas Schmid, 13 years ago
  • added new SmartCard plugins provided by Mr. Gronau
File size: 4.0 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using Cryptool.PluginBase;
6using System.ComponentModel;
7using Cryptool.PluginBase.Miscellaneous;
8using System.Collections.ObjectModel;
9
10namespace SmartCard
11{
12  public class SmartCardSettings : ISettings
13  {
14    private ObservableCollection<string> collection = new ObservableCollection<string>();
15
16    public static string VirtualReader = "Virtual Cardreader";
17
18    #region ISettings Members
19
20    private bool hasChanges = false;
21    public bool HasChanges
22    {
23      get { return hasChanges; }
24      set { hasChanges = value; }
25    }
26
27    #endregion
28
29    public event GuiLogNotificationEventHandler OnGuiLogNotificationOccured;
30    private void GuiLogMessage(string message, NotificationLevel logLevel)
31    {
32      EventsHelper.GuiLogMessage(OnGuiLogNotificationOccured, null, new GuiLogEventArgs(message, null, logLevel));
33    }
34
35
36    private int cardReader = 0; // 0=default reader
37
38    public SmartCardSettings()
39    {
40        this.SearchCardReaders();
41    }
42
43    [TaskPane("SmartCard reader", "Select your reader.", "", 0, false, DisplayLevel.Beginner, ControlType.DynamicComboBox, new string[] { "Collection" })]
44    public int CardReader
45    {
46      get { return this.cardReader; }
47      set
48      {
49        if (((int)value) != cardReader) hasChanges = true;
50        this.cardReader = (int)value;
51        OnPropertyChanged("CardReader");
52      }
53    }
54
55    [TaskPane("Search Card Readers", "Search for readers connected to system.", "", 1, false, DisplayLevel.Beginner, ControlType.Button)]
56    public void SearchCardReaders()
57    {
58        int hContext = pcscWrapper.EstablishContext();
59        String[] sReaders = pcscWrapper.ListReaders(hContext);
60
61        collection.Clear();
62
63        collection.Add(VirtualReader);
64
65        if (sReaders != null)
66        {
67            foreach (String sReader in sReaders)
68            {
69                pcscWrapper.READERSTATE rState = pcscWrapper.getReaderState(hContext, sReader);
70
71                GuiLogMessage("Reader found : " + sReader, NotificationLevel.Info);
72
73                // Debug Messages
74                GuiLogMessage("Reader Status: 0x" + System.Convert.ToString(rState.dwEventState, 16), NotificationLevel.Debug);
75                if ((rState.dwEventState & (UInt32)pcscWrapper.CardState.PRESENT) == 0)
76                {
77                    GuiLogMessage("Reader is empty.", NotificationLevel.Debug);
78                }
79                else
80                {
81                    // ATR aufbereiten
82                    StringBuilder ATRHex = new StringBuilder();
83                    for (int i = 0; i < rState.cbAtr; i++)
84                    {
85                        ATRHex.Append(" 0x" + rState.rgbAtr[i].ToString("X2"));
86                    }
87                    GuiLogMessage("smartcard's ATR:" + ATRHex.ToString(), NotificationLevel.Debug);
88                    if ((rState.dwEventState & (UInt32)pcscWrapper.CardState.EXCLUSIVE) != 0)
89                    {
90                        GuiLogMessage("Reader is exclusively used by another application.", NotificationLevel.Debug);
91                    }
92                }
93                collection.Add(sReader);
94            }
95        }
96        else
97        {
98            GuiLogMessage("No reader found.", NotificationLevel.Info);
99        }
100
101      pcscWrapper.ReleaseContext(hContext);
102
103      Collection = collection;
104      CardReader = 0;
105    }
106
107    public ObservableCollection<string> Collection
108    {
109      get { return collection; }
110      set 
111      {
112        if (value != collection)
113        {
114          collection = value;
115        }
116        OnPropertyChanged("Collection");
117      }
118    }
119
120
121    #region INotifyPropertyChanged Members
122
123    public event PropertyChangedEventHandler PropertyChanged;
124
125    protected void OnPropertyChanged(string name)
126    {
127      EventsHelper.PropertyChanged(PropertyChanged, this, new PropertyChangedEventArgs(name));
128    }
129
130    #endregion
131  }
132}
Note: See TracBrowser for help on using the repository browser.