All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.mobicents.protocols.api.PayloadData Maven / Gradle / Ivy

/*
 * TeleStax, Open Source Cloud Communications
 * Copyright 2011-2014, Telestax Inc and individual contributors
 * by the @authors tag.
 *
 * This program is free software: you can redistribute it and/or modify
 * under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation; either version 3 of
 * the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see 
 *
 */

package org.mobicents.protocols.api;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.util.ReferenceCountUtil;

import org.mobicents.commons.HexTools;

/**
 * The actual pay load data received or to be sent from/to underlying socket
 * 
 * @author amit bhayani
 * 
 */
public class PayloadData {
	private final int dataLength;
	private final ByteBuf byteBuf;
	private final boolean complete;
	private final boolean unordered;
	private final int payloadProtocolId;
	private final int streamNumber;

    /**
     * @param dataLength
     *            Length of byte[] data
     * @param byteBuf
     *            the payload data
     * @param complete
     *            if this data represents complete protocol data
     * @param unordered
     *            set to true if we don't care for oder
     * @param payloadProtocolId
     *            protocol ID of the data carried
     * @param streamNumber
     *            the SCTP stream number
     */
    public PayloadData(int dataLength, ByteBuf byteBuf, boolean complete, boolean unordered, int payloadProtocolId, int streamNumber) {
        super();
        this.dataLength = dataLength;
        this.byteBuf = byteBuf;
        this.complete = complete;
        this.unordered = unordered;
        this.payloadProtocolId = payloadProtocolId;
        this.streamNumber = streamNumber;
    }

    /**
     * @param dataLength
     *            Length of byte[] data
     * @param data
     *            the payload data
     * @param complete
     *            if this data represents complete protocol data
     * @param unordered
     *            set to true if we don't care for oder
     * @param payloadProtocolId
     *            protocol ID of the data carried
     * @param streamNumber
     *            the SCTP stream number
     */
    public PayloadData(int dataLength, byte[] data, boolean complete, boolean unordered, int payloadProtocolId, int streamNumber) {
        super();
        this.dataLength = dataLength;
        this.byteBuf = Unpooled.wrappedBuffer(data);
        this.complete = complete;
        this.unordered = unordered;
        this.payloadProtocolId = payloadProtocolId;
        this.streamNumber = streamNumber;
    }

	/**
	 * @return the dataLength
	 */
	public int getDataLength() {
		return dataLength;
	}

    /**
     * @return the byteBuf
     */
    public ByteBuf getByteBuf() {
        return byteBuf;
    }

    /**
     * @return the data
     */
    public byte[] getData() {
        byte[] array = new byte[byteBuf.readableBytes()];
        byteBuf.getBytes(0, array);
        ReferenceCountUtil.release(byteBuf);
        return array;
    }

	/**
	 * @return the complete
	 */
	public boolean isComplete() {
		return complete;
	}

	/**
	 * @return the unordered
	 */
	public boolean isUnordered() {
		return unordered;
	}

	/**
	 * @return the payloadProtocolId
	 */
	public int getPayloadProtocolId() {
		return payloadProtocolId;
	}

	/**
	 * 

* This is SCTP Stream sequence identifier. *

*

* While sending PayloadData to SCTP Association, this value should be set * by SCTP user. If value greater than or equal to maxOutboundStreams or * lesser than 0 is used, packet will be dropped and error message will be * logged *

*

While PayloadData is received from underlying SCTP socket, this * value indicates stream identifier on which data was received. Its * guaranteed that this value will be greater than 0 and less than * maxInboundStreams *

* * @return the streamNumber */ public int getStreamNumber() { return streamNumber; } /* * (non-Javadoc) * * @see java.lang.Object#toString() */ @Override public String toString() { byte[] array = new byte[byteBuf.readableBytes()]; byteBuf.getBytes(0, array); StringBuffer sb = new StringBuffer(); sb.append("PayloadData [dataLength=").append(dataLength).append(", complete=").append(complete).append(", unordered=") .append(unordered).append(", payloadProtocolId=").append(payloadProtocolId).append(", streamNumber=") .append(streamNumber).append(", data=\n").append(HexTools.dump(array, 0)).append("]"); return sb.toString(); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy