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/mod_irc_connection.erl')
-rw-r--r--src/mod_irc_connection.erl243
1 files changed, 121 insertions, 122 deletions
diff --git a/src/mod_irc_connection.erl b/src/mod_irc_connection.erl
index 27e227952..77c6d912a 100644
--- a/src/mod_irc_connection.erl
+++ b/src/mod_irc_connection.erl
@@ -284,13 +284,13 @@ handle_info({route_chan, Channel, _Resource, #message{type = groupchat} = Msg},
case xmpp:get_text(Msg#message.subject) of
<<"">> ->
ejabberd_router:route(
- jid:make(
- iolist_to_binary([Channel,
- <<"%">>,
- StateData#state.server]),
- StateData#state.host,
- StateData#state.nick),
- StateData#state.user, Msg),
+ xmpp:set_from_to(
+ Msg,
+ jid:make(
+ iolist_to_binary([Channel, <<"%">>, StateData#state.server]),
+ StateData#state.host,
+ StateData#state.nick),
+ StateData#state.user)),
Body = xmpp:get_text(Msg#message.body),
case Body of
<<"/quote ", Rest/binary>> ->
@@ -401,34 +401,31 @@ handle_info({route_chan, Channel, Resource,
[Resource]),
_ = (?SEND(Res)),
Err = xmpp:err_feature_not_implemented(),
- ejabberd_router:route_error(To, From, Packet, Err);
+ ejabberd_router:route_error(Packet, Err);
?NS_TIME ->
Res = io_lib:format("PRIVMSG ~s :\001TIME\001\r\n",
[Resource]),
_ = (?SEND(Res)),
Err = xmpp:err_feature_not_implemented(),
- ejabberd_router:route_error(To, From, Packet, Err);
+ ejabberd_router:route_error(Packet, Err);
?NS_VCARD ->
Res = io_lib:format("WHOIS ~s \r\n", [Resource]),
_ = (?SEND(Res)),
Err = xmpp:err_feature_not_implemented(),
- ejabberd_router:route_error(To, From, Packet, Err);
+ ejabberd_router:route_error(Packet, Err);
_ ->
Err = xmpp:err_feature_not_implemented(),
- ejabberd_router:route_error(To, From, Packet, Err)
+ ejabberd_router:route_error(Packet, Err)
end
catch _:{xmpp_codec, Why} ->
Err = xmpp:err_bad_request(
xmpp:format_error(Why), xmpp:get_lang(Packet)),
- ejabberd_router:route_error(To, From, Packet, Err)
+ ejabberd_router:route_error(Packet, Err)
end,
{next_state, StateName, StateData};
-handle_info({route_chan, Channel, _, #iq{} = IQ}, StateName, StateData) ->
- From = StateData#state.user,
- To = jid:make(iolist_to_binary([Channel, <<"%">>, StateData#state.server]),
- StateData#state.host, StateData#state.nick),
+handle_info({route_chan, _Channel, _, #iq{} = IQ}, StateName, StateData) ->
Err = xmpp:err_feature_not_implemented(),
- ejabberd_router:route_error(To, From, IQ, Err),
+ ejabberd_router:route_error(IQ, Err),
{next_state, StateName, StateData};
handle_info({route_nick, Nick, #message{type = chat} = Msg},
StateName, StateData) ->
@@ -670,10 +667,12 @@ terminate(_Reason, _StateName, FullStateData) ->
-spec send_stanza(binary(), state(), stanza()) -> ok.
send_stanza(Chan, StateData, Stanza) ->
ejabberd_router:route(
- jid:make(iolist_to_binary([Chan, <<"%">>, StateData#state.server]),
- StateData#state.host,
- StateData#state.nick),
- StateData#state.user, Stanza).
+ xmpp:set_from_to(
+ Stanza,
+ jid:make(iolist_to_binary([Chan, <<"%">>, StateData#state.server]),
+ StateData#state.host,
+ StateData#state.nick),
+ StateData#state.user)).
-spec send_stanza_unavailable(binary(), state()) -> ok.
send_stanza_unavailable(Chan, StateData) ->
@@ -708,11 +707,9 @@ send_text(#state{socket = Socket, encoding = Encoding},
bounce_messages(Reason) ->
receive
{send_element, El} ->
- From = xmpp:get_from(El),
- To = xmpp:get_to(El),
Lang = xmpp:get_lang(El),
Err = xmpp:err_internal_server_error(Reason, Lang),
- ejabberd_router:route_error(To, From, El, Err),
+ ejabberd_router:route_error(El, Err),
bounce_messages(Reason)
after 0 -> ok
end.
@@ -768,10 +765,10 @@ process_channel_list_user(StateData, Chan, User) ->
_ -> {User1, member, participant}
end,
ejabberd_router:route(
- jid:make(iolist_to_binary([Chan, <<"%">>, StateData#state.server]),
- StateData#state.host, User2),
- StateData#state.user,
#presence{
+ from = jid:make(iolist_to_binary([Chan, <<"%">>, StateData#state.server]),
+ StateData#state.host, User2),
+ to = StateData#state.user,
sub_els = [#muc_user{items = [#muc_item{affiliation = Affiliation,
role = Role}]}]}),
case catch dict:update(Chan,
@@ -787,10 +784,10 @@ process_channel_topic(StateData, Chan, String) ->
Subject = filter_message(Msg),
Body = <<"Topic for #", Chan/binary, ": ", Subject/binary>>,
ejabberd_router:route(
- jid:make(iolist_to_binary([Chan, <<"%">>, StateData#state.server]),
- StateData#state.host),
- StateData#state.user,
- #message{type = groupchat,
+ #message{from = jid:make(iolist_to_binary([Chan, <<"%">>, StateData#state.server]),
+ StateData#state.host),
+ to = StateData#state.user,
+ type = groupchat,
subject = xmpp:mk_text(Subject),
body = xmpp:mk_text(Body)}).
@@ -808,10 +805,10 @@ process_channel_topic_who(StateData, Chan, String) ->
end,
Msg2 = filter_message(Msg1),
ejabberd_router:route(
- jid:make(iolist_to_binary([Chan, <<"%">>, StateData#state.server]),
- StateData#state.host, <<"">>),
- StateData#state.user,
- #message{type = groupchat, body = xmpp:mk_text(Msg2)}).
+ #message{from = jid:make(iolist_to_binary([Chan, <<"%">>, StateData#state.server]),
+ StateData#state.host, <<"">>),
+ to = StateData#state.user,
+ type = groupchat, body = xmpp:mk_text(Msg2)}).
error_nick_in_use(_StateData, String) ->
Msg = ejabberd_regexp:replace(String,
@@ -827,11 +824,11 @@ process_nick_in_use(StateData, String) ->
StateData;
Chan ->
ejabberd_router:route(
- jid:make(iolist_to_binary([Chan, <<"%">>, StateData#state.server]),
- StateData#state.host,
- StateData#state.nick),
- StateData#state.user,
- xmpp:make_error(#presence{}, Error)),
+ #presence{from = jid:make(iolist_to_binary([Chan, <<"%">>, StateData#state.server]),
+ StateData#state.host,
+ StateData#state.nick),
+ to = StateData#state.user,
+ type = error, sub_els = [Error]}),
StateData#state{nickchannel = undefined}
end.
@@ -840,30 +837,30 @@ process_num_error(StateData, String) ->
lists:foreach(
fun(Chan) ->
ejabberd_router:route(
- jid:make(iolist_to_binary([Chan, $%, StateData#state.server]),
- StateData#state.host,
- StateData#state.nick),
- StateData#state.user,
- xmpp:make_error(#message{}, Error))
+ #message{from = jid:make(iolist_to_binary([Chan, $%, StateData#state.server]),
+ StateData#state.host,
+ StateData#state.nick),
+ to = StateData#state.user,
+ type = error, sub_els = [Error]})
end, dict:fetch_keys(StateData#state.channels)),
StateData.
process_endofwhois(StateData, _String, Nick) ->
ejabberd_router:route(
- jid:make(iolist_to_binary([Nick, <<"!">>, StateData#state.server]),
- StateData#state.host),
- StateData#state.user,
- #message{type = chat, body = xmpp:mk_text(<<"End of WHOIS">>)}).
+ #message{from = jid:make(iolist_to_binary([Nick, <<"!">>, StateData#state.server]),
+ StateData#state.host),
+ to = StateData#state.user,
+ type = chat, body = xmpp:mk_text(<<"End of WHOIS">>)}).
process_whois311(StateData, String, Nick, Ident,
Irchost) ->
Fullname = ejabberd_regexp:replace(String,
<<".*311[^:]*:">>, <<"">>),
ejabberd_router:route(
- jid:make(iolist_to_binary([Nick, <<"!">>, StateData#state.server]),
- StateData#state.host, <<"">>),
- StateData#state.user,
- #message{type = chat,
+ #message{from = jid:make(iolist_to_binary([Nick, <<"!">>, StateData#state.server]),
+ StateData#state.host, <<"">>),
+ to = StateData#state.user,
+ type = chat,
body = xmpp:mk_text(
iolist_to_binary(
[<<"WHOIS: ">>, Nick, <<" is ">>, Ident,
@@ -873,10 +870,10 @@ process_whois312(StateData, String, Nick, Ircserver) ->
Ircserverdesc = ejabberd_regexp:replace(String,
<<".*312[^:]*:">>, <<"">>),
ejabberd_router:route(
- jid:make(iolist_to_binary([Nick, <<"!">>, StateData#state.server]),
- StateData#state.host, <<"">>),
- StateData#state.user,
- #message{type = chat,
+ #message{from = jid:make(iolist_to_binary([Nick, <<"!">>, StateData#state.server]),
+ StateData#state.host, <<"">>),
+ to = StateData#state.user,
+ type = chat,
body = xmpp:mk_text(
iolist_to_binary(
[<<"WHOIS: ">>, Nick, <<" use ">>, Ircserver,
@@ -886,10 +883,10 @@ process_whois319(StateData, String, Nick) ->
Chanlist = ejabberd_regexp:replace(String,
<<".*319[^:]*:">>, <<"">>),
ejabberd_router:route(
- jid:make(iolist_to_binary([Nick, <<"!">>, StateData#state.server]),
- StateData#state.host, <<"">>),
- StateData#state.user,
- #message{type = chat,
+ #message{from = jid:make(iolist_to_binary([Nick, <<"!">>, StateData#state.server]),
+ StateData#state.host, <<"">>),
+ to = StateData#state.user,
+ type = chat,
body = xmpp:mk_text(
iolist_to_binary(
[<<"WHOIS: ">>, Nick, <<" is on ">>, Chanlist]))}).
@@ -905,10 +902,10 @@ process_chanprivmsg(StateData, Chan, From, String) ->
end,
Msg2 = filter_message(Msg1),
ejabberd_router:route(
- jid:make(iolist_to_binary([Chan, <<"%">>, StateData#state.server]),
- StateData#state.host, FromUser),
- StateData#state.user,
- #message{type = groupchat, body = xmpp:mk_text(Msg2)}).
+ #message{from = jid:make(iolist_to_binary([Chan, <<"%">>, StateData#state.server]),
+ StateData#state.host, FromUser),
+ to = StateData#state.user,
+ type = groupchat, body = xmpp:mk_text(Msg2)}).
process_channotice(StateData, Chan, From, String) ->
[FromUser | _] = str:tokens(From, <<"!">>),
@@ -921,10 +918,10 @@ process_channotice(StateData, Chan, From, String) ->
end,
Msg2 = filter_message(Msg1),
ejabberd_router:route(
- jid:make(iolist_to_binary([Chan, <<"%">>, StateData#state.server]),
- StateData#state.host, FromUser),
- StateData#state.user,
- #message{type = groupchat, body = xmpp:mk_text(Msg2)}).
+ #message{from = jid:make(iolist_to_binary([Chan, <<"%">>, StateData#state.server]),
+ StateData#state.host, FromUser),
+ to = StateData#state.user,
+ type = groupchat, body = xmpp:mk_text(Msg2)}).
process_privmsg(StateData, _Nick, From, String) ->
[FromUser | _] = str:tokens(From, <<"!">>),
@@ -937,10 +934,10 @@ process_privmsg(StateData, _Nick, From, String) ->
end,
Msg2 = filter_message(Msg1),
ejabberd_router:route(
- jid:make(iolist_to_binary([FromUser, <<"!">>, StateData#state.server]),
- StateData#state.host, <<"">>),
- StateData#state.user,
- #message{type = chat, body = xmpp:mk_text(Msg2)}).
+ #message{from = jid:make(iolist_to_binary([FromUser, <<"!">>, StateData#state.server]),
+ StateData#state.host, <<"">>),
+ to = StateData#state.user,
+ type = chat, body = xmpp:mk_text(Msg2)}).
process_notice(StateData, _Nick, From, String) ->
[FromUser | _] = str:tokens(From, <<"!">>),
@@ -953,10 +950,10 @@ process_notice(StateData, _Nick, From, String) ->
end,
Msg2 = filter_message(Msg1),
ejabberd_router:route(
- jid:make(iolist_to_binary([FromUser, <<"!">>, StateData#state.server]),
- StateData#state.host),
- StateData#state.user,
- #message{type = chat, body = xmpp:mk_text(Msg2)}).
+ #message{from = jid:make(iolist_to_binary([FromUser, <<"!">>, StateData#state.server]),
+ StateData#state.host),
+ to = StateData#state.user,
+ type = chat, body = xmpp:mk_text(Msg2)}).
process_version(StateData, _Nick, From) ->
[FromUser | _] = str:tokens(From, <<"!">>),
@@ -982,10 +979,10 @@ process_topic(StateData, Chan, From, String) ->
<<".*TOPIC[^:]*:">>, <<"">>),
Msg1 = filter_message(Msg),
ejabberd_router:route(
- jid:make(iolist_to_binary([Chan, <<"%">>, StateData#state.server]),
- StateData#state.host, FromUser),
- StateData#state.user,
- #message{type = groupchat,
+ #message{from = jid:make(iolist_to_binary([Chan, <<"%">>, StateData#state.server]),
+ StateData#state.host, FromUser),
+ to = StateData#state.user,
+ type = groupchat,
subject = xmpp:mk_text(Msg1),
body = xmpp:mk_text(<<"/me has changed the subject to: ",
Msg1/binary>>)}).
@@ -996,10 +993,10 @@ process_part(StateData, Chan, From, String) ->
<<".*PART[^:]*:">>, <<"">>),
Msg1 = filter_message(Msg),
ejabberd_router:route(
- jid:make(iolist_to_binary([Chan, <<"%">>, StateData#state.server]),
- StateData#state.host, FromUser),
- StateData#state.user,
- #presence{type = unavailable,
+ #presence{from = jid:make(iolist_to_binary([Chan, <<"%">>, StateData#state.server]),
+ StateData#state.host, FromUser),
+ to = StateData#state.user,
+ type = unavailable,
sub_els = [#muc_user{
items = [#muc_item{affiliation = member,
role = none}]}],
@@ -1023,11 +1020,11 @@ process_quit(StateData, From, String) ->
case (?SETS):is_member(FromUser, Ps) of
true ->
ejabberd_router:route(
- jid:make(iolist_to_binary([Chan, $%, StateData#state.server]),
- StateData#state.host,
- FromUser),
- StateData#state.user,
- #presence{type = unavailable,
+ #presence{from = jid:make(iolist_to_binary([Chan, $%, StateData#state.server]),
+ StateData#state.host,
+ FromUser),
+ to = StateData#state.user,
+ type = unavailable,
sub_els = [#muc_user{
items = [#muc_item{
affiliation = member,
@@ -1045,10 +1042,10 @@ process_join(StateData, Channel, From, _String) ->
[FromUser | FromIdent] = str:tokens(From, <<"!">>),
[Chan | _] = binary:split(Channel, <<":#">>),
ejabberd_router:route(
- jid:make(iolist_to_binary([Chan, <<"%">>, StateData#state.server]),
- StateData#state.host, FromUser),
- StateData#state.user,
#presence{
+ from = jid:make(iolist_to_binary([Chan, <<"%">>, StateData#state.server]),
+ StateData#state.host, FromUser),
+ to = StateData#state.user,
sub_els = [#muc_user{items = [#muc_item{affiliation = member,
role = participant}]}],
status = xmpp:mk_text(list_to_binary(FromIdent))}),
@@ -1063,10 +1060,10 @@ process_join(StateData, Channel, From, _String) ->
process_mode_o(StateData, Chan, _From, Nick,
Affiliation, Role) ->
ejabberd_router:route(
- jid:make(iolist_to_binary([Chan, <<"%">>, StateData#state.server]),
- StateData#state.host, Nick),
- StateData#state.user,
#presence{
+ from = jid:make(iolist_to_binary([Chan, <<"%">>, StateData#state.server]),
+ StateData#state.host, Nick),
+ to = StateData#state.user,
sub_els = [#muc_user{items = [#muc_item{affiliation = Affiliation,
role = Role}]}]}).
@@ -1075,15 +1072,17 @@ process_kick(StateData, Chan, From, Nick, String) ->
Msg2 = <<Nick/binary, " kicked by ", From/binary, " (",
(filter_message(Msg))/binary, ")">>,
ejabberd_router:route(
- jid:make(iolist_to_binary([Chan, <<"%">>, StateData#state.server]),
- StateData#state.host),
- StateData#state.user,
- #message{type = groupchat, body = xmpp:mk_text(Msg2)}),
+ #message{
+ from = jid:make(iolist_to_binary([Chan, <<"%">>, StateData#state.server]),
+ StateData#state.host),
+ to = StateData#state.user,
+ type = groupchat, body = xmpp:mk_text(Msg2)}),
ejabberd_router:route(
- jid:make(iolist_to_binary([Chan, <<"%">>, StateData#state.server]),
- StateData#state.host, Nick),
- StateData#state.user,
- #presence{type = unavailable,
+ #presence{
+ from = jid:make(iolist_to_binary([Chan, <<"%">>, StateData#state.server]),
+ StateData#state.host, Nick),
+ to = StateData#state.user,
+ type = unavailable,
sub_els = [#muc_user{items = [#muc_item{
affiliation = none,
role = none}],
@@ -1098,11 +1097,11 @@ process_nick(StateData, From, NewNick) ->
case (?SETS):is_member(FromUser, Ps) of
true ->
ejabberd_router:route(
- jid:make(iolist_to_binary([Chan, $%, StateData#state.server]),
- StateData#state.host,
- FromUser),
- StateData#state.user,
#presence{
+ from = jid:make(iolist_to_binary([Chan, $%, StateData#state.server]),
+ StateData#state.host,
+ FromUser),
+ to = StateData#state.user,
type = unavailable,
sub_els = [#muc_user{
items = [#muc_item{
@@ -1111,10 +1110,10 @@ process_nick(StateData, From, NewNick) ->
nick = Nick}],
status_codes = [303]}]}),
ejabberd_router:route(
- jid:make(iolist_to_binary([Chan, $%, StateData#state.server]),
- StateData#state.host, Nick),
- StateData#state.user,
#presence{
+ from = jid:make(iolist_to_binary([Chan, $%, StateData#state.server]),
+ StateData#state.host, Nick),
+ to = StateData#state.user,
sub_els = [#muc_user{
items = [#muc_item{
affiliation = member,
@@ -1133,13 +1132,13 @@ process_error(StateData, String) ->
lists:foreach(
fun(Chan) ->
ejabberd_router:route(
- jid:make(iolist_to_binary([Chan, $%, StateData#state.server]),
- StateData#state.host,
- StateData#state.nick),
- StateData#state.user,
- xmpp:make_error(
- #presence{},
- xmpp:err_internal_server_error(String, ?MYLANG)))
+ #presence{
+ from = jid:make(iolist_to_binary([Chan, $%, StateData#state.server]),
+ StateData#state.host,
+ StateData#state.nick),
+ to = StateData#state.user,
+ type = error,
+ sub_els = [xmpp:err_internal_server_error(String, ?MYLANG)]})
end, dict:fetch_keys(StateData#state.channels)).
error_unknown_num(_StateData, String, Type) ->
@@ -1154,18 +1153,18 @@ remove_element(E, Set) ->
_ -> Set
end.
-iq_admin(StateData, Channel, From, To,
+iq_admin(StateData, Channel, From, _To,
#iq{type = Type, sub_els = [SubEl]} = IQ) ->
try process_iq_admin(StateData, Channel, Type, SubEl) of
{result, Result} ->
- ejabberd_router:route(To, From, xmpp:make_iq_result(IQ, Result));
+ ejabberd_router:route(xmpp:make_iq_result(IQ, Result));
{error, Error} ->
- ejabberd_router:route_error(To, From, IQ, Error)
+ ejabberd_router:route_error(IQ, Error)
catch E:R ->
?ERROR_MSG("failed to process admin query from ~s: ~p",
[jid:to_string(From), {E, {R, erlang:get_stacktrace()}}]),
ejabberd_router:route_error(
- To, From, IQ, xmpp:err_internal_server_error())
+ IQ, xmpp:err_internal_server_error())
end.
process_iq_admin(_StateData, _Channel, set, #muc_admin{items = []}) ->