From: Martin D. <mrt...@gm...> - 2013-03-08 15:49:07
|
Hello, As I understand when the Web page is served over HTTPS, I have to use wss protocol to upgrade to Web Sockets. My setup is very simple, basically the example from YAWS: out(A) -> CallbackMod = basic_echo_callback, Opts = [{origin, "http://" ++ (A#arg.headers)#headers.host}], {websocket, CallbackMod, Opts}. The problem is that handle_message is never called. Am I missing something? Martin |
From: Christopher F. <chr...@ca...> - 2013-03-08 18:10:46
Attachments:
signature.asc
|
On 08/03/2013 16:48, Martin Dimitrov wrote: > Hello, > > As I understand when the Web page is served over HTTPS, I have to use > wss protocol to upgrade to Web Sockets. My setup is very simple, > basically the example from YAWS: > > out(A) -> > CallbackMod = basic_echo_callback, > Opts = [{origin, "http://" ++ (A#arg.headers)#headers.host}], > {websocket, CallbackMod, Opts}. > > The problem is that handle_message is never called. > > Am I missing something? > Hi Martin, To be accepted by Yaws, your request should have the same protocol, port and host than the origin option. In your case, the protocol should be HTTPS. Here is a fix: out(A) -> CallbackMod = basic_echo_callback, Scheme = case yaws_api:get_sslsocket(A#arg.clisock) of {ok, _} -> "https://"; undefined -> "http://" end, Opts = [{origin, Scheme ++ (A#arg.headers)#headers.host}], {websocket, CallbackMod, Opts}. Note that Yaws example must be fixed to handle secure websockets. -- Christopher |
From: Martin D. <mrt...@gm...> - 2013-03-08 18:35:15
|
Hi Christopher, First of all, thanks for looking into this. I actually changed the origin option. I copy/pasted from the example but in my code I changed it. I also tried without an origin, too. I also forgot to mention that the connection is established. My onopen handler on the page gets called but then when I try to send something to YAWS, the handle_message function never gets called. With the same code if I change to HTTP, everything works as expected. Martin On 3/8/2013 7:43 PM, Christopher Faulet wrote: > On 08/03/2013 16:48, Martin Dimitrov wrote: >> Hello, >> >> As I understand when the Web page is served over HTTPS, I have to use >> wss protocol to upgrade to Web Sockets. My setup is very simple, >> basically the example from YAWS: >> >> out(A) -> >> CallbackMod = basic_echo_callback, >> Opts = [{origin, "http://" ++ (A#arg.headers)#headers.host}], >> {websocket, CallbackMod, Opts}. >> >> The problem is that handle_message is never called. >> >> Am I missing something? >> > > Hi Martin, > > To be accepted by Yaws, your request should have the same protocol, port > and host than the origin option. In your case, the protocol should be > HTTPS. Here is a fix: > > out(A) -> > CallbackMod = basic_echo_callback, > Scheme = case yaws_api:get_sslsocket(A#arg.clisock) of > {ok, _} -> "https://"; > undefined -> "http://" > end, > Opts = [{origin, Scheme ++ (A#arg.headers)#headers.host}], > {websocket, CallbackMod, Opts}. > > Note that Yaws example must be fixed to handle secure websockets. > > > > ------------------------------------------------------------------------------ > Symantec Endpoint Protection 12 positioned as A LEADER in The Forrester > Wave(TM): Endpoint Security, Q1 2013 and "remains a good choice" in the > endpoint security space. For insight on selecting the right partner to > tackle endpoint security challenges, access the full report. > http://p.sf.net/sfu/symantec-dev2dev > > > > _______________________________________________ > Erlyaws-list mailing list > Erl...@li... > https://lists.sourceforge.net/lists/listinfo/erlyaws-list > |
From: Christopher F. <chr...@ca...> - 2013-03-08 19:27:02
Attachments:
signature.asc
|
On 08/03/2013 19:35, Martin Dimitrov wrote: > Hi Christopher, > > First of all, thanks for looking into this. > > I actually changed the origin option. I copy/pasted from the example but > in my code I changed it. I also tried without an origin, too. > > I also forgot to mention that the connection is established. My onopen > handler on the page gets called but then when I try to send something to > YAWS, the handle_message function never gets called. > > With the same code if I change to HTTP, everything works as expected. > Can you provide a test case (the client and the callback module) ? Because the basic example (with ssl fixes) works for me. -- Christopher |
From: Martin D. <mrt...@gm...> - 2013-03-12 14:16:05
|
Hi, I was out of town for couple of days. Sorry. Now I return to this and I can't still make it work. I've taken the example from YAWS 1.95. I made the two changes: in the html page - this._ws=new WS("wss://mydomain.com/websockets_example_endpoint.yaws"); and in websockets_example_endpoint.yaws I've removed the origin option. I manage to connect but can't send data - nothing shows up, no errors but no response, too. Martin On 3/8/2013 9:26 PM, Christopher Faulet wrote: > On 08/03/2013 19:35, Martin Dimitrov wrote: >> Hi Christopher, >> >> First of all, thanks for looking into this. >> >> I actually changed the origin option. I copy/pasted from the example but >> in my code I changed it. I also tried without an origin, too. >> >> I also forgot to mention that the connection is established. My onopen >> handler on the page gets called but then when I try to send something to >> YAWS, the handle_message function never gets called. >> >> With the same code if I change to HTTP, everything works as expected. >> > > Can you provide a test case (the client and the callback module) ? > Because the basic example (with ssl fixes) works for me. > > > > ------------------------------------------------------------------------------ > Symantec Endpoint Protection 12 positioned as A LEADER in The Forrester > Wave(TM): Endpoint Security, Q1 2013 and "remains a good choice" in the > endpoint security space. For insight on selecting the right partner to > tackle endpoint security challenges, access the full report. > http://p.sf.net/sfu/symantec-dev2dev > > > > _______________________________________________ > Erlyaws-list mailing list > Erl...@li... > https://lists.sourceforge.net/lists/listinfo/erlyaws-list > |
From: Christopher F. <chr...@ca...> - 2013-03-12 19:17:20
Attachments:
signature.asc
|
On 12/03/2013 15:15, Martin Dimitrov wrote: > Hi, > > I was out of town for couple of days. Sorry. Now I return to this and I > can't still make it work. I've taken the example from YAWS 1.95. I made > the two changes: in the html page - this._ws=new > WS("wss://mydomain.com/websockets_example_endpoint.yaws"); and in > websockets_example_endpoint.yaws I've removed the origin option. > > I manage to connect but can't send data - nothing shows up, no errors > but no response, too. > Hi Martin, The websocket module is buggy in Yaws-1.95. Among other things, it does not handle correctly secure websockets. All known bugs were fixed in the master branch on github. See the commit 29a79898[1] for details. [1] https://github.com/klacke/yaws/commit/29a79898 -- Christopher |