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.
112 lines
3.6 KiB
112 lines
3.6 KiB
/*
|
|
* Copyright (C) 2007 SOMA Networks, INC.
|
|
* Written By Ovidiu Sas
|
|
*
|
|
* 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
|
|
*
|
|
*/
|
|
|
|
#ifndef _QOS_CTX_HELPERS_H_
|
|
#define _QOS_CTX_HELPERS_H_
|
|
|
|
#include "../../parser/sdp/sdp.h"
|
|
#include "qos_cb.h"
|
|
|
|
#define QOS_CALLER 0
|
|
#define QOS_CALLEE 1
|
|
|
|
typedef struct qos_sdp_st {
|
|
struct qos_sdp_st *prev;
|
|
struct qos_sdp_st *next;
|
|
unsigned int method_dir; /* the transaction initiator: CALLER/CALLEE */
|
|
int method_id; /* the method id that is carrying the sdp */
|
|
str method; /* the method that is carrying the sdp */
|
|
str cseq; /* the cseq of the method */
|
|
unsigned int negotiation; /* the negotiation type */
|
|
sdp_session_cell_t *sdp_session[2]; /* CALLER's and CALLEE's sdp */
|
|
} qos_sdp_t;
|
|
|
|
/**
|
|
* The QoS context.
|
|
*/
|
|
typedef struct qos_ctx_st {
|
|
qos_sdp_t *negotiated_sdp;
|
|
qos_sdp_t *pending_sdp;
|
|
gen_lock_t lock;
|
|
struct qos_head_cbl cbs;
|
|
} qos_ctx_t;
|
|
|
|
/*
|
|
|
|
** AFTER INVITE/183 **
|
|
|
|
qos_ctx:
|
|
+----------------+
|
|
| *negotiated_sdp|
|
|
+----------------+ qos_sdp (pending)
|
|
| *pending_sdp------->+----------------+
|
|
+----------------+ | *prev |
|
|
+----------------+
|
|
| *next |
|
|
+----------------+
|
|
| method_dir | sdp_session (caller)
|
|
| method_id | +-->+----------+
|
|
| method | | | |
|
|
| cseq | | | |
|
|
| negotiation | | +----------+
|
|
+----------------+ |
|
|
| sdp_session[0]----+
|
|
+----------------+ sdp_session (callee)
|
|
| sdp_session[1]------->+----------+
|
|
+----------------+ | |
|
|
| |
|
|
+----------+
|
|
|
|
** AFTER INVITE/200ok **
|
|
|
|
qos_ctx:
|
|
+----------------+ qos_sdp (negotiated)
|
|
| *negotiated_sdp---->+----------------+
|
|
+----------------+ | *prev |
|
|
| *pending_sdp | +----------------+
|
|
+----------------+ | *next |
|
|
+----------------+
|
|
| method_dir | sdp_session (caller)
|
|
| method_id | +-->+----------+
|
|
| method | | | |
|
|
| cseq | | | |
|
|
| negotiation | | +----------+
|
|
+----------------+ |
|
|
| sdp_session[0]----+
|
|
+----------------+ sdp_session (callee)
|
|
| sdp_session[1]------->+----------+
|
|
+----------------+ | |
|
|
| |
|
|
+----------+
|
|
|
|
|
|
*/
|
|
|
|
qos_ctx_t* build_new_qos_ctx();
|
|
void destroy_qos_ctx(qos_ctx_t *ctx);
|
|
|
|
void add_sdp(qos_ctx_t *qos_ctx, unsigned int dir, struct sip_msg *_m, unsigned int role, unsigned int other_role);
|
|
void remove_sdp(qos_ctx_t *qos_ctx, unsigned int dir, struct sip_msg *_m, unsigned int role, unsigned int other_role);
|
|
|
|
#endif /* _QOS_CTX_HELPERS_H_ */
|