Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }