NewStateData =
case xml:get_attr_s("type", Attrs) of
"unavailable" ->
+ send_stanza_unavailable(Channel, StateData),
S1 = ?SEND(io_lib:format("PART #~s\r\n", [Channel])),
S1#state{channels =
dict:erase(Channel, S1#state.channels)};
bounce_messages("Server Connect Failed"),
lists:foreach(
fun(Chan) ->
- ejabberd_router:route(
- jlib:make_jid(
- lists:concat([Chan, "%", StateData#state.server]),
- StateData#state.host, StateData#state.nick),
- StateData#state.user,
- {xmlelement, "presence", [{"type", "error"}],
- [Error]})
+ Stanza = {xmlelement, "presence", [{"type", "error"}],
+ [Error]},
+ send_stanza(Chan, StateData, Stanza)
end, dict:fetch_keys(StateData#state.channels)),
case StateData#state.socket of
undefined ->
end,
ok.
+send_stanza(Chan, StateData, Stanza) ->
+ ejabberd_router:route(
+ jlib:make_jid(
+ lists:concat([Chan, "%", StateData#state.server]),
+ StateData#state.host, StateData#state.nick),
+ StateData#state.user,
+ Stanza).
+
+send_stanza_unavailable(Chan, StateData) ->
+ Affiliation = "member", % this is a simplification
+ Role = "none",
+ Stanza =
+ {xmlelement, "presence", [{"type", "unavailable"}],
+ [{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}],
+ [{xmlelement, "item",
+ [{"affiliation", Affiliation},
+ {"role", Role}],
+ []},
+ {xmlelement, "status",
+ [{"code", "110"}],
+ []}
+ ]}]},
+ send_stanza(Chan, StateData, Stanza).
+
%%%----------------------------------------------------------------------
%%% Internal functions
%%%----------------------------------------------------------------------