filter_incoming_client | \|/ switch_incoming_client | +--> process_client_stanza (if no to='' or to='' is for server) | +--> deliver filter_incoming_server | \|/ switch_incoming_server | +--> process_server_stanza (if to='' is for server) | +--> deliver ( same as earlier deliver ) pre_stanza_write (before a stanza gets written to client) Roster ---------------------------------------------------------------------------- RosterGet ($conn, $cb) where $cb supports methods: ->set_roster(DJabberd::Roster) ->decline Users subclasses DJabberd::RosterStorage can override get_roster, which gets: my ($plugininstance, $cb, $conn, $jid) = @_; (where $jid is just the $conn->bound_jid)