SIP实验报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

南京邮电大学综合实验(软交换)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架构:界面/配置数据UDP通信模块协议消息解析业务流程控制SIP终端(代理)程序测试:下载VC++6.0更新SDK获得这两个API文件。再编译osip2,eXosip2和osipparser2得到加入到VC和WINDOWS的相应文件夹中,编译过程中需要以下2个库文件界面如下:抓包显示注册,注销,呼叫以及挂断的消息。文本的SIP消息:思考题:1、实验室中设备的拓扑图,及个设备的主要作用软交换设备设备名称设备型号数量备注软交换控制设备ZXSS10SS1b1硬件5万用户容量,软件200线用户license,480线中继license中继信令合一网关ZXMSG7200116E1,2条64K信令linkUP10业务平台UP101Web客户端和业务服务器合一媒体服务器Mes1综合网管系统ZXNMS011网管客户端和网管服务器合一,包含40个网管客户端LicenseIAD综合接入设备ZXSS10I5081每个设备可提供8个用户接入软PHONESoftDA40可视软终端B1001IP话机P80117200后台服务器PC机1后台服务器和本地维护台合一SS1b的维护台PC机1SS设备的本地维护台数据部分设备名称设备型号数量说明二层交换机28262本次配置24个FE接口2、什么叫状态机,给出SIP协议中一个状态机的例子,并说明。在开始一个线程的时候,就会开始一个状态机,当一个事件发生的时候,就会转到相应的状态上去。如sip注册:(UA)空闲状态-----(发送注册信息)-待机状态等待响应-----(收到成功响应)--已注册状态||(未收到响应)--(收到注册失败响应)-空闲状态|空闲状态3、设计一个SIP终端或代理服务器,给出主要软件模块构成。UACUAS4、分析SIP相关开源代码,说明SIP消息处理的方法。以纯文本的方式在UA与server之间按照固定顺序发送消息,根据消息进行相应处理。附录#includeeXosip2/eXosip.h#includestdio.h#includestdlib.h#includewindows.h#includesys/types.h/*voidcb_rcv4xx(sipevent_t*se,transaction_t*tr);voidcb_rcv4xx(sipevent_t*se,transaction_t*tr){printf(rcv4xxmsgdonothing);}*/intmain(intargc,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;intcall_id,dialog_id;inti,flag;intflag1=1;intid;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;charcommand;chartmp[4096];charlocalip[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'tinitializeeXosip!\n);return-1;}else{printf(eXosip_initsuccessfully!\n);}writefile=fopen(log.txt,w);osip_trace_initialize(8,writefile);OSIP_TRACE(osip_trace(__FILE__,__LINE__,OSIP_ERROR,NULL,eXosip:alreadylisteningsomewhere\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'tinitializetransportlayer!\n);return-1;}flag=1;while(flag){printf(pleaseinputthecomand:\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(i0){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的基础上传输。printf(themothed:MESSAGE\n);eXosip_message_build_request(&message,MESSAGE,dest_call,source_call,NULL);snprintf(tmp,4096,hello,rainfish);osip_message_set_body(message,tmp,strlen(tmp));//假设格式是xmlosip_message_set_content_type(message,text/xml);eXosip_message_send_request(message);break;case'q':eXosip_quit();printf(ExittheSIPphone!\n);flag=0;break;case'r':id=eXosip_register_build_initial_register(source_call,registerer,con,1000,®);eXosip_lock();eXosip_clear_authentication_info();//去除上次加入的错误认证信息//添加认证信息if(eXosip_add_authentication_info(13400000,13400000,1340,md5,NULL)){printf(--Add_authentication_infofailed\n);eXosip_unlock();return-4;}i=eXosip_register_send_register(id,reg);eXosip_unlock();printf(sendregcommpleted!\n);flag1=1;while(flag1){//je=eXosip_event_wait(0,200);je=eXosip_event_wait(0,500);//协议栈带有此语句,具体作用未知eXosip_lock();eXosip_default_action(je);eXosip_automatic_refresh();eXosip_unlock();if(je==NULL){printf(Noresponseorthetimeisover!\n);break;}switch(je-type){caseEXOSIP_REGISTRATION_FAILURE:printf(a4xxrcved!\n);id=eXosip_register_build_register(je-rid,2000,®);i=eXosip_register_send_register(id,reg);printf(sendanewregesiter\r\n);break;caseEXOSIP_REGISTRATION_SUCCESS:printf(regsuccess!\r\n);break;default:printf(unexpectevent%d,je-type);break;}eXosip_event_free(je);break;}break;case'i':/*INVITE*/i=eXosip_call_build_initial_invite(&invite,dest_call,source_call,NULL,Thissiacallforaconversation);if(i!=0){printf(IntialINVITEfailed!\n);break;}//符合SDP格式,其中属性a是自定义格式,也就是说可以存放自己的信息,但是只能是两列,比如帐户信息//但是经测试,格式:vot必不可少,原因未知,估计是协议栈在传输时需要检查的snprintf(tmp,4096,v=0\r\no=anonymous00INIP40.0.0.0\r\nt=110\r\na=username:rainfish\r\n

1 / 13
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功