aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ejabberd_s2s_out.erl9
-rw-r--r--src/mod_muc/mod_muc.erl8
-rw-r--r--src/mod_muc/mod_muc_room.erl15
-rw-r--r--src/mod_vcard.erl9
-rw-r--r--src/msgs/ru.msg1
5 files changed, 32 insertions, 10 deletions
diff --git a/src/ejabberd_s2s_out.erl b/src/ejabberd_s2s_out.erl
index 7899b3d5b..660a56779 100644
--- a/src/ejabberd_s2s_out.erl
+++ b/src/ejabberd_s2s_out.erl
@@ -114,8 +114,8 @@ open_socket(init, StateData) ->
{ok, _Socket} = R -> R;
{error, Reason1} ->
?DEBUG("s2s_out: connect return ~p~n", [Reason1]),
- gen_tcp:connect(Addr, Port,
- [binary, {packet, 0}, inet6])
+ catch gen_tcp:connect(Addr, Port,
+ [binary, {packet, 0}, inet6])
end,
case Res of
{ok, Socket} ->
@@ -130,6 +130,11 @@ open_socket(init, StateData) ->
?DEBUG("s2s_out: inet6 connect return ~p~n", [Reason]),
Error = ?ERR_REMOTE_SERVER_NOT_FOUND,
bounce_messages(Error),
+ {stop, normal, StateData};
+ {'EXIT', Reason} ->
+ ?DEBUG("s2s_out: inet6 connect crashed ~p~n", [Reason]),
+ Error = ?ERR_REMOTE_SERVER_NOT_FOUND,
+ bounce_messages(Error),
{stop, normal, StateData}
end.
diff --git a/src/mod_muc/mod_muc.erl b/src/mod_muc/mod_muc.erl
index 551182b3d..0098ae5d9 100644
--- a/src/mod_muc/mod_muc.erl
+++ b/src/mod_muc/mod_muc.erl
@@ -280,19 +280,19 @@ iq_disco_info() ->
{xmlelement, "feature", [{"var", ?NS_VCARD}], []}].
-process_iq_disco_items(Host, From, To, IQ) ->
+process_iq_disco_items(Host, From, To, #iq{lang = Lang} = IQ) ->
Res = IQ#iq{type = result,
sub_el = [{xmlelement, "query",
[{"xmlns", ?NS_DISCO_ITEMS}],
- iq_disco_items(Host, From)}]},
+ iq_disco_items(Host, From, Lang)}]},
ejabberd_router:route(To,
From,
jlib:iq_to_xml(Res)).
-iq_disco_items(Host, From) ->
+iq_disco_items(Host, From, Lang) ->
lists:zf(fun(#muc_online_room{name = Name, pid = Pid}) ->
case catch gen_fsm:sync_send_all_state_event(
- Pid, {get_disco_item, From}, 100) of
+ Pid, {get_disco_item, From, Lang}, 100) of
{item, Desc} ->
{true,
{xmlelement, "item",
diff --git a/src/mod_muc/mod_muc_room.erl b/src/mod_muc/mod_muc_room.erl
index 2aca20b1b..47e25cf72 100644
--- a/src/mod_muc/mod_muc_room.erl
+++ b/src/mod_muc/mod_muc_room.erl
@@ -583,7 +583,7 @@ handle_event(Event, StateName, StateData) ->
%% {stop, Reason, NewStateData} |
%% {stop, Reason, Reply, NewStateData}
%%----------------------------------------------------------------------
-handle_sync_event({get_disco_item, JID}, From, StateName, StateData) ->
+handle_sync_event({get_disco_item, JID, Lang}, From, StateName, StateData) ->
FAffiliation = get_affiliation(JID, StateData),
FRole = get_role(JID, StateData),
Tail =
@@ -592,12 +592,21 @@ handle_sync_event({get_disco_item, JID}, From, StateName, StateData) ->
(FAffiliation == admin) orelse
(FAffiliation == owner) of
true ->
+ Desc = case (StateData#state.config)#config.public of
+ true ->
+ "";
+ _ ->
+ translate:translate(Lang, "private, ")
+ end,
Len = length(?DICT:to_list(StateData#state.users)),
- " (" ++ integer_to_list(Len) ++ ")";
+ " (" ++ Desc ++ integer_to_list(Len) ++ ")";
_ ->
""
end,
- Reply = case (StateData#state.config)#config.public of
+ Reply = case ((StateData#state.config)#config.public == true) orelse
+ (FRole /= none) orelse
+ (FAffiliation == admin) orelse
+ (FAffiliation == owner) of
true ->
{item, get_title(StateData) ++ Tail};
_ ->
diff --git a/src/mod_vcard.erl b/src/mod_vcard.erl
index e56a4454d..5f6bf4f5e 100644
--- a/src/mod_vcard.erl
+++ b/src/mod_vcard.erl
@@ -147,9 +147,16 @@ set_vcard(User, VCARD) ->
BDay = xml:get_path_s(VCARD, [{elem, "BDAY"}, cdata]),
CTRY = xml:get_path_s(VCARD, [{elem, "ADR"}, {elem, "CTRY"}, cdata]),
Locality = xml:get_path_s(VCARD, [{elem, "ADR"}, {elem, "LOCALITY"},cdata]),
- EMail = xml:get_path_s(VCARD, [{elem, "EMAIL"}, cdata]),
+ EMail1 = xml:get_path_s(VCARD, [{elem, "EMAIL"}, {elem, "USERID"},cdata]),
+ EMail2 = xml:get_path_s(VCARD, [{elem, "EMAIL"}, cdata]),
OrgName = xml:get_path_s(VCARD, [{elem, "ORG"}, {elem, "ORGNAME"}, cdata]),
OrgUnit = xml:get_path_s(VCARD, [{elem, "ORG"}, {elem, "ORGUNIT"}, cdata]),
+ EMail = case EMail1 of
+ "" ->
+ EMail2;
+ _ ->
+ EMail1
+ end,
LUser = jlib:nodeprep(User),
LFN = stringprep:tolower(FN),
diff --git a/src/msgs/ru.msg b/src/msgs/ru.msg
index 09c2c06ca..3a24f78ed 100644
--- a/src/msgs/ru.msg
+++ b/src/msgs/ru.msg
@@ -167,6 +167,7 @@
{"Invalid affiliation: ~s", "Недопустимый ранг: ~s"}.
{"Invalid role: ~s", "Недопустимая роль: ~s"}.
{"Owner privileges required", "Требуются права владельца"}.
+{"private, ", "приватная, "}.
% mod_irc/mod_irc.erl
{"ejabberd IRC module\nCopyright (c) 2003-2004 Alexey Shchepin",