package org.ifsoft.rtp;
import org.ifsoft.*;
import java.util.ArrayList;
import java.util.Date;
public class RTCPSRPacket extends RTCPPacket
{
private Long _octetCount;
private Long _packetCount;
private RTCPReportBlock _reportBlocks[];
private Long _rTPTimestamp;
private Long _synchronizationSource;
private Date _timestamp;
protected void deserialize()
{
Integer startIndex = Integer.valueOf(0);
setSynchronizationSource(BitAssistant.toLongFromIntegerNetwork(super.getPayload(), startIndex));
startIndex = Integer.valueOf(startIndex.intValue() + 4);
setTimestamp(NetworkTimeProtocol.nTPToDateTime(BitAssistant.toLongNetwork(super.getPayload(), startIndex)));
startIndex = Integer.valueOf(startIndex.intValue() + 8);
setRTPTimestamp(BitAssistant.toLongFromIntegerNetwork(super.getPayload(), startIndex));
startIndex = Integer.valueOf(startIndex.intValue() + 4);
setPacketCount(BitAssistant.toLongFromIntegerNetwork(super.getPayload(), startIndex));
startIndex = Integer.valueOf(startIndex.intValue() + 4);
setOctetCount(BitAssistant.toLongFromIntegerNetwork(super.getPayload(), startIndex));
startIndex = Integer.valueOf(startIndex.intValue() + 4);
Byte firstByte = super.getFirstByte();
if(startIndex.intValue() < ArrayExtensions.getLength(super.getPayload()).intValue())
{
ArrayList list = new ArrayList();
for(Integer i = Integer.valueOf(0); i.intValue() < firstByte.byteValue();)
{
RTCPReportBlock item = RTCPReportBlock.parseBytes(BitAssistant.subArray(super.getPayload(), startIndex, Integer.valueOf(24)));
if(item != null)
list.add(item);
startIndex = Integer.valueOf(startIndex.intValue() + 24);
//item = i;
Integer integer = i = Integer.valueOf(i.intValue() + 1);
RTCPReportBlock _tmp = item;
}
setReportBlocks((RTCPReportBlock[])list.toArray(new RTCPReportBlock[0]));
}
}
public RTCPSRPacket(Long synchronizationSource, Date timestamp, Long rtpTimestamp, Long packetCount, Long octetCount)
{
_octetCount = Long.valueOf(0L);
_packetCount = Long.valueOf(0L);
_rTPTimestamp = Long.valueOf(0L);
_synchronizationSource = Long.valueOf(0L);
_timestamp = new Date();
setSynchronizationSource(synchronizationSource);
setTimestamp(timestamp);
setRTPTimestamp(rtpTimestamp);
setPacketCount(packetCount);
setOctetCount(octetCount);
}
RTCPSRPacket()
{
_octetCount = Long.valueOf(0L);
_packetCount = Long.valueOf(0L);
_rTPTimestamp = Long.valueOf(0L);
_synchronizationSource = Long.valueOf(0L);
_timestamp = new Date();
}
public Long getOctetCount()
{
return _octetCount;
}
public Long getPacketCount()
{
return _packetCount;
}
public RTCPReportBlock[] getReportBlocks()
{
return _reportBlocks;
}
public Long getRTPTimestamp()
{
return _rTPTimestamp;
}
public Long getSynchronizationSource()
{
return _synchronizationSource;
}
public Date getTimestamp()
{
return _timestamp;
}
protected void serialize()
{
if(getReportBlocks() != null)
super.setFirstByte(new Byte((new Integer(ArrayExtensions.getLength(getReportBlocks()).intValue())).byteValue()));
ArrayList list = new ArrayList();
ArrayListExtensions.addRange(list, BitAssistant.getIntegerBytesFromLongNetwork(getSynchronizationSource()));
ArrayListExtensions.addRange(list, BitAssistant.getLongBytesNetwork(NetworkTimeProtocol.dateTimeToNTP(getTimestamp())));
ArrayListExtensions.addRange(list, BitAssistant.getIntegerBytesFromLongNetwork(getRTPTimestamp()));
ArrayListExtensions.addRange(list, BitAssistant.getIntegerBytesFromLongNetwork(getPacketCount()));
ArrayListExtensions.addRange(list, BitAssistant.getIntegerBytesFromLongNetwork(getOctetCount()));
if(getReportBlocks() != null)
{
RTCPReportBlock arr$[] = getReportBlocks();
int len$ = arr$.length;
for(int i$ = 0; i$ < len$; i$++)
{
RTCPReportBlock block = arr$[i$];
ArrayListExtensions.addRange(list, block.getBytes());
}
}
super.setPayload((Byte[])list.toArray(new Byte[0]));
}
public void setOctetCount(Long value)
{
_octetCount = value;
}
public void setPacketCount(Long value)
{
_packetCount = value;
}
public void setReportBlocks(RTCPReportBlock value[])
{
_reportBlocks = value;
}
private void setRTPTimestamp(Long value)
{
_rTPTimestamp = value;
}
private void setSynchronizationSource(Long value)
{
_synchronizationSource = value;
}
private void setTimestamp(Date value)
{
_timestamp = value;
}
}