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:
authorAlexey Shchepin <alexey@process-one.net>2003-10-19 20:19:55 +0400
committerAlexey Shchepin <alexey@process-one.net>2003-10-19 20:19:55 +0400
commitf594dd0746d9f40360134329f2ede8460222fb0c (patch)
treee5326775550c4410a49627c909dc94dc30479f23 /src/ejabberd_local.erl
parenta704f9760d4b8e3445276e08166fed58c935b18c (diff)
* src/ejabberd_local.erl: Added support for announce/online
messages * src/ejabberd.cfg.example: Updated * src/mod_register.erl: Added support for sending registration notifications SVN Revision: 154
Diffstat (limited to 'src/ejabberd_local.erl')
-rw-r--r--src/ejabberd_local.erl42
1 files changed, 29 insertions, 13 deletions
diff --git a/src/ejabberd_local.erl b/src/ejabberd_local.erl
index d4517f35b..039389a02 100644
--- a/src/ejabberd_local.erl
+++ b/src/ejabberd_local.erl
@@ -72,7 +72,7 @@ do_route(State, From, To, Packet) ->
[From, To, Packet, 8]),
case To of
#jid{luser = "", lresource = ""} ->
- {xmlelement, Name, Attrs, Els} = Packet,
+ {xmlelement, Name, Attrs, _Els} = Packet,
case Name of
"iq" ->
process_iq(State, From, To, Packet);
@@ -83,15 +83,20 @@ do_route(State, From, To, Packet) ->
_ ->
ok
end;
- #jid{luser = ""} ->
- {xmlelement, _Name, Attrs, _Els} = Packet,
+ #jid{luser = "", lresource = Res} ->
+ {xmlelement, Name, Attrs, _Els} = Packet,
case xml:get_attr_s("type", Attrs) of
"error" -> ok;
"result" -> ok;
_ ->
- Err = jlib:make_error_reply(Packet, ?ERR_ITEM_NOT_FOUND),
- ejabberd_router:route(
- jlib:make_jid("", State#state.mydomain, ""), From, Err)
+ case {Res, Name} of
+ {"announce/online", "message"} ->
+ announce_online(From, To, Packet);
+ _ ->
+ Err = jlib:make_error_reply(
+ Packet, ?ERR_ITEM_NOT_FOUND),
+ ejabberd_router:route(To, From, Err)
+ end
end;
_ ->
ejabberd_sm ! {route, From, To, Packet}
@@ -100,7 +105,7 @@ do_route(State, From, To, Packet) ->
process_iq(State, From, To, Packet) ->
IQ = jlib:iq_query_info(Packet),
case IQ of
- {iq, ID, Type, XMLNS, SubEl} ->
+ {iq, _ID, Type, XMLNS, _SubEl} ->
case jlib:is_iq_request_type(Type) of
true ->
case ets:lookup(State#state.iqtable, XMLNS) of
@@ -121,10 +126,7 @@ process_iq(State, From, To, Packet) ->
[] ->
Err = jlib:make_error_reply(
Packet, ?ERR_FEATURE_NOT_IMPLEMENTED),
- ejabberd_router ! {route,
- {"", State#state.mydomain, ""},
- From,
- Err}
+ ejabberd_router:route(To, From, Err)
end;
_ ->
ok
@@ -133,8 +135,7 @@ process_iq(State, From, To, Packet) ->
ok;
_ ->
Err = jlib:make_error_reply(Packet, ?ERR_BAD_REQUEST),
- ejabberd_router ! {route,
- {"", State#state.mydomain, ""}, From, Err},
+ ejabberd_router:route(To, From, Err),
ok
end.
@@ -147,3 +148,18 @@ register_iq_handler(XMLNS, Module, Fun, Opts) ->
unregister_iq_handler(XMLNS) ->
ejabberd_local ! {unregister_iq_handler, XMLNS}.
+
+announce_online(From, To, Packet) ->
+ case acl:match_rule(announce, From) of
+ deny ->
+ Err = jlib:make_error_reply(Packet, ?ERR_NOT_ALLOWED),
+ ejabberd_router:route(To, From, Err);
+ allow ->
+ Local = jlib:make_jid("", ?MYNAME, ""),
+ lists:foreach(
+ fun({U, R}) ->
+ Dest = jlib:make_jid(U, ?MYNAME, R),
+ ejabberd_router:route(Local, Dest, Packet)
+ end, ejabberd_sm:dirty_get_sessions_list())
+ end.
+