Discussion:
[asterisk-dev] Asterisk with socket.io
Vipul Rastogi
2015-01-21 02:36:57 UTC
Permalink
Anybody tried asterisk connecting to Socket.io server as websocket client ?
I am not getting websocket established.

See below error, after successful 101 Switching Protocols

res_http_websocket.c:576 __ast_websocket_read: WebSocket unknown opcode 5
Dan Jenkins
2015-01-21 15:23:36 UTC
Permalink
Post by Vipul Rastogi
Anybody tried asterisk connecting to Socket.io server as websocket client
? I am not getting websocket established.
See below error, after successful 101 Switching Protocols
res_http_websocket.c:576 __ast_websocket_read: WebSocket unknown opcode 5
--
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --
asterisk-dev mailing list
http://lists.digium.com/mailman/listinfo/asterisk-dev
Hi Vipul,

Socket.io won't work with the websocket module in Asterisk as Socket.io is
a layer on top of websockets/xhr polling/flash sockets.

Socket.io actually makes HTTP requests to the host you're trying to connect
to and the host needs to understand the "socket.io protocol" as such, this
sets up a socket.io session, gives back a list of available transports etc,
then with that response, the client sends a websocket request (or whatever
transport you select) with the socket.io sessionId etc.

So you can see why the normal websocket module in Asterisk can't deal with
this. You would need a socket.io module in Asterisk, which does exist, the
Respoke team use socket.io and so our Respoke channel driver uses the
socket.io transport -
https://github.com/respoke/chan_respoke/blob/master/include/asterisk/res_socket_io.h,
this module is released under GPLv2 Licensing.

Hope this helps you

Dan
Vipul Rastogi
2015-01-30 02:17:07 UTC
Permalink
Thanks Dan. Do you have any example file to suggest how to use it. I am
looking for code lines which I can use in our app to connect, send and
receive from Nodejs applications.

thanks in advance !
On Wed, Jan 21, 2015 at 2:36 AM, Vipul Rastogi <
Post by Vipul Rastogi
Anybody tried asterisk connecting to Socket.io server as websocket client
? I am not getting websocket established.
See below error, after successful 101 Switching Protocols
res_http_websocket.c:576 __ast_websocket_read: WebSocket unknown opcode 5
--
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --
asterisk-dev mailing list
http://lists.digium.com/mailman/listinfo/asterisk-dev
Hi Vipul,
Socket.io won't work with the websocket module in Asterisk as Socket.io is
a layer on top of websockets/xhr polling/flash sockets.
Socket.io actually makes HTTP requests to the host you're trying to
connect to and the host needs to understand the "socket.io protocol" as
such, this sets up a socket.io session, gives back a list of available
transports etc, then with that response, the client sends a websocket
request (or whatever transport you select) with the socket.io sessionId
etc.
So you can see why the normal websocket module in Asterisk can't deal with
this. You would need a socket.io module in Asterisk, which does exist,
the Respoke team use socket.io and so our Respoke channel driver uses the
socket.io transport -
https://github.com/respoke/chan_respoke/blob/master/include/asterisk/res_socket_io.h,
this module is released under GPLv2 Licensing.
Hope this helps you
Dan
--
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --
asterisk-dev mailing list
http://lists.digium.com/mailman/listinfo/asterisk-dev
Matthew Jordan
2015-01-30 15:55:19 UTC
Permalink
On Thu, Jan 29, 2015 at 8:17 PM, Vipul Rastogi
Post by Vipul Rastogi
Thanks Dan. Do you have any example file to suggest how to use it. I am
looking for code lines which I can use in our app to connect, send and
receive from Nodejs applications.
As Dan already pointed out, it is a module in an external repo, and is
not currently part of Asterisk. If you wanted to integrate a socket.io
transport with some API - say, for example, ARI - you'd have to do
that work yourself.

As it is, ARI does use WebSockets, and can be integrated quite well
with node.js already. If you're interested, a client library exists
for that purpose:

https://github.com/asterisk/node-ari-client
--
Matthew Jordan
Digium, Inc. | Engineering Manager
445 Jan Davis Drive NW - Huntsville, AL 35806 - USA
Check us out at: http://digium.com & http://asterisk.org
--
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

asterisk-dev mailing list
To UNSUBSCRIBE or update options visit:
http://lists.digium.com/mailman/listinfo/asterisk-dev
Vipul Rastogi
2015-02-03 07:40:43 UTC
Permalink
Today, I got Asterisk working with respoke channel code as well but on
startup Asterisk connects (register=yes) with node.js server with HTTP GET
which does not have following headers...
Connection: Upgrade
Upgrade: websocket

hence http connection is not upgraded. Please suggest what to do. Attaching
my respoke.conf file.
Post by Matthew Jordan
On Thu, Jan 29, 2015 at 8:17 PM, Vipul Rastogi
Post by Vipul Rastogi
Thanks Dan. Do you have any example file to suggest how to use it. I am
looking for code lines which I can use in our app to connect, send and
receive from Nodejs applications.
As Dan already pointed out, it is a module in an external repo, and is
not currently part of Asterisk. If you wanted to integrate a socket.io
transport with some API - say, for example, ARI - you'd have to do
that work yourself.
As it is, ARI does use WebSockets, and can be integrated quite well
with node.js already. If you're interested, a client library exists
https://github.com/asterisk/node-ari-client
--
Matthew Jordan
Digium, Inc. | Engineering Manager
445 Jan Davis Drive NW - Huntsville, AL 35806 - USA
Check us out at: http://digium.com & http://asterisk.org
--
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --
asterisk-dev mailing list
http://lists.digium.com/mailman/listinfo/asterisk-dev
Dan Jenkins
2015-02-03 09:40:29 UTC
Permalink
Post by Vipul Rastogi
Today, I got Asterisk working with respoke channel code as well but on
startup Asterisk connects (register=yes) with node.js server with HTTP GET
which does not have following headers...
Connection: Upgrade
Upgrade: websocket
hence http connection is not upgraded. Please suggest what to do.
Attaching my respoke.conf file.
Post by Matthew Jordan
On Thu, Jan 29, 2015 at 8:17 PM, Vipul Rastogi
Post by Vipul Rastogi
Thanks Dan. Do you have any example file to suggest how to use it. I am
looking for code lines which I can use in our app to connect, send and
receive from Nodejs applications.
As Dan already pointed out, it is a module in an external repo, and is
not currently part of Asterisk. If you wanted to integrate a socket.io
transport with some API - say, for example, ARI - you'd have to do
that work yourself.
As it is, ARI does use WebSockets, and can be integrated quite well
with node.js already. If you're interested, a client library exists
https://github.com/asterisk/node-ari-client
--
Matthew Jordan
Digium, Inc. | Engineering Manager
445 Jan Davis Drive NW - Huntsville, AL 35806 - USA
Check us out at: http://digium.com & http://asterisk.org
--
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --
asterisk-dev mailing list
http://lists.digium.com/mailman/listinfo/asterisk-dev
--
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --
asterisk-dev mailing list
http://lists.digium.com/mailman/listinfo/asterisk-dev
Hi Vipul,

Unfortunately this isn't the place to ask for help on the Respoke Channel
Driver, the correct place would be at http://community.respoke.io/ (where
I've already said similar) but for posterity I will answer the question. I
can see that you're trying to connect your own Node.js / Socket.io
application to Asterisk using the respoke channel driver - I'm afraid this
just won't work as the respoke channel driver is very much geared towards
the respoke platform, it's not like you can just swap the platform out.

Without knowing more about your application I would really advocate what
Matt Jordan said earlier in the thread, I would deal with your clients
using socket.io (as you presumably do now) and then use node.js to then
communicate with Asterisk via the ARI, The node.js ARI module is maintained
by the Asterisk team, the ARI is a first class citizen and it's where most
development is taking place from an API perspective. This way your node.js
process is very much a middle man, connecting socket.io clients and the
ARI. Is there a reason why you wouldn't want to talk ARI to Asterisk?

Dan

Phil Mickelson
2015-01-21 15:29:36 UTC
Permalink
Vipul,

I found the exact same thing. Was unable to make it work so I use WS (
https://github.com/einaros/ws) for communicating with Asterisk. Works like
a champ.

I assume you're using node.js. If so, it can be installed with npm. And,
it doesn't interfere with socket.io which I use for communicating with the
client. Why? Because I had already started down that road and didn't want
to change. I use rooms in socket.io.

Phil Mickelson
Post by Vipul Rastogi
Anybody tried asterisk connecting to Socket.io server as websocket client
? I am not getting websocket established.
See below error, after successful 101 Switching Protocols
res_http_websocket.c:576 __ast_websocket_read: WebSocket unknown opcode 5
--
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --
asterisk-dev mailing list
http://lists.digium.com/mailman/listinfo/asterisk-dev
Loading...