转载于:http://blog.sina.com.cn/s/blog_4868f98601018ioh.html
这个测试程序是从eXosip原有的测试程序改造的。原程序是tools 目录下的 sip_reg.c
 
本程序主要改造了这几个地方:
1) eXosip_event_wait() 函数的超时时间,从原来的1ms 修改为50ms
2) 对于初次注册时,服务器返回401的情况。  调用函数 eXosip_add_authentication_info()发送鉴权信息。
其余的内容基本没改,在我们的sipserver 上面注册成功了。
 
从这个例程中 我们可以看出sip鉴权的基本流程
从sip角度看, 注册过程是这样的:
        客户端                        server  
          |   --------regester --->      |
          |   <----------401------       |
          |   ---regester + nonce -》    |
          |  《----------200--------     |
其中 nonce中带有鉴权信息。形如:
Authorization: Digest username="buxiangyi", realm="Yate", nonce="143e882c902a9c38a3286e9043c35d40.1366083396", uri="sip:172.16.50.189:5060", response="8119330abd3ff5e4e26d2fa87b563b39", algorithm=MD5
 
 
对于 eXosip, 其处理过程如下:
1)eXosip_init                            (初始化)
     |     
     v     
2)eXosip_listen_addr                     (监听sip端口)
     |     
     v     
3)eXosip_register_build_initial_register (构建一个register)
     |     
     v     
4)eXosip_register_send_register          (发送register)
     |     
     v     
5)eXosip_event_wait                      (等待对端事件)
     |     
     v     
6)eXosip_execute                         (处理事件,调整内部状态)
     |     
     v     
7)eXosip_automatic_action                (根据当前状况,发出响应消息)
之后应循环执行 5)-》 7)

eXosip的register注册的更多相关文章

  1. ConvertUtils.register注册转换器

    当用到BeanUtils的populate.copyProperties方法或者getProperty,setProperty方法其实都会调用convert进行转换 但Converter只支持一些基本 ...

  2. SIPp常用脚本之一:register注册

    SIPp,VOIP并发测试.性能测试的神器. 本文记录一下常用的脚本文件. 一.reg.xml 此文件是sipp的执行的脚本流程. <!-- --> <!-- You should ...

  3. 第7.21节 Python抽象类—register注册虚拟子类

    上两节介绍了Python抽象类的真实子类的定义和使用,本节介绍另一种抽象类的实现方法:虚拟子类方法. 一.    相关概念 虚拟子类是将其他的不是从抽象基类派生的类"注册"到抽象基 ...

  4. 驱动开发:内核监控Register注册表回调

    在笔者前一篇文章<驱动开发:内核枚举Registry注册表回调>中实现了对注册表的枚举,本章将实现对注册表的监控,不同于32位系统在64位系统中,微软为我们提供了两个针对注册表的专用内核监 ...

  5. Vue.js——使用$.ajax和vue-resource实现OAuth的注册、登录、注销和API调用

    概述 上一篇我们介绍了如何使用vue resource处理HTTP请求,结合服务端的REST API,就能够很容易地构建一个增删查改应用.这个应用始终遗留了一个问题,Web App在访问REST AP ...

  6. KnockoutJS 3.X API 第六章 组件(2) 组件注册

    要使Knockout能够加载和实例化组件,必须使用ko.components.register注册它们,从而提供如此处所述的配置. 注意:作为替代,可以实现一个自定义组件加载器(自定义加载器下一节介绍 ...

  7. Replace Pioneer注册

    以下是目前合法长期使用Replace Pioneer的唯一方法(除了购买之外): Replace Pioneer过期后,会弹出一个注册(Registration)窗口,其中有一个试用选项(Trial ...

  8. Node.js基于Express框架搭建一个简单的注册登录Web功能

    这个小应用使用到了node.js  bootstrap  express  以及数据库的操作 :使用mongoose对象模型来操作 mongodb 如果没了解过的可以先去基本了解一下相关概念~ 首先注 ...

  9. PHP+jQuery 注册模块的改进之三:使用 Smarty3

    Smarty3.1X( 最新版本 3.1.19) 比起Smarty2.x修改了不少特性.我把这个模块使用Smarty3.1.18 ( 下载地址http://www.smarty.net/files/S ...

随机推荐

  1. php注意事项|要点

    1. 用单引号代替双引号来包含字符串,这样做会更快一些.因为 PHP 会在双引号包围的 字符串中搜寻变量,单引号则不会,注意:只有 echo 能这么做,它是一种可以把多个字符 串当作参数的“函数”(译 ...

  2. SSH远程连接排错的过程

    SSH远程连接排错的过程 http://note.youdao.com/noteshare?id=bc81e9036cd2067cb1857ca9f54299a7 补充 ping命令用来测试主机之间网 ...

  3. 全局变量异步I/O

    /*** sync_process.c ***/ #include <stdio.h> #include <signal.h> #include <unistd.h> ...

  4. postgre-插入数据时的单引号问题

    场景: 将一个HTML页面存储到数据库中 问题: HTML页面中既包含单引号也包含双引号 解决办法: 双单引号 INSERT INTO table VALUES ('<html><s ...

  5. 取出easyui的datagrid的总数

    var grid = $('#datagrid'); var options = grid.datagrid('getPager').data("pagination").opti ...

  6. Django中常用的基本命令

    django-admin   startproject  项目的名称 创建一个项目 python manage.py startapp 应用的名称 创建一个应用 python manage.py ru ...

  7. Java 线程概述

    1 进程与线程基本概念 1.1 进程:执行中的程序 每个进程都有独立的代码和数据空间(进程上下文),进程空间切换会有较大的开销,一个进程包含1-n个线程.进程是资源分配的最小单位. 1.2 线程:进程 ...

  8. DELPHI安卓动态权限申请

    DELPHI安卓动态权限申请 安卓8.0以前的版本,只需要给静态权限就可以了,但安卓8.0及以后的版本,还需要运行期用代码动态申请权限. 下面以<蓝牙权限>为例,其他权限类似. Delph ...

  9. Linux使用iptables设置黑白名单

    使用ipset工具 1,下面我先说下iptables的基本配置规则,然后再说ipset以下使用C7 x86_64为实验环境CentOS7默认的防火墙不是iptables,而是firewalle.如果你 ...

  10. Ubuntu 18.04系统下arm-linux-gcc交叉编译器安装

    Ubuntu 18.04系统: arm-linux-gcc 4.4.3版本. 安装arm-linux-gcc将压缩包arm-linux-gcc.tar.gz解压到arm-linux-gcc文件夹tar ...