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

📄 jdialog.c

📁 mediastreamer2是开源的网络传输媒体流的库
💻 C
字号:
/*  eXosip - This is the eXtended osip library.  Copyright (C) 2002,2003,2004,2005,2006,2007  Aymeric MOIZARD  - jack@atosc.org    eXosip 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.    eXosip 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA*/#ifdef ENABLE_MPATROL#include <mpatrol.h>#endif#include "eXosip2.h"extern eXosip_t eXosip;voideXosip_dialog_set_state (eXosip_dialog_t * jd, int state){  jd->d_STATE = state;}inteXosip_call_dialog_find (int jid, eXosip_call_t ** jc, eXosip_dialog_t ** jd){  if (jid <= 0)    return OSIP_BADPARAMETER;  for (*jc = eXosip.j_calls; *jc != NULL; *jc = (*jc)->next)    {      for (*jd = (*jc)->c_dialogs; *jd != NULL; *jd = (*jd)->next)        {          if ((*jd)->d_id == jid)            return OSIP_SUCCESS;        }    }  *jd = NULL;  *jc = NULL;  return OSIP_NOTFOUND;}#ifndef MINISIZEinteXosip_notify_dialog_find (int nid, eXosip_notify_t ** jn, eXosip_dialog_t ** jd){  if (nid <= 0)    return OSIP_BADPARAMETER;  for (*jn = eXosip.j_notifies; *jn != NULL; *jn = (*jn)->next)    {      for (*jd = (*jn)->n_dialogs; *jd != NULL; *jd = (*jd)->next)        {          if ((*jd)->d_id == nid)            return OSIP_SUCCESS;        }    }  *jd = NULL;  *jn = NULL;  return OSIP_NOTFOUND;}inteXosip_subscribe_dialog_find (int sid, eXosip_subscribe_t ** js,                              eXosip_dialog_t ** jd){  if (sid <= 0)    return OSIP_BADPARAMETER;  for (*js = eXosip.j_subscribes; *js != NULL; *js = (*js)->next)    {      *jd = NULL;      if ((*js)->s_id == sid)        return OSIP_SUCCESS;      for (*jd = (*js)->s_dialogs; *jd != NULL; *jd = (*jd)->next)        {          if ((*jd)->d_id == sid)            return OSIP_SUCCESS;        }    }  *jd = NULL;  *js = NULL;  return OSIP_NOTFOUND;}#endifinteXosip_dialog_set_200ok (eXosip_dialog_t * jd, osip_message_t * _200Ok){  int i;  if (jd == NULL)    return OSIP_BADPARAMETER;  if (jd->d_200Ok != NULL)    osip_message_free (jd->d_200Ok);  jd->d_timer = time (NULL) + 1;  jd->d_count = 0;  i = osip_message_clone (_200Ok, &(jd->d_200Ok));  if (i != 0)    return i;  return OSIP_SUCCESS;}inteXosip_dialog_init_as_uac (eXosip_dialog_t ** _jd, osip_message_t * _200Ok){  int i;  eXosip_dialog_t *jd;  *_jd = NULL;  jd = (eXosip_dialog_t *) osip_malloc (sizeof (eXosip_dialog_t));  if (jd == NULL)    return OSIP_NOMEM;  memset (jd, 0, sizeof (eXosip_dialog_t));  jd->d_id = -1;                /* not yet available to user */  jd->d_STATE = JD_EMPTY;  if (MSG_IS_REQUEST (_200Ok))    {      i =        osip_dialog_init_as_uac_with_remote_request (&(jd->d_dialog), _200Ok, -1);  } else    {                           /* normal usage with response */      i = osip_dialog_init_as_uac (&(jd->d_dialog), _200Ok);    }  if (i != 0)    {      osip_free (jd);      return i;    }  jd->d_count = 0;  jd->d_timer = time (NULL);  jd->d_200Ok = NULL;  jd->d_ack = NULL;  jd->next = NULL;  jd->parent = NULL;  jd->d_out_trs = (osip_list_t *) osip_malloc (sizeof (osip_list_t));  if (jd->d_out_trs == NULL)    {      osip_dialog_free (jd->d_dialog);      osip_free (jd);      return OSIP_NOMEM;    }  osip_list_init (jd->d_out_trs);  jd->d_inc_trs = (osip_list_t *) osip_malloc (sizeof (osip_list_t));  if (jd->d_inc_trs == NULL)    {      osip_dialog_free (jd->d_dialog);      osip_free (jd->d_out_trs);      osip_free (jd);      return OSIP_NOMEM;    }  osip_list_init (jd->d_inc_trs);  *_jd = jd;  return OSIP_SUCCESS;}inteXosip_dialog_init_as_uas (eXosip_dialog_t ** _jd, osip_message_t * _invite,                           osip_message_t * _200Ok){  int i;  eXosip_dialog_t *jd;  *_jd = NULL;  jd = (eXosip_dialog_t *) osip_malloc (sizeof (eXosip_dialog_t));  if (jd == NULL)    return OSIP_NOMEM;  memset (jd, 0, sizeof (eXosip_dialog_t));  jd->d_id = -1;                /* not yet available to user */  jd->d_STATE = JD_EMPTY;  i = osip_dialog_init_as_uas (&(jd->d_dialog), _invite, _200Ok);  if (i != 0)    {      osip_free (jd);      return i;    }  jd->d_count = 0;  jd->d_timer = time (NULL);  jd->d_200Ok = NULL;  jd->d_ack = NULL;  jd->next = NULL;  jd->parent = NULL;  jd->d_out_trs = (osip_list_t *) osip_malloc (sizeof (osip_list_t));  if (jd->d_out_trs == NULL)    {      osip_dialog_free (jd->d_dialog);      osip_free (jd);      return OSIP_NOMEM;    }  osip_list_init (jd->d_out_trs);  jd->d_inc_trs = (osip_list_t *) osip_malloc (sizeof (osip_list_t));  if (jd->d_inc_trs == NULL)    {      osip_dialog_free (jd->d_dialog);      osip_free (jd->d_out_trs);      osip_free (jd);      return OSIP_NOMEM;    }  osip_list_init (jd->d_inc_trs);  jd->d_dialog->local_cseq = 1;  *_jd = jd;  return OSIP_SUCCESS;}voideXosip_dialog_free (eXosip_dialog_t * jd){  while (!osip_list_eol (jd->d_inc_trs, 0))    {      osip_transaction_t *tr;      tr = (osip_transaction_t *) osip_list_get (jd->d_inc_trs, 0);      osip_list_remove (jd->d_inc_trs, 0);      __eXosip_delete_jinfo (tr);      osip_list_add (&eXosip.j_transactions, tr, 0);    }  while (!osip_list_eol (jd->d_out_trs, 0))    {      osip_transaction_t *tr;      tr = (osip_transaction_t *) osip_list_get (jd->d_out_trs, 0);      osip_list_remove (jd->d_out_trs, 0);      __eXosip_delete_jinfo (tr);      osip_list_add (&eXosip.j_transactions, tr, 0);    }  osip_message_free (jd->d_200Ok);  osip_message_free (jd->d_ack);  osip_dialog_free (jd->d_dialog);  osip_free (jd->d_out_trs);  osip_free (jd->d_inc_trs);  osip_free (jd);  eXosip_update ();}

⌨️ 快捷键说明

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