SIP实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

相关文档
最新文档