2003-10-28 Alexey Shchepin <alexey@sevcom.net>
+ * src/ejabberd_listener.erl: Added handling of accept errors,
+ added timeout value to ssl:accept
+
+ * src/mod_vcard.erl: Added checks for all empty input fields
+
+ * src/mod_offline.erl: More strong checks for stored packets
+
* src/ejabberd_sm.erl: Bugfix
2003-10-27 Alexey Shchepin <alexey@sevcom.net>
ok
end,
{ok, Pid} = Module:start({gen_tcp, Socket}, Opts),
- %{ok, Pid} =
- % supervisor:start_child(
- % ejabberd_tmp_sup,
- % {{Module, Socket},
- % {Module, start_link, [{gen_tcp, Socket}, Opts]},
- % transient,
- % brutal_kill,
- % worker,
- % [Module]}),
gen_tcp:controlling_process(Socket, Pid),
+ accept(ListenSocket, Module, Opts);
+ {error, Reason} ->
+ ?INFO_MSG("(~w) Failed TCP accept: ~w",
+ [ListenSocket, Reason]),
accept(ListenSocket, Module, Opts)
end.
accept_ssl(ListenSocket, Module, Opts).
accept_ssl(ListenSocket, Module, Opts) ->
- case ssl:accept(ListenSocket) of
+ case ssl:accept(ListenSocket, 200) of
{ok, Socket} ->
case {ssl:sockname(Socket), ssl:peername(Socket)} of
{{ok, Addr}, {ok, PAddr}} ->
_ ->
ok
end,
- apply(Module, start_link, [{ssl, Socket}, Opts]),
+ Module:start_link({ssl, Socket}, Opts),
+ accept_ssl(ListenSocket, Module, Opts);
+ {error, timeout} ->
+ accept_ssl(ListenSocket, Module, Opts);
+ {error, Reason} ->
+ ?INFO_MSG("(~w) Failed SSL handshake: ~w",
+ [ListenSocket, Reason]),
accept_ssl(ListenSocket, Module, Opts)
end.
store_packet(From, To, Packet) ->
true = is_process_alive(whereis(?PROCNAME)),
+ Type = xml:get_tag_attr_s("type", Packet),
+ true = Type /= "error" andalso Type /= "groupchat",
case check_event(From, To, Packet) of
true ->
#jid{luser = LUser} = To,
-include("jlib.hrl").
+%-define(JUD_ALLOW_RETURN_ALL, true)
+
-record(vcard_search, {user, luser,
fn, lfn,
family, lfamily,
]
}.
+-ifdef(JUD_ALLOW_RETURN_ALL).
search(Data) ->
MatchSpec = make_matchspec(Data),
Rs
end.
+-else.
+
+search(Data) ->
+ MatchSpec = make_matchspec(Data),
+ if
+ MatchSpec == #vcard_search{_ = '_'} ->
+ [];
+ true ->
+ case catch mnesia:dirty_select(vcard_search,
+ [{MatchSpec, [], ['$_']}]) of
+ {'EXIT', Reason} ->
+ ?ERROR_MSG("~p", [Reason]),
+ [];
+ Rs ->
+ Rs
+ end
+ end.
+
+-endif.
+
+
% TODO: remove
% F = fun() ->
% mnesia:select(vcard_search, [{MatchSpec, [], ['$_']}])