1 /* 2 * Copyright 2012 The Netty Project 3 * 4 * The Netty Project licenses this file to you under the Apache License, 5 * version 2.0 (the "License"); you may not use this file except in compliance 6 * with the License. You may obtain a copy of the License at: 7 * 8 * https://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 * License for the specific language governing permissions and limitations 14 * under the License. 15 */ 16 package io.netty.handler.codec.sctp; 17 18 import io.netty.buffer.ByteBuf; 19 import io.netty.channel.ChannelHandlerContext; 20 import io.netty.channel.sctp.SctpMessage; 21 import io.netty.handler.codec.MessageToMessageEncoder; 22 23 import java.util.List; 24 25 /** 26 * A ChannelHandler which transform {@link ByteBuf} to {@link SctpMessage} and send it through a specific stream 27 * with given protocol identifier. 28 * Unordered delivery of all messages may be requested by passing unordered = true to the constructor. 29 */ 30 public class SctpOutboundByteStreamHandler extends MessageToMessageEncoder<ByteBuf> { 31 private final int streamIdentifier; 32 private final int protocolIdentifier; 33 private final boolean unordered; 34 35 /** 36 * @param streamIdentifier stream number, this should be >=0 or <= max stream number of the association. 37 * @param protocolIdentifier supported application protocol id. 38 */ 39 public SctpOutboundByteStreamHandler(int streamIdentifier, int protocolIdentifier) { 40 this(streamIdentifier, protocolIdentifier, false); 41 } 42 43 /** 44 * @param streamIdentifier stream number, this should be >=0 or <= max stream number of the association. 45 * @param protocolIdentifier supported application protocol id. 46 * @param unordered if {@literal true}, SCTP Data Chunks will be sent with the U (unordered) flag set. 47 */ 48 public SctpOutboundByteStreamHandler(int streamIdentifier, int protocolIdentifier, boolean unordered) { 49 this.streamIdentifier = streamIdentifier; 50 this.protocolIdentifier = protocolIdentifier; 51 this.unordered = unordered; 52 } 53 54 @Override 55 protected void encode(ChannelHandlerContext ctx, ByteBuf msg, List<Object> out) throws Exception { 56 out.add(new SctpMessage(protocolIdentifier, streamIdentifier, unordered, msg.retain())); 57 } 58 }