Re: [Spice-devel] [PATCH] Basic SPICE port implementation

2016-10-10 Thread Oliver Gutierrez
THanks :) No problem. Just were asking :)

On Mon, Oct 10, 2016 at 1:55 PM, Pavel Grunt  wrote:

> On Mon, 2016-10-10 at 13:14 +0200, Oliver Gutierrez wrote:
> > This patch has not been pushed yet. Is there any problem?
>
> Sorry for the delay Oliver
> It is pushed
> Pavel
>
>
> > On Wed, Oct 5, 2016 at 8:06 AM, Pavel Grunt 
> > wrote:
> > > Hi Oliver,
> > >
> > > it looks good to me :)
> > >
> > > Acked-by: Pavel Grunt 
> > >
> > > Thanks,
> > > Pavel
> > >
> > > On Mon, 2016-10-03 at 14:09 +0200, Oliver Gutierrez wrote:
> > > > ---
> > > >  enums.js|  9 ++
> > > >  main.js |  3 ++
> > > >  port.js | 85
> > > > +
> > > >  spice.html  | 13 +
> > > >  spice_auto.html | 13 +
> > > >  spicemsg.js | 18 
> > > >  utils.js|  7 +
> > > >  7 files changed, 148 insertions(+)
> > > >  create mode 100644 port.js
> > > >
> > > > diff --git a/enums.js b/enums.js
> > > > index 301fea0..b6e013c 100644
> > > > --- a/enums.js
> > > > +++ b/enums.js
> > > > @@ -166,6 +166,15 @@ var SPICE_MSG_PLAYBACK_VOLUME   =
> > > 105;
> > > >  var SPICE_MSG_PLAYBACK_MUTE = 106;
> > > >  var SPICE_MSG_PLAYBACK_LATENCY  = 107;
> > > >
> > > > +var SPICE_MSG_SPICEVMC_DATA = 101;
> > > > +var SPICE_MSG_PORT_INIT = 201;
> > > > +var SPICE_MSG_PORT_EVENT= 202;
> > > > +var SPICE_MSG_END_PORT  = 203;
> > > > +
> > > > +var SPICE_MSGC_SPICEVMC_DATA= 101;
> > > > +var SPICE_MSGC_PORT_EVENT   = 201;
> > > > +var SPICE_MSGC_END_PORT = 202;
> > > > +
> > > >  var SPICE_PLAYBACK_CAP_CELT_0_5_1   = 0;
> > > >  var SPICE_PLAYBACK_CAP_VOLUME   = 1;
> > > >  var SPICE_PLAYBACK_CAP_LATENCY  = 2;
> > > > diff --git a/main.js b/main.js
> > > > index 874a038..2d8a1ff 100644
> > > > --- a/main.js
> > > > +++ b/main.js
> > > > @@ -59,6 +59,7 @@ function SpiceMainConn()
> > > >  this.file_xfer_tasks = {};
> > > >  this.file_xfer_task_id = 0;
> > > >  this.file_xfer_read_queue = [];
> > > > +this.ports = [];
> > > >  }
> > > >
> > > >  SpiceMainConn.prototype = Object.create(SpiceConn.prototype);
> > > > @@ -154,6 +155,8 @@
> > > SpiceMainConn.prototype.process_channel_message
> > > > = function(msg)
> > > >  this.cursor = new SpiceCursorConn(conn);
> > > >  else if (chans.channels[i].type ==
> > > > SPICE_CHANNEL_PLAYBACK)
> > > >  this.cursor = new SpicePlaybackConn(conn);
> > > > +else if (chans.channels[i].type ==
> > > SPICE_CHANNEL_PORT)
> > > > +this.ports.push(new SpicePortConn(conn));
> > > >  else
> > > >  {
> > > >  if (! ("extra_channels" in this))
> > > > diff --git a/port.js b/port.js
> > > > new file mode 100644
> > > > index 000..ee22073
> > > > --- /dev/null
> > > > +++ b/port.js
> > > > @@ -0,0 +1,85 @@
> > > > +"use strict";
> > > > +/*
> > > > +   Copyright (C) 2016 by Oliver Gutierrez 
> > > > + Miroslav Chodil 
> > > > +
> > > > +   This file is part of spice-html5.
> > > > +
> > > > +   spice-html5 is free software: you can redistribute it and/or
> > > > modify
> > > > +   it under the terms of the GNU Lesser General Public License
> > > as
> > > > published by
> > > > +   the Free Software Foundation, either version 3 of the
> > > License,
> > > > or
> > > > +   (at your option) any later version.
> > > > +
> > > > +   spice-html5 is distributed in the hope that it will be
> > > useful,
> > > > +   but WITHOUT ANY WARRANTY; without even the implied warranty
> > > of
> > > > +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
> > > the
> > > > +   GNU Lesser General Public License for more details.
> > > > +
> > > > +   You should have received a copy of the GNU Lesser General
> > > Public
> > > > License
> > > > +   along with spice-html5.  If not, see  > > ense
> > > > s/>.
> > > > +*/
> > > > +
> > > > +/*-
> > > 
> > > > ---
> > > > +**  SpicePortConn
> > > > +**  Drive the Spice Port Channel
> > > > +**-
> > > 
> > > > -*/
> > > > +function SpicePortConn()
> > > > +{
> > > > +DEBUG > 0 && console.log('SPICE port: created SPICE port
> > > > channel. Args:', arguments);
> > > > +SpiceConn.apply(this, arguments);
> > > > +this.port_name = null;
> > > > +}
> > > > +
> > > > +SpicePortConn.prototype = Object.create(SpiceConn.prototype);
> > > > +
> > > > +SpicePortConn.prototype.process_channel_message = function(msg)
> > > > +{
> > > > +if (msg.type == SPICE_MSG_PORT_INIT)
> > > > +{
> > > > +if 

Re: [Spice-devel] [PATCH] Basic SPICE port implementation

2016-10-10 Thread Pavel Grunt
On Mon, 2016-10-10 at 13:14 +0200, Oliver Gutierrez wrote:
> This patch has not been pushed yet. Is there any problem?

Sorry for the delay Oliver
It is pushed
Pavel


> On Wed, Oct 5, 2016 at 8:06 AM, Pavel Grunt 
> wrote:
> > Hi Oliver,
> > 
> > it looks good to me :)
> > 
> > Acked-by: Pavel Grunt 
> > 
> > Thanks,
> > Pavel
> > 
> > On Mon, 2016-10-03 at 14:09 +0200, Oliver Gutierrez wrote:
> > > ---
> > >  enums.js|  9 ++
> > >  main.js |  3 ++
> > >  port.js | 85
> > > +
> > >  spice.html  | 13 +
> > >  spice_auto.html | 13 +
> > >  spicemsg.js | 18 
> > >  utils.js|  7 +
> > >  7 files changed, 148 insertions(+)
> > >  create mode 100644 port.js
> > >
> > > diff --git a/enums.js b/enums.js
> > > index 301fea0..b6e013c 100644
> > > --- a/enums.js
> > > +++ b/enums.js
> > > @@ -166,6 +166,15 @@ var SPICE_MSG_PLAYBACK_VOLUME   =
> > 105;
> > >  var SPICE_MSG_PLAYBACK_MUTE = 106;
> > >  var SPICE_MSG_PLAYBACK_LATENCY  = 107;
> > >  
> > > +var SPICE_MSG_SPICEVMC_DATA = 101;
> > > +var SPICE_MSG_PORT_INIT = 201;
> > > +var SPICE_MSG_PORT_EVENT= 202;
> > > +var SPICE_MSG_END_PORT  = 203;
> > > +
> > > +var SPICE_MSGC_SPICEVMC_DATA= 101;
> > > +var SPICE_MSGC_PORT_EVENT   = 201;
> > > +var SPICE_MSGC_END_PORT = 202;
> > > +
> > >  var SPICE_PLAYBACK_CAP_CELT_0_5_1   = 0;
> > >  var SPICE_PLAYBACK_CAP_VOLUME   = 1;
> > >  var SPICE_PLAYBACK_CAP_LATENCY  = 2;
> > > diff --git a/main.js b/main.js
> > > index 874a038..2d8a1ff 100644
> > > --- a/main.js
> > > +++ b/main.js
> > > @@ -59,6 +59,7 @@ function SpiceMainConn()
> > >  this.file_xfer_tasks = {};
> > >  this.file_xfer_task_id = 0;
> > >  this.file_xfer_read_queue = [];
> > > +this.ports = [];
> > >  }
> > >  
> > >  SpiceMainConn.prototype = Object.create(SpiceConn.prototype);
> > > @@ -154,6 +155,8 @@
> > SpiceMainConn.prototype.process_channel_message
> > > = function(msg)
> > >  this.cursor = new SpiceCursorConn(conn);
> > >  else if (chans.channels[i].type ==
> > > SPICE_CHANNEL_PLAYBACK)
> > >  this.cursor = new SpicePlaybackConn(conn);
> > > +else if (chans.channels[i].type ==
> > SPICE_CHANNEL_PORT)
> > > +this.ports.push(new SpicePortConn(conn));
> > >  else
> > >  {
> > >  if (! ("extra_channels" in this))
> > > diff --git a/port.js b/port.js
> > > new file mode 100644
> > > index 000..ee22073
> > > --- /dev/null
> > > +++ b/port.js
> > > @@ -0,0 +1,85 @@
> > > +"use strict";
> > > +/*
> > > +   Copyright (C) 2016 by Oliver Gutierrez 
> > > + Miroslav Chodil 
> > > +
> > > +   This file is part of spice-html5.
> > > +
> > > +   spice-html5 is free software: you can redistribute it and/or
> > > modify
> > > +   it under the terms of the GNU Lesser General Public License
> > as
> > > published by
> > > +   the Free Software Foundation, either version 3 of the
> > License,
> > > or
> > > +   (at your option) any later version.
> > > +
> > > +   spice-html5 is distributed in the hope that it will be
> > useful,
> > > +   but WITHOUT ANY WARRANTY; without even the implied warranty
> > of
> > > +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
> > the
> > > +   GNU Lesser General Public License for more details.
> > > +
> > > +   You should have received a copy of the GNU Lesser General
> > Public
> > > License
> > > +   along with spice-html5.  If not, see  > ense
> > > s/>.
> > > +*/
> > > +
> > > +/*-
> > 
> > > ---
> > > +**  SpicePortConn
> > > +**  Drive the Spice Port Channel
> > > +**-
> > 
> > > -*/
> > > +function SpicePortConn()
> > > +{
> > > +DEBUG > 0 && console.log('SPICE port: created SPICE port
> > > channel. Args:', arguments);
> > > +SpiceConn.apply(this, arguments);
> > > +this.port_name = null;
> > > +}
> > > +
> > > +SpicePortConn.prototype = Object.create(SpiceConn.prototype);
> > > +
> > > +SpicePortConn.prototype.process_channel_message = function(msg)
> > > +{
> > > +if (msg.type == SPICE_MSG_PORT_INIT)
> > > +{
> > > +if (this.port_name === null)
> > > +{
> > > +var m = new SpiceMsgPortInit(msg.data);
> > > +this.portName = arraybuffer_to_str(new
> > > Uint8Array(m.name));
> > > +this.portOpened = m.opened
> > > +DEBUG > 0 && console.log('SPICE port: Port',
> > > this.portName, 'initialized');
> > > +return true;
> > > +}
> > > +
> > > 

Re: [Spice-devel] [PATCH] Basic SPICE port implementation

2016-10-10 Thread Oliver Gutierrez
This patch has not been pushed yet. Is there any problem?

On Wed, Oct 5, 2016 at 8:06 AM, Pavel Grunt  wrote:

> Hi Oliver,
>
> it looks good to me :)
>
> Acked-by: Pavel Grunt 
>
> Thanks,
> Pavel
>
> On Mon, 2016-10-03 at 14:09 +0200, Oliver Gutierrez wrote:
> > ---
> >  enums.js|  9 ++
> >  main.js |  3 ++
> >  port.js | 85
> > +
> >  spice.html  | 13 +
> >  spice_auto.html | 13 +
> >  spicemsg.js | 18 
> >  utils.js|  7 +
> >  7 files changed, 148 insertions(+)
> >  create mode 100644 port.js
> >
> > diff --git a/enums.js b/enums.js
> > index 301fea0..b6e013c 100644
> > --- a/enums.js
> > +++ b/enums.js
> > @@ -166,6 +166,15 @@ var SPICE_MSG_PLAYBACK_VOLUME   = 105;
> >  var SPICE_MSG_PLAYBACK_MUTE = 106;
> >  var SPICE_MSG_PLAYBACK_LATENCY  = 107;
> >
> > +var SPICE_MSG_SPICEVMC_DATA = 101;
> > +var SPICE_MSG_PORT_INIT = 201;
> > +var SPICE_MSG_PORT_EVENT= 202;
> > +var SPICE_MSG_END_PORT  = 203;
> > +
> > +var SPICE_MSGC_SPICEVMC_DATA= 101;
> > +var SPICE_MSGC_PORT_EVENT   = 201;
> > +var SPICE_MSGC_END_PORT = 202;
> > +
> >  var SPICE_PLAYBACK_CAP_CELT_0_5_1   = 0;
> >  var SPICE_PLAYBACK_CAP_VOLUME   = 1;
> >  var SPICE_PLAYBACK_CAP_LATENCY  = 2;
> > diff --git a/main.js b/main.js
> > index 874a038..2d8a1ff 100644
> > --- a/main.js
> > +++ b/main.js
> > @@ -59,6 +59,7 @@ function SpiceMainConn()
> >  this.file_xfer_tasks = {};
> >  this.file_xfer_task_id = 0;
> >  this.file_xfer_read_queue = [];
> > +this.ports = [];
> >  }
> >
> >  SpiceMainConn.prototype = Object.create(SpiceConn.prototype);
> > @@ -154,6 +155,8 @@ SpiceMainConn.prototype.process_channel_message
> > = function(msg)
> >  this.cursor = new SpiceCursorConn(conn);
> >  else if (chans.channels[i].type ==
> > SPICE_CHANNEL_PLAYBACK)
> >  this.cursor = new SpicePlaybackConn(conn);
> > +else if (chans.channels[i].type == SPICE_CHANNEL_PORT)
> > +this.ports.push(new SpicePortConn(conn));
> >  else
> >  {
> >  if (! ("extra_channels" in this))
> > diff --git a/port.js b/port.js
> > new file mode 100644
> > index 000..ee22073
> > --- /dev/null
> > +++ b/port.js
> > @@ -0,0 +1,85 @@
> > +"use strict";
> > +/*
> > +   Copyright (C) 2016 by Oliver Gutierrez 
> > + Miroslav Chodil 
> > +
> > +   This file is part of spice-html5.
> > +
> > +   spice-html5 is free software: you can redistribute it and/or
> > modify
> > +   it under the terms of the GNU Lesser General Public License as
> > published by
> > +   the Free Software Foundation, either version 3 of the License,
> > or
> > +   (at your option) any later version.
> > +
> > +   spice-html5 is distributed in the hope that it will be useful,
> > +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> > +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> > +   GNU Lesser General Public License for more details.
> > +
> > +   You should have received a copy of the GNU Lesser General Public
> > License
> > +   along with spice-html5.  If not, see  > s/>.
> > +*/
> > +
> > +/*-
> > ---
> > +**  SpicePortConn
> > +**  Drive the Spice Port Channel
> > +**-
> > -*/
> > +function SpicePortConn()
> > +{
> > +DEBUG > 0 && console.log('SPICE port: created SPICE port
> > channel. Args:', arguments);
> > +SpiceConn.apply(this, arguments);
> > +this.port_name = null;
> > +}
> > +
> > +SpicePortConn.prototype = Object.create(SpiceConn.prototype);
> > +
> > +SpicePortConn.prototype.process_channel_message = function(msg)
> > +{
> > +if (msg.type == SPICE_MSG_PORT_INIT)
> > +{
> > +if (this.port_name === null)
> > +{
> > +var m = new SpiceMsgPortInit(msg.data);
> > +this.portName = arraybuffer_to_str(new
> > Uint8Array(m.name));
> > +this.portOpened = m.opened
> > +DEBUG > 0 && console.log('SPICE port: Port',
> > this.portName, 'initialized');
> > +return true;
> > +}
> > +
> > +DEBUG > 0 && console.log('SPICE port: Port',
> > this.port_name, 'is already initialized.');
> > +}
> > +else if (msg.type == SPICE_MSG_PORT_EVENT)
> > +{
> > +DEBUG > 0 && console.log('SPICE port: Port event received
> > for', this.portName, msg);
> > +var event = new CustomEvent('spice-port-event', {
> > +detail: {
> > +channel: this,
> > +

Re: [Spice-devel] [PATCH] Basic SPICE port implementation

2016-10-05 Thread Pavel Grunt
Hi Oliver,

it looks good to me :)

Acked-by: Pavel Grunt 

Thanks,
Pavel

On Mon, 2016-10-03 at 14:09 +0200, Oliver Gutierrez wrote:
> ---
>  enums.js|  9 ++
>  main.js |  3 ++
>  port.js | 85
> +
>  spice.html  | 13 +
>  spice_auto.html | 13 +
>  spicemsg.js | 18 
>  utils.js|  7 +
>  7 files changed, 148 insertions(+)
>  create mode 100644 port.js
> 
> diff --git a/enums.js b/enums.js
> index 301fea0..b6e013c 100644
> --- a/enums.js
> +++ b/enums.js
> @@ -166,6 +166,15 @@ var SPICE_MSG_PLAYBACK_VOLUME   = 105;
>  var SPICE_MSG_PLAYBACK_MUTE = 106;
>  var SPICE_MSG_PLAYBACK_LATENCY  = 107;
>  
> +var SPICE_MSG_SPICEVMC_DATA = 101;
> +var SPICE_MSG_PORT_INIT = 201;
> +var SPICE_MSG_PORT_EVENT= 202;
> +var SPICE_MSG_END_PORT  = 203;
> +
> +var SPICE_MSGC_SPICEVMC_DATA= 101;
> +var SPICE_MSGC_PORT_EVENT   = 201;
> +var SPICE_MSGC_END_PORT = 202;
> +
>  var SPICE_PLAYBACK_CAP_CELT_0_5_1   = 0;
>  var SPICE_PLAYBACK_CAP_VOLUME   = 1;
>  var SPICE_PLAYBACK_CAP_LATENCY  = 2;
> diff --git a/main.js b/main.js
> index 874a038..2d8a1ff 100644
> --- a/main.js
> +++ b/main.js
> @@ -59,6 +59,7 @@ function SpiceMainConn()
>  this.file_xfer_tasks = {};
>  this.file_xfer_task_id = 0;
>  this.file_xfer_read_queue = [];
> +this.ports = [];
>  }
>  
>  SpiceMainConn.prototype = Object.create(SpiceConn.prototype);
> @@ -154,6 +155,8 @@ SpiceMainConn.prototype.process_channel_message
> = function(msg)
>  this.cursor = new SpiceCursorConn(conn);
>  else if (chans.channels[i].type ==
> SPICE_CHANNEL_PLAYBACK)
>  this.cursor = new SpicePlaybackConn(conn);
> +else if (chans.channels[i].type == SPICE_CHANNEL_PORT)
> +this.ports.push(new SpicePortConn(conn));
>  else
>  {
>  if (! ("extra_channels" in this))
> diff --git a/port.js b/port.js
> new file mode 100644
> index 000..ee22073
> --- /dev/null
> +++ b/port.js
> @@ -0,0 +1,85 @@
> +"use strict";
> +/*
> +   Copyright (C) 2016 by Oliver Gutierrez 
> + Miroslav Chodil 
> +
> +   This file is part of spice-html5.
> +
> +   spice-html5 is free software: you can redistribute it and/or
> modify
> +   it under the terms of the GNU Lesser General Public License as
> published by
> +   the Free Software Foundation, either version 3 of the License,
> or
> +   (at your option) any later version.
> +
> +   spice-html5 is distributed in the hope that it will be useful,
> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +   GNU Lesser General Public License for more details.
> +
> +   You should have received a copy of the GNU Lesser General Public
> License
> +   along with spice-html5.  If not, see  s/>.
> +*/
> +
> +/*-
> ---
> +**  SpicePortConn
> +**  Drive the Spice Port Channel
> +**-
> -*/
> +function SpicePortConn()
> +{
> +DEBUG > 0 && console.log('SPICE port: created SPICE port
> channel. Args:', arguments);
> +SpiceConn.apply(this, arguments);
> +this.port_name = null;
> +}
> +
> +SpicePortConn.prototype = Object.create(SpiceConn.prototype);
> +
> +SpicePortConn.prototype.process_channel_message = function(msg)
> +{
> +if (msg.type == SPICE_MSG_PORT_INIT)
> +{
> +if (this.port_name === null)
> +{
> +var m = new SpiceMsgPortInit(msg.data);
> +this.portName = arraybuffer_to_str(new
> Uint8Array(m.name));
> +this.portOpened = m.opened
> +DEBUG > 0 && console.log('SPICE port: Port',
> this.portName, 'initialized');
> +return true;
> +}
> +
> +DEBUG > 0 && console.log('SPICE port: Port',
> this.port_name, 'is already initialized.');
> +}
> +else if (msg.type == SPICE_MSG_PORT_EVENT)
> +{
> +DEBUG > 0 && console.log('SPICE port: Port event received
> for', this.portName, msg);
> +var event = new CustomEvent('spice-port-event', {
> +detail: {
> +channel: this,
> +spiceEvent: new Uint8Array(msg.data)
> +},
> +bubbles: true,
> +cancelable: true
> +});
> +
> +window.dispatchEvent(event);
> +return true;
> +}
> +else if (msg.type == SPICE_MSG_SPICEVMC_DATA)
> +{
> +DEBUG > 0 && console.log('SPICE port: Data received in
> port', this.portName, msg);
> +var event = new 

Re: [Spice-devel] [PATCH] Basic SPICE port implementation

2016-10-03 Thread Oliver Gutierrez
OMG. THe patch attached to same thread. Now is Ok

On Mon, Oct 3, 2016 at 2:10 PM, Oliver Gutierrez 
wrote:

> Forget this one. Missing one file.
>
> On Mon, Oct 3, 2016 at 2:02 PM, Oliver Gutierrez 
> wrote:
>
>> ---
>>  enums.js|  9 +
>>  main.js |  3 +++
>>  spice.html  | 13 +
>>  spice_auto.html | 13 +
>>  spicemsg.js | 18 ++
>>  utils.js|  7 +++
>>  6 files changed, 63 insertions(+)
>>
>> diff --git a/enums.js b/enums.js
>> index 301fea0..b6e013c 100644
>> --- a/enums.js
>> +++ b/enums.js
>> @@ -166,6 +166,15 @@ var SPICE_MSG_PLAYBACK_VOLUME   = 105;
>>  var SPICE_MSG_PLAYBACK_MUTE = 106;
>>  var SPICE_MSG_PLAYBACK_LATENCY  = 107;
>>
>> +var SPICE_MSG_SPICEVMC_DATA = 101;
>> +var SPICE_MSG_PORT_INIT = 201;
>> +var SPICE_MSG_PORT_EVENT= 202;
>> +var SPICE_MSG_END_PORT  = 203;
>> +
>> +var SPICE_MSGC_SPICEVMC_DATA= 101;
>> +var SPICE_MSGC_PORT_EVENT   = 201;
>> +var SPICE_MSGC_END_PORT = 202;
>> +
>>  var SPICE_PLAYBACK_CAP_CELT_0_5_1   = 0;
>>  var SPICE_PLAYBACK_CAP_VOLUME   = 1;
>>  var SPICE_PLAYBACK_CAP_LATENCY  = 2;
>> diff --git a/main.js b/main.js
>> index 874a038..2d8a1ff 100644
>> --- a/main.js
>> +++ b/main.js
>> @@ -59,6 +59,7 @@ function SpiceMainConn()
>>  this.file_xfer_tasks = {};
>>  this.file_xfer_task_id = 0;
>>  this.file_xfer_read_queue = [];
>> +this.ports = [];
>>  }
>>
>>  SpiceMainConn.prototype = Object.create(SpiceConn.prototype);
>> @@ -154,6 +155,8 @@ SpiceMainConn.prototype.process_channel_message =
>> function(msg)
>>  this.cursor = new SpiceCursorConn(conn);
>>  else if (chans.channels[i].type == SPICE_CHANNEL_PLAYBACK)
>>  this.cursor = new SpicePlaybackConn(conn);
>> +else if (chans.channels[i].type == SPICE_CHANNEL_PORT)
>> +this.ports.push(new SpicePortConn(conn));
>>  else
>>  {
>>  if (! ("extra_channels" in this))
>> diff --git a/spice.html b/spice.html
>> index c473678..d4c9962 100644
>> --- a/spice.html
>> +++ b/spice.html
>> @@ -42,6 +42,7 @@
>>  
>>  
>>  
>> +
>>  
>>  
>>  
>> @@ -142,6 +143,18 @@
>>  }
>>  }
>>
>> +/* SPICE port event listeners
>> +window.addEventListener('spice-port-data', function(event) {
>> +// Here we convert data to text, but really we can
>> obtain binary data also
>> +var msg_text = arraybuffer_to_str(new
>> Uint8Array(event.detail.data));
>> +DEBUG > 0 && console.log('SPICE port',
>> event.detail.channel.portName, 'message text:', msg_text);
>> +});
>> +
>> +window.addEventListener('spice-port-event', function(event)
>> {
>> +DEBUG > 0 && console.log('SPICE port',
>> event.detail.channel.portName, 'event data:', event.detail.spiceEvent);
>> +});
>> +*/
>> +
>>  
>>
>>  
>> diff --git a/spice_auto.html b/spice_auto.html
>> index 1179ebe..2f04fc9 100644
>> --- a/spice_auto.html
>> +++ b/spice_auto.html
>> @@ -42,6 +42,7 @@
>>  
>>  
>>  
>> +
>>  
>>  
>>  
>> @@ -182,6 +183,18 @@
>>  }
>>  }
>>
>> +/* SPICE port event listeners
>> +window.addEventListener('spice-port-data', function(event) {
>> +// Here we convert data to text, but really we can
>> obtain binary data also
>> +var msg_text = arraybuffer_to_str(new
>> Uint8Array(event.detail.data));
>> +DEBUG > 0 && console.log('SPICE port',
>> event.detail.channel.portName, 'message text:', msg_text);
>> +});
>> +
>> +window.addEventListener('spice-port-event', function(event)
>> {
>> +DEBUG > 0 && console.log('SPICE port',
>> event.detail.channel.portName, 'event data:', event.detail.spiceEvent);
>> +});
>> +*/
>> +
>>  connect();
>>  
>>
>> diff --git a/spicemsg.js b/spicemsg.js
>> index 0321cc7..3619996 100644
>> --- a/spicemsg.js
>> +++ b/spicemsg.js
>> @@ -1278,3 +1278,21 @@ SpiceMsgDisplayInvalList.prototype =
>>  }
>>  },
>>  }
>> +
>> +function SpiceMsgPortInit(a, at)
>> +{
>> +this.from_buffer(a,at);
>> +};
>> +
>> +SpiceMsgPortInit.prototype =
>> +{
>> +from_buffer: function (a, at)
>> +{
>> +at = at || 0;
>> +var dv = new SpiceDataView(a);
>> +var namesize = dv.getUint32(at, true); at += 4;
>> +var offset = dv.getUint32(at, true); at += 4;
>> +this.opened = dv.getUint8(at, true); at += 1;
>> +this.name = a.slice(offset, offset + namesize - 

Re: [Spice-devel] [PATCH] Basic SPICE port implementation

2016-10-03 Thread Oliver Gutierrez
Forget this one. Missing one file.

On Mon, Oct 3, 2016 at 2:02 PM, Oliver Gutierrez 
wrote:

> ---
>  enums.js|  9 +
>  main.js |  3 +++
>  spice.html  | 13 +
>  spice_auto.html | 13 +
>  spicemsg.js | 18 ++
>  utils.js|  7 +++
>  6 files changed, 63 insertions(+)
>
> diff --git a/enums.js b/enums.js
> index 301fea0..b6e013c 100644
> --- a/enums.js
> +++ b/enums.js
> @@ -166,6 +166,15 @@ var SPICE_MSG_PLAYBACK_VOLUME   = 105;
>  var SPICE_MSG_PLAYBACK_MUTE = 106;
>  var SPICE_MSG_PLAYBACK_LATENCY  = 107;
>
> +var SPICE_MSG_SPICEVMC_DATA = 101;
> +var SPICE_MSG_PORT_INIT = 201;
> +var SPICE_MSG_PORT_EVENT= 202;
> +var SPICE_MSG_END_PORT  = 203;
> +
> +var SPICE_MSGC_SPICEVMC_DATA= 101;
> +var SPICE_MSGC_PORT_EVENT   = 201;
> +var SPICE_MSGC_END_PORT = 202;
> +
>  var SPICE_PLAYBACK_CAP_CELT_0_5_1   = 0;
>  var SPICE_PLAYBACK_CAP_VOLUME   = 1;
>  var SPICE_PLAYBACK_CAP_LATENCY  = 2;
> diff --git a/main.js b/main.js
> index 874a038..2d8a1ff 100644
> --- a/main.js
> +++ b/main.js
> @@ -59,6 +59,7 @@ function SpiceMainConn()
>  this.file_xfer_tasks = {};
>  this.file_xfer_task_id = 0;
>  this.file_xfer_read_queue = [];
> +this.ports = [];
>  }
>
>  SpiceMainConn.prototype = Object.create(SpiceConn.prototype);
> @@ -154,6 +155,8 @@ SpiceMainConn.prototype.process_channel_message =
> function(msg)
>  this.cursor = new SpiceCursorConn(conn);
>  else if (chans.channels[i].type == SPICE_CHANNEL_PLAYBACK)
>  this.cursor = new SpicePlaybackConn(conn);
> +else if (chans.channels[i].type == SPICE_CHANNEL_PORT)
> +this.ports.push(new SpicePortConn(conn));
>  else
>  {
>  if (! ("extra_channels" in this))
> diff --git a/spice.html b/spice.html
> index c473678..d4c9962 100644
> --- a/spice.html
> +++ b/spice.html
> @@ -42,6 +42,7 @@
>  
>  
>  
> +
>  
>  
>  
> @@ -142,6 +143,18 @@
>  }
>  }
>
> +/* SPICE port event listeners
> +window.addEventListener('spice-port-data', function(event) {
> +// Here we convert data to text, but really we can obtain
> binary data also
> +var msg_text = arraybuffer_to_str(new
> Uint8Array(event.detail.data));
> +DEBUG > 0 && console.log('SPICE port',
> event.detail.channel.portName, 'message text:', msg_text);
> +});
> +
> +window.addEventListener('spice-port-event', function(event) {
> +DEBUG > 0 && console.log('SPICE port',
> event.detail.channel.portName, 'event data:', event.detail.spiceEvent);
> +});
> +*/
> +
>  
>
>  
> diff --git a/spice_auto.html b/spice_auto.html
> index 1179ebe..2f04fc9 100644
> --- a/spice_auto.html
> +++ b/spice_auto.html
> @@ -42,6 +42,7 @@
>  
>  
>  
> +
>  
>  
>  
> @@ -182,6 +183,18 @@
>  }
>  }
>
> +/* SPICE port event listeners
> +window.addEventListener('spice-port-data', function(event) {
> +// Here we convert data to text, but really we can obtain
> binary data also
> +var msg_text = arraybuffer_to_str(new
> Uint8Array(event.detail.data));
> +DEBUG > 0 && console.log('SPICE port',
> event.detail.channel.portName, 'message text:', msg_text);
> +});
> +
> +window.addEventListener('spice-port-event', function(event) {
> +DEBUG > 0 && console.log('SPICE port',
> event.detail.channel.portName, 'event data:', event.detail.spiceEvent);
> +});
> +*/
> +
>  connect();
>  
>
> diff --git a/spicemsg.js b/spicemsg.js
> index 0321cc7..3619996 100644
> --- a/spicemsg.js
> +++ b/spicemsg.js
> @@ -1278,3 +1278,21 @@ SpiceMsgDisplayInvalList.prototype =
>  }
>  },
>  }
> +
> +function SpiceMsgPortInit(a, at)
> +{
> +this.from_buffer(a,at);
> +};
> +
> +SpiceMsgPortInit.prototype =
> +{
> +from_buffer: function (a, at)
> +{
> +at = at || 0;
> +var dv = new SpiceDataView(a);
> +var namesize = dv.getUint32(at, true); at += 4;
> +var offset = dv.getUint32(at, true); at += 4;
> +this.opened = dv.getUint8(at, true); at += 1;
> +this.name = a.slice(offset, offset + namesize - 1);
> +}
> +}
> diff --git a/utils.js b/utils.js
> index 9093a24..a22d0ae 100644
> --- a/utils.js
> +++ b/utils.js
> @@ -100,6 +100,13 @@ function hexdump_buffer(a)
>  }
>
>  /*--
> --
> +**  Convert arraybuffer to 

[Spice-devel] [PATCH] Basic SPICE port implementation

2016-10-03 Thread Oliver Gutierrez
---
 enums.js|  9 ++
 main.js |  3 ++
 port.js | 85 +
 spice.html  | 13 +
 spice_auto.html | 13 +
 spicemsg.js | 18 
 utils.js|  7 +
 7 files changed, 148 insertions(+)
 create mode 100644 port.js

diff --git a/enums.js b/enums.js
index 301fea0..b6e013c 100644
--- a/enums.js
+++ b/enums.js
@@ -166,6 +166,15 @@ var SPICE_MSG_PLAYBACK_VOLUME   = 105;
 var SPICE_MSG_PLAYBACK_MUTE = 106;
 var SPICE_MSG_PLAYBACK_LATENCY  = 107;
 
+var SPICE_MSG_SPICEVMC_DATA = 101;
+var SPICE_MSG_PORT_INIT = 201;
+var SPICE_MSG_PORT_EVENT= 202;
+var SPICE_MSG_END_PORT  = 203;
+
+var SPICE_MSGC_SPICEVMC_DATA= 101;
+var SPICE_MSGC_PORT_EVENT   = 201;
+var SPICE_MSGC_END_PORT = 202;
+
 var SPICE_PLAYBACK_CAP_CELT_0_5_1   = 0;
 var SPICE_PLAYBACK_CAP_VOLUME   = 1;
 var SPICE_PLAYBACK_CAP_LATENCY  = 2;
diff --git a/main.js b/main.js
index 874a038..2d8a1ff 100644
--- a/main.js
+++ b/main.js
@@ -59,6 +59,7 @@ function SpiceMainConn()
 this.file_xfer_tasks = {};
 this.file_xfer_task_id = 0;
 this.file_xfer_read_queue = [];
+this.ports = [];
 }
 
 SpiceMainConn.prototype = Object.create(SpiceConn.prototype);
@@ -154,6 +155,8 @@ SpiceMainConn.prototype.process_channel_message = 
function(msg)
 this.cursor = new SpiceCursorConn(conn);
 else if (chans.channels[i].type == SPICE_CHANNEL_PLAYBACK)
 this.cursor = new SpicePlaybackConn(conn);
+else if (chans.channels[i].type == SPICE_CHANNEL_PORT)
+this.ports.push(new SpicePortConn(conn));
 else
 {
 if (! ("extra_channels" in this))
diff --git a/port.js b/port.js
new file mode 100644
index 000..ee22073
--- /dev/null
+++ b/port.js
@@ -0,0 +1,85 @@
+"use strict";
+/*
+   Copyright (C) 2016 by Oliver Gutierrez 
+ Miroslav Chodil 
+
+   This file is part of spice-html5.
+
+   spice-html5 is free software: you can redistribute it and/or modify
+   it under the terms of the GNU Lesser General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+
+   spice-html5 is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with spice-html5.  If not, see .
+*/
+
+/*
+**  SpicePortConn
+**  Drive the Spice Port Channel
+**--*/
+function SpicePortConn()
+{
+DEBUG > 0 && console.log('SPICE port: created SPICE port channel. Args:', 
arguments);
+SpiceConn.apply(this, arguments);
+this.port_name = null;
+}
+
+SpicePortConn.prototype = Object.create(SpiceConn.prototype);
+
+SpicePortConn.prototype.process_channel_message = function(msg)
+{
+if (msg.type == SPICE_MSG_PORT_INIT)
+{
+if (this.port_name === null)
+{
+var m = new SpiceMsgPortInit(msg.data);
+this.portName = arraybuffer_to_str(new Uint8Array(m.name));
+this.portOpened = m.opened
+DEBUG > 0 && console.log('SPICE port: Port', this.portName, 
'initialized');
+return true;
+}
+
+DEBUG > 0 && console.log('SPICE port: Port', this.port_name, 'is 
already initialized.');
+}
+else if (msg.type == SPICE_MSG_PORT_EVENT)
+{
+DEBUG > 0 && console.log('SPICE port: Port event received for', 
this.portName, msg);
+var event = new CustomEvent('spice-port-event', {
+detail: {
+channel: this,
+spiceEvent: new Uint8Array(msg.data)
+},
+bubbles: true,
+cancelable: true
+});
+
+window.dispatchEvent(event);
+return true;
+}
+else if (msg.type == SPICE_MSG_SPICEVMC_DATA)
+{
+DEBUG > 0 && console.log('SPICE port: Data received in port', 
this.portName, msg);
+var event = new CustomEvent('spice-port-data', {
+detail: {
+channel: this,
+data: msg.data
+},
+bubbles: true,
+cancelable: true
+});
+window.dispatchEvent(event);
+return true;
+}
+else
+{
+DEBUG > 0 && console.log('SPICE port: SPICE message type not 
recognized:', msg)
+}
+
+return false;
+};
diff --git a/spice.html 

[Spice-devel] [PATCH] Basic SPICE port implementation

2016-10-03 Thread Oliver Gutierrez
---
 enums.js|  9 +
 main.js |  3 +++
 spice.html  | 13 +
 spice_auto.html | 13 +
 spicemsg.js | 18 ++
 utils.js|  7 +++
 6 files changed, 63 insertions(+)

diff --git a/enums.js b/enums.js
index 301fea0..b6e013c 100644
--- a/enums.js
+++ b/enums.js
@@ -166,6 +166,15 @@ var SPICE_MSG_PLAYBACK_VOLUME   = 105;
 var SPICE_MSG_PLAYBACK_MUTE = 106;
 var SPICE_MSG_PLAYBACK_LATENCY  = 107;
 
+var SPICE_MSG_SPICEVMC_DATA = 101;
+var SPICE_MSG_PORT_INIT = 201;
+var SPICE_MSG_PORT_EVENT= 202;
+var SPICE_MSG_END_PORT  = 203;
+
+var SPICE_MSGC_SPICEVMC_DATA= 101;
+var SPICE_MSGC_PORT_EVENT   = 201;
+var SPICE_MSGC_END_PORT = 202;
+
 var SPICE_PLAYBACK_CAP_CELT_0_5_1   = 0;
 var SPICE_PLAYBACK_CAP_VOLUME   = 1;
 var SPICE_PLAYBACK_CAP_LATENCY  = 2;
diff --git a/main.js b/main.js
index 874a038..2d8a1ff 100644
--- a/main.js
+++ b/main.js
@@ -59,6 +59,7 @@ function SpiceMainConn()
 this.file_xfer_tasks = {};
 this.file_xfer_task_id = 0;
 this.file_xfer_read_queue = [];
+this.ports = [];
 }
 
 SpiceMainConn.prototype = Object.create(SpiceConn.prototype);
@@ -154,6 +155,8 @@ SpiceMainConn.prototype.process_channel_message = 
function(msg)
 this.cursor = new SpiceCursorConn(conn);
 else if (chans.channels[i].type == SPICE_CHANNEL_PLAYBACK)
 this.cursor = new SpicePlaybackConn(conn);
+else if (chans.channels[i].type == SPICE_CHANNEL_PORT)
+this.ports.push(new SpicePortConn(conn));
 else
 {
 if (! ("extra_channels" in this))
diff --git a/spice.html b/spice.html
index c473678..d4c9962 100644
--- a/spice.html
+++ b/spice.html
@@ -42,6 +42,7 @@
 
 
 
+
 
 
 
@@ -142,6 +143,18 @@
 }
 }
 
+/* SPICE port event listeners
+window.addEventListener('spice-port-data', function(event) {
+// Here we convert data to text, but really we can obtain 
binary data also
+var msg_text = arraybuffer_to_str(new 
Uint8Array(event.detail.data));
+DEBUG > 0 && console.log('SPICE port', 
event.detail.channel.portName, 'message text:', msg_text);
+});
+
+window.addEventListener('spice-port-event', function(event) {
+DEBUG > 0 && console.log('SPICE port', 
event.detail.channel.portName, 'event data:', event.detail.spiceEvent);
+});
+*/
+
 
 
 
diff --git a/spice_auto.html b/spice_auto.html
index 1179ebe..2f04fc9 100644
--- a/spice_auto.html
+++ b/spice_auto.html
@@ -42,6 +42,7 @@
 
 
 
+
 
 
 
@@ -182,6 +183,18 @@
 }
 }
 
+/* SPICE port event listeners
+window.addEventListener('spice-port-data', function(event) {
+// Here we convert data to text, but really we can obtain 
binary data also
+var msg_text = arraybuffer_to_str(new 
Uint8Array(event.detail.data));
+DEBUG > 0 && console.log('SPICE port', 
event.detail.channel.portName, 'message text:', msg_text);
+});
+
+window.addEventListener('spice-port-event', function(event) {
+DEBUG > 0 && console.log('SPICE port', 
event.detail.channel.portName, 'event data:', event.detail.spiceEvent);
+});
+*/
+
 connect();
 
 
diff --git a/spicemsg.js b/spicemsg.js
index 0321cc7..3619996 100644
--- a/spicemsg.js
+++ b/spicemsg.js
@@ -1278,3 +1278,21 @@ SpiceMsgDisplayInvalList.prototype =
 }
 },
 }
+
+function SpiceMsgPortInit(a, at)
+{
+this.from_buffer(a,at);
+};
+
+SpiceMsgPortInit.prototype =
+{
+from_buffer: function (a, at)
+{
+at = at || 0;
+var dv = new SpiceDataView(a);
+var namesize = dv.getUint32(at, true); at += 4;
+var offset = dv.getUint32(at, true); at += 4;
+this.opened = dv.getUint8(at, true); at += 1;
+this.name = a.slice(offset, offset + namesize - 1);
+}
+}
diff --git a/utils.js b/utils.js
index 9093a24..a22d0ae 100644
--- a/utils.js
+++ b/utils.js
@@ -100,6 +100,13 @@ function hexdump_buffer(a)
 }
 
 /*
+**  Convert arraybuffer to string
+**--*/
+function arraybuffer_to_str(buf) {
+  return String.fromCharCode.apply(null, new Uint16Array(buf));
+}
+
+/*
 ** Converting keycodes to AT scancodes is very hard.
 ** luckly there are some resources on the web and in the Xorg driver that help