public boolean parse(PacketEvent packet) { DataBuffer rawInput = new DataBuffer(packet.getData(), packet.getLength()); DataBufferReader reader = new DataBufferReader(); int firstByte = reader.read8(rawInput); this.version = firstByte >> 6; this.padding = ((firstByte >> 5 & 1) != 0); this.hasExtension = ((firstByte >> 4 & 1) != 0); this.csrcCount = firstByte & 0xF; int secondByte = reader.read8(rawInput); this.marker = (secondByte & 0x80) == 0x80; this.payloadType = secondByte & 0x7f; this.sequenceNumber = reader.read16(rawInput); this.timestamp = reader.readInteger(rawInput); this.ssrc = reader.readInteger(rawInput); int block3 = reader.read8(rawInput); boolean bflag = (block3 >> 7 & 1) != 0; boolean jflag = ((block3 >> 6 & 1) & 0x1) != 0; boolean zflag = ((block3 >> 5 & 1) & 0x1) != 0; boolean pflag = ((block3 >> 4 & 1) & 0x1) != 0; int command_length = block3 & 0x7; this.payload = rawInput.slice(rawInput.getStreamPosition()); this.payload_length = rawInput.getBytesLength() - rawInput.getStreamPosition(); return(true); }
public boolean parse(PacketEvent packet) { this.valid = false; DataBuffer rawInput = new DataBuffer(packet.getData(), packet.getLength()); DataBufferReader reader = new DataBufferReader(); int protocol = reader.read16(rawInput); if (protocol == 0xffff) { command = commandMap.get(reader.read16(rawInput)); switch (command) { case INVITATION: case INVITATION_ACCEPTED: case INVITATION_REJECTED: case END: this.valid = true; protocol_version = reader.readInteger(rawInput); initiator_token = reader.readInteger(rawInput); ssrc = reader.readInteger(rawInput); name = reader.readString(rawInput); // this.version = buffer.readUInt32BE(4); // this.token = buffer.readUInt32BE(8); // this.ssrc = buffer.readUInt32BE(12); // this.name = buffer.toString('utf-8', 16); break; case SYNCHRONIZATION: this.valid = true; ssrc = reader.readInteger(rawInput); count = reader.read8(rawInput); padding = reader.read24(rawInput); timestamp1 = reader.readUnsignedInteger64(rawInput); timestamp2 = reader.readUnsignedInteger64(rawInput); timestamp3 = reader.readUnsignedInteger64(rawInput); // this.ssrc = buffer.readUInt32BE(4, 8); // this.count = buffer.readUInt8(8); // this.padding = (buffer.readUInt8(9) << 0xF0) + buffer.readUInt16BE(10); // this.timestamp1 = buffer.slice(12, 20); //[buffer.readUInt32BE(12), buffer.readUInt32BE(16)]; // this.timestamp2 = buffer.slice(20, 28); //[buffer.readUInt32BE(20), buffer.readUInt32BE(24)]; // this.timestamp3 = buffer.slice(28, 36); //[buffer.readUInt32BE(28), buffer.readUInt32BE(32)]; break; case RECEIVER_FEEDBACK: this.valid = true; ssrc = reader.readInteger(rawInput); sequenceNumber = reader.read16(rawInput); // this.ssrc = buffer.readUInt32BE(4, 8); // this.sequenceNumber = buffer.readUInt16BE(8); break; case BITRATE_RECEIVE_LIMIT: this.valid = true; break; } } return(valid); }