package org.ifsoft.rtp; import org.ifsoft.*; import java.util.ArrayList; public class RTCPReportBlock { private Integer _cumulativeNumberOfPacketsLost; private Long _delaySinceLastSR; private Long _extendedHighestSequenceNumberReceived; private Short _fractionLost; private Long _interarrivalJitter; private Long _lastSR; private Long _synchronizationSource; public RTCPReportBlock(Long synchronizationSource, Short fractionLost, Integer cumulativeNumberOfPacketsLost, Long extendedHighestSequenceNumberReceived, Long interarrivalJitter, Long lastSR, Long delaySinceLastSR) { _cumulativeNumberOfPacketsLost = Integer.valueOf(0); _delaySinceLastSR = Long.valueOf(0L); _extendedHighestSequenceNumberReceived = Long.valueOf(0L); _fractionLost = Short.valueOf((short)0); _interarrivalJitter = Long.valueOf(0L); _lastSR = Long.valueOf(0L); _synchronizationSource = Long.valueOf(0L); setSynchronizationSource(synchronizationSource); setFractionLost(fractionLost); setCumulativeNumberOfPacketsLost(cumulativeNumberOfPacketsLost); setExtendedHighestSequenceNumberReceived(extendedHighestSequenceNumberReceived); setInterarrivalJitter(interarrivalJitter); setLastSR(lastSR); setDelaySinceLastSR(delaySinceLastSR); } public Byte[] getBytes() { return getBytes(this); } public static Byte[] getBytes(RTCPReportBlock block) { if(block == null) { return new Byte[0]; } else { ArrayList list = new ArrayList(); ArrayListExtensions.addRange(list, BitAssistant.getIntegerBytesFromLongNetwork(block.getSynchronizationSource())); list.add(new Byte((new Byte((new Short(block.getFractionLost().shortValue())).byteValue())).byteValue())); ArrayListExtensions.addRange(list, BitAssistant.subArray(BitAssistant.getIntegerBytesNetwork(block.getCumulativeNumberOfPacketsLost()), Integer.valueOf(1))); ArrayListExtensions.addRange(list, BitAssistant.getIntegerBytesFromLongNetwork(block.getExtendedHighestSequenceNumberReceived())); ArrayListExtensions.addRange(list, BitAssistant.getIntegerBytesFromLongNetwork(block.getInterarrivalJitter())); ArrayListExtensions.addRange(list, BitAssistant.getIntegerBytesFromLongNetwork(block.getLastSR())); ArrayListExtensions.addRange(list, BitAssistant.getIntegerBytesFromLongNetwork(block.getDelaySinceLastSR())); return (Byte[])list.toArray(new Byte[0]); } } public Integer getCumulativeNumberOfPacketsLost() { return _cumulativeNumberOfPacketsLost; } public Long getDelaySinceLastSR() { return _delaySinceLastSR; } public Long getExtendedHighestSequenceNumberReceived() { return _extendedHighestSequenceNumberReceived; } public Short getFractionLost() { return _fractionLost; } public Long getInterarrivalJitter() { return _interarrivalJitter; } public Long getLastSR() { return _lastSR; } public Long getSynchronizationSource() { return _synchronizationSource; } public static RTCPReportBlock parseBytes(Byte blockBytes[]) { if(ArrayExtensions.getLength(blockBytes).intValue() < 24) { return null; } else { Integer index = Integer.valueOf(0); Long synchronizationSource = BitAssistant.toLongFromIntegerNetwork(blockBytes, Integer.valueOf(0)); index = Integer.valueOf(index.intValue() + 4); Short fractionLost = new Short(blockBytes[index.intValue()].byteValue()); Byte buffer[] = BitAssistant.subArray(blockBytes, index, Integer.valueOf(4)); buffer[0] = Byte.valueOf((byte)0); Integer cumulativeNumberOfPacketsLost = BitAssistant.toIntegerNetwork(buffer, Integer.valueOf(0)); index = Integer.valueOf(index.intValue() + 4); Long extendedHighestSequenceNumberReceived = BitAssistant.toLongFromIntegerNetwork(blockBytes, index); index = Integer.valueOf(index.intValue() + 4); Long interarrivalJitter = BitAssistant.toLongFromIntegerNetwork(blockBytes, index); index = Integer.valueOf(index.intValue() + 4); Long lastSR = BitAssistant.toLongFromIntegerNetwork(blockBytes, index); index = Integer.valueOf(index.intValue() + 4); Long delaySinceLastSR = BitAssistant.toLongFromIntegerNetwork(blockBytes, index); index = Integer.valueOf(index.intValue() + 4); return new RTCPReportBlock(synchronizationSource, fractionLost, cumulativeNumberOfPacketsLost, extendedHighestSequenceNumberReceived, interarrivalJitter, lastSR, delaySinceLastSR); } } private void setCumulativeNumberOfPacketsLost(Integer value) { _cumulativeNumberOfPacketsLost = value; } private void setDelaySinceLastSR(Long value) { _delaySinceLastSR = value; } private void setExtendedHighestSequenceNumberReceived(Long value) { _extendedHighestSequenceNumberReceived = value; } private void setFractionLost(Short value) { _fractionLost = value; } private void setInterarrivalJitter(Long value) { _interarrivalJitter = value; } private void setLastSR(Long value) { _lastSR = value; } private void setSynchronizationSource(Long value) { _synchronizationSource = value; } }