~ubuntu-branches/ubuntu/trusty/ejabberd/trusty-proposed

« back to all changes in this revision

Viewing changes to src/mod_muc/mod_muc_room.erl

  • Committer: Bazaar Package Importer
  • Author(s): Gerfried Fuchs, Konstantin Khomoutov, Gerfried Fuchs
  • Date: 2010-01-14 20:40:53 UTC
  • mfrom: (1.1.12 upstream)
  • Revision ID: james.westby@ubuntu.com-20100114204053-knme5bdbp0etweq9
Tags: 2.1.1-1
[ Konstantin Khomoutov ]
* New upstream release.
  This also fixes a bug in ejabberdctl (closes: #560824).
* Update mod_admin_extra to upstream revision 1049.
* Remove obsolete patches (those backported from 2.1.1).
* Suggest imagemagick instead of recommending it (closes: #560889).

[ Gerfried Fuchs ]
* Switch Vcs-* fields to point to new git repository. All the conversion
  work was actually done by Konstantin.
* Call debconf-updatepo.

Show diffs side-by-side

added added

removed removed

Lines of Context:
470
470
              {xmlelement, "iq", Attrs, _Els} = Packet},
471
471
             StateData) ->
472
472
    Lang = xml:get_attr_s("xml:lang", Attrs),
 
473
    StanzaId = xml:get_attr_s("id", Attrs),
473
474
    case {(StateData#state.config)#config.allow_query_users,
474
 
          is_user_online(From, StateData)} of
475
 
        {true, true} ->
 
475
          is_user_online_iq(StanzaId, From, StateData)} of
 
476
        {true, {true, NewId, FromFull}} ->
476
477
            case find_jid_by_nick(ToNick, StateData) of
477
478
                false ->
478
479
                    case jlib:iq_query_info(Packet) of
489
490
                    end;
490
491
                ToJID ->
491
492
                    {ok, #user{nick = FromNick}} =
492
 
                        ?DICT:find(jlib:jid_tolower(From),
 
493
                        ?DICT:find(jlib:jid_tolower(FromFull),
493
494
                                   StateData#state.users),
 
495
                    {ToJID2, Packet2} = handle_iq_vcard(FromFull, ToJID,
 
496
                                                        StanzaId, NewId,Packet),
494
497
                    ejabberd_router:route(
495
498
                      jlib:jid_replace_resource(StateData#state.jid, FromNick),
496
 
                      ToJID, Packet)
 
499
                      ToJID2, Packet2)
497
500
            end;
498
 
        {_, false} ->
 
501
        {_, {false, _, _}} ->
499
502
            case jlib:iq_query_info(Packet) of
500
503
                reply ->
501
504
                    ok;
829
832
            {next_state, normal_state, StateData}
830
833
    end.
831
834
 
832
 
 
833
835
%% @doc Check if this non participant can send message to room.
834
836
%%
835
837
%% XEP-0045 v1.23:
969
971
    LJID = jlib:jid_tolower(JID),
970
972
    ?DICT:is_key(LJID, StateData#state.users).
971
973
 
 
974
 
 
975
%%%
 
976
%%% Handle IQ queries of vCard
 
977
%%%
 
978
is_user_online_iq(StanzaId, JID, StateData) when JID#jid.lresource /= "" ->
 
979
    {is_user_online(JID, StateData), StanzaId, JID};
 
980
is_user_online_iq(StanzaId, JID, StateData) when JID#jid.lresource == "" ->
 
981
    try stanzaid_unpack(StanzaId) of
 
982
        {OriginalId, Resource} ->
 
983
            JIDWithResource = jlib:jid_replace_resource(JID, Resource),
 
984
            {is_user_online(JIDWithResource, StateData),
 
985
             OriginalId, JIDWithResource}
 
986
    catch
 
987
        _:_ ->
 
988
            {is_user_online(JID, StateData), StanzaId, JID}
 
989
    end.
 
990
 
 
991
handle_iq_vcard(FromFull, ToJID, StanzaId, NewId, Packet) ->
 
992
    ToBareJID = jlib:jid_remove_resource(ToJID),
 
993
    IQ = jlib:iq_query_info(Packet),
 
994
    handle_iq_vcard2(FromFull, ToJID, ToBareJID, StanzaId, NewId, IQ, Packet).
 
995
handle_iq_vcard2(_FromFull, ToJID, ToBareJID, StanzaId, _NewId,
 
996
                 #iq{type = get, xmlns = ?NS_VCARD}, Packet)
 
997
  when ToBareJID /= ToJID ->
 
998
    {ToBareJID, change_stanzaid(StanzaId, ToJID, Packet)};
 
999
handle_iq_vcard2(_FromFull, ToJID, _ToBareJID, _StanzaId, NewId, _IQ, Packet) ->
 
1000
    {ToJID, change_stanzaid(NewId, Packet)}.
 
1001
 
 
1002
stanzaid_pack(OriginalId, Resource) ->
 
1003
    "berd"++base64:encode_to_string("ejab\0" ++ OriginalId ++ "\0" ++ Resource).
 
1004
stanzaid_unpack("berd"++StanzaIdBase64) ->
 
1005
    StanzaId = base64:decode_to_string(StanzaIdBase64),
 
1006
    ["ejab", OriginalId, Resource] = string:tokens(StanzaId, "\0"),
 
1007
    {OriginalId, Resource}.
 
1008
 
 
1009
change_stanzaid(NewId, Packet) ->
 
1010
    {xmlelement, Name, Attrs, Els} = jlib:remove_attr("id", Packet),
 
1011
    {xmlelement, Name, [{"id", NewId} | Attrs], Els}.
 
1012
change_stanzaid(PreviousId, ToJID, Packet) ->
 
1013
    NewId = stanzaid_pack(PreviousId, ToJID#jid.lresource),
 
1014
    change_stanzaid(NewId, Packet).
 
1015
%%%
 
1016
%%%
 
1017
 
972
1018
role_to_list(Role) ->
973
1019
    case Role of
974
1020
        moderator ->   "moderator";