[Spice-devel] [PATCH 10/12] smartcard: client: add keyboard shortcuts for remove/insert virtual card
Alon Levy
alevy at redhat.com
Wed Oct 27 09:36:51 PDT 2010
---
client/application.cpp | 20 ++++++++++++++++++++
client/smartcard_channel.cpp | 32 ++++++++++++++++++++++++++++++++
client/smartcard_channel.h | 2 ++
3 files changed, 54 insertions(+), 0 deletions(-)
diff --git a/client/application.cpp b/client/application.cpp
index 90d7fb6..279dbad 100644
--- a/client/application.cpp
+++ b/client/application.cpp
@@ -339,6 +339,10 @@ enum AppCommands {
#ifdef USE_GUI
APP_CMD_SHOW_GUI,
#endif // USE_GUI
+#ifdef USE_SMARTCARD
+ APP_CMD_SMARTCARD_INSERT,
+ APP_CMD_SMARTCARD_REMOVE,
+#endif
APP_CMD_EXTERNAL_BEGIN = 0x400,
APP_CMD_EXTERNAL_END = 0x800,
};
@@ -390,6 +394,10 @@ Application::Application()
#ifdef USE_GUI
_commands_map["show-gui"] = APP_CMD_SHOW_GUI;
#endif // USE_GUI
+#ifdef USE_SMARTCARD
+ _commands_map["smartcard-insert"] = APP_CMD_SMARTCARD_INSERT;
+ _commands_map["smartcard-remove"] = APP_CMD_SMARTCARD_REMOVE;
+#endif
_canvas_types.resize(1);
#ifdef WIN32
@@ -412,6 +420,10 @@ Application::Application()
#ifdef USE_GUI
",show-gui=shift+f7"
#endif // USE_GUI
+#ifdef USE_SMARTCARD
+ ",smartcard-insert=shift+f8"
+ ",smartcard-remove=shift+f9"
+#endif
, _commands_map));
_hot_keys = parser->get();
@@ -997,6 +1009,14 @@ void Application::do_command(int command)
show_gui();
break;
#endif // USE_GUI
+#ifdef USE_SMARTCARD
+ case APP_CMD_SMARTCARD_INSERT:
+ virtual_card_insert();
+ break;
+ case APP_CMD_SMARTCARD_REMOVE:
+ virtual_card_remove();
+ break;
+#endif
default:
AppMenuItemMap::iterator iter = _app_menu_items.find(command);
ASSERT(iter != _app_menu_items.end());
diff --git a/client/smartcard_channel.cpp b/client/smartcard_channel.cpp
index d585c9a..994671f 100644
--- a/client/smartcard_channel.cpp
+++ b/client/smartcard_channel.cpp
@@ -228,6 +228,38 @@ void SmartCardChannel::cac_card_events_thread_main()
}
}
+void virtual_card_insert()
+{
+ if (g_smartcard_channel == NULL) {
+ return;
+ }
+ g_smartcard_channel->virtual_card_insert();
+}
+
+void SmartCardChannel::virtual_card_insert()
+{
+ if (_readers_by_id.size() == 0) {
+ return;
+ }
+ vcard_emul_force_card_insert(_readers_by_id.begin()->second->vreader);
+}
+
+void virtual_card_remove()
+{
+ if (g_smartcard_channel == NULL) {
+ return;
+ }
+ g_smartcard_channel->virtual_card_remove();
+}
+
+void SmartCardChannel::virtual_card_remove()
+{
+ if (_readers_by_id.size() == 0) {
+ return;
+ }
+ vcard_emul_force_card_remove(_readers_by_id.begin()->second->vreader);
+}
+
#define CERTIFICATES_DEFAULT_DB "/etc/pki/nssdb"
#define CERTIFICATES_ARGS_TEMPLATE "db=\"%s\" use_hw=no soft=(,Virtual Card,CAC,,%s,%s,%s)"
diff --git a/client/smartcard_channel.h b/client/smartcard_channel.h
index ee0d0d0..60c6db5 100644
--- a/client/smartcard_channel.h
+++ b/client/smartcard_channel.h
@@ -92,6 +92,8 @@ public:
SmartCardChannel(RedClient& client, uint32_t id);
void handle_smartcard_data(RedPeer::InMessage* message);
+ void virtual_card_remove();
+ void virtual_card_insert();
static ChannelFactory& Factory();
protected:
virtual void on_connect();
--
1.7.3.1
More information about the Spice-devel
mailing list