blob: 3bdfcc78102fda1e0af3ab8ba6af47cbb563dea4 [file] [log] [blame]
/**
* @file sipsess.h SIP Session Private Interface
*
* Copyright (C) 2010 Creytiv.com
*/
struct sipsess {
struct le he;
struct tmr tmr;
struct list replyl;
struct list requestl;
struct sip_loopstate ls;
struct sipsess_sock *sock;
const struct sip_msg *msg;
struct sip_request *req;
struct sip_dialog *dlg;
struct sip_strans *st;
struct sip_auth *auth;
struct sip *sip;
char *cuser;
char *ctype;
char *close_hdrs;
struct mbuf *hdrs;
struct mbuf *desc;
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;
bool owner;
bool sent_offer;
bool awaiting_answer;
bool modify_pending;
bool established;
bool peerterm;
int terminated;
};
struct sipsess_sock {
struct sip_lsnr *lsnr_resp;
struct sip_lsnr *lsnr_req;
struct hash *ht_sess;
struct hash *ht_ack;
struct sip *sip;
sipsess_conn_h *connh;
void *arg;
};
struct sipsess_request {
struct le le;
struct sip_loopstate ls;
struct sipsess *sess;
struct sip_request *req;
char *ctype;
struct mbuf *body;
sip_resp_h *resph;
void *arg;
};
int sipsess_alloc(struct sipsess **sessp, struct sipsess_sock *sock,
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_progr_h *progrh, sipsess_estab_h *estabh,
sipsess_info_h *infoh, sipsess_refer_h *referh,
sipsess_close_h *closeh, void *arg);
void sipsess_terminate(struct sipsess *sess, int err,
const struct sip_msg *msg);
int sipsess_ack(struct sipsess_sock *sock, struct sip_dialog *dlg,
uint32_t cseq, struct sip_auth *auth,
const char *ctype, struct mbuf *desc);
int sipsess_ack_again(struct sipsess_sock *sock, const struct sip_msg *msg);
int sipsess_reply_2xx(struct sipsess *sess, const struct sip_msg *msg,
uint16_t scode, const char *reason, struct mbuf *desc,
const char *fmt, va_list *ap);
int sipsess_reply_ack(struct sipsess *sess, const struct sip_msg *msg,
bool *awaiting_answer);
int sipsess_reinvite(struct sipsess *sess, bool reset_ls);
int sipsess_bye(struct sipsess *sess, bool reset_ls);
int sipsess_request_alloc(struct sipsess_request **reqp, struct sipsess *sess,
const char *ctype, struct mbuf *body,
sip_resp_h *resph, void *arg);