Exosip源码学习

本文详细介绍了Exosip中的nict事务处理,包括NIST非invite事件服务端和客户端处理,状态机的链表结构以及不同状态下的超时处理。通过示例展示了状态机如何响应各种事件,如TIMEOUT_F、TIMEOUT_E等,并介绍了Exosip线程如何执行这些事件。同时,解释了NICT_PRE_TRYING状态如何发送请求并启动定时器,以及如何根据超时类型进行不同的操作。
摘要由CSDN通过智能技术生成

随手记录一下exosip的学习过程:

1. nist 非invite事件服务端处理,nict 非invite事件客户端处理,ist invite服务器处理,ict invite客户端处理。

2. 状态机处理链表,每种状态对应一个处理方式,当事务处于trying状态时,根据超时类型处理,这种链表结构实属优秀了。。

typedef struct _transition_t transition_t;

struct _transition_t {
  state_t state;
  type_t type;
  void (*method) (void *, void *);
  struct _transition_t *next;
  struct _transition_t *parent;
};

transition_t nict_transition[12] = {
  {
   NICT_PRE_TRYING,
   SND_REQUEST,
   (void (*)(void *, void *)) &nict_snd_request,
   &nict_transition[1], NULL}
  ,
  {
   NICT_TRYING,
   TIMEOUT_F,
   (void (*)(void *, void *)) &osip_nict_timeout_f_event,
   &nict_transition[2], NULL}
  ,
  {
   NICT_TRYING,
   TIMEOUT_E,
   (void (*)(void *, void *)) &osip_nict_timeout_e_event,
   &nict_transition[3], NULL}
  ,
  {
   NICT_TRYING,
   RCV_STATUS_1XX,
   (void (*)(void *, void *)) &nict_rcv_1xx,
   &nict_transition[4], NULL}
  ,
  {
   NICT_TRYING,
   RCV_STATUS_2XX,
   (void (*)(void *, void *)) &nict_rcv_23456xx,
   &nict_transition[5], NULL}
  ,
  {
   NICT_TRYING,
   RCV_STATUS_3456XX,
   (void (*)(void *, void *)) &nict_rcv_23456xx,
   &nict_transition[6], NULL}
  ,
  {
   NICT_PROCEEDING,
   TIMEOUT_F,
   (void (*)(void *, void *)) &osip_nict_timeout_f_event,
   &nict_transition[7], NULL}
  ,
  {
   NICT_PROCEEDING,
   TIMEOUT_E,
   (void (*)(void *, void *)) &osip_nict_timeout_e_event,
   &nict_transition[8], NULL}
  ,
  {
   NICT_PROCEEDING,
   RCV_STATUS_1XX,
   (void (*)(void *, void *)) &nict_rcv_1xx,
   &nict_transition[9], NULL}
  ,
  {
   NICT_PROCEEDING,<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值