<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 12pt;
font-family:΢ÈíÑźÚ
}
--></style></head>
<body class='hmmessage'><div dir='ltr'><font face="Arial, sans-serif">Hi,</font><div><font face="Arial, sans-serif"><br></font></div><div><font face="Arial, sans-serif">I encounter a wierd problem when testing my cell-phone via usb-redirect.</font></div><div><font face="Arial, sans-serif"><br></font></div><div><font face="Arial, sans-serif">Test environment:</font></div><div><font face="Arial, sans-serif">Client OS: win7-32bit</font></div><div><font face="Arial, sans-serif">VM OS: <span style="font-size: 12pt;"> </span><span style="font-size: 12pt;">win7-32bit</span></font></div><div><span style="font-size: 12pt;"><font face="Arial, sans-serif"><br></font></span></div><div><span style="font-size: 12pt;"><font face="Arial, sans-serif">Tool-chain:</font></span></div><div><span style="font-size: 12pt;"><font face="Arial, sans-serif">zadig-2.1 (use libusbk)</font></span></div><div><span style="font-size: 12pt;"><font face="Arial, sans-serif">usbredir-0.7</font></span></div><div><span style="font-size: 12pt;"><font face="Arial, sans-serif">spice-gtk-0.27 (use gtk-2.0)</font></span></div><div><span style="font-size: 12pt;"><font face="Arial, sans-serif">virt-viewer-0.6 </font></span><span style="font-family: Arial, sans-serif; font-size: 12pt;">(use gtk-2.0)</span></div><div><span style="font-size: 12pt;"><font face="Arial, sans-serif"><br></font></span></div><div><span style="font-size: 12pt;"><font face="Arial, sans-serif">Test device:</font></span></div><div><span style="font-size: 12pt;"><font face="Arial, sans-serif">IPhone 5s</font></span></div><div><span style="font-size: 12pt;"><font face="Arial, sans-serif">Google Nexus 3</font></span></div><div><span style="font-size: 12pt;"><font face="Arial, sans-serif"><br></font></span></div><div><span style="font-size: 12pt;"><font face="Arial, sans-serif">Problem:</font></span></div><div><span style="font-size: 12pt;"><font face="Arial, sans-serif">It seems that almost all USB device can be redirected successfully included cellphone. However, when my IPhone</font></span></div><div><font face="Arial, sans-serif"><span style="font-size: 12pt;">appeared in the VM OS, I can double click the phone icon, see its storage card. </span><font color="#ac193d" style="font-size: 12pt;">Then, I clicked 'Trust' button on my phone. Then, the whole window of remote-viewer is stuck, and cannot be closed normally</font><span style="font-size: 12pt;">( one way to close it is kill the process fro</span><font size="3">m <span style="line-height: 22px; background-color: rgb(255, 255, 255);">task manager</span>).</font></font></div><div><font face="Arial, sans-serif"><span style="font-size: 12pt;">The same problem can be reproduced on Android phone, take my Nexus 3 as an example.<font color="#ac193d"> The phone screen is locked with </font></span><font color="#ac193d">pattern lock before redirect, and unlock it after redirect</font>. Then, remote-viewer is stuck.</font></div><div><font face="Arial, sans-serif"><br></font></div><div><font face="Arial, sans-serif">Accidentally, I found a way to fix the bug. I add a printf in the beginning of usbredir_handle_msg() function, as below:</font></div><div><div><font face="Arial, sans-serif" size="2" color="#2672ec">static void usbredir_handle_msg(SpiceChannel *c, SpiceMsgIn *in)</font></div><div><font face="Arial, sans-serif" size="2" color="#2672ec">{</font></div><div><font face="Arial, sans-serif" size="2" color="#2672ec">    SpiceUsbredirChannel *channel = SPICE_USBREDIR_CHANNEL(c);</font></div><div><font face="Arial, sans-serif" size="2" color="#2672ec">    SpiceUsbredirChannelPrivate *priv = channel->priv;</font></div><div><font face="Arial, sans-serif" size="2" color="#2672ec">    device_error_data data;</font></div><div><font face="Arial, sans-serif" size="2" color="#2672ec">    int r, size;</font></div><div><font face="Arial, sans-serif" size="2" color="#2672ec">    uint8_t *buf;</font></div><div><font face="Arial, sans-serif" size="2" color="#2672ec"><br></font></div><div><font face="Arial, sans-serif" size="2" color="#2672ec">    g_return_if_fail(priv->host != NULL);</font></div><div><font face="Arial, sans-serif" size="2" color="#2672ec"><br></font></div><div><font face="Arial, sans-serif" size="2" color="#2672ec">    /* No recursion allowed! */</font></div><div><font face="Arial, sans-serif" size="2" color="#2672ec">    g_return_if_fail(priv->read_buf == NULL);</font></div><div><font face="Arial, sans-serif" size="2" color="#2672ec"><br></font></div><div><font face="Arial, sans-serif" size="2" color="#2672ec">    buf = spice_msg_in_raw(in, &size);</font></div><div><font face="Arial, sans-serif" size="2" color="#2672ec">    priv->read_buf = buf;</font></div><div><font face="Arial, sans-serif" size="2" color="#2672ec">    priv->read_buf_size = size;</font></div><div><font face="Arial, sans-serif" size="2" color="#2672ec"><br></font></div><div><font face="Arial, sans-serif" size="2" color="#2672ec">   </font><font face="Arial, sans-serif" size="2" color="#ac193d"> printf("msg\n");</font></div><div><font face="Arial, sans-serif" size="2" color="#2672ec"><br></font></div><div><font face="Arial, sans-serif" size="2" color="#2672ec">    r = usbredirhost_read_guest_data(priv->host);</font></div></div><div><font face="Arial, sans-serif"><br></font></div><div><font face="Arial, sans-serif">I don't know why it works. And I try to use sleep(0) to instead, it doesn't work. Then, use sleep(1), it works, but decreased the performance of handling usb message.</font></div><div><font face="Arial, sans-serif"><br></font></div><div><font face="Arial, sans-serif">Br,</font></div><div><font face="Arial, sans-serif">Dean</font></div>                                          </div></body>
</html>