* src/mod_irc/mod_irc_connection.erl: Updated to work more

correctly with latest jlib

SVN Revision: 166
This commit is contained in:
Alexey Shchepin 2003-10-31 10:48:06 +00:00
parent 23228732ec
commit 8a52d7cad1
2 changed files with 139 additions and 114 deletions

View File

@ -1,3 +1,8 @@
2003-10-31 Alexey Shchepin <alexey@sevcom.net>
* src/mod_irc/mod_irc_connection.erl: Updated to work more
correctly with latest jlib
2003-10-30 Alexey Shchepin <alexey@sevcom.net> 2003-10-30 Alexey Shchepin <alexey@sevcom.net>
* src/ejabberd_c2s.erl: More strong check for authentificated JID * src/ejabberd_c2s.erl: More strong check for authentificated JID

View File

@ -228,9 +228,10 @@ handle_info({route_chan, Channel, Resource,
case xml:get_path_s(El, [{elem, "subject"}, cdata]) of case xml:get_path_s(El, [{elem, "subject"}, cdata]) of
"" -> "" ->
ejabberd_router:route( ejabberd_router:route(
{lists:concat( jlib:make_jid(
[Channel, "%", StateData#state.server]), lists:concat(
StateData#state.myname, StateData#state.nick}, [Channel, "%", StateData#state.server]),
StateData#state.myname, StateData#state.nick),
StateData#state.user, El), StateData#state.user, El),
Body = xml:get_path_s(El, [{elem, "body"}, cdata]), Body = xml:get_path_s(El, [{elem, "body"}, cdata]),
Body1 = case Body of Body1 = case Body of
@ -463,8 +464,9 @@ terminate(Reason, StateName, StateData) ->
lists:foreach( lists:foreach(
fun(Chan) -> fun(Chan) ->
ejabberd_router:route( ejabberd_router:route(
{lists:concat([Chan, "%", StateData#state.server]), jlib:make_jid(
StateData#state.myname, StateData#state.nick}, lists:concat([Chan, "%", StateData#state.server]),
StateData#state.myname, StateData#state.nick),
StateData#state.user, StateData#state.user,
{xmlelement, "presence", [{"type", "error"}], {xmlelement, "presence", [{"type", "error"}],
[{xmlelement, "error", [{"code", "502"}], [{xmlelement, "error", [{"code", "502"}],
@ -524,7 +526,7 @@ bounce_messages(Reason) ->
"502", Reason), "502", Reason),
From = jlib:string_to_jid(xml:get_attr_s("from", Attrs)), From = jlib:string_to_jid(xml:get_attr_s("from", Attrs)),
To = jlib:string_to_jid(xml:get_attr_s("to", Attrs)), To = jlib:string_to_jid(xml:get_attr_s("to", Attrs)),
ejabberd_router ! {route, To, From, Err} ejabberd_router:route(To, From, Err)
end, end,
bounce_messages(Reason) bounce_messages(Reason)
after 0 -> after 0 ->
@ -572,15 +574,16 @@ process_channel_list_user(StateData, Chan, User) ->
[$+ | U2] -> {U2, "member", "participant"}; [$+ | U2] -> {U2, "member", "participant"};
_ -> {User1, "member", "participant"} _ -> {User1, "member", "participant"}
end, end,
ejabberd_router:route({lists:concat([Chan, "%", StateData#state.server]), ejabberd_router:route(
StateData#state.myname, User2}, jlib:make_jid(lists:concat([Chan, "%", StateData#state.server]),
StateData#state.user, StateData#state.myname, User2),
{xmlelement, "presence", [], StateData#state.user,
[{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}], {xmlelement, "presence", [],
[{xmlelement, "item", [{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}],
[{"affiliation", Affiliation}, [{xmlelement, "item",
{"role", Role}], [{"affiliation", Affiliation},
[]}]}]}), {"role", Role}],
[]}]}]}),
case catch dict:update(Chan, case catch dict:update(Chan,
fun(Ps) -> fun(Ps) ->
?SETS:add_element(User2, Ps) ?SETS:add_element(User2, Ps)
@ -605,11 +608,13 @@ process_channel_topic(StateData, Chan, String) ->
true -> true true -> true
end end
end, Msg), end, Msg),
ejabberd_router:route({lists:concat([Chan, "%", StateData#state.server]), ejabberd_router:route(
StateData#state.myname, FromUser}, jlib:make_jid(
StateData#state.user, lists:concat([Chan, "%", StateData#state.server]),
{xmlelement, "message", [{"type", "groupchat"}], StateData#state.myname, FromUser),
[{xmlelement, "subject", [], [{xmlcdata, Msg1}]}]}). StateData#state.user,
{xmlelement, "message", [{"type", "groupchat"}],
[{xmlelement, "subject", [], [{xmlcdata, Msg1}]}]}).
process_chanprivmsg(StateData, Chan, From, String) -> process_chanprivmsg(StateData, Chan, From, String) ->
@ -631,11 +636,12 @@ process_chanprivmsg(StateData, Chan, From, String) ->
true -> true true -> true
end end
end, Msg1), end, Msg1),
ejabberd_router:route({lists:concat([Chan, "%", StateData#state.server]), ejabberd_router:route(
StateData#state.myname, FromUser}, jlib:make_jid(lists:concat([Chan, "%", StateData#state.server]),
StateData#state.user, StateData#state.myname, FromUser),
{xmlelement, "message", [{"type", "groupchat"}], StateData#state.user,
[{xmlelement, "body", [], [{xmlcdata, Msg2}]}]}). {xmlelement, "message", [{"type", "groupchat"}],
[{xmlelement, "body", [], [{xmlcdata, Msg2}]}]}).
@ -658,11 +664,12 @@ process_channotice(StateData, Chan, From, String) ->
true -> true true -> true
end end
end, Msg1), end, Msg1),
ejabberd_router:route({lists:concat([Chan, "%", StateData#state.server]), ejabberd_router:route(
StateData#state.myname, FromUser}, jlib:make_jid(lists:concat([Chan, "%", StateData#state.server]),
StateData#state.user, StateData#state.myname, FromUser),
{xmlelement, "message", [{"type", "groupchat"}], StateData#state.user,
[{xmlelement, "body", [], [{xmlcdata, "NOTICE: " ++ Msg2}]}]}). {xmlelement, "message", [{"type", "groupchat"}],
[{xmlelement, "body", [], [{xmlcdata, "NOTICE: " ++ Msg2}]}]}).
@ -687,8 +694,8 @@ process_privmsg(StateData, Nick, From, String) ->
end end
end, Msg1), end, Msg1),
ejabberd_router:route( ejabberd_router:route(
{lists:concat([FromUser, "!", StateData#state.server]), jlib:make_jid(lists:concat([FromUser, "!", StateData#state.server]),
StateData#state.myname, ""}, StateData#state.myname, ""),
StateData#state.user, StateData#state.user,
{xmlelement, "message", [{"type", "chat"}], {xmlelement, "message", [{"type", "chat"}],
[{xmlelement, "body", [], [{xmlcdata, Msg2}]}]}). [{xmlelement, "body", [], [{xmlcdata, Msg2}]}]}).
@ -714,8 +721,8 @@ process_notice(StateData, Nick, From, String) ->
end end
end, Msg1), end, Msg1),
ejabberd_router:route( ejabberd_router:route(
{lists:concat([FromUser, "!", StateData#state.server]), jlib:make_jid(lists:concat([FromUser, "!", StateData#state.server]),
StateData#state.myname, ""}, StateData#state.myname, ""),
StateData#state.user, StateData#state.user,
{xmlelement, "message", [{"type", "chat"}], {xmlelement, "message", [{"type", "chat"}],
[{xmlelement, "body", [], [{xmlcdata, "NOTICE: " ++ Msg2}]}]}). [{xmlelement, "body", [], [{xmlcdata, "NOTICE: " ++ Msg2}]}]}).
@ -748,38 +755,41 @@ process_topic(StateData, Chan, From, String) ->
true -> true true -> true
end end
end, Msg), end, Msg),
ejabberd_router:route({lists:concat([Chan, "%", StateData#state.server]), ejabberd_router:route(
StateData#state.myname, FromUser}, jlib:make_jid(lists:concat([Chan, "%", StateData#state.server]),
StateData#state.user, StateData#state.myname, FromUser),
{xmlelement, "message", [{"type", "groupchat"}], StateData#state.user,
[{xmlelement, "subject", [], [{xmlcdata, Msg1}]}, {xmlelement, "message", [{"type", "groupchat"}],
{xmlelement, "body", [], [{xmlelement, "subject", [], [{xmlcdata, Msg1}]},
[{xmlcdata, "/me has changed the subject to: " ++ {xmlelement, "body", [],
Msg1}]}]}). [{xmlcdata, "/me has changed the subject to: " ++
Msg1}]}]}).
process_part(StateData, Chan, From, String) -> process_part(StateData, Chan, From, String) ->
[FromUser | FromIdent] = string:tokens(From, "!"), [FromUser | FromIdent] = string:tokens(From, "!"),
{ok, Msg, _} = regexp:sub(String, ".*PART[^:]*", ""), {ok, Msg, _} = regexp:sub(String, ".*PART[^:]*", ""),
ejabberd_router:route({lists:concat([Chan, "%", StateData#state.server]), ejabberd_router:route(
StateData#state.myname, FromUser}, jlib:make_jid(lists:concat([Chan, "%", StateData#state.server]),
StateData#state.user, StateData#state.myname, FromUser),
{xmlelement, "message", [{"type", "groupchat"}], StateData#state.user,
[{xmlelement, "body", [], {xmlelement, "message", [{"type", "groupchat"}],
[{xmlcdata, "/me has part: " ++ [{xmlelement, "body", [],
Msg ++ "(" ++ FromIdent ++ ")" }]}]}), [{xmlcdata, "/me has part: " ++
Msg ++ "(" ++ FromIdent ++ ")" }]}]}),
ejabberd_router:route({lists:concat([Chan, "%", StateData#state.server]), ejabberd_router:route(
StateData#state.myname, FromUser}, jlib:make_jid(lists:concat([Chan, "%", StateData#state.server]),
StateData#state.user, StateData#state.myname, FromUser),
{xmlelement, "presence", [{"type", "unavailable"}], StateData#state.user,
[{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}], {xmlelement, "presence", [{"type", "unavailable"}],
[{xmlelement, "item", [{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}],
[{"affiliation", "member"}, [{xmlelement, "item",
{"role", "none"}], [{"affiliation", "member"},
[]}]}, {"role", "none"}],
{xmlelement, "status", [], []}]},
[{xmlcdata, Msg ++ "(" ++ FromIdent ++ ")"}]}] {xmlelement, "status", [],
}), [{xmlcdata, Msg ++ "(" ++ FromIdent ++ ")"}]}]
}),
case catch dict:update(Chan, case catch dict:update(Chan,
fun(Ps) -> fun(Ps) ->
remove_element(FromUser, Ps) remove_element(FromUser, Ps)
@ -800,17 +810,20 @@ process_quit(StateData, From, String) ->
fun(Chan, Ps) -> fun(Chan, Ps) ->
case ?SETS:is_member(FromUser, Ps) of case ?SETS:is_member(FromUser, Ps) of
true -> true ->
ejabberd_router:route({lists:concat([Chan, "%", StateData#state.server]), ejabberd_router:route(
StateData#state.myname, FromUser}, jlib:make_jid(
StateData#state.user, lists:concat([Chan, "%", StateData#state.server]),
{xmlelement, "message", [{"type", "groupchat"}], StateData#state.myname, FromUser),
[{xmlelement, "body", [], StateData#state.user,
[{xmlcdata, "/me has quit: " ++ {xmlelement, "message", [{"type", "groupchat"}],
Msg ++ "(" ++ FromIdent ++ ")" }]}]}), [{xmlelement, "body", [],
[{xmlcdata, "/me has quit: " ++
Msg ++ "(" ++ FromIdent ++ ")" }]}]}),
ejabberd_router:route( ejabberd_router:route(
{lists:concat([Chan, "%", StateData#state.server]), jlib:make_jid(
StateData#state.myname, FromUser}, lists:concat([Chan, "%", StateData#state.server]),
StateData#state.myname, FromUser),
StateData#state.user, StateData#state.user,
{xmlelement, "presence", [{"type", "unavailable"}], {xmlelement, "presence", [{"type", "unavailable"}],
[{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}], [{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}],
@ -832,25 +845,27 @@ process_quit(StateData, From, String) ->
process_join(StateData, Channel, From, String) -> process_join(StateData, Channel, From, String) ->
[FromUser | FromIdent] = string:tokens(From, "!"), [FromUser | FromIdent] = string:tokens(From, "!"),
Chan = lists:subtract(Channel, ":#"), Chan = lists:subtract(Channel, ":#"),
ejabberd_router:route({lists:concat([Chan, "%", StateData#state.server]), ejabberd_router:route(
StateData#state.myname, FromUser}, jlib:make_jid(lists:concat([Chan, "%", StateData#state.server]),
StateData#state.user, StateData#state.myname, FromUser),
{xmlelement, "presence", [], StateData#state.user,
[{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}], {xmlelement, "presence", [],
[{xmlelement, "item", [{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}],
[{"affiliation", "member"}, [{xmlelement, "item",
{"role", "participant"}], [{"affiliation", "member"},
[]}]}, {"role", "participant"}],
{xmlelement, "status", [], []}]},
[{xmlcdata, FromIdent}]}]}), {xmlelement, "status", [],
[{xmlcdata, FromIdent}]}]}),
{ok, Msg, _} = regexp:sub(String, ".*JOIN[^:]*:", ""), {ok, Msg, _} = regexp:sub(String, ".*JOIN[^:]*:", ""),
ejabberd_router:route({lists:concat([Chan, "%", StateData#state.server]), ejabberd_router:route(
StateData#state.myname, FromUser}, jlib:make_jid(lists:concat([Chan, "%", StateData#state.server]),
StateData#state.user, StateData#state.myname, FromUser),
{xmlelement, "message", [{"type", "groupchat"}], StateData#state.user,
[{xmlelement, "body", [], {xmlelement, "message", [{"type", "groupchat"}],
[{xmlcdata, "/me has joined " ++ [{xmlelement, "body", [],
Msg ++ "(" ++ FromIdent ++ ")" }]}]}), [{xmlcdata, "/me has joined " ++
Msg ++ "(" ++ FromIdent ++ ")" }]}]}),
case catch dict:update(Chan, case catch dict:update(Chan,
fun(Ps) -> fun(Ps) ->
@ -866,29 +881,31 @@ process_join(StateData, Channel, From, String) ->
process_mode_o(StateData, Chan, From, Nick, Affiliation, Role) -> process_mode_o(StateData, Chan, From, Nick, Affiliation, Role) ->
%Msg = lists:last(string:tokens(String, ":")), %Msg = lists:last(string:tokens(String, ":")),
ejabberd_router:route({lists:concat([Chan, "%", StateData#state.server]), ejabberd_router:route(
StateData#state.myname, Nick}, jlib:make_jid(lists:concat([Chan, "%", StateData#state.server]),
StateData#state.user, StateData#state.myname, Nick),
{xmlelement, "presence", [], StateData#state.user,
[{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}], {xmlelement, "presence", [],
[{xmlelement, "item", [{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}],
[{"affiliation", Affiliation}, [{xmlelement, "item",
{"role", Role}], [{"affiliation", Affiliation},
[]}]}]}). {"role", Role}],
[]}]}]}).
process_kick(StateData, Chan, From, Nick) -> process_kick(StateData, Chan, From, Nick) ->
%Msg = lists:last(string:tokens(String, ":")), %Msg = lists:last(string:tokens(String, ":")),
ejabberd_router:route({lists:concat([Chan, "%", StateData#state.server]), ejabberd_router:route(
StateData#state.myname, Nick}, jlib:make_jid(lists:concat([Chan, "%", StateData#state.server]),
StateData#state.user, StateData#state.myname, Nick),
{xmlelement, "presence", [{"type", "unavailable"}], StateData#state.user,
[{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}], {xmlelement, "presence", [{"type", "unavailable"}],
[{xmlelement, "item", [{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}],
[{"affiliation", "none"}, [{xmlelement, "item",
{"role", "none"}], [{"affiliation", "none"},
[]}, {"role", "none"}],
{xmlelement, "status", [{"code", "307"}], []} []},
]}]}). {xmlelement, "status", [{"code", "307"}], []}
]}]}).
process_nick(StateData, From, NewNick) -> process_nick(StateData, From, NewNick) ->
[FromUser | _] = string:tokens(From, "!"), [FromUser | _] = string:tokens(From, "!"),
@ -899,8 +916,9 @@ process_nick(StateData, From, NewNick) ->
case ?SETS:is_member(FromUser, Ps) of case ?SETS:is_member(FromUser, Ps) of
true -> true ->
ejabberd_router:route( ejabberd_router:route(
{lists:concat([Chan, "%", StateData#state.server]), jlib:make_jid(
StateData#state.myname, FromUser}, lists:concat([Chan, "%", StateData#state.server]),
StateData#state.myname, FromUser),
StateData#state.user, StateData#state.user,
{xmlelement, "presence", [{"type", "unavailable"}], {xmlelement, "presence", [{"type", "unavailable"}],
[{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}], [{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}],
@ -912,8 +930,9 @@ process_nick(StateData, From, NewNick) ->
{xmlelement, "status", [{"code", "303"}], []} {xmlelement, "status", [{"code", "303"}], []}
]}]}), ]}]}),
ejabberd_router:route( ejabberd_router:route(
{lists:concat([Chan, "%", StateData#state.server]), jlib:make_jid(
StateData#state.myname, Nick}, lists:concat([Chan, "%", StateData#state.server]),
StateData#state.myname, Nick),
StateData#state.user, StateData#state.user,
{xmlelement, "presence", [], {xmlelement, "presence", [],
[{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}], [{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}],
@ -935,8 +954,9 @@ process_error(StateData, String) ->
lists:foreach( lists:foreach(
fun(Chan) -> fun(Chan) ->
ejabberd_router:route( ejabberd_router:route(
{lists:concat([Chan, "%", StateData#state.server]), jlib:make_jid(
StateData#state.myname, StateData#state.nick}, lists:concat([Chan, "%", StateData#state.server]),
StateData#state.myname, StateData#state.nick),
StateData#state.user, StateData#state.user,
{xmlelement, "presence", [{"type", "error"}], {xmlelement, "presence", [{"type", "error"}],
[{xmlelement, "error", [{"code", "502"}], [{xmlelement, "error", [{"code", "502"}],