30 #define uri_LAST "jabber:iq:last"
41 snprintf(uptime, 10,
"%d", (
int) (time(NULL) - (time_t) mod->
private));
84 ret = storage_get(user->
sm->
st,
"logout",
jid_user(user->
jid), NULL, &os);
89 if(os_iter_first(os)) {
90 o = os_iter_object(os);
92 os_object_get_time(os, o,
"time", &t);
97 snprintf(lasttime, 10,
"%d", (
int) (time(NULL) - t));
128 o = os_object_new(os);
130 os_object_put_time(o,
"time", &t);
140 storage_delete(mi->
sm->
st,
"logout",
jid_user(jid), NULL);
151 if(mod->
init)
return 0;
160 mod->
private = (
void *) time(NULL);
user_t user
user this session belongs to
pkt_type_t type
packet type
int sm_register_ns(sm_t sm, const char *uri)
register a new global ns
jid_t jid
session jid (user@host/res)
static mod_ret_t _iq_last_pkt_sm(mod_instance_t mi, pkt_t pkt)
data structures and prototypes for the session manager
void sm_unregister_ns(sm_t sm, const char *uri)
unregister a global ns
const char * jid_user(jid_t jid)
expand and return the user
pkt_t pkt_tofrom(pkt_t pkt)
swap a packet's to and from attributes
single instance of a module in a chain
int init
number of times the module intialiser has been called
void(* sess_end)(mod_instance_t mi, sess_t sess)
sess-end handler
#define stanza_err_FEATURE_NOT_IMPLEMENTED
#define stanza_err_FORBIDDEN
int pres_trust(user_t user, jid_t jid)
see if the jid is trusted (ie in the roster with s10n="from" or "both")
static mod_ret_t _iq_last_pkt_user(mod_instance_t mi, user_t user, pkt_t pkt)
void nad_set_attr(nad_t nad, int elem, int ns, const char *name, const char *val, int vallen)
create, update, or zap any matching attr on this elem
sess_t top
top priority session
static void _iq_last_free(module_t mod)
module_t mod
module that this is an instance of
jid_t from
packet addressing (not used for routing)
void feature_unregister(sm_t sm, const char *feature)
unregister feature
void * private
module private data
packet summary data wrapper
storage_t st
storage subsystem
nad_t nad
nad of the entire packet
DLLEXPORT int module_init(mod_instance_t mi, const char *arg)
mod_ret_t(* pkt_user)(mod_instance_t mi, user_t user, pkt_t pkt)
pkt-user handler
void pkt_router(pkt_t pkt)
static void _iq_last_sess_end(mod_instance_t mi, sess_t sess)
void feature_register(sm_t sm, const char *feature)
register a feature
packet was unhandled, should be passed to the next module
packet was handled (and freed)
There is one instance of this struct per user who is logged in to this c2s instance.
void(* user_delete)(mod_instance_t mi, jid_t jid)
user-delete handler
mod_ret_t(* pkt_sm)(mod_instance_t mi, pkt_t pkt)
pkt-sm handler
jid_t jid
user jid (user@host)
void(* free)(module_t mod)
called when module is freed
static void _iq_last_user_delete(mod_instance_t mi, jid_t jid)
mod_ret_t
module return values
#define stanza_err_SERVICE_UNAVAILABLE
#define stanza_err_INTERNAL_SERVER_ERROR