1. 程式人生 > >eXosip REGISTER認證過程

eXosip REGISTER認證過程

eXosip_add_authentication_info 
eXosip_register_build_initial_register  eXosip_register_send_register 傳送 傳送一個註冊包 eXosip_clear_authentication_info(); eXosip_add_authentication_info(m_userid,m_userid,m_passwd,"MD5",NULL)) 新增認證資訊 osip_message_t *reg; m_localurl.Format("sip:%[email protected]%s",m_userid,SIP_SERVER); m_nRegisterID = eXosip_register_build_initial_register(m_localurl,m_sipserverurl,NULL,300,&reg);初始化一個註冊ID 併產生一個註冊包 eXosip_register_send_register(m_nRegisterID,reg) 這樣就發出了一個註冊請求 伺服器會回一個401註冊挑戰 在EXOSIP_REGISTRATION_FAILURE中處理中 判斷event->response->status_code是否為401 然後 使用event的rid 重現產生一個註冊包 osip_message_t *reg;
eXosip_register_build_register(event->rid, 300, &reg);// //取回認證的字串authorization { osip_authorization_t * auth; char *strAuth=NULL; osip_message_get_authorization(reg,0,&auth); osip_authorization_to_str(auth,&strAuth); strcpy(m_strAuth,strAuth);//儲存認證字串 delete []strAuth; } eXosip_register_send_register(event->rid,reg); 在拿到認證字串後 傳送心跳時就不用每次都產生挑戰資訊了 傳送心跳的方法  osip_message_t *msg=NULL; eXosip_register_build_register(m_nRegisterID, 300, &msg); //根據以前的RegisterID 重新產生一個註冊包 {//將認證字串新增入REGISTER訊息中
osip_header_t *pMsgHeader=NULL; osip_message_header_get_byname(msg,(const char *)"authorization",0,&pMsgHeader); if (pMsgHeader==NULL)     osip_message_set_header(msg,(const char *)"authorization",m_strAuth); else     strcpy(pMsgHeader->hvalue,m_strAuth); } eXosip_register_send_register(m_nRegisterID,msg); 登出的方法與心跳包處理方法相投 不過是 expires為0罷了 osip_message_t *msg=NULL; eXosip_register_build_register(m_nRegisterID,0
, &msg); //根據以前的RegisterID 重新產生一個註冊包 {//將認證字串新增入REGISTER訊息中
osip_header_t *pMsgHeader=NULL; osip_message_header_get_byname(msg,(const char *)"authorization",0,&pMsgHeader); if (pMsgHeader==NULL)     osip_message_set_header(msg,(const char *)"authorization",m_strAuth); else     strcpy(pMsgHeader->hvalue,m_strAuth); } eXosip_register_send_register(m_nRegisterID,msg);