123 lines
3.9 KiB
C
123 lines
3.9 KiB
C
/**
|
|
* @file re_sipevent.h SIP Event Framework
|
|
*
|
|
* Copyright (C) 2010 Creytiv.com
|
|
*/
|
|
|
|
|
|
/* Message Components */
|
|
|
|
struct sipevent_event {
|
|
struct pl event;
|
|
struct pl params;
|
|
struct pl id;
|
|
};
|
|
|
|
enum sipevent_subst {
|
|
SIPEVENT_ACTIVE = 0,
|
|
SIPEVENT_PENDING,
|
|
SIPEVENT_TERMINATED,
|
|
};
|
|
|
|
enum sipevent_reason {
|
|
SIPEVENT_DEACTIVATED = 0,
|
|
SIPEVENT_PROBATION,
|
|
SIPEVENT_REJECTED,
|
|
SIPEVENT_TIMEOUT,
|
|
SIPEVENT_GIVEUP,
|
|
SIPEVENT_NORESOURCE,
|
|
};
|
|
|
|
struct sipevent_substate {
|
|
enum sipevent_subst state;
|
|
enum sipevent_reason reason;
|
|
struct pl expires;
|
|
struct pl retry_after;
|
|
struct pl params;
|
|
};
|
|
|
|
int sipevent_event_decode(struct sipevent_event *se, const struct pl *pl);
|
|
int sipevent_substate_decode(struct sipevent_substate *ss,
|
|
const struct pl *pl);
|
|
const char *sipevent_substate_name(enum sipevent_subst state);
|
|
const char *sipevent_reason_name(enum sipevent_reason reason);
|
|
|
|
|
|
/* Listener Socket */
|
|
|
|
struct sipevent_sock;
|
|
|
|
int sipevent_listen(struct sipevent_sock **sockp, struct sip *sip,
|
|
uint32_t htsize_not, uint32_t htsize_sub,
|
|
sip_msg_h *subh, void *arg);
|
|
|
|
|
|
/* Notifier */
|
|
|
|
struct sipnot;
|
|
|
|
typedef void (sipnot_close_h)(int err, const struct sip_msg *msg, void *arg);
|
|
|
|
int sipevent_accept(struct sipnot **notp, struct sipevent_sock *sock,
|
|
const struct sip_msg *msg, struct sip_dialog *dlg,
|
|
const struct sipevent_event *event,
|
|
uint16_t scode, const char *reason, uint32_t expires_min,
|
|
uint32_t expires_dfl, uint32_t expires_max,
|
|
const char *cuser, const char *ctype,
|
|
sip_auth_h *authh, void *aarg, bool aref,
|
|
sipnot_close_h *closeh, void *arg, const char *fmt, ...);
|
|
int sipevent_notify(struct sipnot *sipnot, struct mbuf *mb,
|
|
enum sipevent_subst state, enum sipevent_reason reason,
|
|
uint32_t retry_after);
|
|
int sipevent_notifyf(struct sipnot *sipnot, struct mbuf **mbp,
|
|
enum sipevent_subst state, enum sipevent_reason reason,
|
|
uint32_t retry_after, const char *fmt, ...);
|
|
|
|
|
|
/* Subscriber */
|
|
|
|
struct sipsub;
|
|
|
|
typedef int (sipsub_fork_h)(struct sipsub **subp, struct sipsub *osub,
|
|
const struct sip_msg *msg, void *arg);
|
|
typedef void (sipsub_notify_h)(struct sip *sip, const struct sip_msg *msg,
|
|
void *arg);
|
|
typedef void (sipsub_close_h)(int err, const struct sip_msg *msg,
|
|
const struct sipevent_substate *substate,
|
|
void *arg);
|
|
|
|
int sipevent_subscribe(struct sipsub **subp, struct sipevent_sock *sock,
|
|
const char *uri, const char *from_name,
|
|
const char *from_uri, const char *event, const char *id,
|
|
uint32_t expires, const char *cuser,
|
|
const char *routev[], uint32_t routec,
|
|
sip_auth_h *authh, void *aarg, bool aref,
|
|
sipsub_fork_h *forkh, sipsub_notify_h *notifyh,
|
|
sipsub_close_h *closeh, void *arg,
|
|
const char *fmt, ...);
|
|
int sipevent_dsubscribe(struct sipsub **subp, struct sipevent_sock *sock,
|
|
struct sip_dialog *dlg, const char *event,
|
|
const char *id, uint32_t expires, const char *cuser,
|
|
sip_auth_h *authh, void *aarg, bool aref,
|
|
sipsub_notify_h *notifyh, sipsub_close_h *closeh,
|
|
void *arg, const char *fmt, ...);
|
|
|
|
int sipevent_refer(struct sipsub **subp, struct sipevent_sock *sock,
|
|
const char *uri, const char *from_name,
|
|
const char *from_uri, const char *cuser,
|
|
const char *routev[], uint32_t routec,
|
|
sip_auth_h *authh, void *aarg, bool aref,
|
|
sipsub_fork_h *forkh, sipsub_notify_h *notifyh,
|
|
sipsub_close_h *closeh, void *arg,
|
|
const char *fmt, ...);
|
|
int sipevent_drefer(struct sipsub **subp, struct sipevent_sock *sock,
|
|
struct sip_dialog *dlg, const char *cuser,
|
|
sip_auth_h *authh, void *aarg, bool aref,
|
|
sipsub_notify_h *notifyh, sipsub_close_h *closeh,
|
|
void *arg, const char *fmt, ...);
|
|
|
|
int sipevent_fork(struct sipsub **subp, struct sipsub *osub,
|
|
const struct sip_msg *msg,
|
|
sip_auth_h *authh, void *aarg, bool aref,
|
|
sipsub_notify_h *notifyh, sipsub_close_h *closeh,
|
|
void *arg);
|