You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by be...@apache.org on 2014/02/13 17:06:26 UTC
[31/50] mochiweb commit: updated refs/heads/import-upstream to 8eb1f22
refactor of request/5 function
Project: http://git-wip-us.apache.org/repos/asf/couchdb-mochiweb/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb-mochiweb/commit/3961edcb
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-mochiweb/tree/3961edcb
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-mochiweb/diff/3961edcb
Branch: refs/heads/import-upstream
Commit: 3961edcb51caed422abb6c6ce42c00bca52ab785
Parents: de79c0a
Author: Łukasz Lalik <lu...@gmail.com>
Authored: Wed Dec 25 13:13:46 2013 +0100
Committer: Łukasz Lalik <lu...@gmail.com>
Committed: Wed Dec 25 13:13:46 2013 +0100
----------------------------------------------------------------------
examples/websocket/websocket.erl | 4 +--
src/mochiweb_websocket.erl | 66 ++++++++++++++++-------------------
2 files changed, 33 insertions(+), 37 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/couchdb-mochiweb/blob/3961edcb/examples/websocket/websocket.erl
----------------------------------------------------------------------
diff --git a/examples/websocket/websocket.erl b/examples/websocket/websocket.erl
index 8d4eeb0..b70a0de 100644
--- a/examples/websocket/websocket.erl
+++ b/examples/websocket/websocket.erl
@@ -26,8 +26,8 @@
start_link() ->
Loop = fun (Req) ->
- ?MODULE:loop(Req)
- end,
+ ?MODULE:loop(Req)
+ end,
mochiweb_http:start_link([
{name, client_access},
http://git-wip-us.apache.org/repos/asf/couchdb-mochiweb/blob/3961edcb/src/mochiweb_websocket.erl
----------------------------------------------------------------------
diff --git a/src/mochiweb_websocket.erl b/src/mochiweb_websocket.erl
index 677091b..3ef5c5e 100644
--- a/src/mochiweb_websocket.erl
+++ b/src/mochiweb_websocket.erl
@@ -46,33 +46,18 @@ request(Socket, Body, State, WsVersion, ReplyChannel) ->
{tcp, _, WsFrames} ->
{M, F} = Body,
- case WsVersion of
- hybi ->
- Reply = fun(close) ->
- mochiweb_socket:close(Socket),
- exit(normal);
- (Payload) ->
- NewState = M:F(Payload, State, ReplyChannel),
- loop(Socket, Body, NewState, WsVersion, ReplyChannel)
- end,
-
- try parse_hybi_frames(Socket, WsFrames, []) of
- Parsed -> process_frames(Parsed, Reply, [])
- catch
- _:_ -> Reply(close)
- end;
-
- hixie ->
- try parse_hixie_frames(WsFrames, []) of
- Payload ->
- NewState = M:F(Payload, State),
- loop(Socket, Body, NewState, WsVersion, ReplyChannel)
- catch
- _:_ ->
- mochiweb_socket:close(Socket),
- exit(normal)
- end
-
+ case parse_frames(WsVersion, WsFrames, Socket) of
+ close ->
+ mochiweb_socket:close(Socket),
+ exit(normal);
+
+ error ->
+ mochiweb_socket:close(Socket),
+ exit(normal);
+
+ Payload ->
+ NewState = M:F(Payload, State, ReplyChannel),
+ loop(Socket, Body, NewState, WsVersion, ReplyChannel)
end;
_ ->
@@ -155,20 +140,31 @@ hixie_handshake(Host, Path, Key1, Key2, Body, Origin) ->
Challenge},
{hixie, Response}.
+parse_frames(hybi, Frames, Socket) ->
+ try parse_hybi_frames(Socket, Frames, []) of
+ Parsed -> process_frames(Parsed, [])
+ catch
+ _:_ -> error
+ end;
+
+parse_frames(hixie, Frames, Socket) ->
+ try parse_hixie_frames(Frames, []) of
+ Payload -> Payload
+ catch
+ _:_ -> error
+ end.
+
%%
%% Websockets internal functions for RFC6455 and hybi draft
%%
-process_frames([], Reply, Acc) ->
- Reply(lists:reverse(Acc));
+process_frames([], Acc) ->
+ lists:reverse(Acc);
-process_frames([{Opcode, Payload} | Rest], Reply, Acc) ->
+process_frames([{Opcode, Payload} | Rest], Acc) ->
case Opcode of
- 8 ->
- Reply(lists:reverse(Acc)),
- Reply(close);
-
+ 8 -> close;
_ ->
- process_frames(Rest, Reply, [Payload | Acc])
+ process_frames(Rest, [Payload | Acc])
end.
parse_hybi_frames(_, <<>>, Acc) ->