re/src/sip/sip.h
Alfred E. Heggestad 618eff733f sip: struct sip_via: change transport type to enum sip_transp
sip: export sip_transp_port()
2011-11-14 20:15:35 +00:00

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);