sipsess: added sipsess_set_close_headers()

This commit is contained in:
Richard Aas 2014-03-24 14:13:13 +00:00
parent b9fcf9d0d6
commit 10e7c015b1
5 changed files with 40 additions and 2 deletions

View file

@ -55,5 +55,6 @@ int sipsess_reject(struct sipsess *sess, uint16_t scode, const char *reason,
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, ...);
void sipsess_close_all(struct sipsess_sock *sock);
struct sip_dialog *sipsess_dialog(const struct sipsess *sess);

View file

@ -67,6 +67,8 @@ int sipsess_bye(struct sipsess *sess, bool reset_ls)
return sip_drequestf(&sess->req, sess->sip, true, "BYE",
sess->dlg, 0, sess->auth,
NULL, bye_resp_handler, sess,
"%s"
"Content-Length: 0\r\n"
"\r\n");
"\r\n",
sess->close_hdrs);
}

View file

@ -123,7 +123,11 @@ static void bye_handler(struct sipsess_sock *sock, const struct sip_msg *msg)
return;
}
(void)sip_treply(NULL, sip, msg, 200, "OK");
(void)sip_treplyf(NULL, NULL, sip, msg, false, 200, "OK",
"%s"
"Content-Length: 0\r\n"
"\r\n",
sess->close_hdrs);
sess->peerterm = true;

View file

@ -145,6 +145,7 @@ static void destructor(void *arg)
mem_deref(sess->auth);
mem_deref(sess->cuser);
mem_deref(sess->ctype);
mem_deref(sess->close_hdrs);
mem_deref(sess->hdrs);
mem_deref(sess->desc);
mem_deref(sess->sock);
@ -232,3 +233,32 @@ struct sip_dialog *sipsess_dialog(const struct sipsess *sess)
{
return sess ? sess->dlg : NULL;
}
/**
* Set extra SIP headers for inclusion in Session "close" messages
* like BYE and 200 OK. Multiple headers can be included.
*
* @param sess SIP Session
* @param hdrs Formatted strings with extra SIP Headers
*
* @return 0 if success, otherwise errorcode
*/
int sipsess_set_close_headers(struct sipsess *sess, const char *hdrs, ...)
{
int err = 0;
va_list ap;
if (!sess)
return EINVAL;
sess->close_hdrs = mem_deref(sess->close_hdrs);
if (hdrs) {
va_start(ap, hdrs);
err = re_vsdprintf(&sess->close_hdrs, hdrs, ap);
va_end(ap);
}
return err;
}

View file

@ -20,6 +20,7 @@ struct sipsess {
struct sip *sip;
char *cuser;
char *ctype;
char *close_hdrs;
struct mbuf *hdrs;
struct mbuf *desc;
sipsess_offer_h *offerh;