您的位置:首页 > 其它

eXosip入门(四):eXosip示例程序——注册/认证

2012-09-13 00:40 267 查看
首先建议先看一下我翻译的文章《eXoisp用户手册:1.3 如何发送或者升级注册》,先对eXosip的注册/认证过程有一个大致的了解。

其次,在exosip\tools目录下有官方提供的一个示例程序sip_reg.c,用户可以仔细阅读该源码,熟悉exosip注册API函数的使用及事件的处理流程。

eXosip基本注册流程如下:发送默认注册请求——>收到注册失败事件(缺少认证信息)——>再次发送带认证信息的注册请求——>注册成功。

注意在调用eXosip_register_build_initial_register函数时,该函数会返回一个注册id,用户应保存该id,因为后面更新/取消注册时要用到。

下图1为sipReg程序与服务器的通信抓包截图,图2为通信流程图。



图1



图2

1、客户端首先发送一条不带认证信息的注册请求;



2、服务器返回401状态,即未授权,需要用户认证;



3、客户端再次发送带认证信息的注册请求;



4、服务器返回200 OK状态,表明注册成功。



在eXosip中,当用户第一次发送注册请求后,eXosip会产生EXOSIP_REGISTRATION_FAILURE事件,注意这并不一定是注册失败,用户需要根据event->response->status_code 来判断具体的状态,如果是401状态,则是服务器需要用户再次发送带认证信息的注册请求;如果是其他值,则认为注册失败,比如无法连接服务器等。

对于EXOSIP_REGISTRATION_FAILURE事件,有两种处理方式:

1、自动处理。

在eXosip事件处理循环中调用eXosip_automatic_action()函数,该函数会自动帮助用户处理401/407状态,用户并不再需要手动发送带认证信息的注册请求,只需要在第一次注册时就添加好认证信息即可;

2、手动处理,需要在EXOSIP_REGISTRATION_FAILURE事件中增加以下代码:

if ((event->response != NULL) && (event->response->status_code == 401)) { // 收到401状态
osip_message_t *reg = NULL;
eXosip_lock();
eXosip_clear_authentication_info(); // 清空认证信息
eXosip_add_authentication_info(username, username, password, "MD5", NULL); // 添加认证信息
eXosip_register_build_register(event->rid, expires, ®);
eXosip_register_send_register(event->rid, reg); // 发送注册请求
eXosip_unlock();
}
else { // 注册失败处理
...
}


注意事项:

1、有的SIP服务器可以设置成不需要用户注册即可登陆,所以会导致与上述流程不一样;

2、eXosip_register_build_initial_register函数的expires参数为注册过期时间,单位为秒,也就是说过了这段时间,注册信息失效,用户需要重新注册。

测试程序暂时不知道如何上传,敬请等待^_^。

参考文章 :http://blog.csdn.net/guangfakeji/article/details/7382586
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: