2010-02-17 06:25:15 +00:00
|
|
|
/*
|
|
|
|
* Asterisk -- An open source telephony toolkit.
|
|
|
|
*
|
|
|
|
* Copyright (C) 2010, Digium, Inc.
|
|
|
|
*
|
|
|
|
* See http://www.asterisk.org for more information about
|
|
|
|
* the Asterisk project. Please do not directly contact
|
|
|
|
* any of the maintainers of this project for assistance;
|
|
|
|
* the project provides a web site, mailing lists and IRC
|
|
|
|
* channels for your use.
|
|
|
|
*
|
|
|
|
* This program is free software, distributed under the terms of
|
|
|
|
* the GNU General Public License Version 2. See the LICENSE file
|
|
|
|
* at the top of the source tree.
|
|
|
|
*/
|
|
|
|
|
|
|
|
/*!
|
|
|
|
* \file
|
|
|
|
* \brief sip dialog management header file
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "sip.h"
|
|
|
|
|
|
|
|
#ifndef _SIP_DIALOG_H
|
|
|
|
#define _SIP_DIALOG_H
|
|
|
|
|
|
|
|
/*! \brief
|
|
|
|
* when we create or delete references, make sure to use these
|
|
|
|
* functions so we keep track of the refcounts.
|
|
|
|
* To simplify the code, we allow a NULL to be passed to dialog_unref().
|
|
|
|
*/
|
|
|
|
#define dialog_ref(arg1,arg2) dialog_ref_debug((arg1),(arg2), __FILE__, __LINE__, __PRETTY_FUNCTION__)
|
|
|
|
#define dialog_unref(arg1,arg2) dialog_unref_debug((arg1),(arg2), __FILE__, __LINE__, __PRETTY_FUNCTION__)
|
2011-12-31 15:45:57 +00:00
|
|
|
struct sip_pvt *dialog_ref_debug(struct sip_pvt *p, const char *tag, char *file, int line, const char *func);
|
|
|
|
struct sip_pvt *dialog_unref_debug(struct sip_pvt *p, const char *tag, char *file, int line, const char *func);
|
2010-02-17 06:25:15 +00:00
|
|
|
|
2010-07-08 22:08:07 +00:00
|
|
|
struct sip_pvt *sip_alloc(ast_string_field callid, struct ast_sockaddr *sin,
|
2012-05-17 16:28:20 +00:00
|
|
|
int useglobal_nat, const int intended_method, struct sip_request *req, struct ast_callid *logger_callid);
|
2010-06-17 18:45:32 +00:00
|
|
|
void sip_scheddestroy_final(struct sip_pvt *p, int ms);
|
2010-02-17 06:25:15 +00:00
|
|
|
void sip_scheddestroy(struct sip_pvt *p, int ms);
|
|
|
|
int sip_cancel_destroy(struct sip_pvt *p);
|
|
|
|
|
|
|
|
/*! \brief Destroy SIP call structure.
|
|
|
|
* Make it return NULL so the caller can do things like
|
|
|
|
* foo = sip_destroy(foo);
|
|
|
|
* and reduce the chance of bugs due to dangling pointers.
|
|
|
|
*/
|
|
|
|
struct sip_pvt *sip_destroy(struct sip_pvt *p);
|
|
|
|
|
|
|
|
/*! \brief Destroy SIP call structure.
|
|
|
|
* Make it return NULL so the caller can do things like
|
|
|
|
* foo = sip_destroy(foo);
|
|
|
|
* and reduce the chance of bugs due to dangling pointers.
|
|
|
|
*/
|
|
|
|
void __sip_destroy(struct sip_pvt *p, int lockowner, int lockdialoglist);
|
|
|
|
/*!
|
|
|
|
* \brief Unlink a dialog from the dialogs container, as well as any other places
|
|
|
|
* that it may be currently stored.
|
|
|
|
*
|
2011-10-11 19:28:23 +00:00
|
|
|
* \note A reference to the dialog must be held before calling
|
|
|
|
* this function, and this function does not release that
|
|
|
|
* reference.
|
|
|
|
*
|
|
|
|
* \note The dialog must not be locked when called.
|
2010-02-17 06:25:15 +00:00
|
|
|
*/
|
2011-10-11 19:28:23 +00:00
|
|
|
void dialog_unlink_all(struct sip_pvt *dialog);
|
2010-02-17 06:25:15 +00:00
|
|
|
|
|
|
|
/*! \brief Acknowledges receipt of a packet and stops retransmission
|
|
|
|
* called with p locked*/
|
2012-01-30 22:28:37 +00:00
|
|
|
int __sip_ack(struct sip_pvt *p, uint32_t seqno, int resp, int sipmethod);
|
2010-02-17 06:25:15 +00:00
|
|
|
|
|
|
|
/*! \brief Pretend to ack all packets
|
|
|
|
* called with p locked */
|
|
|
|
void __sip_pretend_ack(struct sip_pvt *p);
|
|
|
|
|
|
|
|
/*! \brief Acks receipt of packet, keep it around (used for provisional responses) */
|
2012-01-30 22:28:37 +00:00
|
|
|
int __sip_semi_ack(struct sip_pvt *p, uint32_t seqno, int resp, int sipmethod);
|
2010-02-17 06:25:15 +00:00
|
|
|
|
|
|
|
#endif /* defined(_SIP_DIALOG_H) */
|