24
1
mirror of https://github.com/processone/ejabberd.git synced 2024-06-18 22:15:20 +02:00

Replace jlib:nameprep/1 by exmpp_stringprep:nameprep/1 and change the

error handling.

PR:		EJABP-1

SVN Revision: 1623
This commit is contained in:
Jean-Sébastien Pédron 2008-10-10 14:40:04 +00:00
parent 5224a796cc
commit e3100110f0
2 changed files with 88 additions and 85 deletions

View File

@ -8,9 +8,10 @@
was passed to exmpp_jid:jid_to_list/1 instead of a #jid. Now we use
exmpp_jid:jid_to_list/3. Thanks to Pablo Polvorin!
* src/ejabberd_s2s_in.erl (wait_for_feature_request/2): Replace
jlib:nameprep/1 by exmpp_stringprep:nameprep/1 and change the error
handling.
* src/ejabberd_s2s_in.erl (wait_for_feature_request/2),
src/ejabberd_router.erl (register_route/2, unregister_route/1):
Replace jlib:nameprep/1 by exmpp_stringprep:nameprep/1 and change the
error handling.
* src/ejabberd_config.erl (normalize_hosts/2): Replace jlib:nodeprep/1
by exmpp_stringprep:nodeprep/1 and change the error handling.

View File

@ -87,51 +87,52 @@ register_route(Domain) ->
register_route(Domain, undefined).
register_route(Domain, LocalHint) ->
case jlib:nameprep(Domain) of
error ->
erlang:error({invalid_domain, Domain});
LDomain ->
Pid = self(),
case get_component_number(LDomain) of
undefined ->
F = fun() ->
mnesia:write(#route{domain = LDomain,
pid = Pid,
local_hint = LocalHint})
end,
mnesia:transaction(F);
N ->
F = fun() ->
case mnesia:read({route, LDomain}) of
[] ->
mnesia:write(
#route{domain = LDomain,
pid = Pid,
local_hint = 1}),
lists:foreach(
fun(I) ->
mnesia:write(
#route{domain = LDomain,
pid = undefined,
local_hint = I})
end, lists:seq(2, N));
Rs ->
lists:any(
fun(#route{pid = undefined,
local_hint = I} = R) ->
mnesia:write(
#route{domain = LDomain,
pid = Pid,
local_hint = I}),
mnesia:delete_object(R),
true;
(_) ->
false
end, Rs)
end
end,
mnesia:transaction(F)
end
try
LDomain = exmpp_stringprep:nameprep(Domain),
Pid = self(),
case get_component_number(LDomain) of
undefined ->
F = fun() ->
mnesia:write(#route{domain = LDomain,
pid = Pid,
local_hint = LocalHint})
end,
mnesia:transaction(F);
N ->
F = fun() ->
case mnesia:read({route, LDomain}) of
[] ->
mnesia:write(
#route{domain = LDomain,
pid = Pid,
local_hint = 1}),
lists:foreach(
fun(I) ->
mnesia:write(
#route{domain = LDomain,
pid = undefined,
local_hint = I})
end, lists:seq(2, N));
Rs ->
lists:any(
fun(#route{pid = undefined,
local_hint = I} = R) ->
mnesia:write(
#route{domain = LDomain,
pid = Pid,
local_hint = I}),
mnesia:delete_object(R),
true;
(_) ->
false
end, Rs)
end
end,
mnesia:transaction(F)
end
catch
_ ->
erlang:error({invalid_domain, Domain})
end.
register_routes(Domains) ->
@ -140,43 +141,44 @@ register_routes(Domains) ->
end, Domains).
unregister_route(Domain) ->
case jlib:nameprep(Domain) of
error ->
erlang:error({invalid_domain, Domain});
LDomain ->
Pid = self(),
case get_component_number(LDomain) of
undefined ->
F = fun() ->
case mnesia:match_object(
#route{domain = LDomain,
pid = Pid,
_ = '_'}) of
[R] ->
mnesia:delete_object(R);
_ ->
ok
end
end,
mnesia:transaction(F);
_ ->
F = fun() ->
case mnesia:match_object(#route{domain=LDomain,
pid = Pid,
_ = '_'}) of
[R] ->
I = R#route.local_hint,
mnesia:write(
#route{domain = LDomain,
pid = undefined,
local_hint = I}),
mnesia:delete_object(R);
_ ->
ok
end
end,
mnesia:transaction(F)
end
try
LDomain = exmpp_stringprep:nameprep(Domain),
Pid = self(),
case get_component_number(LDomain) of
undefined ->
F = fun() ->
case mnesia:match_object(
#route{domain = LDomain,
pid = Pid,
_ = '_'}) of
[R] ->
mnesia:delete_object(R);
_ ->
ok
end
end,
mnesia:transaction(F);
_ ->
F = fun() ->
case mnesia:match_object(#route{domain=LDomain,
pid = Pid,
_ = '_'}) of
[R] ->
I = R#route.local_hint,
mnesia:write(
#route{domain = LDomain,
pid = undefined,
local_hint = I}),
mnesia:delete_object(R);
_ ->
ok
end
end,
mnesia:transaction(F)
end
catch
_ ->
erlang:error({invalid_domain, Domain})
end.
unregister_routes(Domains) ->