```erlang
Here is the list of available events in ejabberd. The types of the corresponding hooks parameters is described below.
adhoc_local_items(Acc, From, To, Lang) -> Adhoc
adhoc_sm_items(Acc, From, To, Lang) -> Adhoc
anonymous_purge_hook(User, Server) -> ok
c2s_auth_result(bool(), User, Server, IP) -> ok
c2s_broadcast_recipients(Acc, Server, StateData, Type, From, Packet) -> []
c2s_filter_packet(Acc, Server, C2SState, Feature, To, Packet) -> bool()
c2s_filter_packet_in(Acc, JID, From, To) -> FixedPacket
c2s_loop_debug({route, From, To, Packet}) -> ok
c2s_loop_debug(Text) -> ok
c2s_loop_debug({xmlstreamelement, Packet}) -> ok
c2s_post_auth_features(Acc, Server) -> []
c2s_presence_in(Acc, {From, To, Packet}) -> C2SState
c2s_stream_features(Acc, Server) -> []
c2s_unauthenticated_iq(Acc, Server, IQ, IP) -> empty | Packet
c2s_update_presence(Acc, User, Server) -> Packet
caps_update(From, To, get_features(Server, Caps)) -> ok
csi_filter_stanza(Acc, Stanza) -> send
disco_info(Acc, Host, Module, Node, Lang) -> []
disco_local_features(Acc, From, To, Node, Lang) -> Disco
disco_local_identity(Acc, From, To, Node, Lang) -> []
disco_local_items(Acc, From, To, Node, Lang) -> Disco
disco_sm_features(Acc, From, To, Node, Lang) -> Disco
disco_sm_identity(Acc, From, To, Node, Lang) -> []
disco_sm_items(Acc, From, To, Node, Lang) -> Disco
filter_packet(Acc) -> OrigPacket
forbidden_session_hook(JID) -> ok
http_request_debug({LocalPath, Request}) -> ok
local_send_to_resource_hook(From, To, Packet) -> ok
muc_filter_message(Stanza, MUCState, RoomJID, FromJID, FromNick) -> Stanza drop
muc_filter_presence(Stanza, MUCState, RoomJID, FromJID, FromNick) -> Stanza drop
offline_message_hook(From, To, Packet) -> ok
presence_probe_hook(From, To, Pid) -> ok
privacy_check_packet(Acc, User, Server, PrivacyList, {From, To, Packet}, Dir) -> Auth
privacy_get_user_list(Acc, User, Server) -> #userlist{}
privacy_iq_get(Acc, From, To, IQ, PrivacyList) -> {result, Packet} | {error, Error}
privacy_iq_set(Acc, From, To, IQ) -> {result, Packet} | {error, Error}
privacy_updated_list(Acc, PrivacyList, PrivList) -> bool()
pubsub_create_node(ServerHost, Host, Node, NodeId, NodeOptions) -> ok
pubsub_delete_node(ServerHost, Host, Node, NodeId) -> ok
pubsub_publish_item(ServerHost, Node, Publisher, service_jid(Host), ItemId, Payload) -> ok
register_user(User, Server) -> ok
remove_user(User, Server) -> ok
reopen_log_hook() -> ok
resend_offline_messages_hook(Acc, User, Server) -> []
resend_subscription_requests_hook(Acc, User, Server) -> []
roster_get(Acc, {User, Server}) -> []
roster_get_jid_info(Acc, User, Server, From) -> []}
roster_get_subscription_lists(Acc, User, Server) -> []}
roster_get_versioning_feature(Acc, Server) -> []
roster_groups(Acc, ServerHost) -> []
roster_in_subscription(Acc, User, Server, From, SubscriptionInType, Reason) -> bool()
roster_out_subscription(User, Server, To, SubscriptionOutType) -> ok
roster_process_item(Acc, Server) -> RosterItem
s2s_allow_host(Acc, Host, Host) -> Auth
s2s_connect_hook(Host, Server) -> ok
s2s_loop_debug({xmlstreamelement, Packet}) -> ok
s2s_receive_packet(From, To, Packet) -> ok
s2s_send_packet(From, To, Packet) -> ok
s2s_stream_features(Acc, Server) -> []
set_presence_hook(User, Server, Resource, Presence) -> ok
sm_register_connection_hook(SID, JID, Info) -> ok
sm_remove_connection_hook(SID, JID, Info) -> ok
unset_presence_hook(User, Server, Resource, Status) -> ok
user_available_hook(JID) -> ok
user_ping_timeout(JID) -> ok
user_receive_packet(Packet, C2SState, JID, From, To) -> Packet
user_send_packet(Packet, C2SState, From, To) -> Packet
vcard_set(User, Server, VCARD) -> ok
webadmin_menu_host(Acc, Host, Lang) -> []
webadmin_menu_hostnode(Acc, Host, Node, Lang) -> []
webadmin_user(Acc, User, Server, Lang) -> []
webadmin_user_parse_query(Acc, Action, User, Server, Query) -> []
Hooks parameters data types
To = From = JID = ServerJID = #jid (see jlib.h)
Packet = Payload = {xmlelement, Name, Attrs, SubEl}
IQ = #iq (see jlib.h)
Error = ?STANZA_ERROR/3 (see jlib.h)
Lang = binary()
Dir = in | out
Auth = allow | deny
PrivacyList = OldPrivacyList = NewPrivacyList = none | #userlist
CtlStatus = false | ?STATUS_SUCCESS | ?STATUS_ERROR | ?STATUS_USAGE | ?STATUS_BADRPC (see ejabberd_ctl.hrl)
Adhoc = {result, I} | {error, Error} | empty
Disco = {result, Items} | {error, Error}
Items = Packet
Arg = [string()]
Node = [string()]
ItemID = string()
Route = {route, From, To, Packet}
RosterItem = #roster (see mod_roster.hrl)
Subscription = none | from | to | both | remove
SubscriptionInType = subscribe | unsubscribe
SubscriptionOutType = subscribed | unsubscribed
Reason = binary()
Groups = [string()]
SimpleJID = FromSubscription = ToSubscription = {User, Server, Resource}
User = binary()
Server = binary()
Resource = binary()
Status = binary()
SID = {Time, pid()}
Time = {MegaSecs, Secs, MicroSecs} (see erlang:now/0)
MegaSecs = Secs = MicroSecs = int()
Acc = same type as the return type of the function
```
- 1.学习
- 1.1安装与运行环境
- 1.2编辑器、集成开发环境与其它工具
- 1.3代码编译运行
- 2.基础
- 2.1 Erlang终端
- 2.2 基础语法
- 2.2.1 异常处理
- 2.3 数据类型
- 2.4 操作符
- 2.5 模块属性
- 3.库函数
- 3.1 常用模块
- 3.2 OTP模块
- 3.2.1 函数
- 3.2.2 receive
- 3.2.3 .app.src文件
- 3.2.4 _app.erl
- 3.2.5 _sup.erl
- 3.2.6 gen_server
- 3.2.7 gen_fsm
- 3.3 erts
- 3.3.1 init
- 3.3.2 BIF
- 3.3.3 NIF
- 3.4 kernel
- 3.4.1 code_server
- 3.4.2 inet
- 3.4.3 net_kernel
- 3.4.4 net_adm
- 3.4.5 error_logger
- 3.4.6 global
- 3.4.7 application
- 3.5 stdlib
- 3.5.2 array
- 3.5.4 base64
- 3.5.5 binary
- 3.5.6 c
- 3.5.8 calendar
- 3.5.9 code
- 3.5.11 dict
- 3.5.12 erl_
- 3.5.13 file
- 3.5.14 filelib
- 3.5.15 gb_trees
- 3.5.16 gb_sets
- 3.5.17 gen_tcp
- 3.5.18 gen_server
- 3.5.19 httpc
- 3.5.20 init_parse
- 3.5.21 init
- 3.5.22 inet
- 3.5.23 io
- 3.5.24 lists
- 3.5.25 maps
- 3.5.26 os
- 3.5.27 ordsets
- 3.5.28 proplists
- 3.5.29 queue
- 3.5.30 qlc
- 3.5.31 re
- 3.5.32 random
- 3.5.33 rfc4627-json
- 3.5.34 string
- 3.5.35 ssh
- 3.5.36 soft
- 3.5.37 sets
- 3.5.38 supervisor
- 3.5.39 tuple
- 3.5.40 timer
- 3.5.41 unicode
- 3.5.42 cpu
- 3.5.43 math
- 3.5.44 zip
- 3.5.45 shell
- 3.6 SASL
- 3.7 asn1
- 3.8 compiler
- 3.9 tools
- 3.10 OS_Mon
- 3.11 crypto
- 3.12 Port
- 4.工具
- 4.1 Erlang预处理器
- 4.2 Erlang节点
- 4.3 Erlang多节点
- 4.3.1主从节点
- 4.4 Epmd
- 4.5 断点工具
- 4.6 dialyzer
- 4.7 dbg-debug 模块
- 4.7.1 dbg
- 4.8 Erlang跟踪工具
- 4.9 etop
- 4.10 profiling
- 4.10.1 fprof
- 4.10.2 eprof
- 4.10.3 cprof
- 5.进阶
- 5.1 TCP粘包、大小端
- 5.2 rebar发布系统
- 5.3 ErlangVM 心跳
- 5.4 Erlang GC
- 5.5 Erlang Time
- 5.6 Erlang 启动
- 5.6.1 SASL配置
- 5.7 Erlang系统限制
- 6.项目
- 6.1 the_seed
- 6.2 network
- 6.3 parse_tool
- 6.4 cache
- 7.项目研究
- 7.1 Mnesia
- 7.1.1 Mnesia模式
- 7.1.2 Mnesia操作
- 7.1.3 Mnesia增删改查
- 7.1.4 Mnesia过载分析
- 7.1.5 Mnesia高级特性
- 7.1.6 分布式
- 7.1.7 Mnesia表分片
- 7.1.8 Mnesia锁
- 7.1.9 dets
- 7.1.10 ets
- 7.2 Ejabberd
- 7.2.1 mod_echo.erl
- 7.2.2 hooks for module developers
- 7.2.3 Events list
- 7.3 cowboy
- 7.4 rebar
- 7.4.1 rebar Wiki
- 7.4.2 rebar.config.script
- 7.5 RIAK CS
- 7.6 Leofs
- 7.6.1 简介
- 8.资料整理
- 8.1 资料
- 8.1.1 Erlang的调度原理
- 8.1.2 虚拟机代码执行原理
- 8.1.3 SMP
- 8.2 杂记
- 8.2.1 设计