随手记录一下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,<