/*
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 = tr->transactionid;
}
/* fill request and answer */
if (tr->orig_request != NULL)
{
i = osip_message_clone (tr->orig_request, &je->request);
if (i != 0)
{
OSIP_TRACE (osip_trace (__FILE__, __LINE__,
没有合适的资源?快使用搜索试试~ 我知道了~
libeXosip2-3.0.3.tar.gz_SIP电话源代码_ip电话_libeXosip2_sip 电话
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 193 浏览量
2022-09-21
04:09:25
上传
评论
收藏 462KB GZ 举报
温馨提示
共101个文件
c:34个
in:14个
h:13个
libeXosip2-3.0.3.tar.gz,最新的SIP电话开源源代码
资源推荐
资源详情
资源评论
收起资源包目录
libeXosip2-3.0.3.tar.gz_SIP电话源代码_ip电话_libeXosip2_sip 电话 (101个子文件)
Makefile.am 1KB
Makefile.am 428B
Makefile.am 372B
Makefile.am 181B
Makefile.am 117B
Makefile.am 106B
Makefile.am 61B
Makefile.am 58B
Makefile.am 50B
Makefile.am 24B
Makefile.am 20B
AUTHORS 33B
udp.c 72KB
jcallback.c 63KB
eXcall_api.c 39KB
eXosip.c 37KB
eXtl_tls.c 36KB
eXutils.c 33KB
eXtl_dtls.c 28KB
jrequest.c 27KB
eXconf.c 25KB
eXinsubscription_api.c 19KB
eXtl_tcp.c 18KB
jauth.c 18KB
eXtl_udp.c 16KB
jevents.c 14KB
jresponse.c 13KB
eXsubscription_api.c 11KB
sip_reg.c 10KB
sdp_offans.c 9KB
eXregister_api.c 8KB
misc.c 7KB
inet_ntop.c 7KB
jpipe.c 6KB
eXoptions_api.c 6KB
eXmessage_api.c 6KB
jdialog.c 5KB
eXpublish_api.c 5KB
jnotify.c 4KB
jreg.c 4KB
jsubscribe.c 4KB
eXtransport.c 4KB
jpublish.c 3KB
jcall.c 3KB
eXrefer_api.c 2KB
eXtl.c 931B
ChangeLog 3KB
configure 838KB
COPYING 18KB
eXosip2.def 2KB
eXosip2.def 2KB
depcomp 15KB
ht1-callcontrol.dox 5KB
ht0-initialize.dox 3KB
ht2-registration.dox 2KB
DoxyFile 9KB
config.guess 44KB
eXosip2.h 23KB
eXosip.h 13KB
eX_call.h 7KB
eX_setup.h 7KB
eX_subscribe.h 6KB
eX_message.h 3KB
eX_register.h 3KB
eX_options.h 3KB
eX_publish.h 2KB
jpipe.h 2KB
eX_refer.h 2KB
eXtransport.h 2KB
inet_ntop.h 1KB
Makefile.in 19KB
Makefile.in 19KB
Makefile.in 14KB
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 264KB
acx_pthread.m4 9KB
aclocal-include.m4 367B
missing 10KB
mkinstalldirs 729B
NEWS 2KB
README 3KB
ltmain.sh 192KB
autogen.sh 3KB
eXosip.sln 901B
config.sub 32KB
eXosip2.vcproj 20KB
sip_reg.vcproj 17KB
共 101 条
- 1
- 2
资源评论
周楷雯
- 粉丝: 78
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功