[Spice-devel] [PATCH 10/13] smartcard: client: add keyboard shortcuts for remove/insert virtual card

Hans de Goede hdegoede at redhat.com
Tue Dec 7 02:30:46 PST 2010


Ack.

On 12/06/2010 05:16 PM, Alon Levy wrote:
> ---
>   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 ae19785..a484bbc 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,
>   };
> @@ -391,6 +395,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
> @@ -413,6 +421,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();
>
> @@ -1007,6 +1019,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();


More information about the Spice-devel mailing list