2015-10-11 3 views
2

Ниже представлен один из пакетов, зарегистрированных в функции, которая вызывается filter_packet hook.Ejabberd только для печати «сообщения» пакеты

I(<0.10945.0>:my_module:46) : in_filter_packet: {xmlelement,"message", 
               [{"type","headline"}], 
               [{xmlelement,"event", 
                [{"xmlns", 
                "http://jabber.org/protocol/pubsub#event"}], 
                [{xmlelement,"items", 
                [{"node", 
                 "http://jabber.org/protocol/tune"}], 
                [{xmlelement,"item", 
                 [{"id", 
                 "5A487A38503FE"}], 
                 [{xmlelement,"tune", 
                 [{"xmlns", 
                  "http://jabber.org/protocol/tune"}], 
                 []}]}]}]}, 
                {xmlelement,"addresses", 
                [{"xmlns", 
                "http://jabber.org/protocol/address"}], 
                [{xmlelement,"address", 
                [{"type","replyto"}, 
                 {"jid", 
                 "[email protected]/10042049171444555575238273"}], 
                []}]}]} 

Как отфильтровать только «сообщение» «тип» пакетов? т.е. в настоящее время подсел функция выглядит

on_filter_packet({From, To, Packet} = Input) -> 
     ?INFO_MSG("in_filter_packet: ~p ", [Packet]), %[gen_mod:get_module_opt(global, ?MODULE, debug, false)]), 
     Input. 

Как написать код ** если (== packet.type сообщение) только тогда напечатать **?

ответ

1

type - это атрибут XML, поэтому вам нужно использовать функцию xml:get_tag_attr_s, чтобы получить значение. Затем используйте case для переключения в зависимости от значения:

on_filter_packet({From, To, Packet} = Input) -> 
    ?INFO_MSG("in_filter_packet: ~p ", [Packet]), %[gen_mod:get_module_opt(global, ?MODULE, debug, false)]), 
    case xml:get_tag_attr_s("type", Packet) of 
     "message" -> 
      %% Do something with "message" packets, 
      %% and finally return a value. 
      Input; 
     _ -> 
      %% Something other than "message". 
      %% Ignore it and return the original packet. 
      Input 
    end. 
Смежные вопросы