Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/processone/ejabberd.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/mysql/mysql_recv.erl')
-rw-r--r--src/mysql/mysql_recv.erl165
1 files changed, 0 insertions, 165 deletions
diff --git a/src/mysql/mysql_recv.erl b/src/mysql/mysql_recv.erl
deleted file mode 100644
index 1d24ded7f..000000000
--- a/src/mysql/mysql_recv.erl
+++ /dev/null
@@ -1,165 +0,0 @@
-%%%-------------------------------------------------------------------
-%%% File : mysql_recv.erl
-%%% Author : Fredrik Thulin <ft@it.su.se>
-%%% Descrip.: Handles data being received on a MySQL socket. Decodes
-%%% per-row framing and sends each row to parent.
-%%%
-%%% Created : 4 Aug 2005 by Fredrik Thulin <ft@it.su.se>
-%%%
-%%% Note : All MySQL code was written by Magnus Ahltorp, originally
-%%% in the file mysql.erl - I just moved it here.
-%%%
-%%% Copyright (c) 2001-2004 Kungliga Tekniska Högskolan
-%%% See the file COPYING
-%%%
-%%% Signals this receiver process can send to it's parent
-%%% (the parent is a mysql_conn connection handler) :
-%%%
-%%% {mysql_recv, self(), data, Packet, Num}
-%%% {mysql_recv, self(), closed, {error, Reason}}
-%%% {mysql_recv, self(), closed, normal}
-%%%
-%%% Internally (from inside init/4 to start_link/4) the
-%%% following signals may be sent to the parent process :
-%%%
-%%% {mysql_recv, self(), init, {ok, Sock}}
-%%% {mysql_recv, self(), init, {error, E}}
-%%%
-%%%-------------------------------------------------------------------
--module(mysql_recv).
-
-%%--------------------------------------------------------------------
-%% External exports (should only be used by the 'mysql_conn' module)
-%%--------------------------------------------------------------------
--export([start_link/4
- ]).
-
--record(state, {
- socket,
- parent,
- log_fun,
- data
- }).
-
--define(SECURE_CONNECTION, 32768).
--define(CONNECT_TIMEOUT, 5000).
-
-%%====================================================================
-%% External functions
-%%====================================================================
-
-%%--------------------------------------------------------------------
-%% Function: start_link(Host, Port, LogFun, Parent)
-%% Host = string()
-%% Port = integer()
-%% LogFun = undefined | function() of arity 3
-%% Parent = pid(), process that should get received frames
-%% Descrip.: Start a process that connects to Host:Port and waits for
-%% data. When it has received a MySQL frame, it sends it to
-%% Parent and waits for the next frame.
-%% Returns : {ok, RecvPid, Socket} |
-%% {error, Reason}
-%% RecvPid = pid(), receiver process pid
-%% Socket = term(), gen_tcp socket
-%% Reason = atom() | string()
-%%--------------------------------------------------------------------
-start_link(Host, Port, LogFun, Parent) when is_list(Host), is_integer(Port) ->
- RecvPid =
- spawn_link(fun () ->
- init(Host, Port, LogFun, Parent)
- end),
- %% wait for the socket from the spawned pid
- receive
- {mysql_recv, RecvPid, init, {error, E}} ->
- {error, E};
- {mysql_recv, RecvPid, init, {ok, Socket}} ->
- {ok, RecvPid, Socket}
- after ?CONNECT_TIMEOUT ->
- catch exit(RecvPid, kill),
- {error, "timeout"}
- end.
-
-
-
-%%====================================================================
-%% Internal functions
-%%====================================================================
-
-%%--------------------------------------------------------------------
-%% Function: init((Host, Port, LogFun, Parent)
-%% Host = string()
-%% Port = integer()
-%% LogFun = undefined | function() of arity 3
-%% Parent = pid(), process that should get received frames
-%% Descrip.: Connect to Host:Port and then enter receive-loop.
-%% Returns : error | never returns
-%%--------------------------------------------------------------------
-init(Host, Port, LogFun, Parent) ->
- case gen_tcp:connect(Host, Port, [binary, {packet, 0}]) of
- {ok, Sock} ->
- Parent ! {mysql_recv, self(), init, {ok, Sock}},
- State = #state{socket = Sock,
- parent = Parent,
- log_fun = LogFun,
- data = <<>>
- },
- loop(State);
- E ->
- mysql:log(LogFun, error,
- "mysql_recv: Failed connecting to ~p:~p : ~p",
- [Host, Port, E]),
- Msg = lists:flatten(io_lib:format("connect failed : ~p", [E])),
- Parent ! {mysql_recv, self(), init, {error, Msg}}
- end.
-
-%%--------------------------------------------------------------------
-%% Function: loop(State)
-%% State = state record()
-%% Descrip.: The main loop. Wait for data from our TCP socket and act
-%% on received data or signals that our socket was closed.
-%% Returns : error | never returns
-%%--------------------------------------------------------------------
-loop(State) ->
- Sock = State#state.socket,
- receive
- {tcp, Sock, InData} ->
- NewData = list_to_binary([State#state.data, InData]),
- %% send data to parent if we have enough data
- Rest = sendpacket(State#state.parent, NewData),
- loop(State#state{data = Rest});
- {tcp_error, Sock, Reason} ->
- mysql:log(State#state.log_fun, error, "mysql_recv: "
- "Socket ~p closed : ~p", [Sock, Reason]),
- State#state.parent ! {mysql_recv, self(), closed,
- {error, Reason}},
- error;
- {tcp_closed, Sock} ->
- mysql:log(State#state.log_fun, debug, "mysql_recv: "
- "Socket ~p closed", [Sock]),
- State#state.parent ! {mysql_recv, self(), closed, normal},
- error
- end.
-
-%%--------------------------------------------------------------------
-%% Function: sendpacket(Parent, Data)
-%% Parent = pid()
-%% Data = binary()
-%% Descrip.: Check if we have received one or more complete frames by
-%% now, and if so - send them to Parent.
-%% Returns : Rest = binary()
-%%--------------------------------------------------------------------
-%% send data to parent if we have enough data
-sendpacket(Parent, Data) ->
- case Data of
- <<Length:24/little, Num:8, D/binary>> ->
- if
- Length =< size(D) ->
- {Packet, Rest} = split_binary(D, Length),
- Parent ! {mysql_recv, self(), data, Packet, Num},
- sendpacket(Parent, Rest);
- true ->
- Data
- end;
- _ ->
- Data
- end.