⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sdp_negoc.c

📁 libosip-0.9.7源码
💻 C
📖 第 1 页 / 共 2 页
字号:
/*  The oSIP library implements the Session Initiation Protocol (SIP -rfc3261-)  Copyright (C) 2001,2002,2003  Aymeric MOIZARD jack@atosc.org    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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA*/#include <osip/sdp_negoc.h>#include <osip/port.h>/* this MUST be initialized through a call to sdp_config_init() */sdp_config_t *config = NULL;intsdp_context_init (sdp_context_t ** con){  (*con) = (sdp_context_t *) smalloc (sizeof (sdp_context_t));  if (*con == NULL)    return -1;  (*con)->remote = NULL;  (*con)->local = NULL;  return 0;}voidsdp_context_free (sdp_context_t * con){  if (con == NULL)    return;  sdp_free (con->remote);  sfree (con->remote);  sdp_free (con->local);  sfree (con->local);}/* this method is used by end-user application so any pointer can   be associated with this context (usefull to link with your own context */intsdp_context_set_mycontext (sdp_context_t * con, void *my_instance){  if (con == NULL)    return -1;  con->mycontext = my_instance;  return 0;}void *sdp_context_get_mycontext (sdp_context_t * con){  if (con == NULL)    return NULL;  return con->mycontext;}sdp_t *sdp_context_get_local_sdp (sdp_context_t * con){  if (con == NULL)    return NULL;  return con->local;}intsdp_context_set_local_sdp (sdp_context_t * con, sdp_t * sdp){  if (con == NULL)    return -1;  con->local = sdp;  return 0;}sdp_t *sdp_context_get_remote_sdp (sdp_context_t * con){  if (con == NULL)    return NULL;  return con->remote;}intsdp_context_set_remote_sdp (sdp_context_t * con, sdp_t * sdp){  if (con == NULL)    return -1;  con->remote = sdp;  return 0;}intpayload_init (payload_t ** payload){  *payload = (payload_t *) smalloc (sizeof (payload_t));  if (*payload == NULL)    return -1;  (*payload)->payload = NULL;  (*payload)->number_of_port = NULL;  (*payload)->proto = NULL;  (*payload)->c_nettype = NULL;  (*payload)->c_addrtype = NULL;  (*payload)->c_addr = NULL;  (*payload)->c_addr_multicast_ttl = NULL;  (*payload)->c_addr_multicast_int = NULL;  (*payload)->a_rtpmap = NULL;  return 0;}voidpayload_free (payload_t * payload){  if (payload == NULL)    return;  sfree (payload->payload);  sfree (payload->number_of_port);  sfree (payload->proto);  sfree (payload->c_nettype);  sfree (payload->c_addrtype);  sfree (payload->c_addr);  sfree (payload->c_addr_multicast_ttl);  sfree (payload->c_addr_multicast_int);  sfree (payload->a_rtpmap);}intsdp_config_init (){  config = (sdp_config_t *) smalloc (sizeof (sdp_config_t));  if (config == NULL)    return -1;  config->o_username = NULL;  config->o_session_id = NULL;  config->o_session_version = NULL;  config->o_nettype = NULL;  config->o_addrtype = NULL;  config->o_addr = NULL;  config->c_nettype = NULL;  config->c_addrtype = NULL;  config->c_addr = NULL;  config->c_addr_multicast_ttl = NULL;  config->c_addr_multicast_int = NULL;  /* supported codec for the SIP User Agent */  config->audio_codec = (list_t *) smalloc (sizeof (list_t));  list_init (config->audio_codec);  config->video_codec = (list_t *) smalloc (sizeof (list_t));  list_init (config->video_codec);  config->other_codec = (list_t *) smalloc (sizeof (list_t));  list_init (config->other_codec);  config->fcn_set_info = NULL;  config->fcn_set_uri = NULL;  config->fcn_set_emails = NULL;  config->fcn_set_phones = NULL;  config->fcn_set_attributes = NULL;  config->fcn_accept_audio_codec = NULL;  config->fcn_accept_video_codec = NULL;  config->fcn_accept_other_codec = NULL;  return 0;}voidsdp_config_free (){  if (config == NULL)    return;  sfree (config->o_username);  sfree (config->o_session_id);  sfree (config->o_session_version);  sfree (config->o_nettype);  sfree (config->o_addrtype);  sfree (config->o_addr);  sfree (config->c_nettype);  sfree (config->c_addrtype);  sfree (config->c_addr);  sfree (config->c_addr_multicast_ttl);  sfree (config->c_addr_multicast_int);  list_special_free (config->audio_codec, (void *(*)(void *)) &payload_free);  sfree (config->audio_codec);  list_special_free (config->video_codec, (void *(*)(void *)) &payload_free);  sfree (config->video_codec);  list_special_free (config->other_codec, (void *(*)(void *)) &payload_free);  sfree (config->other_codec);  /* other are pointer to func, they don't need free() calls */  /* yes, this is done here... :) */  sfree (config);}intsdp_config_set_o_username (char *tmp){  if (config == NULL)    return -1;  config->o_username = tmp;  return 0;}intsdp_config_set_o_session_id (char *tmp){  if (config == NULL)    return -1;  config->o_session_id = tmp;  return 0;}intsdp_config_set_o_session_version (char *tmp){  if (config == NULL)    return -1;  config->o_session_version = tmp;  return 0;}intsdp_config_set_o_nettype (char *tmp){  if (config == NULL)    return -1;  config->o_nettype = tmp;  return 0;}intsdp_config_set_o_addrtype (char *tmp){  if (config == NULL)    return -1;  config->o_addrtype = tmp;  return 0;}intsdp_config_set_o_addr (char *tmp){  if (config == NULL)    return -1;  config->o_addr = tmp;  return 0;}intsdp_config_set_c_nettype (char *tmp){  if (config == NULL)    return -1;  config->c_nettype = tmp;  return 0;}intsdp_config_set_c_addrtype (char *tmp){  if (config == NULL)    return -1;  config->c_addrtype = tmp;  return 0;}intsdp_config_set_c_addr (char *tmp){  if (config == NULL)    return -1;  config->c_addr = tmp;  return 0;}intsdp_config_set_c_addr_multicast_ttl (char *tmp){  if (config == NULL)    return -1;  config->c_addr_multicast_ttl = tmp;  return 0;}intsdp_config_set_c_addr_multicast_int (char *tmp){  if (config == NULL)    return -1;  config->c_addr_multicast_int = tmp;  return 0;}intsdp_config_add_support_for_audio_codec (char *payload, char *number_of_port,					char *proto, char *c_nettype,					char *c_addrtype, char *c_addr,					char *c_addr_multicast_ttl,					char *c_addr_multicast_int,					char *a_rtpmap){  int i;  payload_t *my_payload;  i = payload_init (&my_payload);  if (i != 0)    return -1;  my_payload->payload = payload;  my_payload->number_of_port = number_of_port;  my_payload->proto = proto;  my_payload->c_nettype = c_nettype;  my_payload->c_addrtype = c_addrtype;  my_payload->c_addr = c_addr;  my_payload->c_addr_multicast_ttl = c_addr_multicast_ttl;  my_payload->c_addr_multicast_int = c_addr_multicast_int;  my_payload->a_rtpmap = a_rtpmap;  list_add (config->audio_codec, my_payload, -1);  return 0;}intsdp_config_add_support_for_video_codec (char *payload, char *number_of_port,					char *proto, char *c_nettype,					char *c_addrtype, char *c_addr,					char *c_addr_multicast_ttl,					char *c_addr_multicast_int,					char *a_rtpmap){  int i;  payload_t *my_payload;  i = payload_init (&my_payload);  if (i != 0)    return -1;  my_payload->payload = payload;  my_payload->number_of_port = number_of_port;  my_payload->proto = proto;  my_payload->c_nettype = c_nettype;  my_payload->c_addrtype = c_addrtype;  my_payload->c_addr = c_addr;  my_payload->c_addr_multicast_ttl = c_addr_multicast_ttl;  my_payload->c_addr_multicast_int = c_addr_multicast_int;  my_payload->a_rtpmap = a_rtpmap;  list_add (config->video_codec, my_payload, -1);  return 0;}intsdp_config_add_support_for_other_codec (char *payload, char *number_of_port,					char *proto, char *c_nettype,					char *c_addrtype, char *c_addr,					char *c_addr_multicast_ttl,					char *c_addr_multicast_int,					char *a_rtpmap){  int i;  payload_t *my_payload;  i = payload_init (&my_payload);  if (i != 0)    return -1;  my_payload->payload = payload;  my_payload->number_of_port = number_of_port;  my_payload->proto = proto;  my_payload->c_nettype = c_nettype;  my_payload->c_addrtype = c_addrtype;  my_payload->c_addr = c_addr;  my_payload->c_addr_multicast_ttl = c_addr_multicast_ttl;  my_payload->c_addr_multicast_int = c_addr_multicast_int;  my_payload->a_rtpmap = a_rtpmap;  list_add (config->other_codec, my_payload, -1);  return 0;}intsdp_config_remove_audio_payloads (){  list_special_free (config->audio_codec, (void *(*)(void *)) &payload_free);  return 0;}intsdp_config_remove_video_payloads (){  list_special_free (config->video_codec, (void *(*)(void *)) &payload_free);  return 0;}intsdp_config_remove_other_payloads (){  list_special_free (config->other_codec, (void *(*)(void *)) &payload_free);  return 0;}payload_t *sdp_config_find_audio_payload (char *payload){  payload_t *my;  size_t length = strlen (payload);  int pos = 0;  if (payload == NULL)    return NULL;  while (!list_eol (config->audio_codec, pos))    {      my = (payload_t *) list_get (config->audio_codec, pos);      if (strlen (my->payload) == length)	if (0 == strncmp (my->payload, payload, length))	  return my;      pos++;    }  return NULL;}payload_t *sdp_config_find_video_payload (char *payload){  payload_t *my;  size_t length = strlen (payload);  int pos = 0;  if (payload == NULL)    return NULL;  while (!list_eol (config->video_codec, pos))    {      my = (payload_t *) list_get (config->video_codec, pos);      if (strlen (my->payload) == length)	if (0 == strncmp (my->payload, payload, length))	  return my;      pos++;    }  return NULL;}payload_t *sdp_config_find_other_payload (char *payload){  payload_t *my;  size_t length = strlen (payload);  int pos = 0;  if (payload == NULL)    return NULL;  while (!list_eol (config->other_codec, pos))    {      my = (payload_t *) list_get (config->other_codec, pos);      if (strlen (my->payload) == length)	if (0 == strncmp (my->payload, payload, length))	  return my;      pos++;    }  return NULL;}intsdp_config_set_fcn_set_info (int (*fcn) (sdp_context_t *, sdp_t *)){  if (config == NULL)    return -1;  config->fcn_set_info = (int (*)(void *, sdp_t *)) fcn;  return 0;}intsdp_config_set_fcn_set_uri (int (*fcn) (sdp_context_t *, sdp_t *)){  if (config == NULL)    return -1;  config->fcn_set_uri = (int (*)(void *, sdp_t *)) fcn;  return 0;}intsdp_config_set_fcn_set_emails (int (*fcn) (sdp_context_t *, sdp_t *)){  if (config == NULL)    return -1;  config->fcn_set_emails = (int (*)(void *, sdp_t *)) fcn;  return 0;}intsdp_config_set_fcn_set_phones (int (*fcn) (sdp_context_t *, sdp_t *)){  if (config == NULL)    return -1;  config->fcn_set_phones = (int (*)(void *, sdp_t *)) fcn;  return 0;}intsdp_config_set_fcn_set_attributes (int (*fcn) (sdp_context_t *, sdp_t *, int)){  if (config == NULL)    return -1;  config->fcn_set_attributes = (int (*)(void *, sdp_t *, int)) fcn;  return 0;}intsdp_config_set_fcn_accept_audio_codec (int (*fcn) (sdp_context_t *, char *,						   char *, int, char *)){  if (config == NULL)    return -1;  config->fcn_accept_audio_codec = (int (*)(void *, char *,					    char *, int, char *)) fcn;  return 0;}intsdp_config_set_fcn_accept_video_codec (int (*fcn) (sdp_context_t *, char *,						   char *, int, char *)){  if (config == NULL)    return -1;  config->fcn_accept_video_codec = (int (*)(void *, char *,					    char *, int, char *)) fcn;  return 0;}intsdp_config_set_fcn_accept_other_codec (int (*fcn) (sdp_context_t *, char *,						   char *, char *, char *)){  if (config == NULL)    return -1;  config->fcn_accept_other_codec = (int (*)(void *, char *,					    char *, char *, char *)) fcn;  return 0;}intsdp_config_set_fcn_get_audio_port (char *(*fcn) (sdp_context_t *, int)){  if (config == NULL)    return -1;  config->fcn_get_audio_port = (char *(*)(void *, int)) fcn;  return 0;}intsdp_config_set_fcn_get_video_port (char *(*fcn) (sdp_context_t *, int)){  if (config == NULL)    return -1;  config->fcn_get_video_port = (char *(*)(void *, int)) fcn;  return 0;}intsdp_config_set_fcn_get_other_port (char *(*fcn) (sdp_context_t *, int)){  if (config == NULL)    return -1;  config->fcn_get_other_port = (char *(*)(void *, int)) fcn;  return 0;}intsdp_partial_clone (sdp_context_t * con, sdp_t * remote, sdp_t ** dest){  int i;  sdp_v_version_set (*dest, sgetcopy ("0"));  /* those fields MUST be set */  sdp_o_origin_set (*dest,		    sgetcopy (config->o_username),		    sgetcopy (config->o_session_id),		    sgetcopy (config->o_session_version),		    sgetcopy (config->o_nettype),		    sgetcopy (config->o_addrtype), sgetcopy (config->o_addr));  sdp_s_name_set (*dest, sgetcopy (remote->s_name));  if (config->fcn_set_info != NULL)    config->fcn_set_info (con, *dest);  if (config->fcn_set_uri != NULL)    config->fcn_set_uri (con, *dest);  if (config->fcn_set_emails != NULL)    config->fcn_set_emails (con, *dest);  if (config->fcn_set_phones != NULL)    config->fcn_set_phones (con, *dest);  if (config->c_nettype != NULL)    sdp_c_connection_add (*dest, -1,			  sgetcopy (config->c_nettype),			  sgetcopy (config->c_addrtype),			  sgetcopy (config->c_addr),			  sgetcopy (config->c_addr_multicast_ttl),			  sgetcopy (config->c_addr_multicast_int));  {				/* offer-answer draft says we must copy the "t=" line */    char *tmp = sdp_t_start_time_get (remote, 0);    char *tmp2 = sdp_t_stop_time_get (remote, 0);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -