sip2peer服务端研究分享4:BS,SBC Server分析:
来源:互联网 发布:java 为什么没有二叉树 编辑:程序博客网 时间:2024/06/04 19:07
1:BootstrapPeer(BS) Server 类似一个握手服务器,他记录了请求的客户端信息。
下面分析下 BS Server:
首先客户端向BS Server发送握手请求。
然后BS Server接受到请求数据:onReceivedJSONMsg方法监听接受数据。
@Override protected void onReceivedJSONMsg(JSONObject peerMsg, Address sender) { ...... //将客户请求的信息进行保存,保存到peerList中. PeerDescriptor neighborPD = new PeerDescriptor(params.get("name").toString(), params.get("address").toString(), params.get("key").toString(), params.get("contactAddress").toString()); NeighborPeerDescriptor neighborPeer = addNeighborPeer(neighborPD); ...... if(newPLMsg!=null) //send(new Address(neighborPeer.getAddress()), newPLMsg); //将peerList中信息变量组装后发送. send(neighborPeer, newPLMsg); ...... }
接受数据的监听是通过SipProviderListener接口:
public abstract interface SipProviderListener{ public abstract void onReceivedMessage(SipProvider paramSipProvider, Message paramMessage);}TransactionClientListener接口:监听BS Server发送信息时的操作,例如发送失败等.public abstract interface TransactionClientListener{ public abstract void onTransProvisionalResponse(TransactionClient paramTransactionClient, Message paramMessage); public abstract void onTransSuccessResponse(TransactionClient paramTransactionClient, Message paramMessage); public abstract void onTransFailureResponse(TransactionClient paramTransactionClient, Message paramMessage); public abstract void onTransTimeout(TransactionClient paramTransactionClient);}
2:SessionBorderController(SBC) Server 路由服务器。
SBC Server是sip2peer的核心,它主要实现了:对终端进行路由地址分配,消息转发,消息处理,心跳处理等。
下面具体介绍:
SessionBorderController.java实现了接口TransactionClientListener.java;
GatewayPeer.java是消息通道,它是对请求需要握手的客户端分配路由地址,端口,分配成功后消息通过该通道信息传输。
SessionBorderController.java// initialize the SBC private void init(String file){ this.sbcConfig = new SessionBorderControllerConfig(file); this.SBCAddress = new NameAddress(sip_provider.getContactAddress("SBC")); // new TestNATPeer 从sbc.cfg获取端口,它是测试端口,只分配1个,如果将下面 //代码注释掉后,端口sbc.cfg中init_port=6080向上加1分配// if(sbcConfig.testNATPort!=0)// this.testNATPeer = new TestNATPeer("testnat", sbcConfig.testNATPort, this); // new map for GatewayPeer this.listGatewayPeer = new HashMap<Integer, GatewayPeer>(sbcConfig.nMaxGatewayPeer); } //if the peer has sended MESSAGE with REQUEST_PORT else if(messageBody.equals("REQUEST_PORT")){ String namePeer=null; int listenPort=0; NameAddress nameAddPeer = msg.getFromHeader().getNameAddress(); if(nameAddPeer.hasDisplayName()) namePeer=nameAddPeer.getDisplayName(); else namePeer=nameAddPeer.getAddress().getUserName(); //分配空闲的端口 listenPort = getFreePort(); if(listenPort!=-1){ //port available 创建自己的通道 GatewayPeer gatewayPeer = new GatewayPeer(namePeer, listenPort); //add GatewayPeer instance to list this.listGatewayPeer.put(listenPort, gatewayPeer); //send response message + contact <sip:namePeer@gatewayPeerAddress> TransactionServer transServer=new TransactionServer(sip_provider, msg, null); transServer.respondWith(MessageFactory.createResponse(msg, 200, SipResponses.reasonOf(200), gatewayPeer.getAddress())); }
GatewayPeer.java /** * Forward each message received to the local peer * */ @Override public void onReceivedMessage(SipProvider sipPeer, Message msgPeer) { ...... 接受消息 ...... }
sip2peer服务端研究分享3:消息发送:
0 0
- sip2peer服务端研究分享4:BS,SBC Server分析:
- sip2peer服务端研究分享1:启动服务:
- sip2peer服务端研究分享2:消息组装:
- sip2peer服务端研究分享3:消息发送:
- androidpn的学习研究(二)androidpn-server服务端启动过程的理解分析
- server: WebGame服务端架构分析
- 【分享】在ubuntu server上轻松搭建ss服务端
- 服务端JS研究
- skynet范例研究-服务端
- skynet范例研究-服务端
- 【BS】Windwos server 2008 服务器安装 IIS
- 服务端学习一:Warzone服务端研究
- 华为U2000网管研究实录 (3) - 运行分析(服务端进程)
- BS项目乱码的原因分析
- 关于BS项目的需求分析
- X86 SBC
- SBC编码
- SBC介绍
- 如何解决Java.lang.NoClassDefFoundError(键人岐)
- OpenVPN的性能极限
- [汇编] 免杀常用等价替换汇编指令修改方法
- Python 起步二 循环与逻辑,读取文件
- Krusal算法 方法一
- sip2peer服务端研究分享4:BS,SBC Server分析:
- java通过jdbc访问Access数据库
- 我的精华文章索引(持续更新中)
- Krusal算法 方法2
- 【USACO 2013 January Gold】座位 --线段树
- linux ipcs 和ipcrm 使用例子
- 关于iOS tabBar隐藏和显示问题
- 摘自C指针编程之道-队列
- 手把手教你把Vim改装成一个IDE编程环境(图文) <看了这篇文章才知道,以前从来不曾用过vim>