/*
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__, __
没有合适的资源?快使用搜索试试~ 我知道了~
libeXosip2-3.1.0.rar_libeXosi_libeXosip2-3.1.0_libexosip2 3.1_si
共245个文件
h:128个
c:37个
in:18个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 153 浏览量
2022-09-19
14:08:06
上传
评论
收藏 1.04MB RAR 举报
温馨提示
exsip2.3.1 的最新sip协议开发源文件,以在vs 2005 下编译通过并生成lib和dll文件,绝对原始完整版。
资源详情
资源评论
资源推荐
收起资源包目录
libeXosip2-3.1.0.rar_libeXosi_libeXosip2-3.1.0_libexosip2 3.1_si (245个子文件)
Makefile.am 1KB
Makefile.am 834B
Makefile.am 428B
Makefile.am 303B
Makefile.am 255B
Makefile.am 190B
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 74KB
jcallback.c 66KB
eXosip.c 44KB
eXcall_api.c 37KB
eXtl_tls.c 36KB
eXutils.c 33KB
eXtl_dtls.c 28KB
jrequest.c 28KB
eXconf.c 27KB
jauth.c 27KB
rijndael.c 27KB
eXinsubscription_api.c 19KB
eXtl_tcp.c 18KB
eXtl_udp.c 18KB
jevents.c 14KB
jresponse.c 13KB
eXsubscription_api.c 12KB
sip_reg.c 10KB
sdp_offans.c 9KB
eXregister_api.c 8KB
milenage.c 7KB
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
jreg.c 5KB
jnotify.c 4KB
jsubscribe.c 4KB
eXtransport.c 4KB
jpublish.c 3KB
jcall.c 3KB
applink.c 3KB
eXrefer_api.c 2KB
eXtl.c 931B
ChangeLog 4KB
configure 844KB
COPYING 18KB
UpgradeReport.css 3KB
eXosip2.def 2KB
eXosip2.def 2KB
mt.dep 67B
depcomp 15KB
eXosip2.dll 216KB
ht1-callcontrol.dox 5KB
ht0-initialize.dox 3KB
ht2-registration.dox 2KB
DoxyFile 9KB
eXosip2.exp 12KB
UpgradeReport_Plus.gif 71B
UpgradeReport_Minus.gif 69B
config.guess 44KB
safestack.h 134KB
obj_mac.h 113KB
ssl.h 82KB
asn1.h 47KB
x509.h 47KB
engine.h 37KB
osip.h 36KB
osip_parser.h 35KB
evp.h 35KB
objects.h 33KB
bn.h 32KB
bio.h 30KB
x509v3.h 29KB
asn1t.h 27KB
pem.h 27KB
store.h 26KB
ocsp.h 24KB
eXosip2.h 23KB
ssl3.h 22KB
crypto.h 22KB
sdp_message.h 21KB
ec.h 21KB
x509_vfy.h 20KB
symhacks.h 20KB
tls1.h 19KB
asn1_mac.h 19KB
des_old.h 18KB
rsa.h 18KB
ui.h 16KB
pkcs7.h 16KB
dso.h 16KB
共 245 条
- 1
- 2
- 3
朱moyimi
- 粉丝: 61
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0