diff options
author | Alexey Shchepin <alexey@process-one.net> | 2005-05-17 22:35:16 +0000 |
---|---|---|
committer | Alexey Shchepin <alexey@process-one.net> | 2005-05-17 22:35:16 +0000 |
commit | 47b5e514dcdfc214ac9bc344b23e25db861e645d (patch) | |
tree | 06761d17b9819656149411964aa67d10a61290b7 /src/mod_irc | |
parent | * src/stringprep/stringprep_drv.c: Bugfix (diff) |
* src/mod_irc/mod_irc_connection.erl: Added support for WHOIS
requests and reply to USERINFO (thanks to Oleg V. Motienko)
SVN Revision: 349
Diffstat (limited to 'src/mod_irc')
-rw-r--r-- | src/mod_irc/mod_irc_connection.erl | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/src/mod_irc/mod_irc_connection.erl b/src/mod_irc/mod_irc_connection.erl index 11a17291..aae1decd 100644 --- a/src/mod_irc/mod_irc_connection.erl +++ b/src/mod_irc/mod_irc_connection.erl @@ -322,6 +322,13 @@ handle_info({route_chan, Channel, Resource, Err = jlib:make_error_reply( El, ?ERR_FEATURE_NOT_IMPLEMENTED), 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{} -> Err = jlib:make_error_reply( El, ?ERR_FEATURE_NOT_IMPLEMENTED), @@ -390,6 +397,18 @@ handle_info({ircstring, [$: | String]}, StateName, StateData) -> [_, "332", Nick, [$# | Chan] | _] -> process_channel_topic(StateData, Chan, String), 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] | _] -> process_chanprivmsg(StateData, Chan, From, String), StateData; @@ -399,6 +418,9 @@ handle_info({ircstring, [$: | String]}, StateName, StateData) -> [From, "PRIVMSG", Nick, ":\001VERSION\001" | _] -> process_version(StateData, Nick, From), StateData; + [From, "PRIVMSG", Nick, ":\001USERINFO\001" | _] -> + process_userinfo(StateData, Nick, From), + StateData; [From, "PRIVMSG", Nick | _] -> process_privmsg(StateData, Nick, From, String), StateData; @@ -625,6 +647,50 @@ process_channel_topic(StateData, Chan, String) -> [{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) -> [FromUser | _] = string:tokens(From, "!"), {ok, Msg, _} = regexp:sub(String, ".*PRIVMSG[^:]*:", ""), @@ -714,6 +780,17 @@ process_version(StateData, Nick, From) -> [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) -> [FromUser | _] = string:tokens(From, "!"), {ok, Msg, _} = regexp:sub(String, ".*TOPIC[^:]*:", ""), |