页眉内容
南京邮电大学
综合实验(软交换)
SIP 注册实验
姓名: 学号: 班级:
日期: 2013 年 10 月 13 日
内容与要求:
设计流程
① ③ ④
熟悉环境
学习协议流程(至少包括 学习消息参数
(请求、相应消息所包含的头域,各个头中携带的参数)
⑥ 选定程序设计题目设计实现方案 ⑦ 开源协议栈学习 + 题目实现 ⑧ 自己编程 ⑨ 测试 综合实验 程序设计 (开源代码基础上)
一、完善 UA 功能(使用 SS1B 测试)
注册 、正常呼叫、对端忙、重定向)
② 用自己用户登入, SIP 配置实验)
1、完整正常主叫信令流程 2、完善 UA 配置、使用界面
二、完成服务器部分功能 (使用 multiphone 测试 )
3、注册服务器 4、无状态代理服务器
三、自拟题目
综合实验(软交换)注意事项:
1、关于资料
实验室客户端有协议原文、技术手册、学习资料、开源代码、使用手册和例子。
其它资料需自己准备。
2、设计方案
每组一个设计方案, 建议题目中任选一个或自己拟定都可以, 组中同学要有各自
页眉内容
侧重点和分工。
3、编程语言
编 译 器 不 限, VC 、 BCB 、 DELPHI 、 .NET. 语言 c、C++、delphi 开源代码,实验室提供
OSIP (C语言编写),也可以自己下载其它开源代码
SIP架构:
界
面/配置数据
程序测
业务流程控制
试:下载 VC++6.0更新
SDK获得
协议消息解析
UDP通信模块
SIP终端(代理)
UB艾件
i
这两个API文件
再编译 osip2,eXosip2 和 osipparser2 得到
加入到VC和WINDOWS的相应文件夹中,编译过程中需要以下 个库文件 界面如下:
抓包显示注册,注销,呼叫以及挂断的消息。 文本的SIP消息:
豳
IFHlpApi LIB冷 36 KJ
2
思考题:
1实验室中设备的拓扑图,及个设备的主要作用 软交换设备 设备名称 软交换控制设备 中继信令合一网关 设备型号 数量 备注 硬件5万用户容量,软件 ZXSS10 SS1b ZXMSG7200 UP10 Mes ZXNMS 01 ZXSS10 1508 1 1 1 1 1 1 200线用户 license, 480 UP10业务平台 媒体服务器 综合网管系统 线中继 license 16E1,2 条 64K信令 link r Web客户端和业务服务器合一 网管客户端和网管服务器合一,包含 个网管客户端Lice nse 每个设备可提供8个用户接入 40 IAD综合接入设备
页眉内容
软 PHONE SoftDA P801 PC机 PC机 40 可视软终端 B100 IP话机 7200后台服务器 SS1b的维护台 姜据部分 设备名称 二层交换机 1 1 1 1 数量 :后台服务器和本地维护台合一 SS设备的本地维护台 设备型号 说明 本次配置24个FE接口 2826 2 2、 什么叫状态机,给出 SIP协议中一个状态机的例子,并说明。
在开始一个线程的时候,就会开始一个状态机,当一个事件发生的时候,就会转到相应的 状态上去。 如sip注册:(UA)
空闲状态-----(发送注册信息)-待机状态等待响应-----(收到成功响应)--已注册状态
I
(未收到响应)
I
空闲状态
I
--(收到注册失败响应)-空闲状态
3、 设计一个SIP终端或 代理服务器,给出主要软件模块构成。
UAC UAS
4、 分析SIP相关开源代码,说明
SIP消息处理的方法。
以纯文本的方式在 UA与server之间按照固定顺序发送消息,根据消息进行相应处理。
附录
#in elude
void cb_rcv4xx(sipeve nt_t * se,tra nsact ion_t * tr); void cb_rcv4xx(sipeve nt_t * se,tra nsact ion_t * tr) {
prin tf(\); } */ int
main (int argc, char *argv[]) {
eXosip_eve nt_t *je;
osip_message_t *reg = NULL; osip_message_t *in vite = NULL; osip_message_t *ack = NULL; osip_message_t *info = NULL; osip_message_t *message = NULL; FILE *writefile;
页眉内容
int call_id, dialog_id; int i,flag; int flag1 = 1; int id;
char *identity = \char *registerer = \char *source_call = \char *dest_call = \char *con = \char command; char tmp[4096]; char localip[128] = \printf(\printf(\printf(\printf(\printf(\printf(\//初始化
i = eXosip_init (); if (i != 0)
{
向服务器注册 \\n\\n\取消注册 \\n\\n\发起呼叫请求 \\n\\n\挂断 \\n\\n\退出程序 \\n\\n\执行方法 INFO\\n\\n\
printf(\执行方法 MESSAGE\\n\\n\
printf (\return -1;
}
else
{
printf (\
}
writefile = fopen(\
OSIP_TRACE (osip_trace
(__FILE__, __LINE__, OSIP_ERROR, NULL,
\
i = eXosip_listen_addr (IPPROTO_UDP, NULL, 5060, AF_INET, 0); // osip_setcb_rcv4xx(cf,&cb_rcv4xx); if (i != 0)
{
eXosip_quit (); fprintf (stderr, \
}
flag = 1; while (flag)
{
printf (\fflush(stdin);
scanf (\//getchar (); switch (command)
页眉内容
{
case 'h':
printf (\break; case 'c':
eXosip_lock ();
i = eXosip_register_build_register (id, 0, ®); if (i < 0)
{
eXosip_unlock ();
printf(\注销失败! \\n\
}
else
{
eXosip_register_send_register (id, reg); printf(\注销成功! \\n\eXosip_unlock ();
}
break; case 's':
//传输 INFO 方法 eXosip_call_build_info (dialog_id, &info); snprintf (tmp , 4096,
\格式可以任意设
定 ,text/plain 代表文本信息 osip_message_set_content_type (info, \
eXosip_call_send_request (dialog_id, info); break; case 'm':
//传输 MESSAGE 方法 ,也就是即时消息,和 INFO 方法相比,我认为主要区别,是 MESSAGE 不用
建立连接,直接传输信息,而 INFO 必须
//在建立 INVITE 的基础上传输。 printf (\
eXosip_message_build_request (&message, \snprintf (tmp, 4096,
\
osip_message_set_body (message, tmp, strlen(tmp)); //假设格式是 xml
osip_message_set_content_type (message, \(message); break; case 'q': eXosip_quit ();
printf (\flag = 0; break; case 'r':
id=eXosip_register_build_initial_register(source_call, registerer, con,1000,®); eXosip_lock ();
eXosip_clear_authentication_info(); // 去除上次加入的错误认证信息 //添加认证信息