mirror of https://github.com/sipwise/kamailio.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
187 lines
5.1 KiB
187 lines
5.1 KiB
/*
|
|
* Copyright (C) 2006 Voice System SRL
|
|
*
|
|
* This file is part of Kamailio, a free SIP server.
|
|
*
|
|
* Kamailio is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version
|
|
*
|
|
* Kamailio is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*
|
|
*/
|
|
|
|
|
|
/*!
|
|
* \file
|
|
* \brief Functions related to dialog handling
|
|
* \ingroup dialog
|
|
* Module: \ref dialog
|
|
*/
|
|
|
|
#ifndef _DIALOG_DLG_HANDLERS_H_
|
|
#define _DIALOG_DLG_HANDLERS_H_
|
|
|
|
#include "../../parser/msg_parser.h"
|
|
#include "../../str.h"
|
|
#include "../../pvar.h"
|
|
#include "../../modules/tm/t_hooks.h"
|
|
#include "dlg_hash.h"
|
|
#include "dlg_timer.h"
|
|
|
|
#define MAX_DLG_RR_PARAM_NAME 32
|
|
|
|
/* values for the sequential match mode */
|
|
#define SEQ_MATCH_STRICT_ID 0
|
|
#define SEQ_MATCH_FALLBACK 1
|
|
#define SEQ_MATCH_NO_ID 2
|
|
|
|
|
|
/*!
|
|
* \brief Initialize the dialog handlers
|
|
* \param rr_param_p added record-route parameter
|
|
* \param dlg_flag_p dialog flag
|
|
* \param timeout_avp_p AVP for timeout setting
|
|
* \param default_timeout_p default timeout
|
|
* \param seq_match_mode_p matching mode
|
|
*/
|
|
void init_dlg_handlers(char *rr_param, int dlg_flag,
|
|
pv_spec_t *timeout_avp, int default_timeout,
|
|
int seq_match_mode);
|
|
|
|
|
|
/*!
|
|
* \brief Shutdown operation of the module
|
|
*/
|
|
void destroy_dlg_handlers(void);
|
|
|
|
|
|
/*!
|
|
* \brief Parse SIP message and populate leg informations
|
|
*
|
|
* Parse SIP message and populate leg informations.
|
|
* \param dlg the dialog to add cseq, contact & record_route
|
|
* \param msg sip message
|
|
* \param t transaction
|
|
* \param leg type of the call leg
|
|
* \param tag SIP To tag
|
|
* \return 0 on success, -1 on failure
|
|
* \note for a request: get record route in normal order, for a reply get
|
|
* in reverse order, skipping the ones from the request and the proxies' own
|
|
*/
|
|
int populate_leg_info(dlg_cell_t *dlg, sip_msg_t *msg,
|
|
tm_cell_t *t, unsigned int leg, str *tag);
|
|
|
|
|
|
/*!
|
|
* \brief Function that is registered as TM callback and called on requests
|
|
* \param t transaction, used to created the dialog
|
|
* \param type type of the entered callback
|
|
* \param param saved dialog structure in the callback
|
|
*/
|
|
void dlg_onreq(tm_cell_t *t, int type, struct tmcb_params *param);
|
|
|
|
|
|
/*!
|
|
* \brief Function that is registered as RR callback for dialog tracking
|
|
*
|
|
* Function that is registered as RR callback for dialog tracking. It
|
|
* sets the appropriate events after the SIP method and run the state
|
|
* machine to update the dialog state. It updates then the saved
|
|
* dialogs and also the statistics.
|
|
* \param req SIP request
|
|
* \param route_params record-route parameter
|
|
* \param param unused
|
|
*/
|
|
void dlg_onroute(sip_msg_t *req, str *rr_param, void *param);
|
|
|
|
|
|
/*!
|
|
* \brief Timer function that removes expired dialogs, run timeout route
|
|
* \param tl dialog timer list
|
|
*/
|
|
void dlg_ontimeout(dlg_tl_t *tl);
|
|
|
|
|
|
/*!
|
|
* \brief Create a new dialog from a sip message
|
|
*
|
|
* Create a new dialog from a SIP message, register a callback
|
|
* to keep track of the dialog with help of the tm module.
|
|
* This function is either called from the request callback, or
|
|
* from the dlg_manage function in the configuration script.
|
|
* \see dlg_onreq
|
|
* \see w_dlg_manage
|
|
* \param req SIP message
|
|
* \param t transaction
|
|
* \param run_initial_cbs if set zero, initial callbacks are not executed
|
|
* \return 0 on success, -1 on failure
|
|
*/
|
|
int dlg_new_dialog(sip_msg_t *req, tm_cell_t *t, const int run_initial_cbs);
|
|
|
|
|
|
/*!
|
|
* \brief Function that returns the dialog lifetime as pseudo-variable
|
|
* \param msg SIP message
|
|
* \param param pseudo-variable parameter
|
|
* \param res pseudo-variable result
|
|
* \return 0 on success, -1 on failure
|
|
*/
|
|
int pv_get_dlg_lifetime(sip_msg_t *msg, pv_param_t *param,
|
|
pv_value_t *res);
|
|
|
|
|
|
/*!
|
|
* \brief Function that returns the dialog state as pseudo-variable
|
|
* \param msg SIP message
|
|
* \param param pseudo-variable parameter
|
|
* \param res pseudo-variable result
|
|
* \return 0 on success, -1 on failure
|
|
*/
|
|
int pv_get_dlg_status(sip_msg_t *msg, pv_param_t *param,
|
|
pv_value_t *res);
|
|
|
|
|
|
/*!
|
|
* \brief Dummy callback just to keep the compiler happy
|
|
* \param t unused
|
|
* \param type unused
|
|
* \param param unused
|
|
*/
|
|
void dlg_tmcb_dummy(tm_cell_t *t, int type, struct tmcb_params *param);
|
|
|
|
/*!
|
|
* \brief Get the dialog structure for the SIP message
|
|
*/
|
|
dlg_cell_t *dlg_get_msg_dialog(sip_msg_t *msg);
|
|
|
|
/*!
|
|
* \brief Get the dialog structure and direction for the SIP message
|
|
*/
|
|
dlg_cell_t *dlg_lookup_msg_dialog(sip_msg_t *msg, unsigned int *dir);
|
|
|
|
/*!
|
|
* \brief Clone dialog internal unique id to shared memory
|
|
*/
|
|
dlg_iuid_t *dlg_get_iuid_shm_clone(dlg_cell_t *dlg);
|
|
|
|
/*!
|
|
* \brief Free dialog internal unique id stored in shared memory
|
|
*/
|
|
void dlg_iuid_sfree(void *iuid);
|
|
|
|
/*!
|
|
*
|
|
*/
|
|
int dlg_manage(sip_msg_t *msg);
|
|
|
|
#endif
|