exosip的注册方法

来源:互联网 发布:知柏地黄丸能清肝火吗 编辑:程序博客网 时间:2024/05/07 18:57

注册函数:

int CMessageDialog::SipRegisterSend(int expires)
{
sipExpires = expires;


char from[128];
char proxy[128];
char host[128] = {0};


sprintf(host, "%s", Dlg->m_strServer.GetBuffer(Dlg->m_strServer.GetLength()));

snprintf(from, 128, "<sip:%s@%s:%d>", m_strMessExten.GetBuffer(m_strMessExten.GetLength()), host, SipPort);
snprintf(proxy, 128, "sip:%s:%d", host, MessPort);

osip_message_t *reg = NULL;

char localip[128];
eXosip_guess_localip (AF_INET, localip, 128);

eXosip_lock ();
int ret = eXosip_register_build_initial_register(from, proxy, NULL, expires, &reg);//连续重复运行出错eXosip_register_send_register运行两次后才能运行
eXosip_unlock ();
if(0 > ret)
{
//AfxMessageBox("register init Failed!");
return 1;
}

eXosip_lock ();
ret = eXosip_register_send_register(ret, reg);
eXosip_unlock ();
if(0 != ret)
{
//AfxMessageBox("register send Failed!");
return 1;
}


sipReg = reg;


Sleep(500); //等待401验证完成

return 0;
}



401验证

 if(401 == uac_e->response->status_code)
{
//4o1 Unauthorized register again
// 先清除鉴权信息,再应用新输入的鉴权信息 
/*eXosip_lock ();
eXosip_clear_authentication_info();
eXosip_add_authentication_info(pMainWnd->m_strMessExten.GetBuffer(pMainWnd->m_strMessExten.GetLength()), pMainWnd->m_strMessExten.GetBuffer(pMainWnd->m_strMessExten.GetLength()), pMainWnd->m_strMessPwd.GetBuffer(pMainWnd->m_strMessPwd.GetLength()), "md5", NULL);
eXosip_unlock ();*/

//pMainWnd->SipRegisterSend(60);
eXosip_register_build_register(uac_e->rid, pMainWnd->sipExpires, &(pMainWnd->sipReg));
eXosip_register_send_register(uac_e->rid,pMainWnd->sipReg);


eXosip_event_free (uac_e);
continue;
}


心跳注册:

//超时,重新注册
eXosip_lock ();
eXosip_automatic_refresh();
eXosip_unlock ();


参考:http://blog.csdn.net/zblue78/archive/2008/11/17/3319078.aspx