--- /tmp/jabberd-2.1.24.1/sm/sm.h 2008-04-27 02:57:18.000000000 -0700 +++ ./jabberd2/sm/sm.h 2009-05-26 14:30:32.000000000 -0700 @@ -171,6 +171,8 @@ struct sm_st { char *router_pass; /**< password to authenticate to the router with */ char *router_pemfile; /**< name of file containing a SSL certificate & key for channel to the router */ + char *router_private_key_password; /** password for private key if pemfile + key is encrypted */ mio_t mio; /**< mio context */ @@ -217,6 +219,18 @@ struct sm_st { int started; /**< true if we've connected to the router at least once */ int online; /**< true if we're currently bound in the router */ + + /** Database query rate limits */ + int query_rate_total; + int query_rate_seconds; + int query_rate_wait; + xht query_rates; + + /** mod_deliver: If defined, set the "from" in outgoing messages from JIDs in ACL "masquerade_sender" to masq_sender_replacement **/ + /** For Apple Notification server cluster support **/ + char *masq_sender_replacement; + + char *apple_notification_component_addr; }; /** data for a single user */ @@ -574,7 +588,8 @@ typedef enum { st_SUCCESS, /**< call completed successful */ st_FAILED, /**< call failed (driver internal error) */ st_NOTFOUND, /**< no matching objects were found */ - st_NOTIMPL /**< call not implemented */ + st_NOTIMPL, /**< call not implemented */ + st_RATELIMITED /**< Failure due to query rate limiting */ } st_ret_t; typedef struct st_driver_st *st_driver_t; @@ -635,6 +650,9 @@ SM_API st_ret_t storage_delete(st /** replace objects matching this filter with objects in this set (atomic delete + get) */ SM_API st_ret_t storage_replace(storage_t st, const char *type, const char *owner, const char *filter, os_t os); +/** Apple: Rate limiting for storage */ +SM_API st_ret_t storage_rate_limit(storage_t st, const char *owner); + /** type for the driver init function */ typedef st_ret_t (*st_driver_init_fn)(st_driver_t);