/** * @file re_sipsess.h SIP Session * * Copyright (C) 2010 Creytiv.com */ struct sipsess_sock; struct sipsess; /** SDP Negotiation state */ enum sdp_neg_state { SDP_NEG_NONE = 0, SDP_NEG_LOCAL_OFFER, /**< SDP offer sent */ SDP_NEG_REMOTE_OFFER, /**< SDP offer received */ SDP_NEG_PREVIEW_ANSWER, /**< SDP preview answer sent */ SDP_NEG_DONE /**< SDP negotiation done */ }; typedef void (sipsess_conn_h)(const struct sip_msg *msg, void *arg); typedef int (sipsess_desc_h)(struct mbuf **descp, const struct sa *src, const struct sa *dst, void *arg); typedef int (sipsess_offer_h)(struct mbuf **descp, const struct sip_msg *msg, void *arg); typedef int (sipsess_answer_h)(const struct sip_msg *msg, void *arg); typedef void (sipsess_progr_h)(const struct sip_msg *msg, void *arg); typedef void (sipsess_estab_h)(const struct sip_msg *msg, void *arg); typedef void (sipsess_info_h)(struct sip *sip, const struct sip_msg *msg, void *arg); typedef void (sipsess_refer_h)(struct sip *sip, const struct sip_msg *msg, void *arg); typedef void (sipsess_close_h)(int err, const struct sip_msg *msg, void *arg); typedef void (sipsess_redirect_h)(const struct sip_msg *msg, const char *uri, void *arg); typedef void (sipsess_prack_h)(const struct sip_msg *msg, void *arg); int sipsess_listen(struct sipsess_sock **sockp, struct sip *sip, int htsize, sipsess_conn_h *connh, void *arg); int sipsess_connect(struct sipsess **sessp, struct sipsess_sock *sock, const char *to_uri, const char *from_name, const char *from_uri, const char *cuser, const char *routev[], uint32_t routec, const char *ctype, sip_auth_h *authh, void *aarg, bool aref, const char *callid, sipsess_desc_h *desch, sipsess_offer_h *offerh, sipsess_answer_h *answerh, sipsess_progr_h *progrh, sipsess_estab_h *estabh, sipsess_info_h *infoh, sipsess_refer_h *referh, sipsess_close_h *closeh, void *arg, const char *fmt, ...); int sipsess_accept(struct sipsess **sessp, struct sipsess_sock *sock, const struct sip_msg *msg, uint16_t scode, const char *reason, enum rel100_mode rel100, const char *cuser, const char *ctype, struct mbuf *desc, sip_auth_h *authh, void *aarg, bool aref, sipsess_offer_h *offerh, sipsess_answer_h *answerh, sipsess_estab_h *estabh, sipsess_info_h *infoh, sipsess_refer_h *referh, sipsess_close_h *closeh, void *arg, const char *fmt, ...); int sipsess_set_redirect_handler(struct sipsess *sess, sipsess_redirect_h *redirecth); int sipsess_set_prack_handler(struct sipsess *sess, sipsess_prack_h *prackh); int sipsess_progress(struct sipsess *sess, uint16_t scode, const char *reason, enum rel100_mode rel100, struct mbuf *desc, const char *fmt, ...); int sipsess_answer(struct sipsess *sess, uint16_t scode, const char *reason, struct mbuf *desc, const char *fmt, ...); int sipsess_reject(struct sipsess *sess, uint16_t scode, const char *reason, const char *fmt, ...); int sipsess_modify(struct sipsess *sess, struct mbuf *desc); int sipsess_info(struct sipsess *sess, const char *ctype, struct mbuf *body, sip_resp_h *resph, void *arg); int sipsess_set_close_headers(struct sipsess *sess, const char *hdrs, ...); bool sipsess_awaiting_prack(const struct sipsess *sess); bool sipsess_refresh_allowed(const struct sipsess *sess); void sipsess_close_all(struct sipsess_sock *sock); struct sip_dialog *sipsess_dialog(const struct sipsess *sess); void sipsess_abort(struct sipsess *sess); bool sipsess_ack_pending(const struct sipsess *sess); const struct sip_msg *sipsess_msg(const struct sipsess *sess); enum sdp_neg_state sipsess_sdp_neg_state(const struct sipsess *sess);