Hi On Wed, Aug 8, 2018 at 9:42 AM, Frediano Ziglio <fziglio@xxxxxxxxxx> wrote: >> >> From: Marc-André Lureau <marcandre.lureau@xxxxxxxxxx> >> >> Follow all other char devices implementation (spicevmc, agent, >> stream-device) and set the char device state when >> connected/disconnected. This allows qemu to discard writes, optimize a >> bit the source polling, and will trigger HUP events. >> >> See related qemu "char/spice: discard write() if backend is >> disconnected". >> >> Note: sif->state() should probably be handled at the char-device >> level. I am not sure what the smartcard channel really brings over >> plain spicevmc... >> >> Signed-off-by: Marc-André Lureau <marcandre.lureau@xxxxxxxxxx> >> --- >> server/smartcard.c | 15 +++++++++++++++ >> 1 file changed, 15 insertions(+) >> >> diff --git a/server/smartcard.c b/server/smartcard.c >> index 2cb68e06..403805a8 100644 >> --- a/server/smartcard.c >> +++ b/server/smartcard.c >> @@ -343,6 +343,11 @@ void >> smartcard_char_device_attach_client(SpiceCharDeviceInstance *char_device, >> dev->priv->scc = NULL; >> smartcard_channel_client_set_char_device(scc, NULL); >> red_channel_client_disconnect(RED_CHANNEL_CLIENT(scc)); >> + } else { >> + SpiceCharDeviceInterface *sif = >> spice_char_device_get_interface(char_device); >> + if (sif->state) { >> + sif->state(char_device, 1); >> + } >> } >> } >> >> @@ -373,11 +378,21 @@ gboolean >> smartcard_char_device_notify_reader_remove(RedCharDeviceSmartcard *dev) >> void smartcard_char_device_detach_client(RedCharDeviceSmartcard *smartcard, >> SmartCardChannelClient *scc) >> { >> + SpiceCharDeviceInterface *sif; >> + SpiceCharDeviceInstance *sin; >> + >> + g_object_get(smartcard, "sin", &sin, NULL); >> + sif = spice_char_device_get_interface(sin); >> + >> spice_assert(smartcard->priv->scc == scc); >> red_char_device_client_remove(RED_CHAR_DEVICE(smartcard), >> red_channel_client_get_client(RED_CHANNEL_CLIENT(scc))); >> smartcard_channel_client_set_char_device(scc, NULL); >> smartcard->priv->scc = NULL; >> + >> + if (sif->state) { >> + sif->state(sin, 0); >> + } >> } >> >> SmartCardChannelClient* >> smartcard_char_device_get_client(RedCharDeviceSmartcard *smartcard) > > I never tried smartcard support but I remember that when you disable the device > from the guest the device cannot be opened. I saw in the past some smart card usage > and I remember for instance that on Windows if smartcards are configured during the > login the login screen change adding smart card support. What would happen in > this case if presenting the login screen there are no clients connected then > you connect? Would the system detect that now the device can be used and add > smart card support to the login? I don't know how to setup such test, was this > tested? Untested. This will not trigger the same path, as the sif->state() is only called on client connect/disconnect. thanks -- Marc-André Lureau _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel