eXosip.c

static jauthinfo_t *eXosip_find_authentication_info (const char *username,  const char *realm);
eXosip_t eXosip;
void __eXosip_wakeup (void)
void __eXosip_wakeup_event (void)
都是调用jpipe_write ()向pipe写。

int eXosip_lock (void)
int eXosip_unlock (void)
调用osip_mutex_lock 和osip_mutex_unlock 。

int eXosip_transaction_find (int tid, osip_transaction_t ** transaction)
遍历eXosip.j_transactions,找到transactionid等于tid的transaction。

static int _eXosip_retry_with_auth (eXosip_dialog_t * jd, osip_transaction_t ** ptr,  int *retry)
在 _eXosip_retry_register_with_auth、 _eXosip_retry_invite_with_auth、 _eXosip_retry_subscribe_with_auth、 _eXosip_retry_publish_with_auth、 _eXosip_retry_notify_with_auth中被调用。retry不超过3次。
if (out_tr == NULL || out_tr->orig_request == NULL || out_tr->last_response == NULL)是一种代替if else多个分支的方法。依次检查。不支持TLS。移去原有的top via,构造新的via,并加入top。再加入从last response获得的auth信息。再调用osip_transaction_init ()初始化新的transaction。然后是常见代码。

static int _eXosip_retry_register_with_auth (eXosip_event_t * je)
static int _eXosip_retry_invite_with_auth (eXosip_event_t * je)
static int _eXosip_retry_subscribe_with_auth (eXosip_event_t * je)
static int _eXosip_retry_publish_with_auth (eXosip_event_t * je)
static int _eXosip_retry_notify_with_auth (eXosip_event_t * je)
根据je的rid,cid找到reg,dialog,call,subscribe的retry,调用_eXosip_retry_with_auth。publish,notify的retry都为NULL,也就是不考虑retry。
static int _eXosip_redirect_invite (eXosip_event_t * je)
根据je的cid找到jd,jc,调用_eXosip_call_redirect_request 。

static int eXosip_retry_with_auth (eXosip_event_t * je)
根据je->type,switch到各种情况,在调用以上的各种retry_xxx_with_auth。在eXosip_default_action中被调用。
static int _eXosip_redirect (eXosip_event_t * je)
同上,但只处理EXOSIP_CALL_REDIRECTED,调用_eXosip_redirect_invite 。

int eXosip_default_action (eXosip_event_t * je)
根据je的response状态码,处理401,407和3xx的回复。

void eXosip_automatic_refresh (void)
在超时前刷新register和subscribe。无处调用。三种情况刷新reg,一种情况刷新sub。
void eXosip_automatic_action (void)
启动一些自动处理:收到401/407的鞋带credential重传,在失效前刷新reg和sub,收到3xx自动向新的contact重传。同上面的函数是否有重复的部分?

void eXosip_update ()
就是更新cid, did, sid, nid。

static jauthinfo_t * eXosip_find_authentication_info (const char *username, const char *realm)
查找username和realm对应的authentication信息。在eXosip_add_authentication_information 中被调用。
int eXosip_clear_authentication_info ()
无处调用。
int eXosip_add_authentication_info (const char *username, const char *userid,
                                const char *passwd, const char *ha1, const char *realm)
将参数构成的认证信息加入eXosip.authinfos。
int eXosip_add_authentication_information (osip_message_t * req, osip_message_t * last_response)
从response中获得认证信息
int eXosip_update_top_via (osip_message_t * sip)
在_eXosip_register_build_register()中被调用。

你可能感兴趣的:(默认分类)