采用message消息 privacy list check_packet
check_packet默认返回allow,其他返回action(allow|deny)
<message to="server_test_user_2@servertest.igrslabdns.com/user2" type="chat" id="mir_180">
<composing xmlns="http://jabber.org/protocol/chatstates" />
</message>
打字......
<message to="server_test_user_2@servertest.igrslabdns.com/user2" type="chat" id="mir_181">
<paused xmlns="http://jabber.org/protocol/chatstates" />
</message>
停止打字.........
<message type="chat" to="server_test_user_2@servertest.igrslabdns.com/user2" id="mir_182">
<body>hi</body>
<active xmlns="http://jabber.org/protocol/chatstates" />
</message>
发送hi消息...........
-----------------------------------------------------------------------------------------------
privarcy_list
<iq type="set" id="mir_200">
<query xmlns="jabber:iq:privacy">
<list name="jidmessage">
<item type="jid" value="server_test_device_2@servertest.igrslabdns.com" action="deny" order="100">
<message />
</item>
</list>
</query>
</iq>
----------------------------------------------------------------------
check_packet/6方法在检查privacy_list时默认返回allow,当ClientA 给ClientB发送消息时,Check_packe/6会执行两次分别为 out和in两个方向的数据进行校验.(MirandaIM是一个不错的工具,能查看客户端所有的xmpp格式消息(IQ,Message,presence)
用im()debug跟踪时发现check_packet执行多次,仔细观察发现分别对out和in校验多次。另外还有多余的message:标记了chat的状态(http://jabber.org/protocol/chatstates)否别是'composing,paused'.发送消息用<body/>
-----------------------------------------------------------------------------------------------
is_type_mathc(Type, Value, JID,Subscription,Groups)
case Type of
jid ->
case Value of
{"", Server, ""} ->
case JID of
{_,Server,_} ->
true;
_ ->
false
end;
{"User", Server, ""} ->
case JID of
{User,Server,_} ->
true;
_ ->
false
end;
_ -> Value ==JID
end;
subscription ->
Value==Subscription;
group ->
lists:member(Value,Groups)
end.