<div dir="ltr">Hi guys,<div><br></div><div>I have some requirements in one of my ejabberd modules where I need to block subscribe presences from making it through. The purpose of this is to block certain users from inviting other users to chat based on some business logic - so perhaps blocking subscribe is not the best way to go, this is why I'm asking you guys (=</div>

<div><br></div><div>I was thinking of intercepting the packet in a module via filter_packet and dropping it if it was a presence of type subscribe and the business rules don't allow it. This works fine however it leaves a remnant in the roster. Next time the users are on line ejabberd sends the presence notifications and they don't go through my module. I was thinking I should also make sure the roster state matches the fact I dropped the presence packet.</div>

<div><br></div><div style>1- Can someone confirm that simply blocking presence (subscribe) will still populate the roster and cause what I mentioned above to happen?</div><div>2- Am I thinking about this correctly? Should I drop the packet then clean out the roster? Are there better ways to do this?</div>

<div>3- Assuming the approach is correct, is there a recommended way of cleaning out the roster? I use mod_roster_odbc so I can craft out SQL to do so and run it in the my module. Obviously if I can do this without taking into account whether I use mnesia or odbc for roster storage that would be better. Should I perhaps avoid interacting with the roster directly and use an approach similar to mod_admin_extra?</div>

<div><br></div><div><div>delete_rosteritem(LocalUser, LocalServer, User, Server) -></div><div>š š case unsubscribe(LocalUser, LocalServer, User, Server) of</div><div><span class="" style="white-space:pre">        </span>{atomic, ok} -></div>

<div><span class="" style="white-space:pre">    </span> š špush_roster_item(LocalUser, LocalServer, User, Server, remove),</div><div><span class="" style="white-space:pre">        </span> š šok;</div><div><span class="" style="white-space:pre">    </span>_ š-></div>

<div><span class="" style="white-space:pre">    </span> š šerror</div><div>š š end.</div><div><br></div><div>unsubscribe(LU, LS, User, Server) -></div><div>š š ItemEl = build_roster_item(User, Server, remove),</div><div>
š š {ok, M} = loaded_module(LS,[mod_roster_odbc,mod_roster]),</div>
<div>š š M:set_items(</div><div><span class="" style="white-space:pre">     </span>LU, LS,</div><div><span class="" style="white-space:pre">    </span>{xmlelement,"query",</div><div>š š š š š š [{"xmlns","jabber:iq:roster"}],</div>

<div>š š š š š š [ItemEl]}).</div><div><br></div><div style>Thank's for you help guys! (=</div><div style><br></div><div style>hisham.</div><div><br></div>-- <br>Hisham Mardam-Bey<br><a href="http://hisham.cc/">http://hisham.cc/</a><br>


</div></div>