101 lines
2.5 KiB
C
101 lines
2.5 KiB
C
/**
|
|
* @file sip.h SIP Private Interface
|
|
*
|
|
* Copyright (C) 2010 Creytiv.com
|
|
*/
|
|
|
|
|
|
struct sip {
|
|
struct list transpl;
|
|
struct list lsnrl;
|
|
struct list reql;
|
|
struct hash *ht_ctrans;
|
|
struct hash *ht_strans;
|
|
struct hash *ht_conn;
|
|
struct hash *ht_udpconn;
|
|
struct dnsc *dnsc;
|
|
struct stun *stun;
|
|
char *software;
|
|
sip_exit_h *exith;
|
|
void *arg;
|
|
bool closing;
|
|
};
|
|
|
|
|
|
struct sip_lsnr {
|
|
struct le le;
|
|
struct sip_lsnr **lsnrp;
|
|
sip_msg_h *msgh;
|
|
void *arg;
|
|
bool req;
|
|
};
|
|
|
|
|
|
struct sip_keepalive {
|
|
struct le le;
|
|
struct sip_keepalive **kap;
|
|
sip_keepalive_h *kah;
|
|
void *arg;
|
|
};
|
|
|
|
|
|
/* request */
|
|
void sip_request_close(struct sip *sip);
|
|
|
|
|
|
/* ctrans */
|
|
struct sip_ctrans;
|
|
|
|
int sip_ctrans_request(struct sip_ctrans **ctp, struct sip *sip,
|
|
enum sip_transp tp, const struct sa *dst, char *met,
|
|
char *branch, struct mbuf *mb, sip_resp_h *resph,
|
|
void *arg);
|
|
int sip_ctrans_cancel(struct sip_ctrans *ct);
|
|
int sip_ctrans_init(struct sip *sip, uint32_t sz);
|
|
int sip_ctrans_debug(struct re_printf *pf, const struct sip *sip);
|
|
|
|
|
|
/* strans */
|
|
int sip_strans_init(struct sip *sip, uint32_t sz);
|
|
int sip_strans_debug(struct re_printf *pf, const struct sip *sip);
|
|
|
|
|
|
/* transp */
|
|
struct sip_connqent;
|
|
|
|
typedef void(sip_transp_h)(int err, void *arg);
|
|
|
|
int sip_transp_init(struct sip *sip, uint32_t sz);
|
|
int sip_transp_send(struct sip_connqent **qentp, struct sip *sip, void *sock,
|
|
enum sip_transp tp, const struct sa *dst, struct mbuf *mb,
|
|
sip_transp_h *transph, void *arg);
|
|
int sip_transp_laddr(struct sip *sip, struct sa *laddr, enum sip_transp tp,
|
|
const struct sa *dst);
|
|
bool sip_transp_supported(struct sip *sip, enum sip_transp tp, int af);
|
|
const char *sip_transp_srvid(enum sip_transp tp);
|
|
bool sip_transp_reliable(enum sip_transp tp);
|
|
int sip_transp_debug(struct re_printf *pf, const struct sip *sip);
|
|
|
|
|
|
/* auth */
|
|
int sip_auth_encode(struct mbuf *mb, struct sip_auth *auth, const char *met,
|
|
const char *uri);
|
|
|
|
|
|
/* dialog */
|
|
int sip_dialog_encode(struct mbuf *mb, struct sip_dialog *dlg, uint32_t cseq,
|
|
const char *met);
|
|
const char *sip_dialog_uri(const struct sip_dialog *dlg);
|
|
const struct uri *sip_dialog_route(const struct sip_dialog *dlg);
|
|
|
|
|
|
/* keepalive */
|
|
struct sip_conn;
|
|
|
|
void sip_keepalive_signal(struct list *kal, int err);
|
|
uint64_t sip_keepalive_wait(uint32_t interval);
|
|
int sip_keepalive_tcp(struct sip_keepalive *ka, struct sip_conn *conn,
|
|
uint32_t interval);
|
|
int sip_keepalive_udp(struct sip_keepalive *ka, struct sip *sip,
|
|
struct udp_sock *us, const struct sa *paddr,
|
|
uint32_t interval);
|