mirror of
https://github.com/signalwire/freeswitch.git
synced 2026-11-15 13:58:32 +00:00
add sofia-sip 1.12.4 (plus some patches through 12/21/2006) to in tree libs
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@3774 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
1 parent
0cdfa4fe13
commit
2ecac238f3
719 files changed
+311340
-2
No files matched your search
@@ -0,0 +1,153 @@
|
||||
/*
|
||||
* This file is part of the Sofia-SIP package
|
||||
*
|
||||
* Copyright (C) 2005 Nokia Corporation.
|
||||
*
|
||||
* Contact: Pekka Pessi <pekka.pessi@nokia.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public License
|
||||
* as published by the Free Software Foundation; either version 2.1 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This library 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
|
||||
* 02110-1301 USA
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef SOA_H
|
||||
/** Defined when <sofia-sip/soa.h> has been included. */
|
||||
#define SOA_H
|
||||
/**@file sofia-sip/soa.h SDP Offer/Answer (RFC 3264) Interface.
|
||||
*
|
||||
* @author Pekka Pessi <Pekka.Pessi@nokia.com>
|
||||
* @author Kai Vehmanen <Kai.Vehmanen@nokia.com>
|
||||
*
|
||||
* @date Created: Fri Jul 15 15:43:53 EEST 2005 ppessi
|
||||
*/
|
||||
|
||||
#ifndef SU_WAIT_H
|
||||
#include <sofia-sip/su_wait.h>
|
||||
#endif
|
||||
#ifndef SU_TAG_H
|
||||
#include <sofia-sip/su_tag.h>
|
||||
#endif
|
||||
|
||||
SOFIA_BEGIN_DECLS
|
||||
|
||||
typedef struct soa_session soa_session_t;
|
||||
|
||||
struct sdp_session_s;
|
||||
|
||||
#ifndef SOA_MAGIC_T
|
||||
#define SOA_MAGIC_T void
|
||||
#endif
|
||||
|
||||
typedef SOA_MAGIC_T soa_magic_t;
|
||||
|
||||
typedef int soa_callback_f(soa_magic_t *arg, soa_session_t *session);
|
||||
|
||||
SOFIAPUBFUN soa_session_t *soa_create(char const *name, su_root_t *, soa_magic_t *);
|
||||
|
||||
SOFIAPUBFUN soa_session_t *soa_clone(soa_session_t *, su_root_t *, soa_magic_t *);
|
||||
|
||||
SOFIAPUBFUN void soa_destroy(soa_session_t *);
|
||||
|
||||
SOFIAPUBFUN int soa_set_params(soa_session_t *ss,
|
||||
tag_type_t tag, tag_value_t value, ...);
|
||||
SOFIAPUBFUN int soa_get_params(soa_session_t const *ss,
|
||||
tag_type_t tag, tag_value_t value, ...);
|
||||
|
||||
SOFIAPUBFUN tagi_t *soa_get_paramlist(soa_session_t const *ss,
|
||||
tag_type_t tag, tag_value_t value, ...);
|
||||
|
||||
SOFIAPUBFUN int soa_error_as_sip_response(soa_session_t *soa,
|
||||
char const **return_phrase);
|
||||
|
||||
SOFIAPUBFUN char const *soa_error_as_sip_reason(soa_session_t *soa);
|
||||
|
||||
SOFIAPUBFUN int soa_get_warning(soa_session_t *ss, char const **return_phrase);
|
||||
|
||||
SOFIAPUBFUN int soa_set_capability_sdp(soa_session_t *ss,
|
||||
struct sdp_session_s const *sdp,
|
||||
char const *str, issize_t len);
|
||||
|
||||
SOFIAPUBFUN int soa_get_capability_sdp(soa_session_t const *ss,
|
||||
struct sdp_session_s const **return_sdp,
|
||||
char const **return_sdp_str,
|
||||
isize_t *return_len);
|
||||
|
||||
SOFIAPUBFUN int soa_set_remote_sdp(soa_session_t *ss,
|
||||
struct sdp_session_s const *sdp,
|
||||
char const *str, issize_t len);
|
||||
|
||||
SOFIAPUBFUN int soa_get_remote_sdp(soa_session_t const *ss,
|
||||
struct sdp_session_s const **return_sdp,
|
||||
char const **return_sdp_str,
|
||||
isize_t *return_len);
|
||||
|
||||
SOFIAPUBFUN int soa_clear_remote_sdp(soa_session_t *ss);
|
||||
|
||||
SOFIAPUBFUN int soa_get_remote_version(soa_session_t const *ss);
|
||||
|
||||
SOFIAPUBFUN int soa_set_user_sdp(soa_session_t *ss,
|
||||
struct sdp_session_s const *sdp,
|
||||
char const *str, issize_t len);
|
||||
|
||||
SOFIAPUBFUN int soa_get_user_sdp(soa_session_t const *ss,
|
||||
struct sdp_session_s const **return_sdp,
|
||||
char const **return_sdp_str,
|
||||
isize_t *return_len);
|
||||
|
||||
SOFIAPUBFUN int soa_get_user_version(soa_session_t const *ss);
|
||||
|
||||
SOFIAPUBFUN int soa_get_local_sdp(soa_session_t const *ss,
|
||||
struct sdp_session_s const **return_sdp,
|
||||
char const **return_sdp_str,
|
||||
isize_t *return_len);
|
||||
|
||||
SOFIAPUBFUN char const * const * soa_sip_require(soa_session_t const *ss);
|
||||
SOFIAPUBFUN char const * const * soa_sip_supported(soa_session_t const *ss);
|
||||
|
||||
SOFIAPUBFUN int soa_remote_sip_features(soa_session_t *ss,
|
||||
char const * const * support,
|
||||
char const * const * required);
|
||||
|
||||
SOFIAPUBFUN char **soa_media_features(soa_session_t *ss, int live, su_home_t *home);
|
||||
|
||||
SOFIAPUBFUN int soa_generate_offer(soa_session_t *, int always, soa_callback_f *);
|
||||
SOFIAPUBFUN int soa_generate_answer(soa_session_t *, soa_callback_f *);
|
||||
SOFIAPUBFUN int soa_process_answer(soa_session_t *, soa_callback_f *);
|
||||
SOFIAPUBFUN int soa_process_reject(soa_session_t *, soa_callback_f *);
|
||||
|
||||
SOFIAPUBFUN int soa_activate(soa_session_t *, char const *option);
|
||||
SOFIAPUBFUN int soa_deactivate(soa_session_t *, char const *option);
|
||||
|
||||
SOFIAPUBFUN void soa_terminate(soa_session_t *, char const *option);
|
||||
|
||||
SOFIAPUBFUN int soa_is_complete(soa_session_t const *ss);
|
||||
|
||||
SOFIAPUBFUN int soa_init_offer_answer(soa_session_t *ss);
|
||||
|
||||
SOFIAPUBFUN int soa_is_audio_active(soa_session_t const *ss);
|
||||
SOFIAPUBFUN int soa_is_video_active(soa_session_t const *ss);
|
||||
SOFIAPUBFUN int soa_is_image_active(soa_session_t const *ss);
|
||||
SOFIAPUBFUN int soa_is_chat_active(soa_session_t const *ss);
|
||||
|
||||
SOFIAPUBFUN int soa_is_remote_audio_active(soa_session_t const *ss);
|
||||
SOFIAPUBFUN int soa_is_remote_video_active(soa_session_t const *ss);
|
||||
SOFIAPUBFUN int soa_is_remote_image_active(soa_session_t const *ss);
|
||||
SOFIAPUBFUN int soa_is_remote_chat_active(soa_session_t const *ss);
|
||||
|
||||
SOFIAPUBFUN int soa_tag_filter(tagi_t const *f, tagi_t const *t);
|
||||
|
||||
SOFIA_END_DECLS
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,48 @@
|
||||
/*
|
||||
* This file is part of the Sofia-SIP package
|
||||
*
|
||||
* Copyright (C) 2005 Nokia Corporation.
|
||||
*
|
||||
* Contact: Pekka Pessi <pekka.pessi@nokia.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public License
|
||||
* as published by the Free Software Foundation; either version 2.1 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This library 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
|
||||
* 02110-1301 USA
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef SOA_ADD_H
|
||||
#define SOA_ADD_H
|
||||
/**@file sofia-sip/soa_add.h Register SDP Offer/Answer Interface Instances.
|
||||
*
|
||||
* @author Pekka Pessi <Pekka.Pessi@nokia.com>
|
||||
*
|
||||
* @date Created: Mon Aug 1 15:43:53 EEST 2005 ppessi
|
||||
*/
|
||||
|
||||
#include <sofia-sip/su_config.h>
|
||||
|
||||
SOFIA_BEGIN_DECLS
|
||||
|
||||
struct soa_session_actions;
|
||||
|
||||
SOFIAPUBVAR struct soa_session_actions const soa_default_actions;
|
||||
|
||||
SOFIAPUBFUN int soa_add(char const *name, struct soa_session_actions const *handler);
|
||||
|
||||
SOFIAPUBFUN struct soa_session_actions const *soa_find(char const *name);
|
||||
|
||||
SOFIA_END_DECLS
|
||||
|
||||
#endif /* SOA_ADD_H */
|
||||
@@ -0,0 +1,275 @@
|
||||
/*
|
||||
* This file is part of the Sofia-SIP package
|
||||
*
|
||||
* Copyright (C) 2005 Nokia Corporation.
|
||||
*
|
||||
* Contact: Pekka Pessi <pekka.pessi@nokia.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public License
|
||||
* as published by the Free Software Foundation; either version 2.1 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This library 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
|
||||
* 02110-1301 USA
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef SOA_SESSION_H
|
||||
#define SOA_SESSION_H
|
||||
/**@file sofia-sip/soa_session.h
|
||||
*
|
||||
* Internal API for SDP Offer/Answer Interface.
|
||||
*
|
||||
* @author Pekka Pessi <Pekka.Pessi@nokia.com>
|
||||
*
|
||||
* @date Created: Mon Aug 1 15:43:53 EEST 2005 ppessi
|
||||
*/
|
||||
|
||||
#ifndef SOA_H
|
||||
#include "sofia-sip/soa.h"
|
||||
#endif
|
||||
#ifndef SOA_TAG_H
|
||||
#include "sofia-sip/soa_tag.h"
|
||||
#endif
|
||||
#ifndef SDP_H
|
||||
#include <sofia-sip/sdp.h>
|
||||
#endif
|
||||
#ifndef SU_STRLST_H
|
||||
#include <sofia-sip/su_strlst.h>
|
||||
#endif
|
||||
|
||||
SOFIA_BEGIN_DECLS
|
||||
|
||||
struct soa_session_actions
|
||||
{
|
||||
int sizeof_soa_session_actions;
|
||||
int sizeof_soa_session;
|
||||
char const *soa_name;
|
||||
int (*soa_init)(char const *name, soa_session_t *ss, soa_session_t *parent);
|
||||
void (*soa_deinit)(soa_session_t *ss);
|
||||
int (*soa_set_params)(soa_session_t *ss, tagi_t const *tags);
|
||||
int (*soa_get_params)(soa_session_t const *ss, tagi_t *tags);
|
||||
tagi_t *(*soa_get_paramlist)(soa_session_t const *ss,
|
||||
tag_type_t, tag_value_t, ...);
|
||||
char **(*soa_media_features)(soa_session_t *, int live, su_home_t *);
|
||||
char const * const *(*soa_sip_require)(soa_session_t const *ss);
|
||||
char const * const *(*soa_sip_supported)(soa_session_t const *ss);
|
||||
int (*soa_remote_sip_features)(soa_session_t *ss,
|
||||
char const * const * support,
|
||||
char const * const * required);
|
||||
int (*soa_set_capability_sdp)(soa_session_t *, sdp_session_t *,
|
||||
char const *, isize_t);
|
||||
int (*soa_set_remote_sdp)(soa_session_t *, int new_version,
|
||||
sdp_session_t *, char const *, isize_t);
|
||||
int (*soa_set_user_sdp)(soa_session_t *, sdp_session_t *,
|
||||
char const *, isize_t);
|
||||
int (*soa_generate_offer)(soa_session_t *ss, soa_callback_f *completed);
|
||||
int (*soa_generate_answer)(soa_session_t *ss, soa_callback_f *completed);
|
||||
int (*soa_process_answer)(soa_session_t *ss, soa_callback_f *completed);
|
||||
int (*soa_process_reject)(soa_session_t *ss, soa_callback_f *completed);
|
||||
int (*soa_activate_session)(soa_session_t *ss, char const *option);
|
||||
int (*soa_deactivate_session)(soa_session_t *ss, char const *option);
|
||||
void (*soa_terminate_session)(soa_session_t *ss, char const *option);
|
||||
};
|
||||
|
||||
SOFIAPUBFUN soa_session_t *soa_session_ref(soa_session_t *ss);
|
||||
SOFIAPUBFUN void soa_session_unref(soa_session_t *ss);
|
||||
|
||||
SOFIAPUBFUN int soa_base_init(char const *name, soa_session_t *,
|
||||
soa_session_t *parent);
|
||||
SOFIAPUBFUN void soa_base_deinit(soa_session_t *ss);
|
||||
SOFIAPUBFUN int soa_base_set_params(soa_session_t *ss, tagi_t const *tags);
|
||||
SOFIAPUBFUN int soa_base_get_params(soa_session_t const *ss, tagi_t *tags);
|
||||
SOFIAPUBFUN tagi_t *soa_base_get_paramlist(soa_session_t const *ss,
|
||||
tag_type_t, tag_value_t, ...);
|
||||
SOFIAPUBFUN char **soa_base_media_features(soa_session_t *,
|
||||
int live, su_home_t *);
|
||||
SOFIAPUBFUN char const * const *soa_base_sip_require(soa_session_t const *ss);
|
||||
SOFIAPUBFUN char const * const *soa_base_sip_supported(soa_session_t const *ss);
|
||||
|
||||
SOFIAPUBFUN int soa_base_remote_sip_features(soa_session_t *ss,
|
||||
char const * const *support,
|
||||
char const * const *required);
|
||||
SOFIAPUBFUN int soa_base_set_capability_sdp(soa_session_t *ss,
|
||||
sdp_session_t *sdp,
|
||||
char const *, isize_t);
|
||||
SOFIAPUBFUN int soa_base_set_remote_sdp(soa_session_t *ss,
|
||||
int new_version,
|
||||
sdp_session_t *sdp, char const *, isize_t);
|
||||
SOFIAPUBFUN int soa_base_set_user_sdp(soa_session_t *ss,
|
||||
sdp_session_t *sdp, char const *, isize_t);
|
||||
|
||||
SOFIAPUBFUN int soa_base_generate_offer(soa_session_t *ss,
|
||||
soa_callback_f *completed);
|
||||
SOFIAPUBFUN int soa_base_generate_answer(soa_session_t *ss,
|
||||
soa_callback_f *completed);
|
||||
SOFIAPUBFUN int soa_base_process_answer(soa_session_t *ss,
|
||||
soa_callback_f *completed);
|
||||
SOFIAPUBFUN int soa_base_process_reject(soa_session_t *ss,
|
||||
soa_callback_f *completed);
|
||||
|
||||
SOFIAPUBFUN int soa_base_activate(soa_session_t *ss, char const *option);
|
||||
SOFIAPUBFUN int soa_base_deactivate(soa_session_t *ss, char const *option);
|
||||
SOFIAPUBFUN void soa_base_terminate(soa_session_t *ss, char const *option);
|
||||
|
||||
struct soa_description
|
||||
{
|
||||
sdp_session_t *ssd_sdp; /**< Session description */
|
||||
char const *ssd_unparsed; /**< Original session description as string */
|
||||
char const *ssd_str; /**< Session description as string */
|
||||
sdp_printer_t *ssd_printer; /**< SDP printer object */
|
||||
};
|
||||
|
||||
struct soa_session
|
||||
{
|
||||
su_home_t ss_home[1];
|
||||
|
||||
struct soa_session_actions const *ss_actions;
|
||||
char const *ss_name; /**< Our name */
|
||||
|
||||
su_root_t *ss_root;
|
||||
soa_magic_t *ss_magic; /**< Application data */
|
||||
|
||||
soa_callback_f *ss_in_progress;/**< Operation in progress */
|
||||
|
||||
/** Incremented once each time session is terminated */
|
||||
unsigned ss_terminated;
|
||||
|
||||
/* XXX - this is part of public API. we should have no bitfields here */
|
||||
|
||||
unsigned ss_active:1; /**< Session has been activated */
|
||||
|
||||
/* Current Offer-Answer status */
|
||||
unsigned ss_complete:1; /**< Completed SDP offer-answer */
|
||||
|
||||
unsigned ss_unprocessed_remote:1; /**< We have received remote SDP */
|
||||
|
||||
unsigned ss_offer_sent:2; /**< We have offered SDP */
|
||||
unsigned ss_answer_recv:2; /**< We have received SDP answer */
|
||||
|
||||
unsigned ss_offer_recv:2; /**< We have received an offer */
|
||||
unsigned ss_answer_sent:2; /**< We have answered (reliably, if >1) */
|
||||
unsigned :0; /* Pad */
|
||||
|
||||
unsigned ss_oa_rounds; /**< Number of O/A rounds completed */
|
||||
|
||||
struct soa_media_activity
|
||||
{
|
||||
int ma_audio:4; /**< Audio activity (send/recv) */
|
||||
int ma_video:4; /**< Video activity (send/recv) */
|
||||
int ma_image:4; /**< Image activity (send/recv) for JPIP */
|
||||
int ma_chat:4; /**< Chat activity (send/recv) */
|
||||
} ss_local_activity[1], ss_remote_activity[1];
|
||||
|
||||
/** Capabilities as specified by application */
|
||||
struct soa_description ss_caps[1];
|
||||
|
||||
/** Session description provided by user */
|
||||
struct soa_description ss_user[1];
|
||||
unsigned ss_user_version; /**< Version incremented at each change */
|
||||
|
||||
/** Remote session description */
|
||||
struct soa_description ss_remote[1];
|
||||
unsigned ss_remote_version; /**< Version incremented at each change */
|
||||
|
||||
/** Local session description */
|
||||
struct soa_description ss_local[1];
|
||||
unsigned ss_local_user_version, ss_local_remote_version;
|
||||
char const *ss_hold_local;
|
||||
|
||||
/** Previous session description (return to this if offer is rejected) */
|
||||
struct soa_description ss_previous[1];
|
||||
unsigned ss_previous_user_version, ss_previous_remote_version;
|
||||
char const *ss_hold_previous;
|
||||
|
||||
sdp_session_t *ss_rsession; /**< Processed remote SDP */
|
||||
|
||||
/** SIP features required */
|
||||
char const * const *ss_local_required;
|
||||
/** SIP features supported */
|
||||
char const * const *ss_local_support;
|
||||
|
||||
/** SIP features required by remote */
|
||||
char const **ss_remote_required;
|
||||
/** SIP features supported */
|
||||
char const **ss_remote_support;
|
||||
|
||||
int ss_status; /**< Status from last media operation */
|
||||
char const *ss_phrase; /**< Phrase from last media operation */
|
||||
char *ss_reason; /**< Reason generated by media operation */
|
||||
|
||||
|
||||
/* Media parameters */
|
||||
char const *ss_address;
|
||||
enum soa_af ss_af;
|
||||
char const *ss_hold; /**< Media on hold locally */
|
||||
|
||||
char const *ss_cname;
|
||||
|
||||
/* XXX - this is part of public API. we should have no bitfields here */
|
||||
|
||||
/* Codec handling during negotiation */
|
||||
unsigned ss_rtp_select:2;
|
||||
unsigned ss_rtp_sort:2;
|
||||
unsigned ss_rtp_mismatch:1;
|
||||
|
||||
unsigned ss_srtp_enable:1,
|
||||
ss_srtp_confidentiality:1,
|
||||
ss_srtp_integrity:1;
|
||||
|
||||
unsigned :0; /* Pad */
|
||||
|
||||
int ss_wcode; /**< Warning code from last media operation */
|
||||
char const *ss_warning; /**< Warnings text from last media operation */
|
||||
};
|
||||
|
||||
/* ====================================================================== */
|
||||
|
||||
SOFIAPUBFUN int soa_has_received_sdp(soa_session_t const *ss);
|
||||
|
||||
SOFIAPUBFUN int soa_set_status(soa_session_t *ss,
|
||||
int status, char const *phrase);
|
||||
|
||||
SOFIAPUBFUN void soa_set_activity(soa_session_t *ss,
|
||||
sdp_media_t const *m, int remote);
|
||||
|
||||
SOFIAPUBFUN int soa_description_set(soa_session_t *ss,
|
||||
struct soa_description *ssd,
|
||||
sdp_session_t *sdp,
|
||||
char const *sdp_str,
|
||||
isize_t sdp_len);
|
||||
|
||||
SOFIAPUBFUN void soa_description_free(soa_session_t *,
|
||||
struct soa_description *ssd);
|
||||
|
||||
SOFIAPUBFUN int soa_description_dup(su_home_t *,
|
||||
struct soa_description *ssd,
|
||||
struct soa_description const *ssd0);
|
||||
|
||||
SOFIAPUBFUN int soa_init_sdp_origin(soa_session_t *ss,
|
||||
sdp_origin_t *o, char buf[64]);
|
||||
SOFIAPUBFUN int soa_init_sdp_connection(soa_session_t *,
|
||||
sdp_connection_t *, char buf[64]);
|
||||
|
||||
/* ====================================================================== */
|
||||
/* Debug log settings */
|
||||
|
||||
#define SU_LOG soa_log
|
||||
|
||||
#ifdef SU_DEBUG_H
|
||||
#error <su_debug.h> included directly.
|
||||
#endif
|
||||
#include <sofia-sip/su_debug.h>
|
||||
SOFIAPUBVAR su_log_t soa_log[];
|
||||
|
||||
SOFIA_END_DECLS
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,249 @@
|
||||
/*
|
||||
* This file is part of the Sofia-SIP package
|
||||
*
|
||||
* Copyright (C) 2005 Nokia Corporation.
|
||||
*
|
||||
* Contact: Pekka Pessi <pekka.pessi@nokia.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public License
|
||||
* as published by the Free Software Foundation; either version 2.1 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This library 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
|
||||
* 02110-1301 USA
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef SOA_TAG_H
|
||||
#define SOA_TAG_H
|
||||
/**@file sofia-sip/soa_tag.h Tags for SDP Offer/Answer Application Interface.
|
||||
*
|
||||
* @author Pekka Pessi <Pekka.Pessi@nokia.com>
|
||||
*
|
||||
* @date Created: Mon Aug 1 15:43:53 EEST 2005 ppessi
|
||||
*/
|
||||
|
||||
#ifndef SU_TAG_H
|
||||
#include <sofia-sip/su_tag.h>
|
||||
#endif
|
||||
#ifndef SDP_TAG_H
|
||||
#include <sofia-sip/sdp_tag.h>
|
||||
#endif
|
||||
|
||||
SOFIA_BEGIN_DECLS
|
||||
|
||||
/** List of base SOA tags (defined in base SOA module). */
|
||||
SOFIAPUBVAR tagi_t soa_tag_list[];
|
||||
|
||||
/** Filter tag matching any soa tag. */
|
||||
#define SOATAG_ANY() soatag_any, ((tag_value_t)0)
|
||||
SOFIAPUBVAR tag_typedef_t soatag_any;
|
||||
|
||||
/**
|
||||
* Media states
|
||||
*/
|
||||
enum {
|
||||
SOA_ACTIVE_REJECTED = -8, /**< Media rejected in negotiation */
|
||||
SOA_ACTIVE_DISABLED = -4, /**< Media not negotiated */
|
||||
SOA_ACTIVE_INACTIVE = 0, /**< Media is inactive: no RTP */
|
||||
SOA_ACTIVE_SENDONLY = 1, /**< Media is sent only */
|
||||
SOA_ACTIVE_RECVONLY = 2, /**< Media is received only */
|
||||
SOA_ACTIVE_SENDRECV = SOA_ACTIVE_SENDONLY | SOA_ACTIVE_RECVONLY
|
||||
/**< Media is bidirectional */
|
||||
};
|
||||
|
||||
#define SOA_ACTIVE_DISABLED SOA_ACTIVE_DISABLED
|
||||
#define SOA_ACTIVE_REJECTED SOA_ACTIVE_REJECTED
|
||||
#define SOA_ACTIVE_INACTIVE SOA_ACTIVE_INACTIVE
|
||||
#define SOA_ACTIVE_SENDONLY SOA_ACTIVE_SENDONLY
|
||||
#define SOA_ACTIVE_RECVONLY SOA_ACTIVE_RECVONLY
|
||||
#define SOA_ACTIVE_SENDRECV SOA_ACTIVE_SENDRECV
|
||||
|
||||
/*
|
||||
* SOA engine and media parameters set by soa_set_params(), get by
|
||||
* soa_get_params() or soa_get_paramlist()
|
||||
*/
|
||||
|
||||
#define SOATAG_LOCAL_SDP(x) soatag_local_sdp, sdptag_session_v(x)
|
||||
SOFIAPUBVAR tag_typedef_t soatag_local_sdp;
|
||||
#define SOATAG_LOCAL_SDP_REF(x) \
|
||||
soatag_local_sdp_ref, sdptag_session_vr(&(x))
|
||||
SOFIAPUBVAR tag_typedef_t soatag_local_sdp_ref;
|
||||
|
||||
#define SOATAG_LOCAL_SDP_STR(x) soatag_local_sdp_str, tag_str_v(x)
|
||||
SOFIAPUBVAR tag_typedef_t soatag_local_sdp_str;
|
||||
#define SOATAG_LOCAL_SDP_STR_REF(x) \
|
||||
soatag_local_sdp_str_ref, tag_str_vr(&(x))
|
||||
SOFIAPUBVAR tag_typedef_t soatag_local_sdp_str_ref;
|
||||
|
||||
#define SOATAG_USER_SDP(x) soatag_user_sdp, sdptag_session_v(x)
|
||||
SOFIAPUBVAR tag_typedef_t soatag_user_sdp;
|
||||
#define SOATAG_USER_SDP_REF(x) \
|
||||
soatag_user_sdp_ref, sdptag_session_vr(&(x))
|
||||
SOFIAPUBVAR tag_typedef_t soatag_user_sdp_ref;
|
||||
|
||||
#define SOATAG_USER_SDP_STR(x) soatag_user_sdp_str, tag_str_v(x)
|
||||
SOFIAPUBVAR tag_typedef_t soatag_user_sdp_str;
|
||||
#define SOATAG_USER_SDP_STR_REF(x) \
|
||||
soatag_user_sdp_str_ref, tag_str_vr(&(x))
|
||||
SOFIAPUBVAR tag_typedef_t soatag_user_sdp_str_ref;
|
||||
|
||||
#define SOATAG_CAPS_SDP(x) soatag_caps_sdp, sdptag_session_v(x)
|
||||
SOFIAPUBVAR tag_typedef_t soatag_caps_sdp;
|
||||
#define SOATAG_CAPS_SDP_REF(x) \
|
||||
soatag_caps_sdp_ref, sdptag_session_vr(&(x))
|
||||
SOFIAPUBVAR tag_typedef_t soatag_caps_sdp_ref;
|
||||
|
||||
#define SOATAG_CAPS_SDP_STR(x) soatag_caps_sdp_str, tag_str_v(x)
|
||||
SOFIAPUBVAR tag_typedef_t soatag_caps_sdp_str;
|
||||
#define SOATAG_CAPS_SDP_STR_REF(x) \
|
||||
soatag_caps_sdp_str_ref, tag_str_vr(&(x))
|
||||
SOFIAPUBVAR tag_typedef_t soatag_caps_sdp_str_ref;
|
||||
|
||||
#define SOATAG_REMOTE_SDP(x) soatag_remote_sdp, sdptag_session_v(x)
|
||||
SOFIAPUBVAR tag_typedef_t soatag_remote_sdp;
|
||||
#define SOATAG_REMOTE_SDP_REF(x) \
|
||||
soatag_remote_sdp_ref, sdptag_session_vr(&(x))
|
||||
SOFIAPUBVAR tag_typedef_t soatag_remote_sdp_ref;
|
||||
|
||||
#define SOATAG_REMOTE_SDP_STR(x) soatag_remote_sdp_str, tag_str_v(x)
|
||||
SOFIAPUBVAR tag_typedef_t soatag_remote_sdp_str;
|
||||
#define SOATAG_REMOTE_SDP_STR_REF(x) \
|
||||
soatag_remote_sdp_str_ref, tag_str_vr(&(x))
|
||||
SOFIAPUBVAR tag_typedef_t soatag_remote_sdp_str_ref;
|
||||
|
||||
#define SOATAG_LOCAL_SDP(x) soatag_local_sdp, sdptag_session_v(x)
|
||||
SOFIAPUBVAR tag_typedef_t soatag_local_sdp;
|
||||
#define SOATAG_LOCAL_SDP_REF(x) \
|
||||
soatag_local_sdp_ref, sdptag_session_vr(&(x))
|
||||
SOFIAPUBVAR tag_typedef_t soatag_local_sdp_ref;
|
||||
|
||||
#define SOATAG_LOCAL_SDP_STR(x) soatag_local_sdp_str, tag_str_v(x)
|
||||
SOFIAPUBVAR tag_typedef_t soatag_local_sdp_str;
|
||||
#define SOATAG_LOCAL_SDP_STR_REF(x) \
|
||||
soatag_local_sdp_str_ref, tag_str_vr(&(x))
|
||||
SOFIAPUBVAR tag_typedef_t soatag_session_sdp_str_ref;
|
||||
|
||||
#define SOATAG_AF(x) soatag_af, tag_int_v((x))
|
||||
SOFIAPUBVAR tag_typedef_t soatag_af;
|
||||
|
||||
#define SOATAG_AF_REF(x) soatag_af_ref, tag_int_vr(&(x))
|
||||
SOFIAPUBVAR tag_typedef_t soatag_af_ref;
|
||||
|
||||
/** SOATAG_AF() parameter type */
|
||||
enum soa_af {
|
||||
SOA_AF_ANY, /**< Use any address family. */
|
||||
SOA_AF_IP4_ONLY, /**< Use IP version 4 only */
|
||||
SOA_AF_IP6_ONLY, /**< Use IP version 6 only */
|
||||
SOA_AF_IP4_IP6, /**< Prefer IP4 to IP6 */
|
||||
SOA_AF_IP6_IP4 /**< Prefer IP6 to IP4 */
|
||||
};
|
||||
|
||||
#define SOA_AF_ANY SOA_AF_ANY
|
||||
#define SOA_AF_IP4_ONLY SOA_AF_IP4_ONLY
|
||||
#define SOA_AF_IP6_ONLY SOA_AF_IP6_ONLY
|
||||
#define SOA_AF_IP4_IP6 SOA_AF_IP4_IP6
|
||||
#define SOA_AF_IP6_IP4 SOA_AF_IP6_IP4
|
||||
|
||||
#define SOATAG_ADDRESS(x) soatag_address, tag_str_v(x)
|
||||
SOFIAPUBVAR tag_typedef_t soatag_address;
|
||||
#define SOATAG_ADDRESS_REF(x) soatag_address_ref, tag_str_vr(&(x))
|
||||
SOFIAPUBVAR tag_typedef_t soatag_address_ref;
|
||||
|
||||
#define SOATAG_RTP_SELECT(x) soatag_rtp_select, tag_int_v(x)
|
||||
SOFIAPUBVAR tag_typedef_t soatag_rtp_select;
|
||||
#define SOATAG_RTP_SELECT_REF(x) soatag_rtp_select_ref, tag_int_vr(&(x))
|
||||
SOFIAPUBVAR tag_typedef_t soatag_rtp_select_ref;
|
||||
|
||||
/** Parameter type for SOATAG_RTP_SELECT() */
|
||||
enum {
|
||||
SOA_RTP_SELECT_SINGLE, /**< Select the best common codec */
|
||||
SOA_RTP_SELECT_COMMON, /**< Select all common codecs */
|
||||
SOA_RTP_SELECT_ALL /**< Select all local codecs */
|
||||
};
|
||||
|
||||
#define SOATAG_AUDIO_AUX(x) soatag_audio_aux, tag_str_v(x)
|
||||
SOFIAPUBVAR tag_typedef_t soatag_audio_aux;
|
||||
#define SOATAG_AUDIO_AUX_REF(x) soatag_audio_aux_ref, tag_str_vr(&(x))
|
||||
SOFIAPUBVAR tag_typedef_t soatag_audio_aux_ref;
|
||||
|
||||
#define SOATAG_RTP_SORT(x) soatag_rtp_sort, tag_int_v(x)
|
||||
SOFIAPUBVAR tag_typedef_t soatag_rtp_sort;
|
||||
#define SOATAG_RTP_SORT_REF(x) soatag_rtp_sort_ref, tag_int_vr(&(x))
|
||||
SOFIAPUBVAR tag_typedef_t soatag_rtp_sort_ref;
|
||||
|
||||
/** Parameter type for SOATAG_RTP_SORT() */
|
||||
enum {
|
||||
SOA_RTP_SORT_DEFAULT, /**< Select codecs by local preference
|
||||
* when media is recvonly,
|
||||
* remote preference othewise.
|
||||
*/
|
||||
SOA_RTP_SORT_LOCAL, /**< Select codecs by local preference. */
|
||||
SOA_RTP_SORT_REMOTE /**< Select codecs by remote preference. */
|
||||
};
|
||||
|
||||
#define SOATAG_RTP_MISMATCH(x) soatag_rtp_mismatch, tag_bool_v(x)
|
||||
SOFIAPUBVAR tag_typedef_t soatag_rtp_mismatch;
|
||||
#define SOATAG_RTP_MISMATCH_REF(x) soatag_rtp_mismatch_ref, tag_bool_vr(&(x))
|
||||
SOFIAPUBVAR tag_typedef_t soatag_rtp_mismatch_ref;
|
||||
|
||||
#define SOATAG_ACTIVE_AUDIO(x) soatag_active_audio, tag_int_v(x)
|
||||
SOFIAPUBVAR tag_typedef_t soatag_active_audio;
|
||||
|
||||
#define SOATAG_ACTIVE_AUDIO_REF(x) soatag_active_audio_ref, tag_int_vr(&(x))
|
||||
SOFIAPUBVAR tag_typedef_t soatag_active_audio_ref;
|
||||
|
||||
#define SOATAG_ACTIVE_VIDEO(x) soatag_active_video, tag_int_v(x)
|
||||
SOFIAPUBVAR tag_typedef_t soatag_active_video;
|
||||
|
||||
#define SOATAG_ACTIVE_VIDEO_REF(x) soatag_active_video_ref, tag_int_vr(&(x))
|
||||
SOFIAPUBVAR tag_typedef_t soatag_active_video_ref;
|
||||
|
||||
#define SOATAG_ACTIVE_IMAGE(x) soatag_active_image, tag_int_v(x)
|
||||
SOFIAPUBVAR tag_typedef_t soatag_active_image;
|
||||
|
||||
#define SOATAG_ACTIVE_IMAGE_REF(x) soatag_active_image_ref, tag_int_vr(&(x))
|
||||
SOFIAPUBVAR tag_typedef_t soatag_active_image_ref;
|
||||
|
||||
#define SOATAG_ACTIVE_CHAT(x) soatag_active_chat, tag_int_v(x)
|
||||
SOFIAPUBVAR tag_typedef_t soatag_active_chat;
|
||||
|
||||
#define SOATAG_ACTIVE_CHAT_REF(x) soatag_active_chat_ref, tag_int_vr(&(x))
|
||||
SOFIAPUBVAR tag_typedef_t soatag_active_chat_ref;
|
||||
|
||||
/** Enable SRTP */
|
||||
#define SOATAG_SRTP_ENABLE(x) soatag_srtp_enable, tag_bool_v(x)
|
||||
SOFIAPUBVAR tag_typedef_t soatag_srtp_enable;
|
||||
|
||||
#define SOATAG_SRTP_ENABLE_REF(x) soatag_srtp_enable_ref, tag_bool_vr(&(x))
|
||||
SOFIAPUBVAR tag_typedef_t soatag_srtp_enable_ref;
|
||||
|
||||
#define SOATAG_SRTP_CONFIDENTIALITY(x) soatag_srtp_confidentiality, tag_bool_v(x)
|
||||
SOFIAPUBVAR tag_typedef_t soatag_srtp_confidentiality;
|
||||
#define SOATAG_SRTP_CONFIDENTIALITY_REF(x) soatag_srtp_confidentiality_ref, tag_bool_vr(&(x))
|
||||
SOFIAPUBVAR tag_typedef_t soatag_srtp_confidentiality_ref;
|
||||
|
||||
/** Enable SRTP integrity protection */
|
||||
#define SOATAG_SRTP_INTEGRITY(x) soatag_srtp_integrity, tag_bool_v(x)
|
||||
SOFIAPUBVAR tag_typedef_t soatag_srtp_integrity;
|
||||
|
||||
#define SOATAG_SRTP_INTEGRITY_REF(x) \
|
||||
soatag_srtp_integrity_ref, tag_bool_vr(&(x))
|
||||
SOFIAPUBVAR tag_typedef_t soatag_srtp_integrity_ref;
|
||||
|
||||
#define SOATAG_HOLD(x) soatag_hold, tag_str_v(x)
|
||||
SOFIAPUBVAR tag_typedef_t soatag_hold;
|
||||
#define SOATAG_HOLD_REF(x) soatag_hold_ref, tag_str_vr(&(x))
|
||||
SOFIAPUBVAR tag_typedef_t soatag_hold_ref;
|
||||
|
||||
SOFIA_END_DECLS
|
||||
|
||||
#endif /* SOA_TAG_H */
|
||||
Reference in new issue
Block a user