mirror of
https://github.com/processone/ejabberd.git
synced 2024-06-14 22:00:16 +02:00
* src/mod_irc/mod_irc_connection.erl: Added support for WHOIS
requests and reply to USERINFO (thanks to Oleg V. Motienko) SVN Revision: 349
This commit is contained in:
parent
fb870ca15d
commit
47b5e514dc
|
@ -1,3 +1,8 @@
|
||||||
|
2005-05-18 Alexey Shchepin <alexey@sevcom.net>
|
||||||
|
|
||||||
|
* src/mod_irc/mod_irc_connection.erl: Added support for WHOIS
|
||||||
|
requests and reply to USERINFO (thanks to Oleg V. Motienko)
|
||||||
|
|
||||||
2005-05-17 Alexey Shchepin <alexey@sevcom.net>
|
2005-05-17 Alexey Shchepin <alexey@sevcom.net>
|
||||||
|
|
||||||
* src/stringprep/stringprep_drv.c: Bugfix
|
* src/stringprep/stringprep_drv.c: Bugfix
|
||||||
|
|
|
@ -322,6 +322,13 @@ handle_info({route_chan, Channel, Resource,
|
||||||
Err = jlib:make_error_reply(
|
Err = jlib:make_error_reply(
|
||||||
El, ?ERR_FEATURE_NOT_IMPLEMENTED),
|
El, ?ERR_FEATURE_NOT_IMPLEMENTED),
|
||||||
ejabberd_router:route(To, From, Err);
|
ejabberd_router:route(To, From, Err);
|
||||||
|
#iq{xmlns = ?NS_VCARD} ->
|
||||||
|
Res = io_lib:format("WHOIS ~s \r\n",
|
||||||
|
[Resource]),
|
||||||
|
?SEND(Res),
|
||||||
|
Err = jlib:make_error_reply(
|
||||||
|
El, ?ERR_FEATURE_NOT_IMPLEMENTED),
|
||||||
|
ejabberd_router:route(To, From, Err);
|
||||||
#iq{} ->
|
#iq{} ->
|
||||||
Err = jlib:make_error_reply(
|
Err = jlib:make_error_reply(
|
||||||
El, ?ERR_FEATURE_NOT_IMPLEMENTED),
|
El, ?ERR_FEATURE_NOT_IMPLEMENTED),
|
||||||
|
@ -390,6 +397,18 @@ handle_info({ircstring, [$: | String]}, StateName, StateData) ->
|
||||||
[_, "332", Nick, [$# | Chan] | _] ->
|
[_, "332", Nick, [$# | Chan] | _] ->
|
||||||
process_channel_topic(StateData, Chan, String),
|
process_channel_topic(StateData, Chan, String),
|
||||||
StateData;
|
StateData;
|
||||||
|
[_, "318", _, Nick | _] ->
|
||||||
|
process_endofwhois(StateData, String, Nick),
|
||||||
|
StateData;
|
||||||
|
[_, "311", _, Nick, Ident, Irchost | _ ] ->
|
||||||
|
process_whois311(StateData, String, Nick, Ident, Irchost),
|
||||||
|
StateData;
|
||||||
|
[_, "312", _, Nick, Ircserver | _ ] ->
|
||||||
|
process_whois312(StateData, String, Nick, Ircserver),
|
||||||
|
StateData;
|
||||||
|
[_, "319", _, Nick | _ ] ->
|
||||||
|
process_whois319(StateData, String, Nick),
|
||||||
|
StateData;
|
||||||
[From, "PRIVMSG", [$# | Chan] | _] ->
|
[From, "PRIVMSG", [$# | Chan] | _] ->
|
||||||
process_chanprivmsg(StateData, Chan, From, String),
|
process_chanprivmsg(StateData, Chan, From, String),
|
||||||
StateData;
|
StateData;
|
||||||
|
@ -399,6 +418,9 @@ handle_info({ircstring, [$: | String]}, StateName, StateData) ->
|
||||||
[From, "PRIVMSG", Nick, ":\001VERSION\001" | _] ->
|
[From, "PRIVMSG", Nick, ":\001VERSION\001" | _] ->
|
||||||
process_version(StateData, Nick, From),
|
process_version(StateData, Nick, From),
|
||||||
StateData;
|
StateData;
|
||||||
|
[From, "PRIVMSG", Nick, ":\001USERINFO\001" | _] ->
|
||||||
|
process_userinfo(StateData, Nick, From),
|
||||||
|
StateData;
|
||||||
[From, "PRIVMSG", Nick | _] ->
|
[From, "PRIVMSG", Nick | _] ->
|
||||||
process_privmsg(StateData, Nick, From, String),
|
process_privmsg(StateData, Nick, From, String),
|
||||||
StateData;
|
StateData;
|
||||||
|
@ -625,6 +647,50 @@ process_channel_topic(StateData, Chan, String) ->
|
||||||
[{xmlelement, "subject", [], [{xmlcdata, Msg1}]}]}).
|
[{xmlelement, "subject", [], [{xmlcdata, Msg1}]}]}).
|
||||||
|
|
||||||
|
|
||||||
|
process_endofwhois(StateData, String, Nick) ->
|
||||||
|
ejabberd_router:route(
|
||||||
|
jlib:make_jid(lists:concat([Nick, "!", StateData#state.server]),
|
||||||
|
StateData#state.host, ""),
|
||||||
|
StateData#state.user,
|
||||||
|
{xmlelement, "message", [{"type", "chat"}],
|
||||||
|
[{xmlelement, "body", [], [{xmlcdata, "End of WHOIS"}]}]}).
|
||||||
|
|
||||||
|
process_whois311(StateData, String, Nick, Ident, Irchost) ->
|
||||||
|
{ok, Fullname, _} = regexp:sub(String, ".*311[^:]*:", ""),
|
||||||
|
ejabberd_router:route(
|
||||||
|
jlib:make_jid(lists:concat([Nick, "!", StateData#state.server]),
|
||||||
|
StateData#state.host, ""),
|
||||||
|
StateData#state.user,
|
||||||
|
{xmlelement, "message", [{"type", "chat"}],
|
||||||
|
[{xmlelement, "body", [],
|
||||||
|
[{xmlcdata, lists:concat(
|
||||||
|
["WHOIS: ", Nick, " is ",
|
||||||
|
Ident, "@" , Irchost, " : " , Fullname])}]}]}).
|
||||||
|
|
||||||
|
process_whois312(StateData, String, Nick, Ircserver) ->
|
||||||
|
{ok, Ircserverdesc, _} = regexp:sub(String, ".*312[^:]*:", ""),
|
||||||
|
ejabberd_router:route(
|
||||||
|
jlib:make_jid(lists:concat([Nick, "!", StateData#state.server]),
|
||||||
|
StateData#state.host, ""),
|
||||||
|
StateData#state.user,
|
||||||
|
{xmlelement, "message", [{"type", "chat"}],
|
||||||
|
[{xmlelement, "body", [],
|
||||||
|
[{xmlcdata, lists:concat(["WHOIS: ", Nick, " use ",
|
||||||
|
Ircserver, " : ", Ircserverdesc])}]}]}).
|
||||||
|
|
||||||
|
process_whois319(StateData, String, Nick) ->
|
||||||
|
{ok, Chanlist, _} = regexp:sub(String, ".*319[^:]*:", ""),
|
||||||
|
ejabberd_router:route(
|
||||||
|
jlib:make_jid(lists:concat([Nick, "!", StateData#state.server]),
|
||||||
|
StateData#state.host, ""),
|
||||||
|
StateData#state.user,
|
||||||
|
{xmlelement, "message", [{"type", "chat"}],
|
||||||
|
[{xmlelement, "body", [],
|
||||||
|
[{xmlcdata, lists:concat(["WHOIS: ", Nick, " is on ",
|
||||||
|
Chanlist])}]}]}).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
process_chanprivmsg(StateData, Chan, From, String) ->
|
process_chanprivmsg(StateData, Chan, From, String) ->
|
||||||
[FromUser | _] = string:tokens(From, "!"),
|
[FromUser | _] = string:tokens(From, "!"),
|
||||||
{ok, Msg, _} = regexp:sub(String, ".*PRIVMSG[^:]*:", ""),
|
{ok, Msg, _} = regexp:sub(String, ".*PRIVMSG[^:]*:", ""),
|
||||||
|
@ -714,6 +780,17 @@ process_version(StateData, Nick, From) ->
|
||||||
[FromUser])).
|
[FromUser])).
|
||||||
|
|
||||||
|
|
||||||
|
process_userinfo(StateData, Nick, From) ->
|
||||||
|
[FromUser | _] = string:tokens(From, "!"),
|
||||||
|
send_text(
|
||||||
|
StateData,
|
||||||
|
io_lib:format("NOTICE ~s :\001USERINFO "
|
||||||
|
"This user uses xmpp:~s"
|
||||||
|
"\001\r\n",
|
||||||
|
[FromUser,
|
||||||
|
jlib:jid_to_string(StateData#state.user)])).
|
||||||
|
|
||||||
|
|
||||||
process_topic(StateData, Chan, From, String) ->
|
process_topic(StateData, Chan, From, String) ->
|
||||||
[FromUser | _] = string:tokens(From, "!"),
|
[FromUser | _] = string:tokens(From, "!"),
|
||||||
{ok, Msg, _} = regexp:sub(String, ".*TOPIC[^:]*:", ""),
|
{ok, Msg, _} = regexp:sub(String, ".*TOPIC[^:]*:", ""),
|
||||||
|
|
Loading…
Reference in New Issue
Block a user