SIP实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
南京邮电大学
综合实验(软交换)
SIP注册实验
姓名:
学号:
班级:
日期:2013年10月13日
内容与要求:
设计流程
①熟悉环境◊
②用自己用户登入,SIP配置实验)◊
③学习协议流程(至少包括注册、正常呼叫、对端忙、重定向)◊
④学习消息参数
(请求、相应消息所包含的头域,各个头中携带的参数)◊
⑥选定程序设计题目设计实现方案◊
⑦开源协议栈学习+ 题目实现◊
⑧自己编程◊
⑨测试◊
综合实验程序设计
(开源代码基础上)
一、完善UA功能(使用SS1B测试)
1、完整正常主叫信令流程
2、完善UA配置、使用界面
二、完成服务器部分功能(使用multiphone测试)
3、注册服务器
4、无状态代理服务器
三、自拟题目
综合实验(软交换)注意事项:
1、关于资料
实验室客户端有协议原文、技术手册、学习资料、开源代码、使用手册和例子。其它资料需自己准备。
2、设计方案
每组一个设计方案,建议题目中任选一个或自己拟定都可以,组中同学要有各自
侧重点和分工。 3、编程语言
编译器不限,VC 、BCB 、DELPHI 、.NET. 语言 c 、c++、delphi
开源代码,实验室提供OSIP (C 语言编写),也可以自己下载其它开源代码
SIP 架构:
程序测
试:下载VC++6.0更新
SDK 获得
这两个API 文件。
再编译osip2,eXosip2和 osipparser2得到
加入到VC 和WINDOWS 的相应文件夹中,编译过程中需要以下2个库文件 界面如下:
抓包显示注册,注销,呼叫以及挂断的消息。 文本的SIP 消息:
思考题:
软交换设备 设备名称 设备型号 数量 备注
软交换控制设备 ZXSS10 SS1b 1 硬件5万用户容量,软件200线用户license, 480线中继license 中继信令合一网关 ZXMSG7200 1 16E1,2 条64K 信令 link UP10业务平台 UP10 1 Web 客户端和业务服务器合一 媒体服务器 Mes 1
综合网管系统
ZXNMS 01
1
网管客户端和网管服务器合一,包含40个网管客户端License
界 面 /配置数据
UDP 通信模块
协议消息解析
业务流程控制
SIP 终端(代理)
2、什么叫状态机,给出SIP协议中一个状态机的例子,并说明。
在开始一个线程的时候,就会开始一个状态机,当一个事件发生的时候,就会转到相应的状态上去。
如sip注册:(UA)
空闲状态-----(发送注册信息)-→待机状态等待响应-----(收到成功响应)--→已注册状态
| |
(未收到响应) --(收到注册失败响应)-→空闲状态
|
空闲状态
3、设计一个SIP终端或代理服务器,给出主要软件模块构成。
UAC UAS
4、分析SIP相关开源代码,说明SIP消息处理的方法。
以纯文本的方式在UA与server之间按照固定顺序发送消息,根据消息进行相应处理。
附录
#include
#include
#include
#include
#include
/*
void cb_rcv4xx(sipevent_t * se,transaction_t * tr);
void cb_rcv4xx(sipevent_t * se,transaction_t * tr)
{
printf("rcv 4xx msg do nothing");
}
*/
int
main (int argc, char *argv[])
{
eXosip_event_t *je;
osip_message_t *reg = NULL;
osip_message_t *invite = 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 = "sip:@";
char *registerer = "sip:";
char *source_call = "sip:@";
char *dest_call = "sip:@";
char *con = "sip:";
char command;
char tmp[4096];
char localip[128] = "";
printf("r 向服务器注册\n\n");
printf("c 取消注册\n\n");
printf("i 发起呼叫请求\n\n");
printf("h 挂断\n\n");
printf("q 退出程序\n\n");
printf("s 执行方法INFO\n\n");
printf("m 执行方法MESSAGE\n\n");
//初始化
i = eXosip_init ();
if (i != 0)
{
printf (" Couldn't initialize eXosip!\n");
return -1;
}
else
{
printf ("eXosip_init successfully!\n");
}
writefile = fopen("log.txt","w");
osip_trace_initialize (8, writefile);
OSIP_TRACE (osip_trace
(__FILE__, __LINE__, OSIP_ERROR, NULL,
"eXosip: already listening somewhere\n"));
i = eXosip_listen_addr (IPPROTO_UDP, NULL, 5060, AF_INET, 0); // osip_setcb_rcv4xx(cf,&cb_rcv4xx);
if (i != 0)
{
eXosip_quit ();
fprintf (stderr, "Couldn't initialize transport layer!\n");
return -1;