You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@thrift.apache.org by dr...@apache.org on 2009/09/09 19:18:57 UTC

svn commit: r813054 - /incubator/thrift/trunk/lib/erl/src/thrift_socket_server.erl

Author: dreiss
Date: Wed Sep  9 17:18:57 2009
New Revision: 813054

URL: http://svn.apache.org/viewvc?rev=813054&view=rev
Log:
THRIFT-574. erlang: Support framed transport for servers

Modified:
    incubator/thrift/trunk/lib/erl/src/thrift_socket_server.erl

Modified: incubator/thrift/trunk/lib/erl/src/thrift_socket_server.erl
URL: http://svn.apache.org/viewvc/incubator/thrift/trunk/lib/erl/src/thrift_socket_server.erl?rev=813054&r1=813053&r2=813054&view=diff
==============================================================================
--- incubator/thrift/trunk/lib/erl/src/thrift_socket_server.erl (original)
+++ incubator/thrift/trunk/lib/erl/src/thrift_socket_server.erl Wed Sep  9 17:18:57 2009
@@ -37,7 +37,8 @@
          ip=any,
          listen=null,
          acceptor=null,
-         socket_opts=[{recv_timeout, 500}]
+         socket_opts=[{recv_timeout, 500}],
+         framed=false
         }).
 
 start(State=#thrift_socket_server{}) ->
@@ -101,7 +102,9 @@
                  Max when is_integer(Max) ->
                      Max
              end,
-    parse_options(Rest, State#thrift_socket_server{max=MaxInt}).
+    parse_options(Rest, State#thrift_socket_server{max=MaxInt});
+parse_options([{framed, Framed} | Rest], State) when is_boolean(Framed) ->
+    parse_options(Rest, State#thrift_socket_server{framed=Framed}).
 
 start_server(State=#thrift_socket_server{name=Name}) ->
     case Name of
@@ -165,22 +168,26 @@
     State#thrift_socket_server{acceptor=null};
 new_acceptor(State=#thrift_socket_server{acceptor=OldPid, listen=Listen,
                                          service=Service, handler=Handler,
-                                         socket_opts=Opts
+                                         socket_opts=Opts, framed=Framed
                                         }) ->
     Pid = proc_lib:spawn_link(?MODULE, acceptor_loop,
-                              [{self(), Listen, Service, Handler, Opts}]),
+                              [{self(), Listen, Service, Handler, Opts, Framed}]),
 %%     error_logger:info_msg("Spawning new acceptor: ~p => ~p", [OldPid, Pid]),
     State#thrift_socket_server{acceptor=Pid}.
 
-acceptor_loop({Server, Listen, Service, Handler, SocketOpts})
+acceptor_loop({Server, Listen, Service, Handler, SocketOpts, Framed})
   when is_pid(Server), is_list(SocketOpts) ->
     case catch gen_tcp:accept(Listen) of % infinite timeout
         {ok, Socket} ->
             gen_server:cast(Server, {accepted, self()}),
             ProtoGen = fun() ->
                                {ok, SocketTransport}   = thrift_socket_transport:new(Socket, SocketOpts),
-                               {ok, BufferedTransport} = thrift_buffered_transport:new(SocketTransport),
-                               {ok, Protocol}          = thrift_binary_protocol:new(BufferedTransport),
+                               {ok, Transport}         =
+                                   case Framed of
+                                       true  -> thrift_framed_transport:new(SocketTransport);
+                                       false -> thrift_buffered_transport:new(SocketTransport)
+                                   end,
+                               {ok, Protocol}          = thrift_binary_protocol:new(Transport),
                                {ok, IProt=Protocol, OProt=Protocol}
                        end,
             thrift_processor:init({Server, ProtoGen, Service, Handler});