sip2peer服务端研究分享4:BS,SBC Server分析:

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值