文档详情

SIP实验报告

工****
实名认证
店铺
DOC
327KB
约13页
文档ID:548482172
SIP实验报告_第1页
1/13

南京邮电大学综合实验(软交换)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消息:思考题:1、实验室中设备的拓扑图,及个设备的主要作用软交换设备设备名称设备型号数量备注软交换控制设备 ZXSS10 SS1b1硬件5万用户容量,软件200线用户license, 480线中继license中继信令合一网关ZXMSG7200116E1,2 条64K信令 linkUP10业务平台UP101Web客户端和业务服务器合一媒体服务器Mes1综合网管系统ZXNMS 01 1网管客户端和网管服务器合一,包含40个网管客户端LicenseIAD综合接入设备ZXSS10 I5081每个设备可提供8个用户接入软PHONE SoftDA40可视软终端B1001IP话机P80117200后台服务器PC机1后台服务器和本地维护台合一SS1b的维护台PC机1SS设备的本地维护台数据部分设备名称设备型号数量说明二层交换机28262本次配置24个FE接口2、什么叫状态机,给出SIP协议中一个状态机的例子,并说明。

在开始一个线程的时候,就会开始一个状态机,当一个事件发生的时候,就会转到相应的状态上去如sip注册:(UA)空闲状态-----(发送注册信息)-à待机状态等待响应-----(收到成功响应)--à 已注册状态 | | (未收到响应) --(收到注册失败响应)-à空闲状态 | 空闲状态3、设计一个SIP终端或 代理服务器,给出主要软件模块构成 UAC UAS4、分析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:13400000@192.168.100.1"; char *registerer = "sip:192.168.100.1:5060"; char *source_call = "sip:13400000@192.168.100.1"; char *dest_call = "sip:14010000@192.168.100.1:5060"; char *con = "sip:192.168.100.1:5060"; char command; char tmp[4096]; char localip[128] = "192.168.100.206"; 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; } flag = 1; while (flag) { printf ("please input the comand:\n"); fflush(stdin); scanf ("%c", &command); //getchar (); switch (command) { case 'h': printf ("Holded !\n"); eXosip_lock (); eXosip_call_terminate (call_id, dialog_id); eXosip_unlock (); 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, "hello,rainfish"); osip_message_set_body (info, tmp, strlen(tmp)); //格式可以任意设定,text/plain代表文本信息 osip_message_set_content_type (info, "text/plain"); eXosip_call_send_request (dialog_id, info); break; case 'm': //传输MESSAGE方法,也就是即时消息,和INFO方法相比,我认为主要区别,是MESSAGE不用建立连接,直接传输信息,而INFO必须 //在建立INVITE的基础上传输。

下载提示
相似文档
正为您匹配相似的精品文档