/*
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"
#include <eXosip2/eXosip.h>
#ifndef WIN32
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#ifdef __APPLE_CC__
#include <unistd.h>
#endif
#else
#include <windows.h>
#endif
extern eXosip_t eXosip;
extern int ipv6_enable;
/* Private functions */
static void eXosip_send_default_answer (eXosip_dialog_t * jd,
osip_transaction_t * transaction,
osip_event_t * evt,
int status,
char *reason_phrase,
char *warning, int line);
static void eXosip_process_bye (eXosip_call_t * jc, eXosip_dialog_t * jd,
osip_transaction_t * transaction,
osip_event_t * evt);
static void eXosip_process_ack (eXosip_call_t * jc, eXosip_dialog_t * jd,
osip_event_t * evt);
static void eXosip_process_prack (eXosip_call_t * jc, eXosip_dialog_t * jd,
osip_transaction_t * transaction,
osip_event_t * evt);
static int cancel_match_invite (osip_transaction_t * invite,
osip_message_t * cancel);
static void eXosip_process_cancel (osip_transaction_t * transaction,
osip_event_t * evt);
static void eXosip_process_reinvite (eXosip_call_t * jc,
eXosip_dialog_t * jd,
osip_transaction_t *
transaction, osip_event_t * evt);
static void eXosip_process_new_invite (osip_transaction_t * transaction,
osip_event_t * evt);
#ifndef MINISIZE
static void eXosip_process_new_subscribe (osip_transaction_t * transaction,
osip_event_t * evt);
static void eXosip_process_subscribe_within_call (eXosip_notify_t * jn,
eXosip_dialog_t * jd,
osip_transaction_t *
transaction, osip_event_t * evt);
static void eXosip_process_notify_within_dialog (eXosip_subscribe_t * js,
eXosip_dialog_t * jd,
osip_transaction_t *
transaction, osip_event_t * evt);
static int eXosip_match_notify_for_subscribe (eXosip_subscribe_t * js,
osip_message_t * notify);
#endif
static void eXosip_process_message_within_dialog (eXosip_call_t * jc,
eXosip_dialog_t * jd,
osip_transaction_t *
transaction, osip_event_t * evt);
static void eXosip_process_newrequest (osip_event_t * evt, int socket);
static void eXosip_process_response_out_of_transaction (osip_event_t * evt);
static int eXosip_pendingosip_transaction_exist (eXosip_call_t * jc,
eXosip_dialog_t * jd);
static int eXosip_release_finished_calls (eXosip_call_t * jc,
eXosip_dialog_t * jd);
static int eXosip_release_aborted_calls (eXosip_call_t * jc, eXosip_dialog_t * jd);
static int eXosip_release_finished_transactions (eXosip_call_t * jc,
eXosip_dialog_t * jd);
#ifndef MINISIZE
static int eXosip_release_finished_transactions_for_subscription (eXosip_dialog_t *
jd);
#endif
static void
eXosip_send_default_answer (eXosip_dialog_t * jd,
osip_transaction_t * transaction,
osip_event_t * evt,
int status,
char *reason_phrase, char *warning, int line)
{
osip_event_t *evt_answer;
osip_message_t *answer;
int i;
/* osip_list_add(&eXosip.j_transactions, transaction, 0); */
osip_transaction_set_your_instance (transaction, NULL);
/* THIS METHOD DOES NOT ACCEPT STATUS CODE BETWEEN 101 and 299 */
if (status > 100 && status < 299 && MSG_IS_INVITE (evt->sip))
return;
if (jd != NULL)
i = _eXosip_build_response_default (&answer, jd->d_dialog, status, evt->sip);
else
i = _eXosip_build_response_default (&answer, NULL, status, evt->sip);
if (i != 0 || answer == NULL)
{
return;
}
if (reason_phrase != NULL)
{
char *_reason;
_reason = osip_message_get_reason_phrase (answer);
if (_reason != NULL)
osip_free (_reason);
_reason = osip_strdup (reason_phrase);
osip_message_set_reason_phrase (answer, _reason);
}
osip_message_set_content_length (answer, "0");
if (status == 500)
osip_message_set_retry_after (answer, "10");
evt_answer = osip_new_outgoing_sipmessage (answer);
evt_answer->transactionid = transaction->transactionid;
osip_transaction_add_event (transaction, evt_answer);
__eXosip_wakeup ();
}
static void
eXosip_process_bye (eXosip_call_t * jc, eXosip_dialog_t * jd,
osip_transaction_t * transaction, osip_event_t * evt)
{
osip_event_t *evt_answer;
osip_message_t *answer;
int i;
#ifndef MINISIZE
osip_transaction_set_your_instance (transaction,
__eXosip_new_jinfo (jc, NULL /*jd */ ,
NULL, NULL));
#else
osip_transaction_set_your_instance (transaction,
__eXosip_new_jinfo (jc, NULL /*jd */ ));
#endif
i = _eXosip_build_response_default (&answer, jd->d_dialog, 200, evt->sip);
if (i != 0)
{
osip_list_add (&eXosip.j_transactions, transaction, 0);
return;
}
osip_message_set_content_length (answer, "0");
evt_answer = osip_new_outgoing_sipmessage (answer);
evt_answer->transactionid = transaction->transactionid;
osip_list_add (jd->d_inc_trs, transaction, 0);
/* Release the eXosip_dialog */
osip_dialog_free (jd->d_dialog);
jd->d_dialog = NULL;
osip_transaction_add_event (transaction, evt_answer);
osip_nist_execute (eXosip.j_osip);
report_call_event (EXOSIP_CALL_MESSAGE_NEW, jc, jd, transaction);
report_call_event (EXOSIP_CALL_CLOSED, jc, jd, transaction);
eXosip_update (); /* AMD 30/09/05 */
__eXosip_wakeup ();
}
static void
eXosip_process_ack (eXosip_call_t * jc, eXosip_dialog_t * jd, osip_event_t * evt)
{
/* TODO: We should find the matching transaction for this ACK
and also add the ACK in the event. */
eXosip_event_t *je;
int i;
je = eXosip_event_init_for_call (EXOSIP_CALL_ACK, jc, jd, NULL);
if (je != NULL)
{
osip_transaction_t *tr;
tr = eXosip_find_last_inc_invite (jc, jd);
if (tr != NULL)
{
je->tid
没有合适的资源?快使用搜索试试~ 我知道了~
exosip2最新版3.3.0
5星 · 超过95%的资源 需积分: 9 38 下载量 27 浏览量
2009-05-05
13:48:23
上传
评论
收藏 491KB GZ 举报
温馨提示
共105个文件
c:36个
h:15个
in:14个
eXosip2 (3.3.0) * Fix when 200ok include a contact with an empty line parameter. * Fix for replaces header longuer than 256 char. * Fix SRV record with more than 10 answers. * Sort SRV record. * Option to disable NAPTR requests.
资源推荐
资源详情
资源评论
收起资源包目录
exosip2最新版3.3.0 (105个子文件)
Makefile.am 1KB
Makefile.am 428B
Makefile.am 303B
Makefile.am 181B
Makefile.am 124B
Makefile.am 117B
Makefile.am 61B
Makefile.am 58B
Makefile.am 50B
Makefile.am 24B
Makefile.am 20B
AUTHORS 33B
udp.c 82KB
jcallback.c 61KB
eXutils.c 50KB
eXosip.c 48KB
eXtl_tls.c 48KB
eXcall_api.c 42KB
jauth.c 35KB
eXconf.c 32KB
eXtl_dtls.c 32KB
jrequest.c 31KB
rijndael.c 27KB
eXinsubscription_api.c 21KB
eXtl_udp.c 20KB
eXtl_tcp.c 20KB
jevents.c 14KB
jresponse.c 14KB
eXsubscription_api.c 13KB
sip_reg.c 10KB
eXregister_api.c 9KB
sdp_offans.c 9KB
milenage.c 7KB
misc.c 7KB
inet_ntop.c 7KB
jpipe.c 6KB
jdialog.c 6KB
eXpublish_api.c 6KB
jreg.c 6KB
eXmessage_api.c 5KB
eXoptions_api.c 5KB
jnotify.c 4KB
jsubscribe.c 4KB
eXtransport.c 4KB
jpublish.c 3KB
jcall.c 3KB
eXrefer_api.c 2KB
eXtl.c 930B
ChangeLog 4KB
configure 860KB
COPYING 18KB
eXosip2.def 2KB
eXosip2.def 2KB
depcomp 16KB
ht1-callcontrol.dox 5KB
ht0-initialize.dox 3KB
ht2-registration.dox 2KB
DoxyFile 9KB
config.guess 44KB
eXosip2.h 24KB
eXosip.h 15KB
eX_setup.h 7KB
eX_call.h 7KB
eX_subscribe.h 6KB
eX_message.h 3KB
eX_register.h 3KB
eX_options.h 3KB
eX_publish.h 2KB
eXtransport.h 2KB
jpipe.h 2KB
eX_refer.h 2KB
milenage.h 1KB
inet_ntop.h 1KB
rijndael.h 898B
Makefile.in 20KB
Makefile.in 19KB
Makefile.in 15KB
Makefile.in 14KB
Makefile.in 14KB
Makefile.in 14KB
Makefile.in 12KB
configure.in 10KB
Makefile.in 9KB
Makefile.in 9KB
Makefile.in 9KB
Makefile.in 9KB
config.h.in 3KB
doxygen.dox.in 3KB
INSTALL 9KB
install-sh 5KB
INSTALL.linux 370B
aclocal.m4 268KB
acx_pthread.m4 9KB
aclocal-include.m4 367B
missing 10KB
mkinstalldirs 729B
NEWS 2KB
README 2KB
ltmain.sh 195KB
autogen.sh 3KB
共 105 条
- 1
- 2
资源评论
- hhuming2012-05-16新增功能较好用,不错的。最好是有些在vs2008下的实例就好了
- 1214243242018-12-14不错的资源,可以用来国标信令交互使用
scanli
- 粉丝: 0
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功