zoukankan      html  css  js  c++  java
  • ejabberd_local

    ejabberd_local用于注册发到服务器本身的IQ以及路由到本地的ejabberd_sm(message)

    对外主要提供route,register_iq_handler,unregister_iq_response_handler方法

    route(From, To, Packet) ->
        case catch do_route(From, To, Packet) of
          {'EXIT', Reason} ->
          ?ERROR_MSG("~p~nwhen processing: ~p",
                 [Reason, {From, To, Packet}]);
          _ -> ok
        end.
    
    do_route(From, To, Packet) ->
        ?DEBUG("local route~n	from ~p~n	to ~p~n	packet "
           "~P~n",
           [From, To, Packet, 8]),
        if To#jid.luser /= <<"">> ->
           ejabberd_sm:route(From, To, Packet);
           To#jid.lresource == <<"">> ->
           #xmlel{name = Name} = Packet,
           case Name of
             <<"iq">> -> process_iq(From, To, Packet);
             <<"message">> -> ok;
             <<"presence">> -> ok;
             _ -> ok
           end;
           true ->
           #xmlel{attrs = Attrs} = Packet,
           case xml:get_attr_s(<<"type">>, Attrs) of
             <<"error">> -> ok;
             <<"result">> -> ok;
             _ ->
             ejabberd_hooks:run(local_send_to_resource_hook,
                        To#jid.lserver, [From, To, Packet])
           end
        end.
    View Code

    route当是完整的message的信息的时候,通过ejabberd_sm:route路由信息

    当是IQ信息的时候route:process_iq(From, To, Packet)处理,根据register_iq_handler注册的信息

  • 相关阅读:
    POJ3258River Hopscotch(二分)
    POJ3273Monthly Expense(二分)
    POJ1002487-3279(map)
    HDU 3123 GCC
    POJ2031Building a Space Station
    POJ3096Surprising Strings(map)
    模板类
    POJ1265Area
    【ZZ】C 语言中的指针和内存泄漏 & 编写高效的C程序与C代码优化
    学习笔记之MySQL
  • 原文地址:https://www.cnblogs.com/lawen/p/5057445.html
Copyright © 2011-2022 走看看