2015-04-14 4 views
0

Я хотел бы разработать ассоциацию M3UA, используя Lksctp linux, также я думал, что это возможно с помощью openSS7 M3UA, но я не знаю, как это сделать. Любые идеи? Спасибо за любую помощь.создание ассоциации M3UA с SCTP

ответ

1

Вы можете использовать ЛК-SCTP в сочетании с каркасом Нетти над JDK-7 (и выше) для реализации M3UA (RFC 4666). Netty-4.0.25-FINAL - это стабильная версия для поддержки SCTP.

Так комбинация: стек

  • SCTP: лк-SCTP-1.0.16 (над Red Hat Enterprise Linux Server версии 6.5 (Santiago))
  • JDK-7 или выше
  • Нетти -4.0.25-FINAL

И ваше приложение на нем. Образец код SCTPClientHandler может быть:

public class SctpClientHandler extends ChannelDuplexHandler { 
@Override 
    public void userEventTriggered(ChannelHandlerContext ctx, Object evt) 
      throws Exception { 
     SctpChannel sctpChannel = (SctpChannel) ctx.channel(); 
     if (evt instanceof AssociationChangeNotification) { 
      AssociationChangeNotification associationChangeNotification = (AssociationChangeNotification) evt; 
      switch (associationChangeNotification.event()) { 
      case CANT_START: 
      //Do something 
      break; 
      case COMM_LOST: 
      // 
      case COMM_UP: 


    } else if (evt instanceof PeerAddressChangeNotification) { 
       PeerAddressChangeNotification peerAddressChangeNotification = (PeerAddressChangeNotification) evt; 
      int associationId = sctpChannel.association().associationID(); 
      switch (peerAddressChangeNotification.event()) { 
      case ADDR_ADDED: 
} 
} else if (evt instanceof SendFailedNotification) { 
} 

@Override 
    public void channelRead(ChannelHandlerContext ctx, Object msg) 
      throws Exception { 
     SctpMessage sctpMessage = (SctpMessage) msg; 
     // Check if this is a M3UA message 
     if (sctpMessage.protocolIdentifier() == 3) { 
      // Send upstream - to M3UA 
      ctx.fireChannelRead(sctpMessage); 
     } 

    } 

public void send(ByteBuf buffer, int streamId) { 
     SctpMessage message = new SctpMessage(3, streamId, buffer); 
     ctx.writeAndFlush(message); 
    } 

public void send(ByteBuf buffer, int streamId, SocketAddress remoteAddress) { 
     MessageInfo msgInfo = MessageInfo.createOutgoing(remoteAddress, 
       streamId); 
     SctpMessage message = new SctpMessage(msgInfo, buffer); 
     ctx.writeAndFlush(message); 
    } 

public void send(ByteBuf buffer, int streamId, boolean unOrderedFlag) { 
     SctpMessage message = new SctpMessage(3, streamId, buffer); 
     message.messageInfo().unordered(unOrderedFlag); 
     ctx.writeAndFlush(message); 

    } 

public void send(ByteBuf buffer, int streamId, SocketAddress remoteAddress, 
      boolean unOrderedFlag) { 
     MessageInfo msgInfo = MessageInfo.createOutgoing(remoteAddress, 
       streamId); 
     msgInfo.unordered(unOrderedFlag); 
     SctpMessage message = new SctpMessage(msgInfo, buffer); 
     ctx.writeAndFlush(message); 
    } 
    } 

SCTPServerHandler также могут быть созданы, как указано выше.

Для инициализации Bootstrap:

bootstrap.group(worker) 
      .channel(NioSctpChannel.class) 
      .option(SctpChannelOption.SCTP_NODELAY,true) 
       .handler(new ChannelInitializer<SctpChannel>() { 
       @Override 
       public void initChannel(SctpChannel ch) throws Exception { 
        ch.pipeline().addLast(
          new SctpClientHandler()); 
        ch.pipeline().addLast(new M3UAAspHandler()); 
       } 
      }); 

Эта комбинация масштабируется много, как хорошо. Счастливое кодирование.